diff --git a/.github/actions/composite/setupGitForOSBotifyApp/action.yml b/.github/actions/composite/setupGitForOSBotifyApp/action.yml
new file mode 100644
index 000000000000..bd5b5139bc6b
--- /dev/null
+++ b/.github/actions/composite/setupGitForOSBotifyApp/action.yml
@@ -0,0 +1,53 @@
+# This is a duplicate for setupGitForOSBotify except we are using a Github App now for Github Authentication.
+# GitHub Apps have higher rate limits. The reason this is being duplicated is because the existing action is still in use
+# in open PRs/branches that aren't up to date with main and it ends up breaking action workflows as a result.
+name: "Setup Git for OSBotify"
+description: "Setup Git for OSBotify"
+
+inputs:
+  GPG_PASSPHRASE:
+    description: "Passphrase used to decrypt GPG key"
+    required: true
+  OS_BOTIFY_APP_ID:
+    description: "Application ID for OS Botify"
+    required: true
+  OS_BOTIFY_PRIVATE_KEY:
+    description: "OS Botify's private key"
+    required: true
+
+outputs:
+  # Do not try to use this for committing code. Use `secrets.OS_BOTIFY_COMMIT_TOKEN` instead
+  OS_BOTIFY_API_TOKEN:
+    description: Token to use for GitHub API interactions.
+    value: ${{ steps.generateToken.outputs.token }}
+
+runs:
+  using: composite
+  steps:
+    - name: Decrypt OSBotify GPG key
+      run: cd .github/workflows && gpg --quiet --batch --yes --decrypt --passphrase=${{ inputs.GPG_PASSPHRASE }} --output OSBotify-private-key.asc OSBotify-private-key.asc.gpg
+      shell: bash
+
+    - name: Import OSBotify GPG Key
+      shell: bash
+      run: cd .github/workflows && gpg --import OSBotify-private-key.asc
+
+    - name: Set up git for OSBotify
+      shell: bash
+      run: |
+        git config user.signingkey 367811D53E34168C
+        git config commit.gpgsign true
+        git config user.name OSBotify
+        git config user.email infra+osbotify@expensify.com
+
+    - name: Enable debug logs for git
+      shell: bash
+      if: runner.debug == '1'
+      run: echo "GIT_TRACE=true" >> "$GITHUB_ENV"
+
+    - name: Generate a token
+      id: generateToken
+      uses: tibdex/github-app-token@3beb63f4bd073e61482598c45c71c1019b59b73a
+      with:
+        app_id: ${{ inputs.OS_BOTIFY_APP_ID }}
+        private_key: ${{ inputs.OS_BOTIFY_PRIVATE_KEY }}
diff --git a/.github/actions/javascript/bumpVersion/index.js b/.github/actions/javascript/bumpVersion/index.js
index 830dbf626548..da08d1a060b6 100644
--- a/.github/actions/javascript/bumpVersion/index.js
+++ b/.github/actions/javascript/bumpVersion/index.js
@@ -298,6 +298,9 @@ function getPreviousVersion(currentVersion, level) {
         if (patch === 0) {
             return getPreviousVersion(currentVersion, SEMANTIC_VERSION_LEVELS.MINOR);
         }
+        if (major === 1 && minor === 3 && patch === 83) {
+            return getVersionStringFromNumber(major, minor, patch - 2, 0);
+        }
         return getVersionStringFromNumber(major, minor, patch - 1, 0);
     }
 
diff --git a/.github/actions/javascript/createOrUpdateStagingDeploy/index.js b/.github/actions/javascript/createOrUpdateStagingDeploy/index.js
index 561b8e61bc21..22ad59ed9588 100644
--- a/.github/actions/javascript/createOrUpdateStagingDeploy/index.js
+++ b/.github/actions/javascript/createOrUpdateStagingDeploy/index.js
@@ -998,6 +998,9 @@ function getPreviousVersion(currentVersion, level) {
         if (patch === 0) {
             return getPreviousVersion(currentVersion, SEMANTIC_VERSION_LEVELS.MINOR);
         }
+        if (major === 1 && minor === 3 && patch === 83) {
+            return getVersionStringFromNumber(major, minor, patch - 2, 0);
+        }
         return getVersionStringFromNumber(major, minor, patch - 1, 0);
     }
 
diff --git a/.github/actions/javascript/getDeployPullRequestList/index.js b/.github/actions/javascript/getDeployPullRequestList/index.js
index e42f97508bc5..3aafda798c54 100644
--- a/.github/actions/javascript/getDeployPullRequestList/index.js
+++ b/.github/actions/javascript/getDeployPullRequestList/index.js
@@ -961,6 +961,9 @@ function getPreviousVersion(currentVersion, level) {
         if (patch === 0) {
             return getPreviousVersion(currentVersion, SEMANTIC_VERSION_LEVELS.MINOR);
         }
+        if (major === 1 && minor === 3 && patch === 83) {
+            return getVersionStringFromNumber(major, minor, patch - 2, 0);
+        }
         return getVersionStringFromNumber(major, minor, patch - 1, 0);
     }
 
diff --git a/.github/actions/javascript/getPreviousVersion/index.js b/.github/actions/javascript/getPreviousVersion/index.js
index 37db08db93e9..6770ba99ba69 100644
--- a/.github/actions/javascript/getPreviousVersion/index.js
+++ b/.github/actions/javascript/getPreviousVersion/index.js
@@ -148,6 +148,9 @@ function getPreviousVersion(currentVersion, level) {
         if (patch === 0) {
             return getPreviousVersion(currentVersion, SEMANTIC_VERSION_LEVELS.MINOR);
         }
+        if (major === 1 && minor === 3 && patch === 83) {
+            return getVersionStringFromNumber(major, minor, patch - 2, 0);
+        }
         return getVersionStringFromNumber(major, minor, patch - 1, 0);
     }
 
diff --git a/.github/libs/versionUpdater.js b/.github/libs/versionUpdater.js
index 78e8085621bd..b78178f443e6 100644
--- a/.github/libs/versionUpdater.js
+++ b/.github/libs/versionUpdater.js
@@ -118,6 +118,9 @@ function getPreviousVersion(currentVersion, level) {
         if (patch === 0) {
             return getPreviousVersion(currentVersion, SEMANTIC_VERSION_LEVELS.MINOR);
         }
+        if (major === 1 && minor === 3 && patch === 83) {
+            return getVersionStringFromNumber(major, minor, patch - 2, 0);
+        }
         return getVersionStringFromNumber(major, minor, patch - 1, 0);
     }
 
diff --git a/.github/scripts/findUnusedKeys.sh b/.github/scripts/findUnusedKeys.sh
index 77c3ea25326b..1411fffc8389 100755
--- a/.github/scripts/findUnusedKeys.sh
+++ b/.github/scripts/findUnusedKeys.sh
@@ -6,7 +6,7 @@ LIB_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && cd ../../ && pwd)"
 
 readonly SRC_DIR="${LIB_PATH}/src"
 readonly STYLES_DIR="${LIB_PATH}/src/styles"
-readonly STYLES_FILE="${LIB_PATH}/src/styles/styles.js"
+readonly STYLES_FILE="${LIB_PATH}/src/styles/styles.ts"
 readonly UTILITIES_STYLES_FILE="${LIB_PATH}/src/styles/utilities"
 readonly STYLES_KEYS_FILE="${LIB_PATH}/scripts/style_keys_list_temp.txt"
 readonly UTILITY_STYLES_KEYS_FILE="${LIB_PATH}/scripts/utility_keys_list_temp.txt"
@@ -210,7 +210,12 @@ find_theme_style_and_store_keys() {
     fi
 
     # Check if we are inside an arrow function
-    if [[ "$line" =~ ^[[:space:]]*([a-zA-Z0-9_-])+:[[:space:]]*\(.*\)[[:space:]]*'=>'[[:space:]]*\(\{ || "$line" =~ ^[[:space:]]*(const|let|var)[[:space:]]+([a-zA-Z0-9_-]+)[[:space:]]*=[[:space:]]*\(.*\)[[:space:]]*'=>' ]]; then
+    if [[ "$line" =~ ^[[:space:]]*([a-zA-Zgv 0-9_-])+:[[:space:]]*\(.*\)[[:space:]]*'=>'[[:space:]]*\(\{ || "$line" =~ ^[[:space:]]*([a-zA-Zgv 0-9_-])+:[[:space:]]*\(.*\)[[:space:]]*'=>' ]]; then
+      inside_arrow_function=true
+      continue
+    fi
+
+    if [[ "$line" =~ ^[[:space:]]*(const|let|var)[[:space:]]+([a-zA-Z0-9_-]+)[[:space:]]*=[[:space:]]*\(.*\)[[:space:]]*'=>' ]]; then
       inside_arrow_function=true
       continue
     fi
@@ -348,7 +353,7 @@ echo "🔍 Looking for styles."
 find_utility_styles_store_prefix
 find_utility_usage_as_styles
 
-# Find and store keys from styles.js
+# Find and store keys from styles.ts
 find_styles_object_and_store_keys "$STYLES_FILE"
 find_styles_functions_and_store_keys "$STYLES_FILE"
 collect_theme_keys_from_styles "$STYLES_FILE"
diff --git a/.github/workflows/cherryPick.yml b/.github/workflows/cherryPick.yml
index b6558b049647..e6da6fff1446 100644
--- a/.github/workflows/cherryPick.yml
+++ b/.github/workflows/cherryPick.yml
@@ -11,7 +11,7 @@ jobs:
   validateActor:
     runs-on: ubuntu-latest
     outputs:
-      IS_DEPLOYER: ${{ fromJSON(steps.isDeployer.outputs.IS_DEPLOYER) || github.actor == 'OSBotify' }}
+      IS_DEPLOYER: ${{ fromJSON(steps.isDeployer.outputs.IS_DEPLOYER) || github.actor == 'OSBotify' || github.actor == 'os-botify[bot]' }}
     steps:
       - name: Check if user is deployer
         id: isDeployer
@@ -41,15 +41,17 @@ jobs:
           token: ${{ secrets.OS_BOTIFY_TOKEN }}
 
       - name: Set up git for OSBotify
-        uses: Expensify/App/.github/actions/composite/setupGitForOSBotify@main
+        uses: Expensify/App/.github/actions/composite/setupGitForOSBotifyApp@8c19d6da4a3d7ce3b15c9cd89a802187d208ecab
         with:
           GPG_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
+          OS_BOTIFY_APP_ID: ${{ secrets.OS_BOTIFY_APP_ID }}
+          OS_BOTIFY_PRIVATE_KEY: ${{ secrets.OS_BOTIFY_PRIVATE_KEY }}
 
       - name: Get previous app version
         id: getPreviousVersion
         uses: Expensify/App/.github/actions/javascript/getPreviousVersion@main
         with:
-          SEMVER_LEVEL: 'PATCH'
+          SEMVER_LEVEL: "PATCH"
 
       - name: Fetch history of relevant refs
         run: |
@@ -119,7 +121,7 @@ jobs:
         env:
           GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
 
-      - name: 'Announces a CP failure in the #announce Slack room'
+      - name: "Announces a CP failure in the #announce Slack room"
         uses: 8398a7/action-slack@v3
         if: ${{ failure() }}
         with:
diff --git a/.github/workflows/createNewVersion.yml b/.github/workflows/createNewVersion.yml
index ba907334c595..c9c97d5355fb 100644
--- a/.github/workflows/createNewVersion.yml
+++ b/.github/workflows/createNewVersion.yml
@@ -26,12 +26,18 @@ on:
       LARGE_SECRET_PASSPHRASE:
         description: Passphrase used to decrypt GPG key
         required: true
-      OS_BOTIFY_TOKEN:
-        description: Token for the OSBotify user
-        required: true
       SLACK_WEBHOOK:
         description: Webhook used to comment in slack
         required: true
+      OS_BOTIFY_COMMIT_TOKEN:
+        description: OSBotify personal access token, used to workaround committing to protected branch
+        required: true
+      OS_BOTIFY_APP_ID:
+        description: Application ID for OS Botify App
+        required: true
+      OS_BOTIFY_PRIVATE_KEY:
+        description: OSBotify private key
+        required: true
 
 jobs:
   validateActor:
@@ -43,7 +49,7 @@ jobs:
         id: getUserPermissions
         run: echo "PERMISSION=$(gh api /repos/${{ github.repository }}/collaborators/${{ github.actor }}/permission | jq -r '.permission')" >> "$GITHUB_OUTPUT"
         env:
-          GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
+          GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_COMMIT_TOKEN }}
 
   createNewVersion:
     runs-on: macos-latest
@@ -65,18 +71,23 @@ jobs:
         uses: actions/checkout@v3
         with:
           ref: main
-          token: ${{ secrets.OS_BOTIFY_TOKEN }}
+          # The OS_BOTIFY_COMMIT_TOKEN is a personal access token tied to osbotify
+          # This is a workaround to allow pushes to a protected branch
+          token: ${{ secrets.OS_BOTIFY_COMMIT_TOKEN }}
 
       - name: Setup git for OSBotify
-        uses: Expensify/App/.github/actions/composite/setupGitForOSBotify@main
+        uses: Expensify/App/.github/actions/composite/setupGitForOSBotifyApp@8c19d6da4a3d7ce3b15c9cd89a802187d208ecab
+        id: setupGitForOSBotify
         with:
           GPG_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
+          OS_BOTIFY_APP_ID: ${{ secrets.OS_BOTIFY_APP_ID }}
+          OS_BOTIFY_PRIVATE_KEY: ${{ secrets.OS_BOTIFY_PRIVATE_KEY }}
 
       - name: Generate version
         id: bumpVersion
         uses: Expensify/App/.github/actions/javascript/bumpVersion@main
         with:
-          GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
+          GITHUB_TOKEN: ${{ steps.setupGitForOSBotify.outputs.OS_BOTIFY_API_TOKEN }}
           SEMVER_LEVEL: ${{ inputs.SEMVER_LEVEL }}
 
       - name: Commit new version
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index f2ff67680940..78040f237689 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -14,11 +14,13 @@ jobs:
         with:
           ref: staging
           token: ${{ secrets.OS_BOTIFY_TOKEN }}
-
-      - name: Setup git for OSBotify
-        uses: Expensify/App/.github/actions/composite/setupGitForOSBotify@main
+          
+      - uses: Expensify/App/.github/actions/composite/setupGitForOSBotifyApp@8c19d6da4a3d7ce3b15c9cd89a802187d208ecab
+        id: setupGitForOSBotify
         with:
           GPG_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
+          OS_BOTIFY_APP_ID: ${{ secrets.OS_BOTIFY_APP_ID }}
+          OS_BOTIFY_PRIVATE_KEY: ${{ secrets.OS_BOTIFY_PRIVATE_KEY }}
 
       - name: Tag version
         run: git tag "$(npm run print-version --silent)"
@@ -30,16 +32,18 @@ jobs:
     runs-on: ubuntu-latest
     if: github.ref == 'refs/heads/production'
     steps:
-      - name: Checkout
-        uses: actions/checkout@v3
+      - uses: actions/checkout@v3
+        name: Checkout
         with:
           ref: production
           token: ${{ secrets.OS_BOTIFY_TOKEN }}
 
-      - name: Setup git for OSBotify
-        uses: Expensify/App/.github/actions/composite/setupGitForOSBotify@main
+      - uses: Expensify/App/.github/actions/composite/setupGitForOSBotifyApp@8c19d6da4a3d7ce3b15c9cd89a802187d208ecab
+        id: setupGitForOSBotify
         with:
           GPG_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
+          OS_BOTIFY_APP_ID: ${{ secrets.OS_BOTIFY_APP_ID }}
+          OS_BOTIFY_PRIVATE_KEY: ${{ secrets.OS_BOTIFY_PRIVATE_KEY }}
 
       - name: Get current app version
         run: echo "PRODUCTION_VERSION=$(npm run print-version --silent)" >> "$GITHUB_ENV"
@@ -49,7 +53,7 @@ jobs:
         uses: Expensify/App/.github/actions/javascript/getDeployPullRequestList@main
         with:
           TAG: ${{ env.PRODUCTION_VERSION }}
-          GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
+          GITHUB_TOKEN: ${{ steps.setupGitForOSBotify.outputs.OS_BOTIFY_API_TOKEN }}
           IS_PRODUCTION_DEPLOY: true
 
       - name: Generate Release Body
@@ -64,4 +68,4 @@ jobs:
           tag_name: ${{ env.PRODUCTION_VERSION }}
           body: ${{ steps.getReleaseBody.outputs.RELEASE_BODY }}
         env:
-          GITHUB_TOKEN: ${{ secrets.OS_BOTIFY_TOKEN }}
+          GITHUB_TOKEN: ${{ steps.setupGitForOSBotify.outputs.OS_BOTIFY_API_TOKEN }}
diff --git a/.github/workflows/e2ePerformanceTests.yml b/.github/workflows/e2ePerformanceTests.yml
index 3666e8c7d343..308404b74bc0 100644
--- a/.github/workflows/e2ePerformanceTests.yml
+++ b/.github/workflows/e2ePerformanceTests.yml
@@ -191,14 +191,15 @@ jobs:
         if: ${{ always() && runner.debug != null && fromJSON(runner.debug) }}
         run: cat "./Host_Machine_Files/\$WORKING_DIRECTORY/debug.log"
 
-      - name: Check if test failed, if so post the results and add the DeployBlocker label
-        run: |
-          if grep -q '🔴' ./Host_Machine_Files/\$WORKING_DIRECTORY/output.md; then
-            gh pr edit ${{ inputs.PR_NUMBER }} --add-label DeployBlockerCash
-            gh pr comment ${{ inputs.PR_NUMBER }} -F ./Host_Machine_Files/\$WORKING_DIRECTORY/output.md
-            gh pr comment ${{ inputs.PR_NUMBER }} -b "@Expensify/mobile-deployers 📣 Please look into this performance regression as it's a deploy blocker."
-          else
-            echo '✅ no performance regression detected'
-          fi
-        env:
-          GITHUB_TOKEN: ${{ github.token }}
+# TODO: Once tests are more reliable we should uncomment this
+#      - name: Check if test failed, if so post the results and add the DeployBlocker label
+#        run: |
+#          if grep -q '🔴' ./Host_Machine_Files/\$WORKING_DIRECTORY/output.md; then
+#            gh pr edit ${{ inputs.PR_NUMBER }} --add-label DeployBlockerCash
+#            gh pr comment ${{ inputs.PR_NUMBER }} -F ./Host_Machine_Files/\$WORKING_DIRECTORY/output.md
+#            gh pr comment ${{ inputs.PR_NUMBER }} -b "@Expensify/mobile-deployers 📣 Please look into this performance regression as it's a deploy blocker."
+#          else
+#            echo '✅ no performance regression detected'
+#          fi
+#        env:
+#          GITHUB_TOKEN: ${{ github.token }}
diff --git a/.github/workflows/finishReleaseCycle.yml b/.github/workflows/finishReleaseCycle.yml
index e2323af2486e..4fe6249edacc 100644
--- a/.github/workflows/finishReleaseCycle.yml
+++ b/.github/workflows/finishReleaseCycle.yml
@@ -12,6 +12,19 @@ jobs:
     outputs:
       isValid: ${{ fromJSON(steps.isDeployer.outputs.IS_DEPLOYER) && !fromJSON(steps.checkDeployBlockers.outputs.HAS_DEPLOY_BLOCKERS) }}
     steps:
+      - name: Checkout
+        uses: actions/checkout@v3
+        with:
+          ref: main
+          token: ${{ secrets.OS_BOTIFY_TOKEN }}
+
+      - uses: Expensify/App/.github/actions/composite/setupGitForOSBotifyApp@8c19d6da4a3d7ce3b15c9cd89a802187d208ecab
+        id: setupGitForOSBotify
+        with:
+          GPG_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
+          OS_BOTIFY_APP_ID: ${{ secrets.OS_BOTIFY_APP_ID }}
+          OS_BOTIFY_PRIVATE_KEY: ${{ secrets.OS_BOTIFY_PRIVATE_KEY }}
+
       - name: Validate actor is deployer
         id: isDeployer
         run: |
@@ -70,9 +83,12 @@ jobs:
           token: ${{ secrets.OS_BOTIFY_TOKEN }}
 
       - name: Setup Git for OSBotify
-        uses: Expensify/App/.github/actions/composite/setupGitForOSBotify@main
+        id: setupGitForOSBotify
+        uses: Expensify/App/.github/actions/composite/setupGitForOSBotifyApp@8c19d6da4a3d7ce3b15c9cd89a802187d208ecab
         with:
           GPG_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
+          OS_BOTIFY_APP_ID: ${{ secrets.OS_BOTIFY_APP_ID }}
+          OS_BOTIFY_PRIVATE_KEY: ${{ secrets.OS_BOTIFY_PRIVATE_KEY }}
 
       - name: Update production branch
         run: |
@@ -109,9 +125,11 @@ jobs:
           token: ${{ secrets.OS_BOTIFY_TOKEN }}
 
       - name: Setup Git for OSBotify
-        uses: Expensify/App/.github/actions/composite/setupGitForOSBotify@main
+        uses: Expensify/App/.github/actions/composite/setupGitForOSBotifyApp@8c19d6da4a3d7ce3b15c9cd89a802187d208ecab
         with:
           GPG_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
+          OS_BOTIFY_APP_ID: ${{ secrets.OS_BOTIFY_APP_ID }}
+          OS_BOTIFY_PRIVATE_KEY: ${{ secrets.OS_BOTIFY_PRIVATE_KEY }}
 
       - name: Update staging branch to trigger staging deploy
         run: |
diff --git a/.github/workflows/platformDeploy.yml b/.github/workflows/platformDeploy.yml
index ad002e164837..f5a5dc5e1616 100644
--- a/.github/workflows/platformDeploy.yml
+++ b/.github/workflows/platformDeploy.yml
@@ -16,7 +16,7 @@ jobs:
   validateActor:
     runs-on: ubuntu-latest
     outputs:
-      IS_DEPLOYER: ${{ fromJSON(steps.isUserDeployer.outputs.IS_DEPLOYER) || github.actor == 'OSBotify' }}
+      IS_DEPLOYER: ${{ fromJSON(steps.isUserDeployer.outputs.IS_DEPLOYER) || github.actor == 'OSBotify' || github.actor == 'os-botify[bot]' }}
     steps:
       - name: Check if user is deployer
         id: isUserDeployer
diff --git a/.github/workflows/preDeploy.yml b/.github/workflows/preDeploy.yml
index 186490c7baaf..d7d372aa7948 100644
--- a/.github/workflows/preDeploy.yml
+++ b/.github/workflows/preDeploy.yml
@@ -92,9 +92,11 @@ jobs:
           token: ${{ secrets.OS_BOTIFY_TOKEN }}
 
       - name: Setup Git for OSBotify
-        uses: Expensify/App/.github/actions/composite/setupGitForOSBotify@main
+        uses: Expensify/App/.github/actions/composite/setupGitForOSBotifyApp@8c19d6da4a3d7ce3b15c9cd89a802187d208ecab
         with:
           GPG_PASSPHRASE: ${{ secrets.LARGE_SECRET_PASSPHRASE }}
+          OS_BOTIFY_APP_ID: ${{ secrets.OS_BOTIFY_APP_ID }}
+          OS_BOTIFY_PRIVATE_KEY: ${{ secrets.OS_BOTIFY_PRIVATE_KEY }}
 
       - name: Update staging branch from main
         run: |
diff --git a/.storybook/fonts.css b/.storybook/fonts.css
index bbbcf3839000..906490c3a9d9 100644
--- a/.storybook/fonts.css
+++ b/.storybook/fonts.css
@@ -40,6 +40,13 @@
     src: url('../assets/fonts/web/ExpensifyMono-Bold.woff2') format('woff2'),  url('../assets/fonts/web/ExpensifyMono-Bold.woff') format('woff');
 }
 
+@font-face {
+    font-family: ExpensifyNewKansas-Medium;
+    font-weight: 400;
+    font-style: normal;
+    src: url('../assets/fonts/web/ExpensifyNewKansas-Medium.woff2') format('woff2'),  url('../assets/fonts/web/ExpensifyNewKansas-Medium.woff') format('woff');
+}
+
 * {
     -webkit-font-smoothing: antialiased;
     -moz-osx-font-smoothing: grayscale;
diff --git a/.well-known/apple-app-site-association b/.well-known/apple-app-site-association
index d6da0232f2fc..1e63fdcb2d52 100644
--- a/.well-known/apple-app-site-association
+++ b/.well-known/apple-app-site-association
@@ -79,6 +79,10 @@
                     {
                         "/": "/search/*",
                         "comment": "Search"
+                    },
+                    {
+                        "/": "/money2020/*",
+                        "comment": "Money 2020"
                     }
                 ]
             }
diff --git a/README.md b/README.md
index daf9ddfae1ff..9aad797ebb51 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
         <img src="https://raw.githubusercontent.com/Expensify/App/main/web/favicon.png" width="64" height="64" alt="New Expensify Icon">
     </a>
     <h1>
-        <a href="https://new.expensify.com/">
+        <a href="https://new.expensify.com">
             New Expensify
         </a>
     </h1>
diff --git a/__mocks__/react-native.js b/__mocks__/react-native.js
index 006d1aee38af..1eeea877ca0f 100644
--- a/__mocks__/react-native.js
+++ b/__mocks__/react-native.js
@@ -28,6 +28,7 @@ jest.doMock('react-native', () => {
                 BootSplash: {
                     getVisibilityStatus: jest.fn(),
                     hide: jest.fn(),
+                    logoSizeRatio: 1,
                     navigationBarHeight: 0,
                 },
                 StartupTimer: {stop: jest.fn()},
diff --git a/android/app/build.gradle b/android/app/build.gradle
index a28038cf0f18..ddffb8acbe09 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -90,8 +90,8 @@ android {
         minSdkVersion rootProject.ext.minSdkVersion
         targetSdkVersion rootProject.ext.targetSdkVersion
         multiDexEnabled rootProject.ext.multiDexEnabled
-        versionCode 1001038104
-        versionName "1.3.81-4"
+        versionCode 1001038407
+        versionName "1.3.84-7"
     }
 
     flavorDimensions "default"
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index d823324f50bf..7419d5b1e1a7 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -70,6 +70,7 @@
                 <data android:scheme="https" android:host="new.expensify.com" android:pathPrefix="/request"/>
                 <data android:scheme="https" android:host="new.expensify.com" android:pathPrefix="/new"/>
                 <data android:scheme="https" android:host="new.expensify.com" android:pathPrefix="/search"/>
+                <data android:scheme="https" android:host="new.expensify.com" android:pathPrefix="/money2020"/>
 
                 <!-- Staging URLs -->
                 <data android:scheme="https" android:host="staging.new.expensify.com" android:pathPrefix="/r"/>
@@ -87,6 +88,7 @@
                 <data android:scheme="https" android:host="staging.new.expensify.com" android:pathPrefix="/request"/>
                 <data android:scheme="https" android:host="staging.new.expensify.com" android:pathPrefix="/new"/>
                 <data android:scheme="https" android:host="staging.new.expensify.com" android:pathPrefix="/search"/>
+                <data android:scheme="https" android:host="staging.new.expensify.com" android:pathPrefix="/money2020"/>
             </intent-filter>
         </activity>
 
diff --git a/android/app/src/main/java/com/expensify/chat/bootsplash/BootSplashDialog.java b/android/app/src/main/java/com/expensify/chat/bootsplash/BootSplashDialog.java
index f5b1ceff60e2..b65cb7306a3d 100644
--- a/android/app/src/main/java/com/expensify/chat/bootsplash/BootSplashDialog.java
+++ b/android/app/src/main/java/com/expensify/chat/bootsplash/BootSplashDialog.java
@@ -6,6 +6,7 @@
 import android.view.Window;
 import android.view.WindowManager.LayoutParams;
 import androidx.annotation.NonNull;
+import com.expensify.chat.R;
 
 public class BootSplashDialog extends Dialog {
 
@@ -26,6 +27,10 @@ protected void onCreate(Bundle savedInstanceState) {
 
     if (window != null) {
       window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
+
+      if (BootSplashModule.isSamsungOneUI4()) {
+        window.setBackgroundDrawableResource(R.drawable.bootsplash_samsung_oneui_4);
+      }
     }
 
     super.onCreate(savedInstanceState);
diff --git a/android/app/src/main/java/com/expensify/chat/bootsplash/BootSplashModule.java b/android/app/src/main/java/com/expensify/chat/bootsplash/BootSplashModule.java
index c286ebf7a935..7498fa6594fb 100644
--- a/android/app/src/main/java/com/expensify/chat/bootsplash/BootSplashModule.java
+++ b/android/app/src/main/java/com/expensify/chat/bootsplash/BootSplashModule.java
@@ -23,6 +23,7 @@
 import com.facebook.react.common.ReactConstants;
 import com.facebook.react.module.annotations.ReactModule;
 import com.facebook.react.uimanager.PixelUtil;
+import java.lang.reflect.Field;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Timer;
@@ -47,6 +48,19 @@ public String getName() {
     return NAME;
   }
 
+  // From https://stackoverflow.com/a/61062773
+  public static boolean isSamsungOneUI4() {
+    String name = "SEM_PLATFORM_INT";
+
+    try {
+      Field field = Build.VERSION.class.getDeclaredField(name);
+      int version = (field.getInt(null) - 90000) / 10000;
+      return version == 4;
+    } catch (Exception ignored) {
+      return false;
+    }
+  }
+
   @Override
   public Map<String, Object> getConstants() {
     final HashMap<String, Object> constants = new HashMap<>();
@@ -61,6 +75,7 @@ public Map<String, Object> getConstants() {
             ? Math.round(PixelUtil.toDIPFromPixel(resources.getDimensionPixelSize(heightResId)))
             : 0;
 
+    constants.put("logoSizeRatio", isSamsungOneUI4() ? 0.5 : 1);
     constants.put("navigationBarHeight", height);
     return constants;
   }
diff --git a/android/app/src/main/res/mipmap-hdpi/bootsplash_logo.png b/android/app/src/main/res/drawable-hdpi/bootsplash_logo.png
similarity index 100%
rename from android/app/src/main/res/mipmap-hdpi/bootsplash_logo.png
rename to android/app/src/main/res/drawable-hdpi/bootsplash_logo.png
diff --git a/android/app/src/main/res/mipmap-mdpi/bootsplash_logo.png b/android/app/src/main/res/drawable-mdpi/bootsplash_logo.png
similarity index 100%
rename from android/app/src/main/res/mipmap-mdpi/bootsplash_logo.png
rename to android/app/src/main/res/drawable-mdpi/bootsplash_logo.png
diff --git a/android/app/src/main/res/mipmap-xhdpi/bootsplash_logo.png b/android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png
similarity index 100%
rename from android/app/src/main/res/mipmap-xhdpi/bootsplash_logo.png
rename to android/app/src/main/res/drawable-xhdpi/bootsplash_logo.png
diff --git a/android/app/src/main/res/mipmap-xxhdpi/bootsplash_logo.png b/android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png
similarity index 100%
rename from android/app/src/main/res/mipmap-xxhdpi/bootsplash_logo.png
rename to android/app/src/main/res/drawable-xxhdpi/bootsplash_logo.png
diff --git a/android/app/src/main/res/mipmap-xxxhdpi/bootsplash_logo.png b/android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png
similarity index 100%
rename from android/app/src/main/res/mipmap-xxxhdpi/bootsplash_logo.png
rename to android/app/src/main/res/drawable-xxxhdpi/bootsplash_logo.png
diff --git a/android/app/src/main/res/drawable/bootsplash_samsung_oneui_4.xml b/android/app/src/main/res/drawable/bootsplash_samsung_oneui_4.xml
new file mode 100644
index 000000000000..9861004d368f
--- /dev/null
+++ b/android/app/src/main/res/drawable/bootsplash_samsung_oneui_4.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:opacity="opaque">
+    <item android:gravity="fill">
+        <color android:color="?attr/windowSplashScreenBackground" />
+    </item>
+
+    <!-- There's an issue with logo size on Samsung OneUI v4
+         We need to render it 2 times smaller (288 / 2 = 144) -->
+    <item
+        tools:ignore="UnusedAttribute"
+        android:drawable="?windowSplashScreenAnimatedIcon"
+        android:gravity="center"
+        android:width="144dp"
+        android:height="144dp" />
+</layer-list>
diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml
index 34d33d240458..aa0e8136957f 100644
--- a/android/app/src/main/res/values/styles.xml
+++ b/android/app/src/main/res/values/styles.xml
@@ -72,7 +72,7 @@
 
     <style name="BootTheme" parent="Theme.SplashScreen">
         <item name="android:statusBarColor">@android:color/transparent</item>
-        <item name="windowSplashScreenAnimatedIcon">@mipmap/bootsplash_logo</item>
+        <item name="windowSplashScreenAnimatedIcon">@drawable/bootsplash_logo</item>
         <item name="windowSplashScreenBackground">@color/bootsplash_background</item>
     </style>
 
diff --git a/assets/animations/FastMoney.json b/assets/animations/FastMoney.json
new file mode 100644
index 000000000000..95d560319141
--- /dev/null
+++ b/assets/animations/FastMoney.json
@@ -0,0 +1 @@
+{"v":"5.9.6","fr":24,"ip":0,"op":80,"w":375,"h":240,"nm":"C","assets":[{"id":"comp_0","nm":"C","fr":24,"layers":[{"ind":1,"ty":0,"nm":"E","refId":"comp_1","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[174.5,291,0],"l":2},"a":{"a":0,"k":[966,966,0],"l":2},"s":{"a":0,"k":[42,42,100],"l":2}},"ao":0,"w":1932,"h":1932,"ip":0,"op":80,"st":0}]},{"id":"comp_1","nm":"E","fr":24,"layers":[{"ind":1,"ty":0,"nm":"t","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[966,966,0],"to":[0,-20,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":4,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":8,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":24,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":28,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":32,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":36,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":40,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":44,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":48,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":52,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":56,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":64,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":72,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":76,"s":[966,846,0],"to":[0,0,0],"ti":[0,-20,0]},{"t":80,"s":[966,966,0]}],"l":2},"a":{"a":0,"k":[966,543.5,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"w":1932,"h":1087,"ip":0,"op":80,"st":0},{"ind":2,"ty":0,"nm":"l","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[966,966,0],"l":2},"a":{"a":0,"k":[966,966,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"w":1932,"h":1932,"ip":0,"op":16,"st":0},{"ind":3,"ty":0,"nm":"l","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[966,966,0],"l":2},"a":{"a":0,"k":[966,966,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"w":1932,"h":1932,"ip":16,"op":32,"st":16},{"ind":4,"ty":0,"nm":"l","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[966,966,0],"l":2},"a":{"a":0,"k":[966,966,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"w":1932,"h":1932,"ip":32,"op":48,"st":32},{"ind":5,"ty":0,"nm":"l","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[966,966,0],"l":2},"a":{"a":0,"k":[966,966,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"w":1932,"h":1932,"ip":48,"op":64,"st":48},{"ind":6,"ty":0,"nm":"l","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[966,966,0],"l":2},"a":{"a":0,"k":[966,966,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"w":1932,"h":1932,"ip":64,"op":80,"st":64},{"ind":7,"ty":0,"nm":"l","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[1060,966,0],"l":2},"a":{"a":0,"k":[966,966,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"w":1932,"h":1932,"ip":0,"op":8,"st":-8},{"ind":8,"ty":0,"nm":"l","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[1060,966,0],"l":2},"a":{"a":0,"k":[966,966,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"w":1932,"h":1932,"ip":8,"op":24,"st":8},{"ind":9,"ty":0,"nm":"l","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[1060,966,0],"l":2},"a":{"a":0,"k":[966,966,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"w":1932,"h":1932,"ip":24,"op":40,"st":24},{"ind":10,"ty":0,"nm":"l","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[1060,966,0],"l":2},"a":{"a":0,"k":[966,966,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"w":1932,"h":1932,"ip":40,"op":56,"st":40},{"ind":11,"ty":0,"nm":"l","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[1060,966,0],"l":2},"a":{"a":0,"k":[966,966,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"w":1932,"h":1932,"ip":56,"op":72,"st":56},{"ind":12,"ty":0,"nm":"l","refId":"comp_3","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[1060,966,0],"l":2},"a":{"a":0,"k":[966,966,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"w":1932,"h":1932,"ip":72,"op":80,"st":72},{"ind":13,"ty":0,"nm":"t","refId":"comp_2","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":0,"s":[966,966,0],"to":[0,-20,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":4,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":8,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":16,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":24,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":28,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":32,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":36,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":40,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":44,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":48,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":52,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":56,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":64,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[966,846,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":72,"s":[966,966,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":76,"s":[966,846,0],"to":[0,0,0],"ti":[0,-20,0]},{"t":80,"s":[966,966,0]}],"l":2},"a":{"a":0,"k":[966,543.5,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"w":1932,"h":1087,"ip":0,"op":80,"st":0},{"ind":14,"ty":0,"nm":"u","parent":1,"refId":"comp_4","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[966,543,0],"l":2},"a":{"a":0,"k":[966,543.5,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"w":1932,"h":1087,"ip":0,"op":80,"st":0},{"ind":15,"ty":3,"nm":"s","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[0]},{"t":54,"s":[9]}]},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[1304.5,374.75,0],"to":[12.667,-19,0],"ti":[-13.167,5,0]},{"t":54,"s":[1362.5,335.75,0]}],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":50,"s":[100,100,100]},{"t":54,"s":[25,25,100]}],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":16,"ty":3,"nm":"s","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":50,"s":[0]},{"t":54,"s":[6]}]},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":50,"s":[1341.898,405.813,0],"to":[13.5,0.917,0],"ti":[-11.5,-9.417,0]},{"t":54,"s":[1395.898,426.313,0]}],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"t":50,"s":[100,100,100]},{"t":54,"s":[25,25,100]}],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":17,"ty":4,"nm":"s","parent":15,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-278.97,470.86,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-8.927,0],[1.705,-3.01],[7.797,-1.705]],"o":[[4.514,-11.535],[7.87,0],[-1.705,3.009],[-7.797,1.706]],"v":[[-14.694,12.137],[6.068,-12.137],[12.99,-2.507],[-0.378,5.015]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.553,0.784,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1285.643,129.839]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":50,"op":55,"st":0},{"ind":18,"ty":4,"nm":"s","parent":16,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-316.368,439.797,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[11.736,1.103],[-9.329,0],[0.702,-4.112],[5.019,0.247]],"o":[[5.818,-4.313],[9.328,0],[-0.702,3.01],[-10.432,-0.903]],"v":[[-16.349,-0.224],[4.012,-6.643],[15.647,1.582],[6.72,6.397]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.553,0.784,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1321,152.732]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":50,"op":55,"st":0}]},{"id":"comp_2","nm":"t","fr":24,"layers":[{"ind":1,"ty":3,"nm":"m","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":0},"p":{"a":0,"k":[1028,525.5,0],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[101,91,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":4,"s":[91,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":8,"s":[101,91,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":12,"s":[91,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":16,"s":[101,91,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":20,"s":[91,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":24,"s":[101,91,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":28,"s":[91,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":32,"s":[101,91,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":36,"s":[91,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":40,"s":[101,91,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":44,"s":[91,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":48,"s":[101,91,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":52,"s":[91,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":56,"s":[101,91,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":60,"s":[91,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[101,91,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":68,"s":[91,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":72,"s":[101,91,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":76,"s":[91,103,100]},{"t":80,"s":[101,91,100]}],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":2,"ty":3,"nm":"b","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":0},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[909,531.5,0],"to":[1,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":4,"s":[915,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":8,"s":[909,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[915,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[909,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[915,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":24,"s":[909,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":28,"s":[915,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":32,"s":[909,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":36,"s":[915,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[909,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":44,"s":[915,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":48,"s":[909,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":52,"s":[915,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":56,"s":[909,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[915,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[909,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[915,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":72,"s":[909,531.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":76,"s":[915,531.5,0],"to":[0,0,0],"ti":[1,0,0]},{"t":80,"s":[909,531.5,0]}],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[111,65,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":4,"s":[80,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":8,"s":[111,65,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":12,"s":[80,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":16,"s":[111,65,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":20,"s":[80,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":24,"s":[111,65,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":28,"s":[80,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":32,"s":[111,65,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":36,"s":[80,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":40,"s":[111,65,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":44,"s":[80,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":48,"s":[111,65,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":52,"s":[80,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":56,"s":[111,65,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":60,"s":[80,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":64,"s":[111,65,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":68,"s":[80,103,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":72,"s":[111,65,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":76,"s":[80,103,100]},{"t":80,"s":[111,65,100]}],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":3,"ty":3,"nm":"h","parent":4,"sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":0},"p":{"a":0,"k":[10,137,0],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":4,"ty":3,"nm":"a","parent":5,"sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[-10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[-10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":28,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":32,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[-10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":44,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":48,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":52,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":56,"s":[-10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[-10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":76,"s":[0]},{"t":80,"s":[10]}]},"p":{"a":0,"k":[-36,63,0],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":5,"ty":3,"nm":"a","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-112]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[-160]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[-112]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[-4]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[-112]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[-160]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[-112]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":28,"s":[-4]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":32,"s":[-112]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36,"s":[-160]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[-112]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":44,"s":[-4]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":48,"s":[-112]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":52,"s":[-160]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":56,"s":[-112]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[-4]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[-112]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[-160]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[-112]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":76,"s":[-4]},{"t":80,"s":[-112]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[890,395.5,0],"to":[2.5,-2,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":4,"s":[905,383.5,0],"to":[0,0,0],"ti":[-2.5,-1.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":8,"s":[890,395.5,0],"to":[2.5,1.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[920,393.5,0],"to":[0,0,0],"ti":[2.5,1.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[890,395.5,0],"to":[-2.5,-1.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[905,383.5,0],"to":[0,0,0],"ti":[-2.5,-1.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":24,"s":[890,395.5,0],"to":[2.5,1.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":28,"s":[920,393.5,0],"to":[0,0,0],"ti":[2.5,1.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":32,"s":[890,395.5,0],"to":[-2.5,-1.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":36,"s":[905,383.5,0],"to":[0,0,0],"ti":[-2.5,-1.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[890,395.5,0],"to":[2.5,1.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":44,"s":[920,393.5,0],"to":[0,0,0],"ti":[2.5,1.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":48,"s":[890,395.5,0],"to":[-2.5,-1.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":52,"s":[905,383.5,0],"to":[0,0,0],"ti":[-2.5,-1.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":56,"s":[890,395.5,0],"to":[2.5,1.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[920,393.5,0],"to":[0,0,0],"ti":[2.5,1.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[890,395.5,0],"to":[-2.5,-1.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[905,383.5,0],"to":[0,0,0],"ti":[-2.5,-1.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":72,"s":[890,395.5,0],"to":[2.5,1.667,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":76,"s":[920,393.5,0],"to":[0,0,0],"ti":[5,-0.333,0]},{"t":80,"s":[890,395.5,0]}],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":6,"ty":3,"nm":"h","parent":7,"sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[0]},{"t":49,"s":[-20]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":44,"s":[-125,-9.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":47,"s":[-125,-9.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":49,"s":[-125,-9.5,0]}],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":7,"ty":3,"nm":"a","parent":8,"sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":44,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[0]},{"t":49,"s":[-19]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":44,"s":[75,-34,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":47,"s":[75,-34,0],"to":[0,0,0],"ti":[0,0,0]},{"t":49,"s":[75,-34,0]}],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":8,"ty":3,"nm":"a","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":44,"s":[24]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":47,"s":[0]},{"t":49,"s":[30]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":44,"s":[1122,363.5,0],"to":[5,1.333,0],"ti":[-3.333,-2.333,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":47,"s":[1152,371.5,0],"to":[3.333,2.333,0],"ti":[1.667,-1,0]},{"t":49,"s":[1142,377.5,0]}],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":9,"ty":3,"nm":"h","parent":10,"sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[-10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":53,"s":[0]},{"t":59,"s":[-54]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":50,"s":[70,-59,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":53,"s":[70,-59,0],"to":[0,0,0],"ti":[0,0,0]},{"t":59,"s":[70,-59,0]}],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":10,"ty":3,"nm":"a","parent":11,"sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":53,"s":[0]},{"t":59,"s":[-11]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":50,"s":[121,-15,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":53,"s":[121,-15,0],"to":[0,0,0],"ti":[0,0,0]},{"t":59,"s":[121,-15,0]}],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":11,"ty":3,"nm":"a","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[2]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":53,"s":[0]},{"t":59,"s":[20]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.333,"y":0.333},"t":50,"s":[1150,365.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.659,"y":0.854},"o":{"x":0.297,"y":0},"t":53,"s":[1150,365.5,0],"to":[-1.038,0.389,0],"ti":[2.52,-0.945,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.425,"y":0.211},"t":56,"s":[1144.19,387.679,0],"to":[-3.951,1.482,0],"ti":[1.628,-0.611,0]},{"t":59,"s":[1134,371.5,0]}],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":12,"ty":4,"nm":"h","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[208.53,96.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0.2,6.65],[-11.98,5.54],[-6.96,-4.61],[0.1,-7.55],[0,0]],"o":[[0,0],[-5.9,0.34],[-0.21,-6.66],[11.99,-5.53],[6.97,4.61],[-0.1,7.56],[0,0]],"v":[[-16.11,18.555],[-16.12,18.555],[-26.52,9.685],[-11.78,-13.365],[18.64,-11.005],[26.63,5.195],[19.56,15.265]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[804.229,508.235]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-0.55,-2.56]],"o":[[-0.38,4.04],[0,0]],"v":[[0.06,-4.945],[0.32,4.945]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[787.789,521.845]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-2.59,-0.76],[-0.11,0.24],[0,0]],"o":[[0.76,3.53],[4.3,1.27],[0,0],[0,0]],"v":[[-5.495,-3.85],[-0.485,2.58],[5.495,0.2],[5.495,0.19]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[793.614,530.64]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-1.48,-2.41],[-2.62,0.23],[-0.21,0.37]],"o":[[-0.42,5.63],[1.84,3],[4.74,-0.43],[0,0]],"v":[[-6.755,-7.855],[-4.845,3.955],[2.435,7.625],[7.175,2.625]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[803.954,526.885]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-1.77,-2.08],[-2.7,0.54],[2.35,4.24],[0.06,4.63]],"o":[[0.46,4.14],[2.45,2.88],[4.64,-0.93],[-1.44,-2.85],[0,0]],"v":[[-9.3,-3.17],[-5.71,6.09],[2.68,9.45],[6.95,0.08],[4.48,-9.99]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[816.839,523.42]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[4.64,-0.93],[2.45,2.88],[4.74,-0.43],[1.84,3],[4.3,1.27],[0.76,3.53],[0,0],[0.2,6.65],[-11.98,5.54],[-6.96,-4.61],[0.1,-7.55]],"o":[[2.35,4.24],[-2.7,0.54],[-0.21,0.37],[-2.62,0.23],[-0.11,0.24],[-2.59,-0.76],[0,0],[-5.9,0.34],[-0.21,-6.66],[11.99,-5.53],[6.97,4.61],[-0.1,7.56]],"v":[[19.56,11.46],[15.29,20.83],[6.9,17.47],[2.16,22.47],[-5.12,18.8],[-11.1,21.18],[-16.11,14.75],[-16.12,14.75],[-26.52,5.88],[-11.78,-17.17],[18.64,-14.81],[26.63,1.39]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[804.229,512.04]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":0,"op":80,"st":0},{"ind":13,"ty":4,"nm":"a","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[168.53,183.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-3.79,-4.94]],"o":[[6.76,-0.53],[0,0]],"v":[[-8.2,-2.515],[8.2,3.045]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[810.199,470.945]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[7.72,-0.59]],"o":[[-3.14,-5.15],[0,0]],"v":[[8.145,3.715],[-8.145,-3.125]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[813.384,459.555]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-4.28,-4.54]],"o":[[6.87,-2.29],[0,0]],"v":[[-8.365,-0.545],[8.365,2.835]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[808.274,482.105]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-0.37,9.86]],"o":[[-0.37,9.86],[0,0]],"v":[[-7.815,-5.235],[8.185,-4.625]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[806.914,502.335]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-0.54,4.98],[-0.91,4.23],[-1.27,3.87],[-16.55,15.32]],"o":[[0,-5.38],[0.48,-4.53],[0.88,-4.14],[6.98,-21.31],[0,0]],"v":[[-21.145,47.33],[-20.335,31.79],[-18.245,18.66],[-15.005,6.66],[21.145,-47.33]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[820.244,449.77]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-0.68,4.15],[-0.85,3.53],[-1.15,3.48],[-12.89,12.79]],"o":[[0.36,-4.37],[0.59,-3.7],[0.89,-3.66],[5.88,-17.68],[0,0]],"v":[[-17.46,40.015],[-15.91,27.245],[-13.75,16.395],[-10.69,5.685],[17.46,-40.015]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[832.559,457.695]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-16.55,15.32],[0,0],[5.88,-17.68],[0,0],[7.72,-0.59]],"o":[[0,0],[-12.89,12.79],[0,0],[-3.14,-5.15],[6.98,-21.31]],"v":[[13.76,-30.47],[22.39,-15.23],[-5.76,30.47],[-6.1,30.36],[-22.39,23.52]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[827.629,432.91]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.28,-4.54],[0,0],[0.36,-4.37],[-0.37,9.86],[-0.54,4.98]],"o":[[0,0],[-0.68,4.15],[-0.37,9.86],[0,-5.38],[6.87,-2.29]],"v":[[8.95,-8.48],[8.96,-8.48],[7.41,4.29],[-8.59,3.68],[-7.78,-11.86]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[807.689,493.42]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-3.14,-5.15],[0,0],[0.89,-3.66],[0,0],[6.76,-0.53],[-1.27,3.87]],"o":[[0,0],[-1.15,3.48],[0,0],[-3.79,-4.94],[0.88,-4.14],[7.72,-0.59]],"v":[[9.595,-1.695],[9.935,-1.585],[6.875,9.125],[6.465,9.025],[-9.935,3.465],[-6.695,-8.535]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[811.934,464.965]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-3.79,-4.94],[0,0],[0.59,-3.7],[0,0],[6.87,-2.29],[-0.91,4.23]],"o":[[0,0],[-0.85,3.53],[0,0],[-4.28,-4.54],[0.48,-4.53],[6.76,-0.53]],"v":[[9.04,-2.43],[9.45,-2.33],[7.29,8.52],[7.28,8.52],[-9.45,5.14],[-7.36,-7.99]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.98,0.941,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[809.359,476.42]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":0,"op":80,"st":0},{"ind":14,"ty":4,"nm":"a","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[82.53,196.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.2,0.33],[18.19,-7.67],[10.85,6.16],[-10.17,6.5],[-18.01,1.33],[-1.52,-8.7]],"o":[[-18.61,-2.32],[-24.82,9.99],[-11.12,-7.86],[10.18,-6.5],[18.02,-1.33],[0,4.67]],"v":[[48.855,-5.73],[-7.545,1.83],[-41.825,17.17],[-29.705,-6.04],[18.515,-22],[52.945,-11.41]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[882.434,400.25]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.52,-8.7],[2.2,0.33],[18.19,-7.67],[10.85,6.16],[-10.17,6.5],[-18.01,1.33]],"o":[[0,4.67],[-18.61,-2.32],[-24.82,9.99],[-11.12,-7.86],[10.18,-6.5],[18.02,-1.33]],"v":[[52.945,-11.41],[48.855,-5.73],[-7.545,1.83],[-41.825,17.17],[-29.705,-6.04],[18.515,-22]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[882.434,400.25]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":79,"op":80,"st":0},{"ind":15,"ty":4,"nm":"a","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[82.53,196.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.2,0.33],[18.19,-7.67],[10.85,6.16],[-10.17,6.5],[-18.01,1.33],[-1.52,-8.7]],"o":[[-18.61,-2.32],[-24.82,9.99],[-11.12,-7.86],[10.18,-6.5],[18.02,-1.33],[0,4.67]],"v":[[48.855,-5.73],[-7.545,1.83],[-41.825,17.17],[-29.705,-6.04],[18.515,-22],[52.945,-11.41]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[882.434,400.25]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.52,-8.7],[2.2,0.33],[18.19,-7.67],[10.85,6.16],[-10.17,6.5],[-18.01,1.33]],"o":[[0,4.67],[-18.61,-2.32],[-24.82,9.99],[-11.12,-7.86],[10.18,-6.5],[18.02,-1.33]],"v":[[52.945,-11.41],[48.855,-5.73],[-7.545,1.83],[-41.825,17.17],[-29.705,-6.04],[18.515,-22]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[882.434,400.25]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":63,"op":74,"st":0},{"ind":16,"ty":4,"nm":"a","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[82.53,196.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.2,0.33],[18.19,-7.67],[10.85,6.16],[-10.17,6.5],[-18.01,1.33],[-1.52,-8.7]],"o":[[-18.61,-2.32],[-24.82,9.99],[-11.12,-7.86],[10.18,-6.5],[18.02,-1.33],[0,4.67]],"v":[[48.855,-5.73],[-7.545,1.83],[-41.825,17.17],[-29.705,-6.04],[18.515,-22],[52.945,-11.41]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[882.434,400.25]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.52,-8.7],[2.2,0.33],[18.19,-7.67],[10.85,6.16],[-10.17,6.5],[-18.01,1.33]],"o":[[0,4.67],[-18.61,-2.32],[-24.82,9.99],[-11.12,-7.86],[10.18,-6.5],[18.02,-1.33]],"v":[[52.945,-11.41],[48.855,-5.73],[-7.545,1.83],[-41.825,17.17],[-29.705,-6.04],[18.515,-22]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[882.434,400.25]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":47,"op":58,"st":0},{"ind":17,"ty":4,"nm":"a","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[82.53,196.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.2,0.33],[18.19,-7.67],[10.85,6.16],[-10.17,6.5],[-18.01,1.33],[-1.52,-8.7]],"o":[[-18.61,-2.32],[-24.82,9.99],[-11.12,-7.86],[10.18,-6.5],[18.02,-1.33],[0,4.67]],"v":[[48.855,-5.73],[-7.545,1.83],[-41.825,17.17],[-29.705,-6.04],[18.515,-22],[52.945,-11.41]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[882.434,400.25]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.52,-8.7],[2.2,0.33],[18.19,-7.67],[10.85,6.16],[-10.17,6.5],[-18.01,1.33]],"o":[[0,4.67],[-18.61,-2.32],[-24.82,9.99],[-11.12,-7.86],[10.18,-6.5],[18.02,-1.33]],"v":[[52.945,-11.41],[48.855,-5.73],[-7.545,1.83],[-41.825,17.17],[-29.705,-6.04],[18.515,-22]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[882.434,400.25]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":31,"op":42,"st":0},{"ind":18,"ty":4,"nm":"a","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[82.53,196.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.2,0.33],[18.19,-7.67],[10.85,6.16],[-10.17,6.5],[-18.01,1.33],[-1.52,-8.7]],"o":[[-18.61,-2.32],[-24.82,9.99],[-11.12,-7.86],[10.18,-6.5],[18.02,-1.33],[0,4.67]],"v":[[48.855,-5.73],[-7.545,1.83],[-41.825,17.17],[-29.705,-6.04],[18.515,-22],[52.945,-11.41]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[882.434,400.25]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.52,-8.7],[2.2,0.33],[18.19,-7.67],[10.85,6.16],[-10.17,6.5],[-18.01,1.33]],"o":[[0,4.67],[-18.61,-2.32],[-24.82,9.99],[-11.12,-7.86],[10.18,-6.5],[18.02,-1.33]],"v":[[52.945,-11.41],[48.855,-5.73],[-7.545,1.83],[-41.825,17.17],[-29.705,-6.04],[18.515,-22]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[882.434,400.25]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":15,"op":26,"st":0},{"ind":19,"ty":4,"nm":"a","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[82.53,196.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.2,0.33],[18.19,-7.67],[10.85,6.16],[-10.17,6.5],[-18.01,1.33],[-1.52,-8.7]],"o":[[-18.61,-2.32],[-24.82,9.99],[-11.12,-7.86],[10.18,-6.5],[18.02,-1.33],[0,4.67]],"v":[[48.855,-5.73],[-7.545,1.83],[-41.825,17.17],[-29.705,-6.04],[18.515,-22],[52.945,-11.41]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[882.434,400.25]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.52,-8.7],[2.2,0.33],[18.19,-7.67],[10.85,6.16],[-10.17,6.5],[-18.01,1.33]],"o":[[0,4.67],[-18.61,-2.32],[-24.82,9.99],[-11.12,-7.86],[10.18,-6.5],[18.02,-1.33]],"v":[[52.945,-11.41],[48.855,-5.73],[-7.545,1.83],[-41.825,17.17],[-29.705,-6.04],[18.515,-22]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[882.434,400.25]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":0,"op":10,"st":0},{"ind":20,"ty":4,"nm":"h","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-187.47,521.11,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[1.16,-0.19],[3.84,0],[3.82,-0.13],[0.38,-2.68],[0,0]],"o":[[-1.74,0.1],[-1.91,0.31],[-6.18,0],[-3.82,0.13],[-0.38,2.67],[0,0]],"v":[[16.135,-3.325],[12.025,-2.855],[4.485,-2.215],[-9.325,-3.665],[-15.755,0.235],[-14.695,3.795]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1164.344,61.285]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[5.22,0.9],[1.21,-0.17],[0.01,-2.03],[-0.25,-0.13],[0,0]],"o":[[-8.92,1.02],[-1.75,-0.3],[-2.4,0.34],[-0.02,2.87],[0.02,0.01],[0,0]],"v":[[14.59,-2.46],[-6.43,-3.61],[-10.88,-3.79],[-14.57,-0.17],[-12.3,3.95],[-12.27,3.96]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1160.539,68.96]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[9.68,0.77],[0.84,-0.37],[-4.65,-0.93]],"o":[[-12.23,1.66],[-1.38,-0.02],[-4.17,1.76],[0,0]],"v":[[15.53,-4.375],[-8.04,-4.375],[-11.36,-3.825],[-8.94,4.395]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1159.599,76.735]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[4.98,-0.25],[1.1,-1.06],[0,-1],[-5.86,-0.63],[-3.95,0],[-8.15,2.81],[-0.51,6.88],[7.13,1.4],[4.87,3.95],[1.15,-1.91],[-7.42,-3.29]],"o":[[-6.4,0.97],[-2.55,-0.16],[-0.66,0.61],[0,2.68],[5.86,0.64],[3.95,0],[8.15,-2.8],[0.51,-6.88],[-7.13,-1.4],[-4.87,-3.95],[-1.15,1.91],[0,0]],"v":[[-3.255,11.595],[-22.745,12.485],[-28.345,13.875],[-29.365,16.305],[-22.105,22.165],[-5.675,21.025],[15.605,19.235],[28.855,5.095],[18.535,-10.705],[-0.295,-18.855],[-8.475,-20.005],[-2.645,-8.835]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1179.014,67.265]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.91,0.31],[-1.15,1.91],[-4.87,-3.95],[-7.13,-1.4],[0.51,-6.88],[8.15,-2.8],[3.95,0],[5.86,0.64],[0,2.68],[-0.66,0.61],[0,0],[-4.17,1.76],[-0.02,2.87],[-2.4,0.34],[0,0],[-0.38,2.67],[-3.82,0.13],[-6.18,0]],"o":[[-7.42,-3.29],[1.15,-1.91],[4.87,3.95],[7.13,1.4],[-0.51,6.88],[-8.15,2.81],[-3.95,0],[-5.86,-0.63],[0,-1],[0,0],[-4.65,-0.93],[-0.25,-0.13],[0.01,-2.03],[0,0],[0,0],[0.38,-2.68],[3.82,-0.13],[3.84,0]],"v":[[0.145,-8.835],[-5.685,-20.005],[2.495,-18.855],[21.325,-10.705],[31.645,5.095],[18.395,19.235],[-2.885,21.025],[-19.315,22.165],[-26.575,16.305],[-25.555,13.875],[-25.565,13.865],[-27.985,5.645],[-30.255,1.525],[-26.565,-2.095],[-26.575,-2.185],[-27.635,-5.745],[-21.205,-9.645],[-7.395,-8.195]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1176.224,67.265]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":44,"op":50,"st":0},{"ind":21,"ty":4,"nm":"a","parent":7,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-362.47,461.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[2.48,-5]],"o":[[0,0],[2,5.67],[0,0]],"v":[[-0.94,-8.03],[-0.94,-8.02],[-1.24,8.03]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1233.839,72.2]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[2.58,5.79]],"o":[[2.18,-5.01],[0,0]],"v":[[-0.535,8.145],[-1.645,-8.145]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1219.294,72.085]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[2.74,-4.81]],"o":[[1.86,5.95],[0,0]],"v":[[-0.09,-8.025],[-1.77,8.025]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1247.969,72.955]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-10.36,1.72]],"o":[[-10.36,1.73],[0,0]],"v":[[3.795,-9.17],[6.565,7.45]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1201.674,73.11]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[89.82,6.06],[5.16,0.17],[5.24,0.02],[4.15,-0.07]],"o":[[-13.75,-27.12],[-4.83,-0.32],[-4.93,-0.18],[-3.97,-0.03],[0,0]],"v":[[89.84,32.59],[-47.43,-31.51],[-62.41,-32.26],[-77.66,-32.56],[-89.84,-32.5]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1295.309,96.44]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[60.81,4.09],[4.61,0.12],[4.68,-0.07],[3.54,-0.15]],"o":[[-15.72,-30],[-4.46,-0.3],[-4.54,-0.12],[-3.47,0.04],[0,0]],"v":[[80.59,27.725],[-42.63,-26.945],[-56.23,-27.575],[-70.07,-27.655],[-80.59,-27.365]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1288.829,107.925]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.75,-27.12],[0,0],[60.81,4.09],[1.86,5.95]],"o":[[0,0],[-15.72,-30],[2.74,-4.81],[89.82,6.06]],"v":[[69.475,28.74],[53.745,35.36],[-69.475,-19.31],[-67.795,-35.36]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1315.674,100.29]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[2.18,-5.01],[0,0],[3.54,-0.15],[-10.36,1.73],[-3.97,-0.03]],"o":[[2.58,5.79],[0,0],[-3.47,0.04],[-10.36,1.72],[4.15,-0.07],[0,0]],"v":[[9.625,-9.125],[10.735,7.165],[10.735,7.205],[0.215,7.495],[-2.555,-9.125],[9.625,-9.185]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1208.024,73.065]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.83,-0.32],[2.74,-4.81],[4.61,0.12],[0,0],[2,5.67]],"o":[[1.86,5.95],[-4.46,-0.3],[0,0],[2.48,-5],[5.16,0.17]],"v":[[6.71,-7.65],[5.03,8.4],[-8.57,7.77],[-8.57,7.65],[-8.27,-8.4]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1241.169,72.58]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.93,-0.18],[2.48,-5],[0,0],[4.68,-0.07],[0,0],[2.58,5.79],[0,0]],"o":[[2,5.67],[0,0],[-4.54,-0.12],[0,0],[2.18,-5.01],[0,0],[5.24,0.02]],"v":[[6.535,-7.935],[6.235,8.115],[6.235,8.235],[-7.605,8.155],[-7.605,8.115],[-8.715,-8.175],[-8.715,-8.235]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.98,0.941,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1226.364,72.115]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":44,"op":50,"st":0},{"ind":22,"ty":4,"nm":"m","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-12.47,67.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.462,-5.128],[-0.013,-0.349],[2.171,-0.112],[0.287,5.602],[0,0.45],[-1.984,0.087]],"o":[[0.037,0.337],[0.287,5.602],[-2.17,0.113],[-0.025,-0.474],[0,-4.965],[2.034,-0.1]],"v":[[3.73,-1.229],[3.805,-0.206],[0.386,10.136],[-4.055,0.193],[-4.092,-1.192],[-0.649,-10.149]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1053.325,418.603]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.287,-5.602],[2.171,-0.112],[0.287,5.601],[-2.184,0.112]],"o":[[0.287,5.602],[-2.171,0.112],[-0.287,-5.602],[2.17,-0.112]],"v":[[3.93,-0.206],[0.524,10.149],[-3.93,0.206],[-0.511,-10.149]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1027.587,422.096]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0.137,8.271],[-2.358,5.477],[-1.547,0.449],[-0.4,0],[-1.273,-1.847],[-0.698,-8.01],[0.586,-5.365]],"o":[[-2.982,-6.749],[-0.137,-8.434],[0.686,-1.572],[0.399,-0.113],[2.071,0],[3.955,5.751],[0.537,5.938],[0,0]],"v":[[-5.801,24.515],[-10.367,0.911],[-6.911,-21.109],[-3.281,-24.352],[-2.083,-24.515],[3.319,-21.258],[9.968,0.325],[9.744,17.666]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1053.138,416.55]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0.424,7.66],[-2.658,6.151],[-1.559,0.449],[-0.399,0],[-1.26,-1.847],[-0.524,-8.746],[1.148,-6.063]],"o":[[-2.982,-6.101],[-0.537,-9.332],[0.673,-1.572],[0.399,-0.113],[2.058,0],[4.33,6.262],[0.474,7.71],[0,0]],"v":[[-5.153,24.802],[-10.168,3.331],[-6.812,-21.396],[-3.182,-24.639],[-1.984,-24.802],[3.405,-21.545],[10.23,2.196],[8.907,23.704]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1027.637,419.332]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[1.036,8.982],[1.909,-1.559],[-0.112,0.499],[-1.971,2.92],[-0.274,-0.149],[-0.212,-14.971]],"o":[[0.2,-12.014],[-2.033,1.984],[-0.262,-3.007],[0.063,-0.312],[3.693,-0.536],[0.449,0.262],[0,0]],"v":[[-1.004,19.742],[-3.039,-9.762],[-10.161,-1.392],[-10.885,-11.496],[-4.573,-21.079],[7.492,-22.676],[10.997,22.824]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1001.095,419.988]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-17.404,1.036],[-7.723,0.449],[-4.204,0.287],[-0.199,-11.166]],"o":[[9.731,-1.21],[8.92,-0.536],[6.312,-0.349],[3.518,18.789],[0,0]],"v":[[-45.792,-14.684],[-1.054,-18.115],[24.447,-19.587],[40.515,-20.548],[45.792,20.548]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1026.296,406.046]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,-0.062],[-1.048,-8.583],[0.087,-2.27]],"o":[[0.013,0.062],[1.435,8.421],[0.687,5.664],[0,0]],"v":[[-2.651,-20.329],[-2.626,-20.142],[1.528,7.754],[2.564,20.329]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[981.982,411.691]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-10.542,-17.217]],"o":[[1.647,20.111],[0,0]],"v":[[-9.319,-28.514],[9.319,28.514]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1082.319,362.05]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-13.711,-19.325]],"o":[[1.335,23.667],[0,0]],"v":[[-11.59,-33.111],[11.59,33.111]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1077.004,366.934]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0.886,-20.972]],"o":[[4.629,22.456],[0,0]],"v":[[-2.315,-31.196],[0.155,31.196]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[961.535,374.276]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0.163,-15.108],[0,0]],"o":[[2.907,14.859],[0,0],[0,0]],"v":[[-1.516,-19.706],[1.353,19.606],[1.353,19.706]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[951.267,364.982]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[1.584,14.41]],"o":[[51.662,64.574],[0,0]],"v":[[-39.479,-28.607],[37.896,-35.967]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1004.426,369.192]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-2.345,21.433]],"o":[[40.222,51.961],[0,0]],"v":[[-32.73,-24.222],[32.73,-27.739]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1003.253,358.931]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-0.15,-0.786],[-6.25,0.2],[0.399,6.326],[0.2,0.761],[0.012,0.05],[-0.012,-0.05],[-0.25,-0.761],[-5.526,0.686],[0.461,5.714]],"o":[[0,0.798],[1.135,5.565],[6.276,-0.212],[-0.05,-0.785],[-0.012,-0.05],[0,0.05],[0.025,0.785],[1.672,5.465],[5.776,-0.711],[0,0]],"v":[[-22.961,-4.753],[-22.724,-2.383],[-10.336,7.872],[-0.231,-5.502],[-0.617,-7.834],[-0.655,-7.984],[-0.643,-7.834],[-0.231,-5.502],[13.443,4.055],[22.5,-8.072]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[837.613,133.101]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[-0.012,0.012],[0,0]],"v":[[0.006,-0.013],[0.006,0.013]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[860.107,125.017]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.137,-0.536],[0.125,0.549]],"o":[[-0.05,-0.549],[0.037,0.562]],"v":[[0.131,0.823],[-0.131,-0.823]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[859.982,124.181]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-5.751,0.436],[-0.499,5.664],[0.038,0.562],[-0.05,-0.537],[-5.365,0.387],[0.15,4.978],[0.163,0.649],[-0.15,-0.599],[-6.139,0.337],[-0.324,5.464],[0.063,0.636]],"o":[[1.31,5.564],[5.764,-0.425],[0.05,-0.537],[-0.062,0.562],[0.449,5.127],[5.264,-0.374],[-0.025,-0.624],[0.038,0.662],[1.073,4.74],[4.778,-0.275],[0.038,-0.574],[0,0]],"v":[[-32.63,-2.364],[-19.968,7.118],[-8.54,-3.861],[-8.528,-5.508],[-8.54,-3.861],[2.339,4.772],[11.708,-4.784],[11.433,-6.681],[11.708,-4.784],[23.186,2.427],[32.592,-5.745],[32.568,-7.554]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[892.743,127.394]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.51,-2.408],[6.936,-2.396],[-0.088,-4.915],[4.977,0.062],[3.606,-3.318],[-5.827,1.073],[5.277,-2.283],[-8.596,-1.697],[-6.114,0.948],[-5.726,-2.694],[-8.571,-3.243],[3.58,-3.955],[-5.777,-3.219],[4.067,-1.148]],"o":[[-6.413,-3.581],[-4.754,1.646],[-4.804,-1.272],[-4.966,-0.05],[2.233,-5.339],[-4.966,-2.907],[6.5,-5.689],[1.372,-5.863],[6.262,-0.961],[6.238,-6.512],[-5.377,0.649],[6.574,-0.449],[-4.255,0.062],[-4.067,1.148]],"v":[[18.651,6.755],[-2.707,4.859],[-11.989,15.238],[-26.648,12.619],[-40.397,17.197],[-27.197,6.705],[-43.865,5.671],[-19.425,-0.793],[-5.539,-11.072],[13.024,-8.391],[38.288,-13.954],[24.228,-6.743],[43.865,-2.814],[30.578,-1.379]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[912.349,159.082]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-0.449,-0.936],[-22.631,1.46],[-7.485,-0.012],[0,0]],"o":[[0,0],[1.996,4.105],[8.558,7.136],[11.166,0.025],[0,0]],"v":[[-38.456,-12.208],[-37.846,-10.685],[-5.783,2.901],[19.081,12.182],[38.456,7.466]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[963.181,132.334]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-4.753,9.107],[6.912,13.836],[2.046,8.084],[0.137,0.411],[0,0]],"o":[[0,0],[4.579,-8.771],[19.313,-6.799],[-0.349,-1.385],[-0.05,-0.15],[0,0]],"v":[[-15.601,44.694],[-4.111,30.111],[-3.712,-4.622],[9.912,-41.712],[9.126,-44.47],[9.051,-44.694]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[804.864,172.456]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.41,3.668],[19.05,32.337],[40.684,-11.253],[-18.377,-38.537],[-4.341,-8.795],[-5.177,-12.488],[-4.579,-11.477],[-2.657,-6.038],[-0.324,-0.711],[-9.681,-6.201],[-5.589,-1.934],[-4.117,-0.736],[-3.519,-0.174],[-4.715,0.612],[-3.593,1.01],[-1.56,0.562],[-3.406,2.183],[-2.881,2.844],[-3.655,10.355],[-0.723,3.269],[5.489,15.645]],"o":[[-12.625,-32.923],[-20.822,-35.307],[-47.046,12.999],[4.728,7.673],[5.951,12.077],[5.54,13.349],[3.144,7.872],[0.337,0.748],[4.529,10.018],[4.828,3.094],[3.88,1.372],[3.431,0.649],[4.703,0.25],[3.668,-0.474],[1.584,-0.449],[3.892,-1.397],[3.406,-2.171],[7.399,-7.298],[1.098,-3.106],[3.443,-15.37],[-1.372,-3.917]],"v":[[93.076,18.676],[47.365,-70.413],[-52.878,-120.628],[-85.04,-28.258],[-71.442,-3.369],[-54.737,33.959],[-39.541,71.81],[-30.833,92.857],[-29.86,95.028],[-7.853,119.63],[7.842,127.215],[19.868,130.396],[30.311,131.631],[44.495,131.107],[55.411,128.887],[60.127,127.377],[71.08,121.988],[80.525,114.44],[97.229,87.467],[99.974,77.898],[97.243,30.029]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[992.162,312.777]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-52.473,25.813],[9.956,24.44],[27.634,44.239],[18.502,-2.532],[7.648,-24.839],[-5.551,-18.152],[-9.581,-18.826]],"o":[[22.906,57.189],[53.346,-29.642],[-6.774,-18.801],[-42.28,-67.693],[-25.762,3.531],[-5.577,18.128],[7.548,24.664],[10.717,21.046]],"v":[[-57.956,82.414],[70.657,128.999],[103.455,5.926],[52.966,-87.118],[-66.839,-146.953],[-118.426,-104.285],[-116.081,-52.037],[-83.669,14.934]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1000.297,322.459]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[65.173,27.584]],"o":[[4.104,-129.161],[0,0]],"v":[[85.721,159.689],[-89.825,-159.689]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1072.088,304.481]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[11.952,33.335],[38.75,35.231]],"o":[[-3.531,-44.476],[-22.306,-62.229],[0,0]],"v":[[63.776,138.923],[38.375,16.949],[-63.776,-138.923]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[864.629,341.54]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[8.769,-0.587],[14.896,-0.986],[0.038,0],[5.963,-0.399],[34.994,-2.271],[7.647,-0.499],[9.943,-0.649],[2.907,-0.187],[-0.487,14.06],[0.062,4.965],[0.087,2.433],[23.729,48.481],[29.704,29.218],[3.069,2.845],[27.584,13.649],[-46.087,6.164]],"o":[[-0.587,20.548],[-14.846,0.985],[-0.037,0.012],[-5.277,0.349],[-30.229,2.008],[-8.109,0.536],[-11.915,0.773],[-23.404,1.509],[8.147,-2.844],[0.212,-6.2],[-0.025,-2.433],[-1.797,-53.708],[-19.375,-39.623],[-3.032,-2.981],[-28.894,-26.798],[0,0],[0,0]],"v":[[242.177,154.847],[224.602,184.789],[179.989,187.747],[179.864,187.758],[162.96,188.882],[59.673,195.643],[35.957,197.19],[2.908,199.336],[-39.921,202.106],[-29.154,170.641],[-29.104,153.375],[-29.279,146.089],[-69.576,-10.719],[-145.927,-114.879],[-155.072,-123.612],[-242.178,-185.08],[-136.499,-202.106]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[935.003,332.216]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-4.878,0.623],[-7.697,0.848],[0,0],[-7.56,0.686],[-7.96,0.511],[-6.475,0.237],[-6.724,-0.05],[-10.171,-1.561]],"o":[[4.778,-0.636],[7.585,-0.948],[0,0],[7.623,-0.848],[8.234,-0.761],[6.824,-0.449],[7.348,-0.262],[6.961,0.075],[0,0]],"v":[[-82.507,5.115],[-68.01,3.219],[-45.03,0.499],[-45.005,0.499],[-22.187,-1.809],[2.166,-3.73],[22.152,-4.753],[43.311,-5.065],[82.507,-2.441]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[882,124.768]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-5.191,-4.241],[-10.742,-20.323],[-0.612,-96.038],[0.063,-3.206],[0.35,-5.364]],"o":[[14.268,4.61],[52.46,32.985],[21.733,41.145],[0.025,3.132],[-0.112,5.178],[0,0]],"v":[[-106.576,-182.624],[-69.408,-165.199],[43.859,-44.509],[106.55,157.286],[106.487,166.805],[105.801,182.624]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1071.083,304.95]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-2.445,0.162],[13.062,-0.387],[33.46,4.841],[0.112,-1.735]],"o":[[2.358,-0.2],[-6.761,-3.967],[0,0],[-0.374,7.049],[0,0]],"v":[[28.882,20.728],[36.104,20.18],[6.886,13.967],[-35.256,-20.728],[-36.104,-5.819]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[942.078,508.678]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.684,5.839],[18.165,5.515],[12.9,-1.859],[0,0],[15.919,1.634],[-10.28,0.636],[3.643,0.037],[-12.937,9.419],[-14.272,2.059],[0,0],[-17.055,10.006],[3.132,2.358]],"o":[[0,0],[0,0],[-9.606,1.372],[0,0],[0,0],[0,0],[0,0],[0,0],[14.272,-2.046],[0,0],[0,0],[0,0]],"v":[[47.807,-16.038],[13.885,-16.212],[-1.597,-5.021],[-16.58,-11.833],[-49.978,-2.563],[-37.153,4.835],[-47.183,11.048],[-17.541,6.794],[3.281,13.318],[19.35,0.368],[49.978,-2.9],[38.25,-6.543]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1046.863,493.732]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0.013],[19.862,-2.433],[25.226,8.246],[7.772,-0.4]],"o":[[-0.012,-0.012],[-7.174,-8.546],[0,0],[-5.514,-1.809],[0,0]],"v":[[43.784,25.014],[43.771,24.989],[4.797,12.351],[-23.948,-22.269],[-43.784,-24.614]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[950.905,502.87]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[9.394,-3.668],[3.256,-24.402],[9.182,-18.489]],"o":[[0,0],[-10.729,4.179],[0,0],[0,0]],"v":[[38.906,-28.676],[21.302,-25.93],[-4.947,12.818],[-38.906,29.599]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1136.831,490.925]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[7.91,-0.761],[0.387,-0.025],[7.623,1.821],[2.021,0.849],[3.955,6.337],[2.669,10.591]],"o":[[-3.369,-0.287],[-0.374,0.037],[-7.173,0.637],[-2.133,-0.499],[-5.864,-2.445],[0,0],[0,0]],"v":[[34.645,13.492],[16.742,15.239],[15.594,15.338],[-7.324,14.303],[-13.561,12.294],[-28.657,-0.493],[-34.645,-16.124]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1049.807,318.273]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-3.718,0.512],[-2.969,1.048],[-1.697,1.123],[-1.435,2.396],[-0.487,2.757],[1.172,15.257]],"o":[[3.443,-0.299],[3.243,-0.449],[1.996,-0.686],[2.233,-1.435],[1.21,-1.958],[0,0],[0,0]],"v":[[-17.902,19.961],[-6.998,18.888],[2.445,16.742],[8.01,14.06],[13.586,8.383],[16.156,1.335],[16.731,-19.961]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[956.725,326.201]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-1.939,-3.751],[1.94,3.751]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[973.699,287.83]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[-2.202,-3.787],[2.202,3.787]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[992.3,286.011]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.21,0.374],[0,0],[0,0],[0,0],[7.785,-5.065],[0.499,-0.262],[1.023,-0.386],[0.025,-0.012],[2.345,-0.387],[1.934,0.062],[1.31,0.224]],"o":[[-10.604,-3.156],[0,0],[0,0],[0,0],[-0.437,0.287],[-0.836,0.449],[-0.012,0],[-1.734,0.637],[-2.134,0.349],[-1.435,-0.025],[-1.335,-0.212]],"v":[[-7.785,7.117],[-24.328,-3.999],[7.66,-7.03],[22.743,-8.452],[16.543,4.335],[15.158,5.147],[12.388,6.393],[12.326,6.418],[6.238,7.978],[0.137,8.39],[-3.98,8.004]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[982.438,289.242]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1.637,3.113],[-1.636,-3.113]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[992.466,300.133]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[1.884,5.732],[-1.884,-5.732]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[961.004,268.806]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[6.806,7.803],[-6.805,-7.803]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[999.473,264.328]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-0.087,-0.324]],"o":[[0,0],[0,0]],"v":[[-0.081,-0.25],[0.081,0.25]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[996.042,238.21]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,-0.012],[9.108,-6.488]],"o":[[0.012,0.012],[0.749,2.358],[0,0]],"v":[[1.547,-9.133],[1.559,-9.095],[-4.554,9.133]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[994.589,247.604]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[4.467,-0.624],[4.529,6.524],[0.013,0.025],[0,0],[-1.771,1.822],[-15.856,-0.723],[-5.838,-2.171],[-0.436,-0.174],[-0.025,-0.012],[-0.149,-0.063]],"o":[[-3.816,2.789],[-18.651,2.595],[-0.025,-0.025],[-2.832,-4.092],[0,0],[4.529,-4.603],[4.804,0.225],[0.425,0.149],[0.013,0.013],[0.137,0.062],[0,0]],"v":[[26.189,10.884],[10.227,16.337],[-22.422,4.485],[-22.472,4.41],[-26.189,-3.2],[-23.52,-6.307],[7.083,-18.209],[23.052,-14.79],[24.337,-14.304],[24.4,-14.279],[24.836,-14.104]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[963.415,246.039]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[50.953,-4.398],[25.989,-2.264],[-17.289,1.429],[-50.953,4.398]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[980.327,274.832]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0]],"o":[[0,0],[0,0]],"v":[[13.605,-1.285],[-13.605,1.285]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[955.558,220.494]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-2.633,-4.554]],"o":[[1.984,0.936],[0,0]],"v":[[-4.154,-3.35],[4.154,3.35]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[991.969,235.11]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-0.087,-0.163]],"o":[[0.1,0.15],[0,0]],"v":[[-0.131,-0.231],[0.131,0.231]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[996.279,238.74]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[1.518,-17.179],[1.668,-17.042],[36.612,14.809],[70.157,42.318],[20.032,47.021],[17.075,47.595],[-21.724,50.34],[-70.157,54.045],[-65.755,24.016],[-59.152,-12.563],[-54.486,-33.635],[-49.957,-54.045],[-25.517,-36.541],[-8.488,-24.34]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[995.13,255.127]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.187,-4.117],[5.016,-0.15],[0.187,4.117],[-5.027,0.162]],"o":[[0.187,4.117],[-5.027,0.15],[-0.2,-4.117],[5.016,-0.15]],"v":[[9.095,-0.275],[0.349,7.461],[-9.082,0.287],[-0.337,-7.46]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[744.487,154.473]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-0.125,-0.125],[8.059,-1.197],[-0.574,0]],"o":[[0.137,0.112],[-8.596,1.16],[-1.809,-0.386],[1.759,0]],"v":[[13.593,-1.959],[13.992,-1.596],[-11.06,1.959],[-13.417,1.572]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[785.502,131.479]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-8.596,1.16],[17.503,-5.414],[9.17,-5.576],[0,0],[-1.734,16.655],[0,0],[1.185,11.153],[3.717,0.798]],"o":[[7.386,7.024],[9.606,16.493],[0,0],[0.399,0.187],[1.759,-17.017],[0,0],[-0.786,-7.51],[8.059,-1.198]],"v":[[14.708,-39.155],[4.029,-3.699],[-4.48,39.155],[-19.151,25.669],[-7.998,13.318],[-22.095,-11.334],[0.798,-24.833],[-10.343,-35.599]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[784.785,169.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.349,-1.385],[19.313,-6.799],[4.579,-8.771],[0,0],[0,0],[3.069,2.845],[0,0],[9.606,16.493],[7.386,7.024],[-4.878,0.624]],"o":[[2.046,8.084],[6.912,13.836],[-4.753,9.107],[0,0],[-3.032,-2.982],[0,0],[9.17,-5.576],[17.503,-5.414],[4.778,-0.636],[0.137,0.412]],"v":[[14.578,-41.919],[0.954,-4.829],[0.555,29.904],[-10.935,44.488],[-11.122,44.676],[-20.267,35.942],[-19.893,35.53],[-11.384,-7.324],[-0.705,-42.78],[13.792,-44.676]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[800.198,172.662]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[5.776,-0.711],[1.672,5.464],[0.2,0.761],[-7.561,0.686],[0,0],[-0.137,-0.536]],"o":[[0.462,5.714],[-5.527,0.687],[-0.05,-0.786],[7.623,-0.848],[0,0],[0.037,0.562],[-0.012,0.013]],"v":[[11.328,-5.371],[2.271,6.755],[-11.403,-2.801],[-11.79,-5.134],[11.029,-7.442],[11.066,-7.043],[11.328,-5.396]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[848.785,130.401]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-3.531,-44.476],[0,0],[7.773,-0.399],[0,0],[23.729,48.481],[29.705,29.218],[0,0],[-4.753,9.107],[0,0],[-22.306,-62.229]],"o":[[0,0],[-5.514,-1.809],[0,0],[-1.796,-53.708],[-19.374,-39.623],[0,0],[0,0],[0,0],[38.75,35.231],[11.952,33.335]],"v":[[69.664,138.88],[68.217,139.017],[48.38,136.672],[46.983,136.722],[6.686,-20.086],[-69.665,-124.246],[-69.478,-124.433],[-57.988,-139.017],[-57.888,-138.967],[44.263,16.905]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[858.741,341.584]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-5.776,-3.219],[4.067,-1.148],[1.51,-2.408],[6.937,-2.396],[-0.087,-4.915],[4.978,0.063],[3.605,-3.318],[-5.826,1.073],[5.277,-2.284],[-8.596,-1.697],[-6.113,0.948],[-5.726,-2.694],[-8.57,-3.244],[3.581,-3.955]],"o":[[-4.254,0.062],[-4.067,1.147],[-6.412,-3.581],[-4.753,1.646],[-4.803,-1.272],[-4.965,-0.049],[2.233,-5.34],[-4.965,-2.907],[6.499,-5.689],[1.372,-5.864],[6.263,-0.961],[6.238,-6.512],[-5.377,0.649],[6.575,-0.449]],"v":[[43.865,-2.813],[30.577,-1.378],[18.65,6.756],[-2.708,4.86],[-11.99,15.239],[-26.648,12.619],[-40.397,17.198],[-27.198,6.706],[-43.865,5.671],[-19.424,-0.792],[-5.54,-11.072],[13.024,-8.39],[38.287,-13.954],[24.227,-6.743]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[912.349,159.082]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0.886,-20.972],[0,0],[3.144,7.872],[2.907,14.858],[0,0],[-2.969,1.048]],"o":[[4.629,22.456],[0,0],[-2.657,-6.038],[0.163,-15.108],[0,0],[3.244,-0.449],[0,0]],"v":[[2.433,-31.208],[4.903,31.183],[4.541,31.345],[-4.167,10.299],[-7.036,-29.012],[-7.061,-29.199],[2.383,-31.345]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[956.788,374.289]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-2.832,-4.092],[-0.025,-0.025],[-8.995,-1.697],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0.013,0.025],[3.306,5.514],[0,0],[0,0]],"v":[[17.242,13.642],[17.392,15.364],[-17.391,18.333],[-16.272,18.246],[-9.668,-18.333],[-8.421,-18.059],[-4.703,-10.449],[-4.653,-10.374],[13.624,1.441],[13.474,2.177]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[945.647,260.897]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-2.919,-0.237],[4.529,-4.604],[-12.576,1.647]],"o":[[-15.857,-0.724],[2.558,-3.893],[3.443,-0.449]],"v":[[15.302,-5.589],[-15.302,6.313],[5.758,-5.327]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[1,0.878,0.839,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[955.197,233.419]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[14.485,7.154],[14.036,7.779],[-13.174,10.349],[-14.484,10.062],[-9.955,-10.349]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[955.128,211.431]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[7.987,-1.328],[4.044,0.58],[1.21,0.374],[0,0]],"o":[[-2.032,3.204],[-4.038,1.029],[-1.335,-0.212],[-4.467,-1.559],[0,0]],"v":[[18.357,-4.305],[5.813,3.276],[-6.312,3.664],[-10.117,2.778],[-18.357,-1.227]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[984.77,293.581]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.435,-0.025],[2.233,0.786],[-1.335,-0.212]],"o":[[-3.019,0.075],[1.21,0.375],[1.31,0.225]],"v":[[3.961,0.599],[-3.961,-0.674],[-0.156,0.212]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[978.614,297.033]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-5.564,-2.745],[7.822,6.113],[5.302,4.017],[-0.773,-0.013],[-6.849,-2.133]],"o":[[-7.96,0.961],[-6.799,1.909],[0.636,0.025],[10.068,0.785],[5.502,1.709]],"v":[[22.188,5.077],[-3.562,-1.348],[-22.188,-6.039],[-20.055,-5.976],[5.57,-1.66]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[964.953,126.489]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[4.804,0.225],[3.444,-0.449],[2.558,-3.892],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-5.838,-2.171],[-2.919,-0.237],[-12.575,1.647],[-1.771,1.822],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[25.332,0.074],[25.157,0.537],[9.188,-2.882],[-0.356,-2.62],[-21.415,9.02],[-24.084,12.126],[-25.332,11.852],[-20.666,-9.219],[-19.356,-8.934],[7.853,-11.503],[8.303,-12.126]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[961.31,230.712]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-8.344,-4.205],[0.125,0],[5.502,1.709],[10.068,0.786],[0,0]],"o":[[0,0],[-0.125,0.012],[-5.564,-2.745],[-6.849,-2.133],[3.007,0.062],[0,0]],"v":[[-1.572,-3.419],[21.059,5.49],[21.059,5.526],[4.441,-1.211],[-21.184,-5.526],[-10.174,-4.391]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[966.082,126.04]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-2.57,-1.747],[3.494,-6.15],[1.447,-1.322],[2.109,-0.848],[-0.175,2.944],[0,0],[0,0],[-4.192,-1.085]],"o":[[3.418,3.481],[-1.197,2.371],[-1.472,1.048],[-7.273,1.634],[2.969,-2.233],[0,0],[4.716,-9.519],[4.179,1.772]],"v":[[10.087,-8.889],[10.648,5.695],[6.656,11.172],[1.315,14.029],[-13.13,6.693],[-4.036,0.992],[-14.141,-5.009],[0.007,-14.578]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[983.38,245.564]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-0.012],[9.107,-6.487],[-1.198,2.371],[3.418,3.481],[-0.773,-0.499],[0,0]],"o":[[0.749,2.358],[1.447,-1.322],[3.493,-6.15],[0.998,0.674],[0,0],[0.012,0.012]],"v":[[1.56,-8.197],[-4.554,10.031],[-0.562,4.553],[-1.122,-10.031],[1.534,-8.247],[1.547,-8.234]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[1,0.878,0.839,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[994.589,246.706]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0.749,2.358],[0.012,0.012],[-0.063,-0.037],[8.197,-7.224],[6.637,-1.247],[5.264,0.985],[3.306,5.514],[-18.651,2.595],[-2.956,1.198],[-1.697,1.547]],"o":[[0,-0.012],[0.062,0.05],[0,0],[-2.882,2.545],[-7.411,1.385],[-8.995,-1.697],[4.528,6.525],[4.466,-0.624],[1.822,-0.412],[9.107,-6.487]],"v":[[25.469,-13.212],[25.457,-13.249],[25.644,-13.125],[21.489,4.242],[7.554,10.217],[-11.409,10.617],[-29.686,-1.198],[2.963,10.654],[14.016,7.872],[19.356,5.015]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[1,0.878,0.839,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[970.679,251.721]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[1.023,-0.387],[0.025,-0.013],[4.18,-0.537],[0.761,-0.012],[1.31,0.225],[0,0],[0,0],[0,0]],"o":[[0,0],[-0.836,0.45],[-0.013,0],[-2.507,0.786],[-0.786,0.1],[-1.435,-0.025],[0,0],[0,0],[0,0],[0,0]],"v":[[9.943,-0.387],[10.979,0.674],[8.209,1.922],[8.146,1.946],[-1.722,3.755],[-4.042,3.917],[-8.159,3.531],[-8.06,2.894],[-10.979,-2.133],[7.885,-3.917]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[986.617,293.714]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.836,0.449],[-0.437,0.287],[1.635,-0.524]],"o":[[0.499,-0.262],[-1.16,0.886],[1.023,-0.387]],"v":[[0.693,-0.219],[2.077,-1.03],[-2.078,1.03]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[996.903,294.607]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.828,-3.044],[0,0],[11.165,0.025],[8.558,7.136],[1.996,4.104],[0.062,0.636],[0,0],[-6.063,-0.474],[0.637,0.025],[-6.799,1.909],[-7.96,0.96]],"o":[[0,0],[0,0],[-7.486,-0.013],[-22.631,1.459],[0.037,-0.574],[0,0],[6.961,0.075],[-0.774,-0.012],[5.303,4.017],[7.822,6.113],[4.853,2.395]],"v":[[38.182,7.629],[38.145,7.679],[18.77,12.395],[-6.094,3.113],[-38.157,-10.473],[-38.182,-12.282],[-38.182,-12.42],[-18.595,-11.609],[-20.729,-11.671],[-2.102,-6.98],[23.648,-0.555]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[963.493,132.122]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[1.472,-1.098],[0.499,-0.262],[0,0]],"o":[[0,0],[-1.061,1.996],[-0.437,0.287],[0,0],[0,0]],"v":[[-4.086,-1.909],[4.086,-2.682],[0.393,1.871],[-0.992,2.682],[-2.028,1.622]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[998.588,291.706]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-7.411,1.385],[-2.882,2.546],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[5.265,0.985],[6.637,-1.247],[0,0],[0,0]],"v":[[23.561,6.019],[23.598,6.456],[-19.68,10.149],[-19.831,8.427],[-23.597,-3.037],[-23.448,-3.773],[-4.484,-4.174],[9.451,-10.149],[9.95,-9.588]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[982.718,266.112]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.212,-14.971],[0,0],[3.88,1.373],[0,0],[1.035,8.983],[1.909,-1.56],[-0.112,0.499],[-1.971,2.919],[-0.274,-0.15]],"o":[[0,0],[-4.117,-0.736],[0,0],[0.2,-12.014],[-2.034,1.984],[-0.262,-3.007],[0.063,-0.312],[3.693,-0.537],[0.449,0.262]],"v":[[10.998,22.643],[10.936,23.006],[-1.091,19.824],[-1.004,19.561],[-3.037,-9.944],[-10.161,-1.572],[-10.885,-11.678],[-4.572,-21.259],[7.492,-22.855]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1001.095,420.168]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-17.404,1.036],[0,0],[0.399,-0.112],[0.673,-1.572],[-0.537,-9.331],[-2.982,-6.1],[0,0],[3.431,0.648],[0,0],[0.449,0.262],[3.693,-0.537],[0.062,-0.312],[-0.262,-3.006],[0,0],[1.435,8.421],[0,0]],"o":[[0,0],[-0.4,0],[-1.559,0.449],[-2.658,6.15],[0.424,7.661],[0,0],[-3.518,-0.175],[0,0],[-0.213,-14.971],[-0.275,-0.15],[-1.971,2.919],[-0.112,0.499],[0,0],[-1.048,-8.584],[0,0],[9.731,-1.21]],"v":[[22.737,-28.239],[23.149,-21.639],[21.951,-21.477],[18.321,-18.233],[14.965,6.493],[19.98,27.964],[19.967,28.239],[9.525,27.004],[9.588,26.642],[6.082,-18.857],[-5.982,-17.26],[-12.295,-7.679],[-11.571,2.426],[-18.994,3.275],[-23.149,-24.621],[-22.001,-24.808]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1002.505,416.17]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.287,-5.602],[2.171,-0.112],[0.287,5.601],[-2.184,0.112]],"o":[[0.287,5.602],[-2.171,0.112],[-0.287,-5.602],[2.17,-0.112]],"v":[[3.93,-0.206],[0.524,10.149],[-3.93,0.206],[-0.511,-10.149]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1027.587,422.096]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[8.196,-7.223],[0,0],[0,0]],"v":[[19.786,14.609],[19.324,15.108],[-5.64,17.241],[-5.677,16.806],[-19.288,1.199],[-19.787,0.637],[-15.633,-16.73],[-15.159,-17.241]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1011.955,255.326]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-5.864,-2.445],[0,0],[40.222,51.961],[0,0],[-0.487,2.758],[1.172,15.258],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[-2.345,21.433],[0,0],[1.21,-1.959],[0,0],[0,0],[0,0],[0,0],[2.67,10.592],[3.955,6.338]],"v":[[32.967,-13.842],[32.705,-13.217],[-32.755,-9.699],[-32.967,-9.824],[-30.397,-16.874],[-29.823,-38.169],[-29.873,-38.942],[8.926,-41.687],[11.883,-42.262],[17.871,-26.629]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1003.279,344.409]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[1.147,-6.063],[0,0],[4.703,0.25],[0,0],[0.424,7.66],[0,0],[-2.171,0.112],[0.287,5.601]],"o":[[0.474,7.71],[0,0],[-4.716,0.611],[0,0],[-2.981,-6.101],[0,0],[0.287,5.602],[2.171,-0.113],[0,0]],"v":[[9.962,-11.565],[8.64,9.943],[8.752,10.792],[-5.433,11.315],[-5.421,11.041],[-10.436,-10.43],[-4.248,-10.792],[0.206,-0.848],[3.612,-11.203]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1027.905,433.093]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-2.133,-0.499],[0,0],[51.662,64.575],[0,0],[-1.435,2.395],[0,0],[-2.345,21.434],[0,0]],"o":[[0,0],[1.584,14.409],[0,0],[2.233,-1.435],[0,0],[40.222,51.962],[0,0],[2.021,0.849]],"v":[[38.164,-35.288],[38.001,-34.638],[-39.374,-27.279],[-39.586,-27.602],[-34.008,-33.279],[-33.797,-33.154],[31.664,-36.672],[31.925,-37.297]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1004.32,367.864]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.012,-0.349],[2.17,-0.112],[0.287,5.602],[0,0.45],[-1.983,0.087],[-0.461,-5.128]],"o":[[0.287,5.602],[-2.171,0.113],[-0.025,-0.474],[0,-4.965],[2.034,-0.1],[0.038,0.337]],"v":[[3.805,-0.206],[0.387,10.136],[-4.055,0.193],[-4.092,-1.192],[-0.649,-10.149],[3.73,-1.229]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1053.325,418.603]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.16,0.886],[0,0],[0,0],[0,0],[-10.604,-3.156],[-3.019,0.074],[-2.133,0.349],[-1.734,0.637],[-0.013,0]],"o":[[7.785,-5.065],[0,0],[0,0],[0,0],[2.233,0.786],[1.934,0.062],[2.345,-0.387],[0.025,-0.012],[1.634,-0.524]],"v":[[3.851,4.023],[10.051,-8.764],[-5.032,-7.342],[-37.02,-4.311],[-20.477,6.806],[-12.555,8.079],[-6.454,7.666],[-0.366,6.106],[-0.303,6.082]],"c":true}},"nm":"P"},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[70.157,7.89],[20.032,12.595],[17.075,13.168],[-21.724,15.913],[-70.157,19.618],[-65.755,-10.41],[-64.533,-10.324],[-32.092,-13.293],[11.187,-16.986],[36.151,-19.119],[36.612,-19.618]],"c":true}},"nm":"P"},{"ty":"mm","mm":1,"nm":"M"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[995.13,289.554]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.699,-8.009],[0,0],[2.034,-0.1],[0,-4.965],[0,0],[-2.358,5.477],[-1.547,0.449],[-0.399,0],[-1.272,-1.846]],"o":[[0,0],[-0.461,-5.127],[-1.983,0.087],[0,0],[-0.138,-8.433],[0.687,-1.572],[0.399,-0.112],[2.071,0],[3.955,5.751]],"v":[[10.236,12.126],[4.185,12.625],[-0.194,3.706],[-3.637,12.662],[-10.099,12.713],[-6.644,-9.307],[-3.013,-12.55],[-1.816,-12.713],[3.586,-9.456]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1052.869,404.748]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.2,-11.166],[0,0],[3.406,-2.171],[0,0],[0.537,5.939],[3.955,5.752],[2.071,0],[0,0],[-4.205,0.287]],"o":[[0,0],[-2.882,2.844],[0,0],[0.586,-5.365],[-0.698,-8.009],[-1.273,-1.846],[0,0],[6.313,-0.35],[3.518,18.788]],"v":[[10.374,16.461],[10.973,17.085],[1.528,24.634],[1.167,24.085],[1.391,6.742],[-5.259,-14.84],[-10.661,-18.097],[-10.973,-23.673],[5.096,-24.634]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1061.715,410.132]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[1.984,0.936],[0.012,0.012],[0.424,0.15],[0,0],[0,0],[0,0],[0,0],[0,0],[1.937,0.43],[0,0],[0,0],[4.728,7.673],[-47.047,13],[-20.822,-35.306],[-12.625,-32.923],[0,0],[7.909,-0.761],[0.387,-0.025],[7.623,1.821],[2.021,0.849],[3.955,6.337],[2.67,10.592],[0,0],[0,0],[0,0],[0,0],[0.062,0.05]],"o":[[-2.632,-4.554],[-0.025,-0.012],[-0.437,-0.175],[0,0],[0,0],[0,0],[0,0],[0,0],[1.938,0.43],[0,0],[0,0],[-4.342,-8.796],[-18.377,-38.537],[40.683,-11.253],[19.051,32.337],[0,0],[-3.368,-0.287],[-0.375,0.037],[-7.174,0.636],[-2.133,-0.499],[-5.864,-2.445],[0,0],[0,0],[0,0],[0,0],[0,0],[-0.063,-0.037],[0,0]],"v":[[9.133,-19.188],[0.824,-25.887],[0.761,-25.912],[-0.523,-26.399],[-0.35,-26.861],[-17.379,-39.061],[-41.819,-56.564],[-46.348,-36.155],[-51.014,-15.084],[-57.617,21.496],[-62.018,51.525],[-66.271,51.762],[-79.87,26.873],[-47.707,-65.498],[52.535,-15.283],[98.246,73.806],[97.46,74.118],[79.558,75.866],[78.41,75.965],[55.492,74.929],[49.254,72.921],[34.158,60.134],[28.17,44.501],[74.929,39.798],[44.75,12.288],[9.806,-19.561],[9.332,-19.051],[9.145,-19.176]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[986.991,257.647]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-1.048,-8.584],[0.087,-2.27],[0,0],[4.528,10.018],[0.336,0.749],[0,0],[4.629,22.456],[0,0],[-1.696,1.123],[0,0],[1.584,14.409],[0,0],[-7.173,0.636],[0,0],[-13.711,-19.325],[0,0],[7.398,-7.298],[0,0],[3.518,18.789],[6.313,-0.349],[8.92,-0.536],[9.731,-1.21]],"o":[[1.435,8.421],[0.687,5.664],[0,0],[-9.681,-6.2],[-0.325,-0.711],[0,0],[0.886,-20.972],[0,0],[1.996,-0.686],[0,0],[51.662,64.574],[0,0],[7.623,1.822],[0,0],[1.335,23.666],[0,0],[-3.655,10.354],[0,0],[-0.199,-11.165],[-4.204,0.287],[-7.722,0.449],[-17.404,1.036],[0,0]],"v":[[-44.925,9.057],[-40.771,36.954],[-39.735,49.528],[-39.972,49.915],[-61.979,25.314],[-62.952,23.142],[-62.591,22.98],[-65.061,-39.41],[-65.111,-39.548],[-59.547,-42.23],[-59.334,-41.905],[18.04,-49.267],[18.202,-49.915],[41.12,-48.879],[41.133,-48.668],[64.313,17.553],[65.111,17.754],[48.406,44.725],[47.807,44.101],[42.53,3.007],[26.461,3.967],[0.961,5.439],[-43.777,8.871]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1024.281,382.492]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.542,-17.217],[0,0],[1.098,-3.106],[0,0],[1.335,23.667],[0,0],[-0.374,0.038],[0,0]],"o":[[0,0],[-0.724,3.269],[0,0],[-13.711,-19.325],[0,0],[0.387,-0.025],[0,0],[1.647,20.111]],"v":[[12.869,23.685],[13.368,23.798],[10.623,33.366],[9.825,33.168],[-13.355,-33.055],[-13.368,-33.267],[-12.22,-33.366],[-5.77,-33.342]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1078.769,366.878]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.372,-3.917],[3.443,-15.37],[0,0],[1.647,20.111],[0,0],[-3.368,-0.287],[0,0]],"o":[[5.489,15.645],[0,0],[-10.542,-17.216],[0,0],[7.91,-0.761],[0,0],[1.41,3.668]],"v":[[8.341,-18.258],[11.073,29.611],[10.573,29.499],[-8.065,-27.528],[-14.516,-27.552],[3.388,-29.299],[4.173,-29.611]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1081.064,361.064]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[14.272,-2.046],[0,0],[0,0],[0,0],[0,0],[0,0],[-9.606,1.372],[0,0],[0,0]],"o":[[3.131,2.358],[-17.054,10.005],[0,0],[-14.273,2.059],[-12.937,9.419],[3.643,0.037],[-10.28,0.636],[15.919,1.634],[0,0],[12.9,-1.859],[18.165,5.515],[-1.685,5.839]],"v":[[38.25,-6.544],[49.977,-2.901],[19.349,0.368],[3.281,13.317],[-17.542,6.793],[-47.184,11.047],[-37.153,4.835],[-49.978,-2.564],[-16.581,-11.834],[-1.598,-5.022],[13.885,-16.212],[47.807,-16.038]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1046.863,493.732]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-14.846,0.986],[0.012,-0.3],[26.436,-1.747],[-0.225,0.174]],"o":[[-0.013,0.287],[-0.05,1.197],[0.212,-0.187],[14.896,-0.986]],"v":[[22.631,-1.753],[22.594,-0.867],[-22.631,1.753],[-21.982,1.204]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1136.975,518.758]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.391,2.757],[4.624,-10.238],[4.778,-0.312]],"o":[[-0.599,9.22],[-4.073,3.633],[1.048,-17.615]],"v":[[8.64,-14.715],[2.661,8.661],[-8.64,14.715]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1168.245,502.29]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-32.661,6.088],[0.349,-5.364],[1.048,-17.616],[14.896,-0.985],[-13.699,1.385]],"o":[[-0.112,5.177],[-4.392,2.757],[-14.846,0.985],[6.2,-5.177],[0,0]],"v":[[31.289,-24.103],[30.603,-8.284],[13.324,21.147],[-31.289,24.103],[-2.158,13.374]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1146.282,495.859]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.162,0.025],[0,0],[1.011,-0.649],[-0.112,5.177]],"o":[[0,0],[0,0],[0.35,-5.365],[0.163,-0.038]],"v":[[0.362,-7.96],[0.811,7.012],[-0.811,7.96],[-0.125,-7.859]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1177.695,479.615]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0.475,7.71],[4.329,6.263],[2.058,0],[0,0],[-7.722,0.45],[0,0],[0.399,-0.112],[0.686,-1.572],[-0.137,-8.434],[-2.982,-6.75],[0,0],[3.668,-0.474]],"o":[[1.148,-6.063],[-0.524,-8.746],[-1.26,-1.846],[0,0],[8.92,-0.537],[0,0],[-0.399,0],[-1.547,0.449],[-2.358,5.477],[0.138,8.271],[0,0],[-3.593,1.01],[0,0]],"v":[[-1.603,27.865],[-0.281,6.357],[-7.105,-17.385],[-12.494,-20.641],[-12.906,-27.24],[12.594,-28.713],[12.906,-23.136],[11.709,-22.974],[8.078,-19.73],[4.622,2.29],[9.189,25.894],[9.426,26.493],[-1.491,28.713]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1038.148,415.172]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[9.394,-3.668],[0,0],[65.173,27.584],[0,0],[0,0],[0,0],[-10.742,-20.323],[-0.611,-96.039]],"o":[[0,0],[0,0],[4.105,-129.161],[0,0],[11.166,0.025],[0,0],[52.461,32.986],[21.732,41.145],[0,0]],"v":[[95.789,159.876],[78.186,162.622],[77.861,161.797],[-97.685,-157.582],[-97.685,-157.856],[-78.31,-162.572],[-78.273,-162.622],[34.995,-41.932],[97.685,159.865]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1079.948,302.373]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-6.725,-0.05],[0,0],[0.037,-0.574],[4.778,-0.275],[1.073,4.741],[0.162,0.648]],"o":[[7.348,-0.262],[0,0],[0.062,0.637],[-0.325,5.465],[-6.138,0.337],[-0.025,-0.624],[0,0]],"v":[[-10.61,-4.891],[10.549,-5.202],[10.549,-5.065],[10.573,-3.256],[1.167,4.916],[-10.312,-2.295],[-10.586,-4.191]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[914.763,124.905]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[1.21,-1.959],[2.234,-1.434],[1.996,-0.686],[3.244,-0.449],[3.444,-0.299],[0,0],[5.951,12.076],[0,0],[0,0]],"o":[[1.173,15.258],[-0.486,2.757],[-1.435,2.395],[-1.696,1.123],[-2.969,1.048],[-3.718,0.512],[0,0],[-5.177,-12.488],[0,0],[0,0],[0,0]],"v":[[25.781,-19.862],[25.207,1.434],[22.637,8.483],[17.06,14.16],[11.496,16.842],[2.052,18.987],[-8.852,20.061],[-10.249,20.634],[-26.954,-16.693],[-26.467,-16.93],[25.731,-20.634]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[947.674,326.101]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-15.857,-0.724],[-3.618,-1.534],[4.716,-9.519],[0,0],[2.97,-2.234],[-7.273,1.635],[4.466,-0.623],[4.529,6.525],[0.012,0.024],[0.462,2.52],[-1.285,1.959]],"o":[[5.003,0.387],[-4.191,-1.085],[0,0],[0,0],[-0.174,2.944],[-2.956,1.198],[-18.651,2.595],[-0.025,-0.025],[-1.385,-2.333],[0,0],[4.529,-4.604]],"v":[[9.064,-18.208],[21.951,-15.052],[7.804,-5.483],[17.909,0.518],[8.814,6.22],[23.261,13.555],[12.208,16.337],[-20.441,4.485],[-20.491,4.411],[-23.261,-2.95],[-21.539,-6.306]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[1,0.878,0.839,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[961.434,246.038]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-3.718,0.512],[0,0],[0.162,-15.108],[5.539,13.349]],"o":[[3.443,-0.299],[0,0],[2.907,14.859],[-4.578,-11.477],[0,0]],"v":[[-6.281,-18.676],[4.622,-19.749],[4.647,-19.562],[7.516,19.749],[-7.679,-18.102]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[945.104,364.838]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-6.762,-3.967],[2.357,-0.2],[9.943,-0.649],[0,0],[-0.012,0.324],[-0.375,7.049],[0,0]],"o":[[-2.445,0.162],[-11.915,0.773],[-5.077,-20.548],[0,0],[0.113,-1.735],[33.46,4.841],[13.062,-0.387]],"v":[[36.117,19.106],[28.894,19.655],[-4.155,21.801],[-36.118,-6.394],[-36.093,-6.892],[-35.244,-21.801],[6.899,12.894]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[942.066,509.751]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[3.892,-1.397],[1.585,-0.45],[0,0],[0.137,8.271],[0,0],[-0.025,-0.474],[-2.171,0.112],[0.286,5.602],[0.037,0.337],[0,0],[0.586,-5.365],[0,0]],"o":[[-1.56,0.561],[0,0],[-2.982,-6.75],[0,0],[0,0.449],[0.287,5.602],[2.171,-0.113],[-0.013,-0.349],[0,0],[0.537,5.939],[0,0],[-3.406,2.184]],"v":[[-0.917,10.885],[-5.633,12.395],[-5.87,11.796],[-10.436,-11.808],[-3.974,-11.858],[-3.936,-10.474],[0.505,-0.53],[3.924,-10.873],[3.849,-11.896],[9.899,-12.395],[9.675,4.947],[10.037,5.495]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1053.206,429.27]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-11.914,0.773],[0.324,1.36],[0.037,0.112]],"o":[[-17.74,1.497],[-0.025,-0.113],[9.943,-0.649]],"v":[[16.524,-1.922],[-16.437,0.562],[-16.524,0.225]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[954.436,531.328]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.15,-0.599],[5.265,-0.374],[0.449,5.128],[0.038,0.562],[0,0],[-6.475,0.237],[0,0]],"o":[[0.15,4.978],[-5.365,0.387],[0.05,-0.536],[0,0],[6.825,-0.449],[0,0],[0.037,0.661]],"v":[[10.068,-3.674],[0.699,5.882],[-10.18,-2.751],[-10.168,-4.398],[-10.218,-5.246],[9.769,-6.269],[9.794,-5.57]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[894.384,126.283]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.067,1.148],[-4.255,0.063],[6.575,-0.449],[-5.377,0.649],[6.238,-6.513],[6.263,-0.96],[1.373,-5.863],[6.5,-5.689],[-4.966,-2.907],[2.234,-5.339],[-4.966,-0.05],[-4.803,-1.273],[-4.754,1.647],[-6.412,-3.58]],"o":[[4.067,-1.148],[-5.777,-3.218],[3.58,-3.954],[-8.571,-3.243],[-5.727,-2.695],[-6.113,0.949],[-8.596,-1.696],[5.277,-2.283],[-5.826,1.073],[3.606,-3.318],[4.978,0.062],[-0.088,-4.916],[6.936,-2.395],[1.51,-2.408]],"v":[[-38.406,-167.051],[-25.12,-168.486],[-44.757,-172.415],[-30.697,-179.626],[-55.96,-174.061],[-74.523,-176.744],[-88.41,-166.464],[-112.85,-160.001],[-96.182,-158.966],[-109.382,-148.474],[-95.633,-153.052],[-80.974,-150.432],[-71.692,-160.812],[-50.333,-158.916]],"c":true}},"nm":"P"},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-17.054,10.006],[3.132,2.357],[-1.685,5.839],[18.165,5.514],[12.899,-1.859],[0,0],[15.919,1.635],[-10.28,0.637],[3.643,0.038],[-12.938,9.419],[-14.273,2.058],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[-9.607,1.372],[0,0],[0,0],[0,0],[0,0],[0,0],[14.272,-2.046],[0,0]],"v":[[115.506,166.077],[103.779,162.434],[113.336,152.939],[79.414,152.766],[63.932,163.957],[48.948,157.145],[15.551,166.413],[28.376,173.811],[18.345,180.025],[47.988,175.771],[68.81,182.296],[84.878,169.345]],"c":true}},"nm":"P"},{"ind":2,"ty":"sh","ks":{"a":0,"k":{"i":[[-52.473,25.812],[9.956,24.44],[27.633,44.239],[18.501,-2.533],[7.647,-24.839],[-5.552,-18.152],[-9.581,-18.826],[0,0]],"o":[[53.346,-29.642],[-6.774,-18.801],[-42.281,-67.694],[-25.763,3.531],[-5.577,18.127],[7.548,24.665],[10.717,21.047],[22.905,57.188]],"v":[[89.62,126.704],[122.418,3.631],[71.929,-89.413],[-47.876,-149.247],[-99.463,-106.58],[-97.117,-54.332],[-64.706,12.638],[-38.993,80.12]],"c":true}},"nm":"P"},{"ind":3,"ty":"sh","ks":{"a":0,"k":{"i":[[9.182,-18.489],[0,0],[34.995,-2.271],[19.862,-2.433],[25.226,8.247],[0,0],[11.951,33.335],[38.75,35.231],[0,0],[6.911,13.836],[2.046,8.084],[0,0],[-6.251,0.2],[0.399,6.325],[-5.527,0.687],[0.462,5.714],[-5.751,0.436],[-0.499,5.664],[-5.365,0.387],[0.149,4.978],[-6.139,0.337],[-0.324,5.464],[-22.631,1.46],[-7.485,-0.012],[0,0],[4.105,-129.162],[0,0],[3.256,-24.403]],"o":[[0,0],[-30.229,2.008],[-7.173,-8.546],[0,0],[0,0],[-3.53,-44.476],[-22.307,-62.229],[0,0],[4.579,-8.771],[19.312,-6.799],[0,0],[1.136,5.564],[6.275,-0.212],[1.672,5.464],[5.776,-0.711],[1.31,5.564],[5.764,-0.425],[0.449,5.127],[5.264,-0.374],[1.073,4.74],[4.778,-0.275],[1.996,4.105],[8.558,7.136],[0,0],[65.173,27.584],[0,0],[-10.729,4.18],[0,0]],"v":[[116.592,195.77],[116.629,196.344],[13.342,203.105],[-25.632,190.467],[-54.376,155.847],[-52.929,155.71],[-78.329,33.735],[-180.481,-122.137],[-180.581,-122.187],[-180.181,-156.921],[-166.557,-194.01],[-166.445,-194.035],[-154.057,-183.78],[-143.952,-197.154],[-130.278,-187.598],[-121.221,-199.724],[-108.557,-190.242],[-97.13,-201.221],[-86.251,-192.588],[-76.882,-202.145],[-65.404,-194.934],[-55.997,-203.105],[-23.935,-189.52],[0.93,-180.237],[0.93,-179.962],[176.475,139.417],[176.8,140.24],[150.551,178.99]],"c":true}},"nm":"P"},{"ty":"mm","mm":1,"nm":"M"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[981.333,324.754]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-5.028,0.15],[0.187,4.117],[5.015,-0.15],[-0.199,-4.117]],"o":[[5.015,-0.15],[-0.188,-4.117],[-5.028,0.162],[0.187,4.117]],"v":[[5.04,-9.089],[13.786,-16.824],[4.354,-24.009],[-4.392,-16.262]],"c":true}},"nm":"P"},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[27.584,13.648],[-46.235,6.85],[-0.786,-7.51],[0,0],[1.76,-17.017],[0.399,0.187],[0,0]],"o":[[-28.893,-26.798],[0,0],[3.718,0.799],[1.185,11.153],[0,0],[-1.734,16.655],[0,0],[0,0]],"v":[[40.134,37.584],[-46.971,-23.884],[34.645,-37.584],[45.786,-26.816],[22.893,-13.317],[36.99,11.335],[25.837,23.686],[40.509,37.171]],"c":true}},"nm":"P"},{"ty":"mm","mm":1,"nm":"M"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[739.797,171.022]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-6.774,-18.801],[53.347,-29.642],[22.905,57.189],[10.717,21.046],[7.548,24.664],[-5.577,18.128],[-25.762,3.531],[-42.281,-67.694]],"o":[[9.956,24.44],[-52.473,25.813],[0,0],[-9.581,-18.826],[-5.551,-18.153],[7.647,-24.839],[18.502,-2.532],[27.633,44.239]],"v":[[103.455,5.926],[70.656,128.999],[-57.956,82.415],[-83.669,14.934],[-116.081,-52.036],[-118.426,-104.285],[-66.839,-146.952],[52.966,-87.118]],"c":true}},"nm":"P"},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.579,-11.477],[-2.658,-6.038],[-0.324,-0.711],[-9.681,-6.201],[-5.589,-1.934],[-4.117,-0.736],[-3.519,-0.174],[-4.715,0.612],[-3.593,1.01],[-1.56,0.562],[-3.406,2.183],[-2.882,2.844],[-3.655,10.355],[-0.724,3.269],[5.489,15.645],[1.41,3.668],[19.05,32.337],[40.684,-11.253],[-18.377,-38.537],[-4.341,-8.795],[-5.177,-12.488]],"o":[[3.144,7.872],[0.337,0.748],[4.529,10.018],[4.828,3.094],[3.88,1.372],[3.431,0.649],[4.703,0.25],[3.668,-0.474],[1.584,-0.449],[3.892,-1.397],[3.406,-2.171],[7.398,-7.298],[1.098,-3.106],[3.443,-15.37],[-1.372,-3.917],[-12.625,-32.923],[-20.822,-35.307],[-47.046,13],[4.728,7.673],[5.951,12.077],[5.54,13.349]],"v":[[-47.676,62.129],[-38.968,83.176],[-37.995,85.347],[-15.988,109.949],[-0.293,117.534],[11.733,120.715],[22.176,121.95],[36.36,121.426],[47.277,119.206],[51.993,117.696],[62.946,112.307],[72.39,104.759],[89.095,77.786],[91.84,68.217],[89.108,20.348],[84.941,8.995],[39.23,-80.094],[-61.013,-130.309],[-93.175,-37.939],[-79.577,-13.05],[-62.872,24.278]],"c":true}},"nm":"P"},{"ty":"mm","mm":1,"nm":"M"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1000.297,322.458]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[1.135,5.564],[0,0],[0.137,0.412],[-7.697,0.848],[-0.25,-0.761],[6.276,-0.212]],"o":[[0,0],[-0.35,-1.385],[7.585,-0.948],[0.025,0.786],[0.399,6.325],[-6.25,0.2]],"v":[[-10.997,-2.502],[-11.109,-2.477],[-11.895,-5.234],[11.085,-7.953],[11.497,-5.62],[1.391,7.753]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[825.886,133.22]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.335,-0.848],[-1.31,-1.36],[4.179,1.772]],"o":[[2.059,0.898],[-2.57,-1.747],[1.933,0.487]],"v":[[-0.05,-0.537],[5.04,2.845],[-5.04,-2.845]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[988.426,233.831]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[6.2,-5.177],[0.038,0],[5.963,-0.399],[0,0],[0,0],[-10.729,4.179],[0,0],[0,0],[0.063,-3.207],[0,0]],"o":[[-0.037,0.012],[-5.277,0.35],[0,0],[9.182,-18.489],[3.256,-24.402],[9.394,-3.668],[0,0],[0.025,3.131],[-32.661,6.088],[-13.699,1.385]],"v":[[-22.799,28.75],[-22.924,28.763],[-39.828,29.885],[-39.866,29.312],[-5.907,12.531],[20.342,-26.217],[37.944,-28.962],[39.842,-28.974],[39.778,-19.456],[6.332,18.022]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1137.792,491.211]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-0.05,-0.537],[5.764,-0.424],[1.31,5.564],[-0.013,0.012],[0.125,0.549],[0,0],[-7.959,0.511]],"o":[[-0.062,0.561],[-0.499,5.664],[-5.752,0.437],[0,0],[-0.05,-0.549],[0,0],[8.234,-0.761],[0,0]],"v":[[12.201,-6.107],[12.189,-4.46],[0.761,6.518],[-11.902,-2.963],[-11.902,-2.988],[-12.164,-4.635],[-12.202,-5.034],[12.151,-6.955]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[872.015,127.993]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.171,-0.112],[-0.287,-5.602],[0,0],[-2.658,6.15],[-1.559,0.449],[-0.4,0],[-1.26,-1.846],[-0.525,-8.745],[0,0]],"o":[[-2.183,0.112],[0,0],[-0.537,-9.332],[0.673,-1.572],[0.399,-0.112],[2.058,0],[4.329,6.263],[0,0],[-0.287,-5.601]],"v":[[-0.324,3.349],[-3.742,13.704],[-9.93,14.066],[-6.574,-10.66],[-2.945,-13.905],[-1.747,-14.066],[3.642,-10.811],[10.468,12.931],[4.116,13.293]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1027.4,408.597]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[4.829,3.094],[0,0],[0.686,5.664],[0,0],[-2.034,1.983],[0.2,-12.014]],"o":[[-5.589,-1.934],[0,0],[0.087,-2.271],[0,0],[1.909,-1.559],[1.035,8.982],[0,0]],"v":[[8.103,14.883],[-7.592,7.299],[-7.354,6.911],[-8.39,-5.664],[-0.967,-6.513],[6.157,-14.883],[8.19,14.622]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[991.9,425.109]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.907,-0.187],[-0.487,14.06],[0,0],[0,0],[-5.077,-20.547]],"o":[[8.147,-2.844],[0,0],[-0.012,0.325],[0,0],[-23.404,1.51]],"v":[[-21.414,15.732],[-10.648,-15.732],[-10.523,-15.732],[-10.549,-15.233],[21.414,12.962]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[916.497,518.59]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[33.46,4.841],[0.112,-1.735],[0,0],[0.062,4.965],[0.087,2.433],[0,0],[-5.514,-1.809],[0,0],[-7.173,-8.546],[7.647,-0.499],[-2.445,0.162],[13.062,-0.387]],"o":[[-0.374,7.049],[0,0],[0.212,-6.201],[-0.025,-2.433],[0,0],[7.773,-0.399],[25.226,8.246],[19.861,-2.433],[-8.109,0.536],[2.358,-0.2],[-6.762,-3.967],[0,0]],"v":[[-43.378,-15.682],[-44.226,-0.773],[-44.351,-0.773],[-44.301,-18.04],[-44.476,-25.326],[-43.079,-25.376],[-23.242,-23.03],[5.502,11.59],[44.476,24.228],[20.76,25.775],[27.983,25.226],[-1.235,19.013]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0,0.698,0.408,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[950.2,503.631]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-4.466,-1.56]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-10.605,-3.156]],"v":[[-18.196,-4.042],[13.792,-7.074],[13.792,-7.061],[18.196,0.512],[-0.668,2.296],[-8.777,3.069],[-1.653,7.074]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[1,0.98,0.941,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[976.306,289.285]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.06,1.996],[0,0],[0,0],[0,0],[0,0],[7.785,-5.066]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.472,-1.098]],"v":[[4.242,1.84],[-3.93,2.613],[-8.334,-4.959],[-8.334,-4.972],[6.75,-6.394],[0.549,6.394]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[1,0.98,0.941,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[998.431,287.183]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":0,"op":80,"st":0},{"ind":23,"ty":4,"nm":"a","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[82.53,196.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.2,0.33],[18.19,-7.67],[10.85,6.16],[-10.17,6.5],[-18.01,1.33],[-1.52,-8.7]],"o":[[-18.61,-2.32],[-24.82,9.99],[-11.12,-7.86],[10.18,-6.5],[18.02,-1.33],[0,4.67]],"v":[[48.855,-5.73],[-7.545,1.83],[-41.825,17.17],[-29.705,-6.04],[18.515,-22],[52.945,-11.41]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[882.434,400.25]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.52,-8.7],[2.2,0.33],[18.19,-7.67],[10.85,6.16],[-10.17,6.5],[-18.01,1.33]],"o":[[0,4.67],[-18.61,-2.32],[-24.82,9.99],[-11.12,-7.86],[10.18,-6.5],[18.02,-1.33]],"v":[[52.945,-11.41],[48.855,-5.73],[-7.545,1.83],[-41.825,17.17],[-29.705,-6.04],[18.515,-22]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[882.434,400.25]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":0,"op":80,"st":0},{"ind":24,"ty":4,"nm":"b","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[106.53,61.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-0.88,24.951],[0,0],[0,0],[25.866,-7.144]],"o":[[0,0],[24.365,5.284],[0,0],[0,0],[-30.822,8.513]],"v":[[-33.188,8.953],[-9.998,-5.137],[12.312,-28.621],[28.163,-27.74],[7.321,20.108]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":1,"ml":10,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[894.218,513.63]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0.189,4.119],[-5.021,0.155],[-0.188,-4.118],[5.022,-0.155]],"o":[[-0.189,-4.119],[5.022,-0.155],[0.189,4.119],[-5.021,0.155]],"v":[[-9.092,0.28],[-0.342,-7.458],[9.092,-0.281],[0.342,7.457]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":1,"ml":10,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.043,0.106,0.204,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[873.947,500.296]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-26.316,0.733],[-22.016,0.44],[7.682,30.609],[0,0],[0,0]],"o":[[1.018,18.715],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[-42.772,-24.016],[-10.703,24.048],[27.606,22.728],[35.091,-24.387],[35.229,-24.662],[-42.766,-24.782]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"fl","c":{"a":0,"k":[0.031,0.322,0.224,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[894.189,510.13]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":0,"op":80,"st":0},{"ind":26,"ty":4,"nm":"a","parent":8,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-337.47,377.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-6.92,6.26],[-0.44,18.57],[2.07,4.77],[-6.4,3.28],[-3.12,-7.87],[0,-14],[10.37,-9.68],[4.19,4.89]],"o":[[6.93,-6.25],[0.6,-15.94],[-2.07,-4.77],[6.4,-3.28],[3.12,7.88],[-0.35,27.66],[-5.48,4.86],[-4.19,-4.89]],"v":[[-14.19,32.465],[7.93,-11.985],[3.24,-36.115],[4.43,-49.915],[20.26,-40.685],[24.46,-13.995],[-4.37,43.805],[-20.27,48.305]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1367.229,174.165]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-3.12,-7.87],[0,-14],[10.37,-9.68],[4.19,4.89],[-6.92,6.26],[-0.44,18.57],[2.07,4.77],[-6.4,3.28]],"o":[[3.12,7.88],[-0.35,27.66],[-5.48,4.86],[-4.19,-4.89],[6.93,-6.25],[0.6,-15.94],[-2.07,-4.77],[6.4,-3.28]],"v":[[20.26,-40.685],[24.46,-13.995],[-4.37,43.805],[-20.27,48.305],[-14.19,32.465],[7.93,-11.985],[3.24,-36.115],[4.43,-49.915]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1367.229,174.165]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":44,"op":50,"st":0},{"ind":27,"ty":4,"nm":"h","parent":9,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-327.47,181.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-6,3.3],[-3.14,1.95],[-1.46,-2.02],[0.11,-0.22],[0,0]],"o":[[1.73,-10.14],[6,-3.3],[3.15,-1.95],[1.4,1.95],[0,0],[0,0]],"v":[[-19.38,13.575],[-2.52,-2.815],[10.09,-11.625],[17.98,-11.425],[17.99,-6.595],[17.98,-6.585]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1356.769,387.245]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-2.49,1.76]],"o":[[8.06,-2.61],[0,0]],"v":[[-7.06,3.495],[7.06,-3.495]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1367.689,384.155]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-2.09,0],[2.34,-3],[0,0]],"o":[[1.87,-1.32],[4.39,0],[0,0],[0,0]],"v":[[-5.37,-1.205],[-0.15,-3.365],[3.03,3.355],[3.03,3.365]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1380.129,381.855]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-3.76,2.29]],"o":[[7.52,-0.89],[0,0]],"v":[[-8.52,2.91],[8.52,-2.91]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1374.639,388.13]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-0.74,0.55],[0.62,-5.61]],"o":[[1.08,-0.65],[3.32,-2.45],[0,0]],"v":[[-5.23,0.79],[-2.5,-1.03],[4.61,3.48]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1388.389,384.42]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-13.18,0.39],[-8.88,-2.35],[-0.13,3],[5.22,-0.13],[0,1.96],[-8.35,-0.26],[-3.79,6.27],[4.31,-1.31],[14.36,-0.13]],"o":[[-1.43,9.4],[13.18,-0.39],[6.78,0.65],[0.13,-3],[-5.22,0.14],[0,-1.96],[8.35,0.26],[3.78,-6.26],[-4.31,1.3],[0,0]],"v":[[-31.135,-3.98],[-15.205,16.25],[6.205,17.56],[14.035,12.99],[6.205,7.5],[-1.895,3.33],[6.855,-1.11],[28.785,-7.9],[24.475,-16.9],[3.985,-10.64]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1368.524,404.8]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[2.34,-3],[-0.74,0.55],[0.62,-5.61],[3.78,-6.26],[8.35,0.26],[0,-1.96],[-5.22,0.14],[0.13,-3],[6.78,0.65],[13.18,-0.39],[-1.43,9.4],[-6,3.3],[-3.14,1.95],[-1.46,-2.02],[0.11,-0.22],[-2.09,0]],"o":[[1.08,-0.65],[3.32,-2.45],[4.31,-1.31],[-3.79,6.27],[-8.35,-0.26],[0,1.96],[5.22,-0.13],[-0.13,3],[-8.88,-2.35],[-13.18,0.39],[1.73,-10.14],[6,-3.3],[3.15,-1.95],[1.4,1.95],[1.87,-1.32],[4.39,0]],"v":[[14.635,-13.13],[17.365,-14.95],[24.475,-10.44],[28.785,-1.44],[6.855,5.35],[-1.895,9.79],[6.205,13.96],[14.035,19.45],[6.205,24.02],[-15.205,22.71],[-31.135,2.48],[-14.275,-13.91],[-1.665,-22.72],[6.225,-22.52],[6.235,-17.69],[11.455,-19.85]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1368.523,398.34]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":50,"op":60,"st":0},{"ind":28,"ty":4,"nm":"a","parent":10,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-307.47,72.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[-5.08,2.86]],"o":[[0,0],[4.98,3.32],[0,0]],"v":[[-7.525,-2.78],[-7.515,-2.78],[7.525,-0.08]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1343.894,447.37]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-5.68,1.63]],"o":[[4.65,3.8],[0,0]],"v":[[-7.74,-2.515],[7.74,0.885]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1343.679,461.675]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-6.15,2.36]],"o":[[4.61,4.25],[0,0]],"v":[[-7.99,-2.95],[7.99,0.59]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1344.369,432.32]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-0.72,-16.11]],"o":[[-0.14,-13.51],[0,0]],"v":[[-7.92,5.085],[8.06,8.425]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1343.359,408.045]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-2.45,24.03],[-0.14,5.24],[0.14,4.94],[0.47,5.65]],"o":[[11.89,-18.09],[0.5,-4.92],[0.13,-4.67],[-0.16,-5.31],[0,0]],"v":[[-11.115,54.29],[10.025,-8.2],[10.985,-23.44],[10.955,-37.85],[10.015,-54.29]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1341.404,470.76]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-1.45,24.25],[-0.02,5.15],[0.17,5.37],[0.3,5.73]],"o":[[12.33,-18.83],[0.28,-4.59],[0.01,-4.79],[-0.16,-5.12],[0,0]],"v":[[-9.785,53.19],[9.335,-7.16],[9.775,-21.73],[9.535,-36.94],[8.835,-53.19]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1326.604,466.32]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-5.68,1.63],[0,0],[11.89,-18.09],[0,0],[-1.45,24.25]],"o":[[0,0],[-2.45,24.03],[0,0],[12.33,-18.83],[4.65,3.8]],"v":[[17.295,-29.545],[17.305,-29.545],[-3.835,32.945],[-17.305,27.405],[1.815,-32.945]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1334.124,492.105]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-5.08,2.86],[0,0],[0.5,-4.92],[0,0],[4.65,3.8],[-0.02,5.15]],"o":[[0,0],[-0.14,5.24],[0,0],[-5.68,1.63],[0.28,-4.59],[4.98,3.32]],"v":[[7.255,-7.1],[8.225,-7.07],[7.265,8.17],[7.255,8.17],[-8.225,4.77],[-7.785,-9.8]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1344.164,454.39]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.72,-16.11],[-0.16,-5.31],[4.61,4.25],[0,0],[0.3,5.73]],"o":[[0.47,5.65],[-6.15,2.36],[0,0],[-0.16,-5.12],[-0.14,-13.51]],"v":[[7.59,-0.975],[8.53,15.465],[-7.45,11.925],[-7.69,11.935],[-8.39,-4.315]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1343.828,417.445]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-6.15,2.36],[0.13,-4.67],[0,0],[4.98,3.32],[0.17,5.37],[0,0]],"o":[[0.14,4.94],[0,0],[-5.08,2.86],[0.01,-4.79],[0,0],[4.61,4.25]],"v":[[8.03,-6.85],[8.06,7.56],[7.09,7.53],[-7.95,4.83],[-8.19,-10.38],[-7.95,-10.39]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.98,0.941,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1344.329,439.76]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":50,"op":60,"st":0},{"ind":29,"ty":4,"nm":"a","parent":11,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-236.47,7.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-8.38,11.87],[-5.84,-2.17],[7.86,-10.82],[21.86,-3.46],[1.34,4.81]],"o":[[30.14,-14.58],[6.71,-8.68],[5.85,2.17],[-15.05,21.51],[-3.83,0.29],[-1.33,-4.81]],"v":[[-34.315,26.33],[25.055,-29.36],[39.485,-38.52],[35.535,-18.38],[-34.685,40.4],[-44.005,35.65]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1289.524,551.75]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-5.84,-2.17],[7.86,-10.82],[21.86,-3.46],[1.34,4.81],[0,0],[-8.38,11.87]],"o":[[5.85,2.17],[-15.05,21.51],[-3.83,0.29],[-1.33,-4.81],[30.14,-14.58],[6.71,-8.68]],"v":[[39.485,-38.52],[35.535,-18.38],[-34.685,40.4],[-44.005,35.65],[-34.315,26.33],[25.055,-29.36]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1289.524,551.75]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":50,"op":60,"st":0}]},{"id":"comp_3","nm":"l","fr":24,"layers":[{"ind":1,"ty":3,"nm":"l","parent":2,"sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[10]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":7,"s":[19]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":8,"s":[19]},{"i":{"x":[0.593],"y":[0.843]},"o":{"x":[0.175],"y":[0.072]},"t":9,"s":[19]},{"i":{"x":[0.698],"y":[1]},"o":{"x":[0.351],"y":[1.186]},"t":10,"s":[6.793]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[4]},{"t":15,"s":[-34]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":1,"s":[-79,97,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":4,"s":[-79,97,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":7,"s":[-79,97,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":8,"s":[-79,97,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.593,"y":0.593},"o":{"x":0.167,"y":0.167},"t":9,"s":[-79,97,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.698,"y":0.698},"o":{"x":0.351,"y":0.351},"t":10,"s":[-79,97,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":12,"s":[-79,97,0],"to":[0,0,0],"ti":[0,0,0]},{"t":15,"s":[-79,97,0]}],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":1,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":4,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.593,0.593,0.593],"y":[1,1,1]},"o":{"x":[0.175,0.175,0.175],"y":[0,0,0]},"t":9,"s":[100,100,100]},{"i":{"x":[0.698,0.698,0.698],"y":[1,1,1]},"o":{"x":[0.351,0.351,0.351],"y":[0,0,0]},"t":10,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":12,"s":[100,100,100]},{"t":15,"s":[100,100,100]}],"l":2}},"ao":0,"ip":0,"op":16,"st":0},{"ind":2,"ty":3,"nm":"l","parent":3,"sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[-6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[6]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":7,"s":[11]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[39]},{"i":{"x":[0.593],"y":[1]},"o":{"x":[0.175],"y":[0]},"t":9,"s":[-5]},{"i":{"x":[0.698],"y":[1]},"o":{"x":[0.351],"y":[0]},"t":10,"s":[-5]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[-5]},{"t":15,"s":[-14]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":0.667},"o":{"x":0.167,"y":0.167},"t":1,"s":[10,135,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":4,"s":[10,135,0],"to":[-0.206,-0.114,0],"ti":[0.564,0.209,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":7,"s":[8.763,134.314,0],"to":[-0.564,-0.209,0],"ti":[-0.206,-0.114,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":8,"s":[6.619,133.749,0],"to":[0.206,0.114,0],"ti":[-0.564,-0.209,0]},{"i":{"x":0.593,"y":0.593},"o":{"x":0.167,"y":0.167},"t":9,"s":[10,135,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.698,"y":0.698},"o":{"x":0.351,"y":0.351},"t":10,"s":[10,135,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0.333},"t":12,"s":[10,135,0],"to":[0,0,0],"ti":[0,0,0]},{"t":15,"s":[10,135,0]}],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":1,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":4,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.593,0.593,0.593],"y":[1,1,1]},"o":{"x":[0.175,0.175,0.175],"y":[0,0,0]},"t":9,"s":[100,100,100]},{"i":{"x":[0.698,0.698,0.698],"y":[1,1,1]},"o":{"x":[0.351,0.351,0.351],"y":[0,0,0]},"t":10,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":12,"s":[100,100,100]},{"t":15,"s":[100,100,100]}],"l":2}},"ao":0,"ip":0,"op":16,"st":0},{"ind":3,"ty":3,"nm":"l","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":1,"s":[5]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[16]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":7,"s":[16]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"t":8,"s":[-54]},{"i":{"x":[0.593],"y":[0.843]},"o":{"x":[0.175],"y":[0.072]},"t":9,"s":[-65]},{"i":{"x":[0.698],"y":[1]},"o":{"x":[0.351],"y":[1.186]},"t":10,"s":[-93.482]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[-100]},{"t":15,"s":[-81]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":1,"s":[993,865,0],"to":[-4,-9.5,0],"ti":[-3.5,-10,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":4,"s":[969,808,0],"to":[3.5,10,0],"ti":[-3.833,-15.833,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":7,"s":[1014,925,0],"to":[3.833,15.833,0],"ti":[-1.333,7.667,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":8,"s":[992,903,0],"to":[1.333,-7.667,0],"ti":[-1.5,15,0]},{"i":{"x":0.593,"y":0.843},"o":{"x":0.167,"y":0.167},"t":9,"s":[1022,879,0],"to":[1.036,-10.364,0],"ti":[6.778,15.785,0]},{"i":{"x":0.698,"y":1},"o":{"x":0.296,"y":1},"t":10,"s":[1009.1,821.8,0],"to":[-3.032,-7.061,0],"ti":[2.112,-2.266,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.333,"y":0},"t":12,"s":[1001,813,0],"to":[-6.833,7.333,0],"ti":[3.333,-18.333,0]},{"t":15,"s":[981,923,0]}],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":1,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":4,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":7,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":8,"s":[100,100,100]},{"i":{"x":[0.593,0.593,0.593],"y":[1,1,1]},"o":{"x":[0.175,0.175,0.175],"y":[0,0,0]},"t":9,"s":[100,100,100]},{"i":{"x":[0.698,0.698,0.698],"y":[1,1,1]},"o":{"x":[0.351,0.351,0.351],"y":[0,0,0]},"t":10,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":12,"s":[100,100,100]},{"t":15,"s":[100,100,100]}],"l":2}},"ao":0,"ip":0,"op":16,"st":0},{"ind":4,"ty":3,"nm":"l","parent":5,"sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":0},"p":{"a":0,"k":[4,171,0],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"ip":0,"op":16,"st":0},{"ind":5,"ty":3,"nm":"l","parent":6,"sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":0},"p":{"a":0,"k":[114,137,0],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"ip":0,"op":16,"st":0},{"ind":6,"ty":3,"nm":"l","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":2},"p":{"a":0,"k":[1005,948,0],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"ip":0,"op":16,"st":0},{"ind":7,"ty":4,"nm":"l","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[353.53,-209.39,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-3.87],[3.87,0],[0,3.88],[-3.87,0]],"o":[[0,3.88],[-3.87,0],[0,-3.87],[3.87,0]],"v":[[7.01,0],[0,7.01],[-7.01,0],[0,-7.01]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[653.369,810.09]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[3.57,-4.41],[-3.65,-27.85],[-5.48,0],[0,0]],"o":[[-4.08,-2.78],[-3.57,4.42],[4.7,24.38],[5.48,0],[0,0]],"v":[[9.305,-42.03],[-4.715,-37.92],[-12.695,11.43],[10.865,44.81],[16.345,40.13]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[638.504,835.55]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-3.67,6.05]],"o":[[5.61,2.49],[0,0]],"v":[[-8.92,1.38],[8.92,-3.87]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[660.379,853.62]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-5,3.48]],"o":[[5.97,3.15],[0,0]],"v":[[-9.235,-0.935],[9.235,-2.215]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[657.774,844.495]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-6.18,3.71],[-0.03,0.02]],"o":[[3.23,2.81],[0.03,-0.01],[0,0]],"v":[[-8.855,-2.215],[8.765,-1.495],[8.855,-1.545]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[657.064,833.335]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[4.13,-1.55],[3.22,-8.76],[-3.27,-12.43],[-8.88,-1.56],[-3.14,2.01],[2.23,7.26],[0.41,1.22],[0.21,4.39],[-1.83,3.66]],"o":[[-6.1,0.15],[-4.96,1.85],[-5.89,16.08],[2.85,11.54],[3.48,0.62],[8.64,-5.55],[-0.63,-2.07],[-0.94,-3.96],[-0.29,-6.33],[0,0]],"v":[[11.25,-42.18],[-3.93,-40.41],[-15.9,-25.83],[-17.53,19.4],[3.04,41.56],[13.15,39.62],[17.49,15.64],[15.8,10.61],[14.02,-2.27],[16.15,-18.31]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[651.809,834.11]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-8.88,-1.56],[0,0],[5.48,0],[4.7,24.38],[-3.57,4.42],[-4.08,-2.78],[0,0],[3.22,-8.76],[-3.27,-12.43]],"o":[[0,0],[0,0],[-5.48,0],[-3.65,-27.85],[3.57,-4.41],[0,0],[-4.96,1.85],[-5.89,16.08],[2.85,11.54]],"v":[[16.345,40.12],[16.345,40.13],[10.865,44.81],[-12.695,11.43],[-4.715,-37.92],[9.305,-42.03],[9.375,-41.85],[-2.595,-27.27],[-4.225,17.96]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[638.504,835.55]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-3.87,0],[0,-3.87],[3.87,0],[0,3.88]],"o":[[3.87,0],[0,3.88],[-3.87,0],[0,-3.87]],"v":[[0,-7.01],[7.01,0],[0,7.01],[-7.01,0]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[653.369,810.09]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,3.88],[3.87,0],[0,-3.87],[-3.87,0]],"o":[[0,-3.87],[-3.87,0],[0,3.88],[3.87,0]],"v":[[8.57,-24.02],[1.56,-31.03],[-5.45,-24.02],[1.56,-17.01]],"c":true}},"nm":"P"},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.29,-6.33],[-0.94,-3.96],[-0.63,-2.07],[8.64,-5.55],[3.48,0.62],[2.85,11.54],[-5.89,16.08],[-4.96,1.85],[-6.1,0.15],[0,0]],"o":[[0.21,4.39],[0.41,1.22],[2.23,7.26],[-3.14,2.01],[-8.88,-1.56],[-3.27,-12.43],[3.22,-8.76],[4.13,-1.55],[0,0],[-1.83,3.66]],"v":[[14.02,-2.27],[15.8,10.61],[17.49,15.64],[13.15,39.62],[3.04,41.56],[-17.53,19.4],[-15.9,-25.83],[-3.93,-40.41],[11.25,-42.18],[16.15,-18.31]],"c":true}},"nm":"P"},{"ty":"mm","mm":1,"nm":"M"},{"ty":"fl","c":{"a":0,"k":[0.996,0.839,0.027,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[651.809,834.11]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":1,"op":16,"st":0},{"ind":8,"ty":4,"nm":"l","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[224.53,-162.39,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-1.28,-2.57]],"o":[[-0.74,3.44],[0,0]],"v":[[-0.14,-4.455],[0.88,4.455]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[673.919,796.385]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0.82,-11.57]],"o":[[11.77,-3.09],[0,0]],"v":[[-9.94,-3.275],[9.12,6.365]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[684.739,804.115]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-5.04,-4.79]],"o":[[1.34,6.88],[0,0]],"v":[[-4.355,-8.905],[4.355,8.905]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[746.554,785.915]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[1.55,7.69]],"o":[[-3.12,-3.73],[0,0]],"v":[[4.335,9.085],[-4.335,-9.085]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[738.144,789.425]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-4.42,-5.91]],"o":[[0.61,6.84],[0,0]],"v":[[-3.86,-9.71],[3.86,9.71]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[730.019,792.67]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-4.9,-5.76]],"o":[[0.83,5.76],[0,0]],"v":[[-4.185,-8.42],[4.185,8.42]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[754.804,781.74]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0.04,-0.04],[14.57,-7.41],[2.97,-1.28],[0,0],[2.62,-1.01],[0.31,-0.11],[2.4,-0.81],[26.95,-1.17],[3.58,-0.11],[-2.74,-8.72],[-5.32,2.37],[-16.13,1.82],[-1.12,0.14],[-12.94,4.79],[-3.1,1.39],[-1.86,0.9],[-0.99,0.52],[-2.74,1.67],[-5.43,6.05]],"o":[[-0.04,0.04],[-11.85,10.76],[-2.59,1.32],[0,0],[-2.33,1.01],[-0.32,0.11],[-2.73,0.94],[-15.05,5.03],[-3.1,0.14],[-6.17,0.42],[2.73,8.72],[4.17,-4.04],[1.03,-0.12],[14.02,-1.72],[2.74,-1.01],[1.71,-0.76],[0.97,-0.47],[2.65,-1.38],[18.46,-11.15],[0,0]],"v":[[58.025,-35.74],[57.895,-35.62],[22.145,-9.36],[13.825,-5.46],[13.825,-5.45],[6.405,-2.42],[5.455,-2.09],[-2.195,0.53],[-54.595,9.14],[-64.605,9.5],[-71.285,25],[-60.395,33.37],[-34.495,28.05],[-31.265,27.66],[5.525,19.95],[14.255,16.37],[19.615,13.88],[22.565,12.4],[30.685,7.81],[74.025,-25.71]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[728.354,782.43]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.28,-2.57],[0.82,-11.57],[4.17,-4.04],[2.73,8.72],[-6.17,0.42],[-3.1,0.14],[0,0]],"o":[[11.77,-3.09],[-16.13,1.82],[-5.32,2.37],[-2.74,-8.72],[3.58,-0.11],[0,0],[-0.74,3.44]],"v":[[0.295,-4.03],[19.355,5.61],[-6.545,10.93],[-17.435,2.56],[-10.755,-12.94],[-0.745,-13.3],[-0.725,-12.94]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0.996,0.839,0.027,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[674.504,804.87]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-15.05,5.03],[-4.42,-5.91],[14.02,-1.72],[1.03,-0.12],[11.77,-3.09],[-0.74,3.44],[0,0]],"o":[[0.61,6.84],[-12.94,4.79],[-1.12,0.14],[0.82,-11.57],[-1.28,-2.57],[0,0],[26.95,-1.17]],"v":[[22.7,-13.76],[30.42,5.66],[-6.37,13.37],[-9.6,13.76],[-28.66,4.12],[-29.68,-4.79],[-29.7,-5.15]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.98,0.941,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[703.459,796.72]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-3.12,-3.73],[0,0],[2.74,-1.01],[0.61,6.84],[-2.73,0.94]],"o":[[0,0],[-3.1,1.39],[-4.42,-5.91],[2.4,-0.81],[1.55,7.69]],"v":[[8.095,7.15],[8.225,7.44],[-0.505,11.02],[-8.225,-8.4],[-0.575,-11.02]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[734.384,791.36]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-5.04,-4.79],[0,0],[0.97,-0.47],[1.71,-0.76],[0,0],[1.55,7.69],[-0.32,0.11],[-2.33,1.01],[0,0]],"o":[[0,0],[-0.99,0.52],[-1.86,0.9],[0,0],[-3.12,-3.73],[0.31,-0.11],[2.62,-1.01],[0,0],[1.34,6.88]],"v":[[8.545,6.93],[8.555,6.94],[5.605,8.42],[0.245,10.91],[0.115,10.62],[-8.555,-7.55],[-7.605,-7.88],[-0.185,-10.91],[-0.165,-10.88]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.98,0.941,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[742.364,787.89]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.9,-5.76],[0,0],[2.65,-1.38],[0,0],[1.34,6.88],[0,0],[0,0],[-2.59,1.32],[0,0]],"o":[[0,0],[-2.74,1.67],[0,0],[-5.04,-4.79],[0,0],[0,0],[2.97,-1.28],[0,0],[0.83,5.76]],"v":[[8.38,6.21],[8.43,6.29],[0.31,10.88],[0.3,10.87],[-8.41,-6.94],[-8.43,-6.97],[-8.43,-6.98],[-0.11,-10.88],[0.01,-10.63]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[750.609,783.95]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[18.46,-11.15],[0,0],[0.83,5.76],[0,0],[-11.85,10.76]],"o":[[0,0],[0,0],[-5.43,6.05],[0,0],[-4.9,-5.76],[0,0],[14.57,-7.41],[0,0]],"v":[[9.9,-21.575],[25.98,-11.945],[25.9,-11.805],[-17.44,21.715],[-17.49,21.635],[-25.86,4.795],[-25.98,4.545],[9.77,-21.715]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[776.479,768.525]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":1,"op":16,"st":0},{"ind":9,"ty":4,"nm":"l","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[184.53,-77.39,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[4.88,0],[0.42,-9.78],[14.11,-21.77],[-6.21,-7.49],[-6.67,6.4],[-8.91,14.32],[0.72,10.97]],"o":[[-7.79,0],[-0.42,9.78],[-14.11,21.78],[4.01,5.64],[5.38,-4.95],[16.59,-28.29],[-0.72,-10.97]],"v":[[20.42,-52.47],[10.32,-36.16],[-8.19,13.2],[-25.76,46.83],[-8.19,45.01],[14.51,14.79],[31.25,-39.33]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[810.569,711.71]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.72,-10.97],[16.59,-28.29],[5.38,-4.95],[4.01,5.64],[-14.11,21.78],[-0.42,9.78],[-7.79,0]],"o":[[0.72,10.97],[-8.91,14.32],[-6.67,6.4],[-6.21,-7.49],[14.11,-21.77],[0.42,-9.78],[4.88,0]],"v":[[31.25,-39.33],[14.51,14.79],[-8.19,45.01],[-25.76,46.83],[-8.19,13.2],[10.32,-36.16],[20.42,-52.47]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[810.569,711.71]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":1,"op":16,"st":0},{"ind":10,"ty":4,"nm":"l","parent":4,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-272.47,-255.39,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,-4.09],[4.08,0],[0,4.09],[-4.09,0]],"o":[[0,4.09],[-4.09,0],[0,-4.09],[4.08,0]],"v":[[7.4,0],[0,7.4],[-7.4,0],[0,-7.4]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1292.479,858.84]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[2.71,4.93]],"o":[[1.52,-7.73],[0,0]],"v":[[0.135,9.5],[-1.655,-9.5]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1331.114,855.78]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[1.42,-7.86]],"o":[[1.88,4.97],[0,0]],"v":[[-1.335,-9.375],[-0.085,9.375]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1341.204,854.165]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[1.89,6.41]],"o":[[1.97,-6.4],[0,0]],"v":[[-1.005,9.605],[-0.885,-9.605]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1320.884,857.185]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.27,-4.65],[-25.22,0.66],[-4.16,4.3],[3.44,1.87]],"o":[[-3.96,1.59],[7.27,4.64],[24.66,0.06],[4.15,-4.3],[0,0]],"v":[[-44.125,-8.175],[-40.285,3.765],[1.895,10.145],[43.935,-1.525],[43.935,-10.805]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1315.384,874.345]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-2.79,-6.43],[-5.04,-2.26],[-12.46,5.79],[-1.81,3.86],[0.59,3.54],[11.85,-1.75],[2.06,-0.35],[3.07,-0.26],[5.42,0.88]],"o":[[-3.45,6.89],[1.28,2.99],[15.88,7.12],[6.96,-3.23],[1.45,-3.06],[-1.33,-8.01],[-2.43,0.36],[-3.38,0.56],[-4.14,0.35],[0,0]],"v":[[-38.64,-17.155],[-43.44,3.815],[-34.34,11.785],[31.99,11.785],[44.62,1.185],[45.64,-8.695],[21.45,-17.155],[14.76,-16.075],[5.3,-14.775],[-8.52,-15.375]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1314.698,862.355]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.09,0],[0,-4.09],[4.08,0],[0,4.09]],"o":[[4.08,0],[0,4.09],[-4.09,0],[0,-4.09]],"v":[[0,-7.4],[7.4,0],[0,7.4],[-7.4,0]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1292.479,858.84]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.81,3.86],[4.15,-4.3],[24.66,0.06],[7.27,4.64],[-3.96,1.59],[-5.04,-2.26],[-12.46,5.79]],"o":[[3.44,1.87],[-4.16,4.3],[-25.22,0.66],[-7.27,-4.65],[1.28,2.99],[15.88,7.12],[6.96,-3.23]],"v":[[43.935,-10.805],[43.935,-1.525],[1.895,10.145],[-40.285,3.765],[-44.125,-8.175],[-35.025,-0.205],[31.305,-0.205]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1315.384,874.345]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,4.09],[4.08,0],[0,-4.09],[-4.09,0]],"o":[[0,-4.09],[-4.09,0],[0,4.09],[4.08,0]],"v":[[-14.82,-3.515],[-22.22,-10.915],[-29.62,-3.515],[-22.22,3.885]],"c":true}},"nm":"P"},{"ind":1,"ty":"sh","ks":{"a":0,"k":{"i":[[-3.38,0.56],[-2.43,0.36],[-1.33,-8.01],[1.45,-3.06],[6.96,-3.23],[15.88,7.12],[1.28,2.99],[-3.45,6.89],[0,0],[-4.14,0.35]],"o":[[2.06,-0.35],[11.85,-1.75],[0.59,3.54],[-1.81,3.86],[-12.46,5.79],[-5.04,-2.26],[-2.79,-6.43],[0,0],[5.42,0.88],[3.07,-0.26]],"v":[[14.76,-16.075],[21.45,-17.155],[45.64,-8.695],[44.62,1.185],[31.99,11.785],[-34.34,11.785],[-43.44,3.815],[-38.64,-17.155],[-8.52,-15.375],[5.3,-14.775]],"c":true}},"nm":"P"},{"ty":"mm","mm":1,"nm":"M"},{"ty":"fl","c":{"a":0,"k":[0.996,0.839,0.027,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1314.699,862.355]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":0,"op":1,"st":0},{"ind":11,"ty":4,"nm":"l","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-318.47,-134.39,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-13.78,-0.14],[0,0]],"o":[[5.39,4.71],[0,0],[0,0]],"v":[[-11.665,-3.32],[11.595,3.32],[11.665,3.32]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1330.394,784.82]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-10.94,-0.02]],"o":[[4.88,4.66],[0,0]],"v":[[-11.595,-3.715],[11.595,3.715]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1327.094,792.145]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-10.49,0.76]],"o":[[4.87,6.32],[0,0]],"v":[[-11.525,-4.55],[11.525,3.79]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1323.494,799.4]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-9.69,1.43]],"o":[[6.2,3.77],[0,0]],"v":[[-11.62,-2.91],[11.62,1.48]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1333.009,778.23]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-5.89,-2.26]],"o":[[3.16,2.26],[0,0]],"v":[[-6.79,-3.385],[6.79,3.385]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1289.779,838.855]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-6.64,-7.83]],"o":[[7.52,-12.63],[0,0]],"v":[[-10.71,9.56],[10.71,-1.73]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1307.279,832.68]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[1.27,-12.72],[2.21,-6.83],[0.92,-2.19],[1.25,-2.43],[1.32,-2.24],[2.29,-3.36],[5.58,-7.23],[0.9,-1.82],[-8.27,-0.63],[-10.81,13.47],[-4.47,6.49],[-5.06,9.57],[-1.13,2.41],[-0.95,2.49],[-0.61,2.63],[7.6,26.4]],"o":[[3.32,13.67],[-0.59,5.85],[-0.65,2.01],[-0.91,2.2],[-1.04,2.05],[-1.74,2.97],[-9.12,13.39],[-3.56,4.62],[-2.32,4.7],[8.27,0.64],[3.16,-3.93],[5.75,-8.36],[1.31,-2.47],[1.24,-2.65],[1.13,-2.97],[4.77,-20.67],[0,0]],"v":[[10.655,-65.52],[13.215,-33.08],[9.565,-14.48],[7.235,-8.19],[4.005,-1.26],[0.475,5.16],[-5.545,14.63],[-28.505,45.78],[-35.435,55.51],[-31.315,70.61],[-5.315,57.29],[6.495,41.26],[23.525,13.5],[27.195,6.17],[30.495,-1.55],[33.135,-9.98],[31.985,-71.25]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1311.494,789.69]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-5.89,-2.26],[-6.64,-7.83],[3.16,-3.93],[8.27,0.64],[-2.32,4.7],[-3.56,4.62]],"o":[[7.52,-12.63],[-4.47,6.49],[-10.81,13.47],[-8.27,-0.63],[0.9,-1.82],[3.16,2.26]],"v":[[1.62,0.21],[23.04,-11.08],[11.23,4.95],[-14.77,18.27],[-18.89,3.17],[-11.96,-6.56]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0.996,0.839,0.027,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1294.948,842.03]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.74,2.97],[-10.49,0.76],[5.75,-8.36],[7.52,-12.63],[3.16,2.26],[-9.12,13.39]],"o":[[4.87,6.32],[-5.06,9.57],[-6.64,-7.83],[-5.89,-2.26],[5.58,-7.23],[2.29,-3.36]],"v":[[2.965,-23.695],[26.015,-15.355],[8.985,12.405],[-12.435,23.695],[-26.015,16.925],[-3.055,-14.225]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.98,0.941,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1309.004,818.545]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-10.94,-0.02],[1.31,-2.47],[4.87,6.32],[-1.04,2.05]],"o":[[-1.13,2.41],[-10.49,0.76],[1.32,-2.24],[4.88,4.66]],"v":[[13.36,-0.33],[9.69,7],[-13.36,-1.34],[-9.83,-7.76]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1325.329,796.19]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.78,-0.14],[1.24,-2.65],[4.88,4.66],[-0.91,2.2]],"o":[[-0.95,2.49],[-10.94,-0.02],[1.25,-2.43],[5.39,4.71]],"v":[[13.245,-0.54],[9.945,7.18],[-13.245,-0.25],[-10.015,-7.18]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.98,0.941,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1328.744,788.68]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-9.69,1.43],[1.13,-2.97],[5.39,4.71],[-0.65,2.01],[0,0]],"o":[[-0.61,2.63],[-13.78,-0.14],[0.92,-2.19],[0,0],[6.2,3.77]],"v":[[12.95,-1.965],[10.31,6.465],[-12.95,-0.175],[-10.62,-6.465],[-10.29,-6.355]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1331.679,781.675]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[4.77,-20.67],[6.2,3.77],[0,0],[-0.59,5.85],[3.32,13.67]],"o":[[7.6,26.4],[-9.69,1.43],[0,0],[2.21,-6.83],[1.27,-12.72],[0,0]],"v":[[7.41,-31.35],[8.56,29.92],[-14.68,25.53],[-15.01,25.42],[-11.36,6.82],[-13.92,-25.62]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1336.069,749.79]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":0,"op":1,"st":0},{"ind":12,"ty":4,"nm":"l","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":-8},"p":{"a":0,"k":[-294.274,-127.049,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,176,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[4.86,18.12]],"o":[[4.86,18.11],[0,0]],"v":[[-13.095,-6.19],[8.235,-11.92]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1335.244,730.36]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-9.81,-9.55]],"o":[[-10.99,-7.08],[0,0]],"v":[[13.125,-2.715],[-3.315,9.795]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1267.284,637.015]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[27.65,20.4]],"o":[[-13.33,-35.3],[0,0]],"v":[[31.535,42.07],[-31.535,-42.07]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1311.944,676.37]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[23.79,22.12]],"o":[[-12.16,-31.02],[0,0]],"v":[[29.09,38.68],[-29.09,-38.68]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1293.059,685.49]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-13.33,-35.3],[4.86,18.11],[23.79,22.12],[-10.99,-7.08]],"o":[[4.86,18.12],[-12.16,-31.02],[-9.81,-9.55],[27.65,20.4]],"v":[[42.23,33.69],[20.9,39.42],[-37.28,-37.94],[-20.84,-50.45]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1301.249,684.75]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":0,"op":1,"st":0}]},{"id":"comp_4","nm":"u","fr":24,"layers":[{"ind":1,"ty":3,"nm":"h","parent":2,"sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":0},"p":{"a":0,"k":[82.5,-21.5,0],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":2,"ty":3,"nm":"a","parent":3,"sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[-10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[-10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":28,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":32,"s":[-10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":44,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":48,"s":[-10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":52,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":56,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[-10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[10]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":76,"s":[0]},{"t":80,"s":[-10]}]},"p":{"a":0,"k":[148,23,0],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":3,"ty":3,"nm":"a","sr":1,"ks":{"o":{"a":0,"k":0},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[89]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":4,"s":[152]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":8,"s":[89]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":12,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":16,"s":[89]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":20,"s":[152]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":24,"s":[89]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":28,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":32,"s":[89]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36,"s":[152]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":40,"s":[89]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":44,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":48,"s":[89]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":52,"s":[152]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":56,"s":[89]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":64,"s":[89]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":68,"s":[152]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":72,"s":[89]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":76,"s":[0]},{"t":80,"s":[89]}]},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[1132,358.5,0],"to":[0,-0.833,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":4,"s":[1132,353.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":8,"s":[1132,358.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":12,"s":[1132,353.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":16,"s":[1132,358.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":20,"s":[1132,353.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":24,"s":[1132,358.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":28,"s":[1132,353.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":32,"s":[1132,358.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":36,"s":[1132,353.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":40,"s":[1132,358.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":44,"s":[1132,353.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":48,"s":[1132,358.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":52,"s":[1132,353.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":56,"s":[1132,358.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[1132,353.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":64,"s":[1132,358.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":68,"s":[1132,353.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":72,"s":[1132,358.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":76,"s":[1132,353.5,0],"to":[0,0,0],"ti":[0,-0.833,0]},{"t":80,"s":[1132,358.5,0]}],"l":2},"a":{"a":0,"k":[50,50,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"ip":0,"op":80,"st":0},{"ind":4,"ty":4,"nm":"h","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-246.97,338.11,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[3.01,-3.81],[0,0]],"o":[[-4.07,-4.27],[-3.01,3.81],[0,0]],"v":[[7.035,-2.385],[-4.025,-1.525],[-6.335,6.655]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1256.284,224.005]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-2.79,2.34]],"o":[[2.34,0.83],[0,0]],"v":[[-3.33,-0.2],[3.33,-1.17]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1265.639,242.16]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[2.86,-2.46],[0.64,-1.17],[-0.49,-1.89],[0,0]],"o":[[-4,-3.97],[-0.96,0.83],[-2.55,4.64],[0,0],[0,0]],"v":[[7.95,-3.705],[-2.97,-4.695],[-5.4,-1.655],[-7.37,7.665],[-7.37,7.675]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1266.479,226.535]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0.01,0],[3.34,-2.1],[0.87,-1.23],[-2.19,-4.06],[-0.58,-0.48],[-0.18,0.28],[0,0]],"o":[[0,0],[-2.89,-4.76],[-1.23,0.76],[-2.76,3.95],[0.35,0.67],[4.39,3.17],[0,0],[0,0]],"v":[[9.105,-7.665],[9.095,-7.675],[-1.395,-10.435],[-4.595,-7.375],[-6.915,7.625],[-5.515,9.365],[2.055,7.855],[2.065,7.845]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1275.884,233.365]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-2.43,4.27],[-0.06,0.13],[2.7,1.95]],"o":[[2.7,2.32],[0.07,-0.12],[1.29,-2.82],[0,0]],"v":[[-7.1,1.37],[5.62,1.74],[5.81,1.37],[2.42,-6.01]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1256.689,240.22]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[1.7,0.57],[1.23,0.04],[1.21,-6.18],[-12.11,-3.78],[-8.62,14.11],[4.17,1.79],[1.87,-0.89],[0.96,-3.7],[-0.39,-1.74],[-1,-0.54],[-0.59,7.74]],"o":[[-1.85,-1.34],[-1,-0.33],[-3.88,-0.14],[-1.59,8.15],[13.19,3.27],[7.15,-13.9],[-1.66,-0.71],[-2.83,1.35],[-0.87,3.36],[0.33,1.46],[2.18,1.2],[0,0]],"v":[[-9.74,-9.17],[-15.48,-12.1],[-18.9,-12.71],[-28.39,-4.96],[-11.12,15.5],[22.83,4.38],[21.64,-18.06],[16.13,-17.68],[9.73,-9.72],[9.09,-2.15],[11.12,0.8],[19.73,-7.63]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1268.849,243.37]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.18,0.28],[-0.87,3.36],[-2.83,1.35],[-1.66,-0.71],[7.15,-13.9],[13.19,3.27],[-1.59,8.15],[-3.88,-0.14],[-1,-0.33],[-1.85,-1.34],[0,0],[1.29,-2.82],[0.07,-0.12],[-2.79,2.34],[-0.58,-0.48]],"o":[[-0.39,-1.74],[0.96,-3.7],[1.87,-0.89],[4.17,1.79],[-8.62,14.11],[-12.11,-3.78],[1.21,-6.18],[1.23,0.04],[1.7,0.57],[0,0],[2.7,1.95],[-0.06,0.13],[2.34,0.83],[0.35,0.67],[4.39,3.17]],"v":[[9.09,-2.15],[9.73,-9.72],[16.13,-17.68],[21.64,-18.06],[22.83,4.38],[-11.12,15.5],[-28.39,-4.96],[-18.9,-12.71],[-15.48,-12.1],[-9.74,-9.17],[-9.74,-9.16],[-6.35,-1.78],[-6.54,-1.41],[0.12,-2.38],[1.52,-0.64]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1268.849,243.37]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4,-3.97],[0,0],[0.87,-1.23],[-2.19,-4.06],[2.34,0.83],[-0.06,0.13],[2.7,1.95],[0,0],[-2.55,4.64],[-0.96,0.83]],"o":[[0,0],[-1.23,0.76],[-2.76,3.95],[-2.79,2.34],[0.07,-0.12],[1.29,-2.82],[0,0],[-0.49,-1.89],[0.64,-1.17],[2.86,-2.46]],"v":[[7.92,-8.265],[7.98,-8.165],[4.78,-5.105],[2.46,9.895],[-4.2,10.865],[-4.01,10.495],[-7.4,3.115],[-7.4,3.105],[-5.43,-6.215],[-3,-9.255]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1266.509,231.095]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.07,-4.27],[0,0],[0.64,-1.17],[-0.49,-1.89],[1.7,0.57],[1.23,0.04],[-3.01,3.81]],"o":[[0,0],[-0.96,0.83],[-2.55,4.64],[-1.85,-1.34],[-1,-0.33],[0,0],[3.01,-3.81]],"v":[[6.94,-4.155],[7.13,-3.935],[4.7,-0.895],[2.73,8.425],[-3.01,5.495],[-6.43,4.885],[-4.12,-3.295]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1256.379,225.775]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.23,0.76],[-2.89,-4.76],[0.96,-3.7],[-0.39,-1.74],[4.39,3.17],[0.35,0.67],[-2.76,3.95]],"o":[[3.34,-2.1],[-2.83,1.35],[-0.87,3.36],[-0.18,0.28],[-0.58,-0.48],[-2.19,-4.06],[0.87,-1.23]],"v":[[-1.39,-10.435],[9.1,-7.675],[2.7,0.285],[2.06,7.855],[-5.51,9.365],[-6.91,7.625],[-4.59,-7.375]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1275.879,233.365]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":0,"op":44,"st":0},{"ind":5,"ty":4,"nm":"a","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-214.47,266.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-6.13,0.64]],"o":[[4.18,5.01],[0,0]],"v":[[-7.73,-3.595],[7.73,2.955]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1257.679,280.725]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-5.39,0.92],[0,0]],"o":[[5.39,3.9],[0,0],[0,0]],"v":[[-8.085,-2.695],[8.075,1.775],[8.085,1.775]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1260.544,269.825]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[-6.42,-1.15]],"o":[[0,0],[3.14,4.74],[0,0]],"v":[[-7.165,-4.425],[-7.165,-4.415],[7.165,4.425]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1252.934,293.195]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[4.63,0.66]],"o":[[0.36,-5.98],[0,0]],"v":[[3.075,4.925],[-3.435,-4.925]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1268.064,251.725]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-5.3,-0.31]],"o":[[1.23,-7.85],[0,0]],"v":[[-5.175,5.245],[5.175,-4.935]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1259.454,251.735]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.05,15.66],[-1.54,4.9],[-0.91,4.19],[-0.62,5.21]],"o":[[11.12,-10.34],[1.99,-4.4],[1.23,-3.86],[1.06,-4.76],[0,0]],"v":[[-19.435,39.785],[8.395,1.185],[13.705,-12.755],[16.915,-24.835],[19.435,-39.785]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1251.704,296.435]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0.68,-3.22],[0.94,-3.16],[1.58,-3.65]],"o":[[-0.53,3.56],[-0.74,3.51],[-1.22,4.13],[0,0]],"v":[[4.255,-15.895],[2.435,-5.745],[-0.075,4.255],[-4.255,15.895]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1250.024,272.875]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[9.56,-10.05]],"o":[[-5.12,11.94],[0,0]],"v":[[10.875,-15.895],[-10.875,15.895]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1234.894,304.675]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-6.42,-1.15],[11.12,-10.34],[0,0],[-5.12,11.94]],"o":[[-7.05,15.66],[0,0],[9.56,-10.05],[3.14,4.74]],"v":[[18.04,-14.88],[-9.79,23.72],[-18.04,8.07],[3.71,-23.72]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1242.059,312.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.22,4.13],[-6.13,0.64],[1.99,-4.4],[3.14,4.74],[0,0]],"o":[[4.18,5.01],[-1.54,4.9],[-6.42,-1.15],[0,0],[1.58,-3.65]],"v":[[-5.64,-10.245],[9.82,-3.695],[4.51,10.245],[-9.82,1.405],[-9.82,1.395]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1255.589,287.375]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-5.3,-0.31],[0.36,-5.98],[1.06,-4.76],[5.39,3.9],[-0.53,3.56]],"o":[[4.63,0.66],[-0.62,5.21],[-5.39,0.92],[0.68,-3.22],[1.23,-7.85]],"v":[[2.65,-12.705],[9.16,-2.855],[6.64,12.095],[-9.52,7.625],[-7.7,-2.525]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1261.979,259.505]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.74,3.51],[-5.39,0.92],[1.23,-3.86],[4.18,5.01]],"o":[[5.39,3.9],[-0.91,4.19],[-6.13,0.64],[0.94,-3.16]],"v":[[-6.825,-8.595],[9.335,-4.125],[6.125,7.955],[-9.335,1.405]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.98,0.941,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1259.284,275.725]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":0,"op":44,"st":0},{"ind":6,"ty":4,"nm":"a","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-116.47,239.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-25.92,23.58],[-1.5,-2.76],[8.92,-8.56],[30.96,-0.76],[0.38,8.8]],"o":[[50.97,3.27],[5.48,-4.99],[1.5,2.76],[-7.4,7.61],[-30.96,0.76],[-0.38,-8.79]],"v":[[-50.885,6.21],[42.105,-19.95],[54.035,-19.35],[48.835,-2.67],[-18.395,24.18],[-57.375,14.62]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1181.913,340.52]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.5,-2.76],[8.92,-8.56],[30.96,-0.76],[0.38,8.8],[0,0],[-25.92,23.58]],"o":[[1.5,2.76],[-7.4,7.61],[-30.96,0.76],[-0.38,-8.79],[50.97,3.27],[5.48,-4.99]],"v":[[54.035,-19.35],[48.835,-2.67],[-18.395,24.18],[-57.375,14.62],[-50.885,6.21],[42.105,-19.95]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1181.914,340.52]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":0,"op":44,"st":0},{"ind":7,"ty":4,"nm":"h","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-246.97,338.11,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[3.01,-3.81],[0,0]],"o":[[-4.07,-4.27],[-3.01,3.81],[0,0]],"v":[[7.035,-2.385],[-4.025,-1.525],[-6.335,6.655]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1256.284,224.005]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-2.79,2.34]],"o":[[2.34,0.83],[0,0]],"v":[[-3.33,-0.2],[3.33,-1.17]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1265.639,242.16]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[2.86,-2.46],[0.64,-1.17],[-0.49,-1.89],[0,0]],"o":[[-4,-3.97],[-0.96,0.83],[-2.55,4.64],[0,0],[0,0]],"v":[[7.95,-3.705],[-2.97,-4.695],[-5.4,-1.655],[-7.37,7.665],[-7.37,7.675]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1266.479,226.535]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0.01,0],[3.34,-2.1],[0.87,-1.23],[-2.19,-4.06],[-0.58,-0.48],[-0.18,0.28],[0,0]],"o":[[0,0],[-2.89,-4.76],[-1.23,0.76],[-2.76,3.95],[0.35,0.67],[4.39,3.17],[0,0],[0,0]],"v":[[9.105,-7.665],[9.095,-7.675],[-1.395,-10.435],[-4.595,-7.375],[-6.915,7.625],[-5.515,9.365],[2.055,7.855],[2.065,7.845]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1275.884,233.365]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-2.43,4.27],[-0.06,0.13],[2.7,1.95]],"o":[[2.7,2.32],[0.07,-0.12],[1.29,-2.82],[0,0]],"v":[[-7.1,1.37],[5.62,1.74],[5.81,1.37],[2.42,-6.01]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1256.689,240.22]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[1.7,0.57],[1.23,0.04],[1.21,-6.18],[-12.11,-3.78],[-8.62,14.11],[4.17,1.79],[1.87,-0.89],[0.96,-3.7],[-0.39,-1.74],[-1,-0.54],[-0.59,7.74]],"o":[[-1.85,-1.34],[-1,-0.33],[-3.88,-0.14],[-1.59,8.15],[13.19,3.27],[7.15,-13.9],[-1.66,-0.71],[-2.83,1.35],[-0.87,3.36],[0.33,1.46],[2.18,1.2],[0,0]],"v":[[-9.74,-9.17],[-15.48,-12.1],[-18.9,-12.71],[-28.39,-4.96],[-11.12,15.5],[22.83,4.38],[21.64,-18.06],[16.13,-17.68],[9.73,-9.72],[9.09,-2.15],[11.12,0.8],[19.73,-7.63]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1268.849,243.37]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.18,0.28],[-0.87,3.36],[-2.83,1.35],[-1.66,-0.71],[7.15,-13.9],[13.19,3.27],[-1.59,8.15],[-3.88,-0.14],[-1,-0.33],[-1.85,-1.34],[0,0],[1.29,-2.82],[0.07,-0.12],[-2.79,2.34],[-0.58,-0.48]],"o":[[-0.39,-1.74],[0.96,-3.7],[1.87,-0.89],[4.17,1.79],[-8.62,14.11],[-12.11,-3.78],[1.21,-6.18],[1.23,0.04],[1.7,0.57],[0,0],[2.7,1.95],[-0.06,0.13],[2.34,0.83],[0.35,0.67],[4.39,3.17]],"v":[[9.09,-2.15],[9.73,-9.72],[16.13,-17.68],[21.64,-18.06],[22.83,4.38],[-11.12,15.5],[-28.39,-4.96],[-18.9,-12.71],[-15.48,-12.1],[-9.74,-9.17],[-9.74,-9.16],[-6.35,-1.78],[-6.54,-1.41],[0.12,-2.38],[1.52,-0.64]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1268.849,243.37]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4,-3.97],[0,0],[0.87,-1.23],[-2.19,-4.06],[2.34,0.83],[-0.06,0.13],[2.7,1.95],[0,0],[-2.55,4.64],[-0.96,0.83]],"o":[[0,0],[-1.23,0.76],[-2.76,3.95],[-2.79,2.34],[0.07,-0.12],[1.29,-2.82],[0,0],[-0.49,-1.89],[0.64,-1.17],[2.86,-2.46]],"v":[[7.92,-8.265],[7.98,-8.165],[4.78,-5.105],[2.46,9.895],[-4.2,10.865],[-4.01,10.495],[-7.4,3.115],[-7.4,3.105],[-5.43,-6.215],[-3,-9.255]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1266.509,231.095]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-4.07,-4.27],[0,0],[0.64,-1.17],[-0.49,-1.89],[1.7,0.57],[1.23,0.04],[-3.01,3.81]],"o":[[0,0],[-0.96,0.83],[-2.55,4.64],[-1.85,-1.34],[-1,-0.33],[0,0],[3.01,-3.81]],"v":[[6.94,-4.155],[7.13,-3.935],[4.7,-0.895],[2.73,8.425],[-3.01,5.495],[-6.43,4.885],[-4.12,-3.295]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1256.379,225.775]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.23,0.76],[-2.89,-4.76],[0.96,-3.7],[-0.39,-1.74],[4.39,3.17],[0.35,0.67],[-2.76,3.95]],"o":[[3.34,-2.1],[-2.83,1.35],[-0.87,3.36],[-0.18,0.28],[-0.58,-0.48],[-2.19,-4.06],[0.87,-1.23]],"v":[[-1.39,-10.435],[9.1,-7.675],[2.7,0.285],[2.06,7.855],[-5.51,9.365],[-6.91,7.625],[-4.59,-7.375]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1275.879,233.365]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":60,"op":80,"st":0},{"ind":8,"ty":4,"nm":"a","parent":2,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-214.47,266.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-6.13,0.64]],"o":[[4.18,5.01],[0,0]],"v":[[-7.73,-3.595],[7.73,2.955]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1257.679,280.725]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-5.39,0.92],[0,0]],"o":[[5.39,3.9],[0,0],[0,0]],"v":[[-8.085,-2.695],[8.075,1.775],[8.085,1.775]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1260.544,269.825]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,0],[-6.42,-1.15]],"o":[[0,0],[3.14,4.74],[0,0]],"v":[[-7.165,-4.425],[-7.165,-4.415],[7.165,4.425]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1252.934,293.195]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[4.63,0.66]],"o":[[0.36,-5.98],[0,0]],"v":[[3.075,4.925],[-3.435,-4.925]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1268.064,251.725]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-5.3,-0.31]],"o":[[1.23,-7.85],[0,0]],"v":[[-5.175,5.245],[5.175,-4.935]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1259.454,251.735]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-7.05,15.66],[-1.54,4.9],[-0.91,4.19],[-0.62,5.21]],"o":[[11.12,-10.34],[1.99,-4.4],[1.23,-3.86],[1.06,-4.76],[0,0]],"v":[[-19.435,39.785],[8.395,1.185],[13.705,-12.755],[16.915,-24.835],[19.435,-39.785]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1251.704,296.435]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0.68,-3.22],[0.94,-3.16],[1.58,-3.65]],"o":[[-0.53,3.56],[-0.74,3.51],[-1.22,4.13],[0,0]],"v":[[4.255,-15.895],[2.435,-5.745],[-0.075,4.255],[-4.255,15.895]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1250.024,272.875]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[9.56,-10.05]],"o":[[-5.12,11.94],[0,0]],"v":[[10.875,-15.895],[-10.875,15.895]],"c":false}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1234.894,304.675]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-6.42,-1.15],[11.12,-10.34],[0,0],[-5.12,11.94]],"o":[[-7.05,15.66],[0,0],[9.56,-10.05],[3.14,4.74]],"v":[[18.04,-14.88],[-9.79,23.72],[-18.04,8.07],[3.71,-23.72]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1242.059,312.5]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.22,4.13],[-6.13,0.64],[1.99,-4.4],[3.14,4.74],[0,0]],"o":[[4.18,5.01],[-1.54,4.9],[-6.42,-1.15],[0,0],[1.58,-3.65]],"v":[[-5.64,-10.245],[9.82,-3.695],[4.51,10.245],[-9.82,1.405],[-9.82,1.395]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1255.589,287.375]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-5.3,-0.31],[0.36,-5.98],[1.06,-4.76],[5.39,3.9],[-0.53,3.56]],"o":[[4.63,0.66],[-0.62,5.21],[-5.39,0.92],[0.68,-3.22],[1.23,-7.85]],"v":[[2.65,-12.705],[9.16,-2.855],[6.64,12.095],[-9.52,7.625],[-7.7,-2.525]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.443,0.004,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1261.979,259.505]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-0.74,3.51],[-5.39,0.92],[1.23,-3.86],[4.18,5.01]],"o":[[5.39,3.9],[-0.91,4.19],[-6.13,0.64],[0.94,-3.16]],"v":[[-6.825,-8.595],[9.335,-4.125],[6.125,7.955],[-9.335,1.405]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[1,0.98,0.941,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1259.284,275.725]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":60,"op":80,"st":0},{"ind":9,"ty":4,"nm":"a","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[-116.47,239.61,0],"l":2},"a":{"a":0,"k":[965.53,543.11,0],"l":2},"s":{"a":0,"k":[100,100,100],"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[-25.92,23.58],[-1.5,-2.76],[8.92,-8.56],[30.96,-0.76],[0.38,8.8]],"o":[[50.97,3.27],[5.48,-4.99],[1.5,2.76],[-7.4,7.61],[-30.96,0.76],[-0.38,-8.79]],"v":[[-50.885,6.21],[42.105,-19.95],[54.035,-19.35],[48.835,-2.67],[-18.395,24.18],[-57.375,14.62]],"c":true}},"nm":"P"},{"ty":"st","c":{"a":0,"k":[0,0.129,0.251,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":2,"lj":2,"nm":"S"},{"ty":"tr","p":{"a":0,"k":[1181.913,340.52]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[-1.5,-2.76],[8.92,-8.56],[30.96,-0.76],[0.38,8.8],[0,0],[-25.92,23.58]],"o":[[1.5,2.76],[-7.4,7.61],[-30.96,0.76],[-0.38,-8.79],[50.97,3.27],[5.48,-4.99]],"v":[[54.035,-19.35],[48.835,-2.67],[-18.395,24.18],[-57.375,14.62],[-50.885,6.21],[42.105,-19.95]],"c":true}},"nm":"P"},{"ty":"fl","c":{"a":0,"k":[0,0.549,0.349,1]},"o":{"a":0,"k":100},"r":1,"nm":"F"},{"ty":"tr","p":{"a":0,"k":[1181.914,340.52]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":0},"o":{"a":0,"k":100},"sk":{"a":0,"k":0},"sa":{"a":0,"k":0},"nm":"T"}],"nm":"G"}],"ip":60,"op":80,"st":0}]}],"layers":[{"ind":1,"ty":0,"nm":"C","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[187.5,120,0],"l":2},"a":{"a":0,"k":[187.5,200,0],"l":2},"s":{"a":0,"k":[60,60,100],"l":2}},"ao":0,"w":375,"h":400,"ip":0,"op":80,"st":0}],"markers":[]}
\ No newline at end of file
diff --git a/assets/images/MCCGroupIcons/MCC-Airlines.svg b/assets/images/MCCGroupIcons/MCC-Airlines.svg
index 9d7924cff407..b707faf9857e 100644
--- a/assets/images/MCCGroupIcons/MCC-Airlines.svg
+++ b/assets/images/MCCGroupIcons/MCC-Airlines.svg
@@ -1,3 +1,6 @@
-<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M12.3522 3.26765C12.1752 2.63045 12.6544 2 13.3157 2H17.382C17.7608 2 18.1071 2.214 18.2765 2.55279L25.0001 16H35.0001C36.6569 16 38.0001 17.3431 38.0001 19C38.0001 20.6569 36.6569 22 35.0001 22H25.0001L18.2765 35.4472C18.1071 35.786 17.7608 36 17.382 36H13.3157C12.6544 36 12.1752 35.3695 12.3522 34.7324L15.8889 22H9.66673L8.22798 26.3162C8.09187 26.7246 7.70973 27 7.2793 27H3.38749C2.70493 27 2.22296 26.3313 2.4388 25.6838L4.66673 19L2.4388 12.3162C2.22296 11.6687 2.70493 11 3.38749 11H7.2793C7.70973 11 8.09187 11.2754 8.22798 11.6838L9.66673 16H15.8889L12.3522 3.26765Z" fill="black"/>
+<svg  viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+<style type="text/css">
+	.st0{fill-rule:evenodd;clip-rule:evenodd;}
+</style>
+<path class="st0" d="M12.3522 3.26765C12.1752 2.63045 12.6544 2 13.3157 2H17.382C17.7608 2 18.1071 2.214 18.2765 2.55279L25.0001 16H35.0001C36.6569 16 38.0001 17.3431 38.0001 19C38.0001 20.6569 36.6569 22 35.0001 22H25.0001L18.2765 35.4472C18.1071 35.786 17.7608 36 17.382 36H13.3157C12.6544 36 12.1752 35.3695 12.3522 34.7324L15.8889 22H9.66673L8.22798 26.3162C8.09187 26.7246 7.70973 27 7.2793 27H3.38749C2.70493 27 2.22296 26.3313 2.4388 25.6838L4.66673 19L2.4388 12.3162C2.22296 11.6687 2.70493 11 3.38749 11H7.2793C7.70973 11 8.09187 11.2754 8.22798 11.6838L9.66673 16H15.8889L12.3522 3.26765Z"/>
 </svg>
diff --git a/assets/images/MCCGroupIcons/MCC-Commuter.svg b/assets/images/MCCGroupIcons/MCC-Commuter.svg
index 2996c9f5f793..d8f808cf463b 100644
--- a/assets/images/MCCGroupIcons/MCC-Commuter.svg
+++ b/assets/images/MCCGroupIcons/MCC-Commuter.svg
@@ -1,3 +1,6 @@
-<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M6 7.38304C6 5.66132 7.10435 4.1407 8.78335 3.75953C11.2917 3.19007 15.3008 2.5 20 2.5C24.6992 2.5 28.7083 3.19007 31.2166 3.75953C32.8956 4.1407 34 5.66132 34 7.38304V27.5C34 29.1569 32.6569 30.5 31 30.5H29.9664L31.8276 34.6877C32.2762 35.6971 31.8217 36.879 30.8123 37.3276C29.8029 37.7762 28.621 37.3217 28.1724 36.3123L25.5891 30.5H14.4109L11.8276 36.3123C11.379 37.3217 10.1971 37.7762 9.18773 37.3276C8.17837 36.879 7.72378 35.6971 8.17239 34.6877L10.0336 30.5H9C7.34315 30.5 6 29.1569 6 27.5V7.38304ZM29 18.5001H21.5V6.51855C24.8516 6.60226 27.212 6.95363 28.5813 7.22675C29.4342 7.39689 30 8.15691 30 9.02665V17.5001C30 18.0524 29.5523 18.5001 29 18.5001ZM11.4187 7.22675C12.788 6.95363 15.1484 6.60226 18.5 6.51855V18.5001H11C10.4477 18.5001 10 18.0524 10 17.5001V9.02665C10 8.15691 10.5658 7.39689 11.4187 7.22675ZM11 26.5C12.1046 26.5 13 25.6046 13 24.5C13 23.3954 12.1046 22.5 11 22.5C9.89543 22.5 9 23.3954 9 24.5C9 25.6046 9.89543 26.5 11 26.5ZM31 24.5C31 25.6046 30.1046 26.5 29 26.5C27.8954 26.5 27 25.6046 27 24.5C27 23.3954 27.8954 22.5 29 22.5C30.1046 22.5 31 23.3954 31 24.5Z" fill="black"/>
+<svg  viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+<style type="text/css">
+	.st0{fill-rule:evenodd;clip-rule:evenodd;}
+</style>
+<path class="st0" fill-rule="evenodd" clip-rule="evenodd" d="M6 7.38304C6 5.66132 7.10435 4.1407 8.78335 3.75953C11.2917 3.19007 15.3008 2.5 20 2.5C24.6992 2.5 28.7083 3.19007 31.2166 3.75953C32.8956 4.1407 34 5.66132 34 7.38304V27.5C34 29.1569 32.6569 30.5 31 30.5H29.9664L31.8276 34.6877C32.2762 35.6971 31.8217 36.879 30.8123 37.3276C29.8029 37.7762 28.621 37.3217 28.1724 36.3123L25.5891 30.5H14.4109L11.8276 36.3123C11.379 37.3217 10.1971 37.7762 9.18773 37.3276C8.17837 36.879 7.72378 35.6971 8.17239 34.6877L10.0336 30.5H9C7.34315 30.5 6 29.1569 6 27.5V7.38304ZM29 18.5001H21.5V6.51855C24.8516 6.60226 27.212 6.95363 28.5813 7.22675C29.4342 7.39689 30 8.15691 30 9.02665V17.5001C30 18.0524 29.5523 18.5001 29 18.5001ZM11.4187 7.22675C12.788 6.95363 15.1484 6.60226 18.5 6.51855V18.5001H11C10.4477 18.5001 10 18.0524 10 17.5001V9.02665C10 8.15691 10.5658 7.39689 11.4187 7.22675ZM11 26.5C12.1046 26.5 13 25.6046 13 24.5C13 23.3954 12.1046 22.5 11 22.5C9.89543 22.5 9 23.3954 9 24.5C9 25.6046 9.89543 26.5 11 26.5ZM31 24.5C31 25.6046 30.1046 26.5 29 26.5C27.8954 26.5 27 25.6046 27 24.5C27 23.3954 27.8954 22.5 29 22.5C30.1046 22.5 31 23.3954 31 24.5Z"/>
 </svg>
diff --git a/assets/images/MCCGroupIcons/MCC-Gas.svg b/assets/images/MCCGroupIcons/MCC-Gas.svg
index 519882921fb6..b13e657a1af4 100644
--- a/assets/images/MCCGroupIcons/MCC-Gas.svg
+++ b/assets/images/MCCGroupIcons/MCC-Gas.svg
@@ -1,3 +1,6 @@
-<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M5 7C5 4.79086 6.79086 3 9 3H21C23.2091 3 25 4.79086 25 7V17.65C28.4234 18.3449 31 21.3716 31 25V28.25C31 28.9404 31.5596 29.5 32.25 29.5C32.9404 29.5 33.5 28.9404 33.5 28.25V20L31.3906 18.5937C30.8342 18.2228 30.5 17.5983 30.5 16.9296V11.4142C30.5 11.149 30.3946 10.8946 30.2071 10.7071L28.5 9C27.9477 8.44772 27.9477 7.55228 28.5 7C29.0523 6.44772 29.9477 6.44771 30.5 7L35.9142 12.4142C36.2893 12.7893 36.5 13.298 36.5 13.8284V18V20.1315V28.25C36.5 30.5972 34.5972 32.5 32.25 32.5C29.9028 32.5 28 30.5972 28 28.25V25C28 23.0407 26.7478 21.3738 25 20.7561V29V32C25 32.5523 25.4477 33 26 33C26.5523 33 27 33.4477 27 34V36C27 36.5523 26.5523 37 26 37H4C3.44772 37 3 36.5523 3 36V34C3 33.4477 3.44772 33 4 33C4.55228 33 5 32.5523 5 32V29V7ZM9 7H21V17H9V7Z" fill="black"/>
+<svg viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+<style type="text/css">
+	.st0{fill-rule:evenodd;clip-rule:evenodd;}
+</style>
+<path class="st0" fill-rule="evenodd" clip-rule="evenodd" d="M5 7C5 4.79086 6.79086 3 9 3H21C23.2091 3 25 4.79086 25 7V17.65C28.4234 18.3449 31 21.3716 31 25V28.25C31 28.9404 31.5596 29.5 32.25 29.5C32.9404 29.5 33.5 28.9404 33.5 28.25V20L31.3906 18.5937C30.8342 18.2228 30.5 17.5983 30.5 16.9296V11.4142C30.5 11.149 30.3946 10.8946 30.2071 10.7071L28.5 9C27.9477 8.44772 27.9477 7.55228 28.5 7C29.0523 6.44772 29.9477 6.44771 30.5 7L35.9142 12.4142C36.2893 12.7893 36.5 13.298 36.5 13.8284V18V20.1315V28.25C36.5 30.5972 34.5972 32.5 32.25 32.5C29.9028 32.5 28 30.5972 28 28.25V25C28 23.0407 26.7478 21.3738 25 20.7561V29V32C25 32.5523 25.4477 33 26 33C26.5523 33 27 33.4477 27 34V36C27 36.5523 26.5523 37 26 37H4C3.44772 37 3 36.5523 3 36V34C3 33.4477 3.44772 33 4 33C4.55228 33 5 32.5523 5 32V29V7ZM9 7H21V17H9V7Z"/>
 </svg>
diff --git a/assets/images/MCCGroupIcons/MCC-Goods.svg b/assets/images/MCCGroupIcons/MCC-Goods.svg
index 2aa86250e9d8..e3ea39f77344 100644
--- a/assets/images/MCCGroupIcons/MCC-Goods.svg
+++ b/assets/images/MCCGroupIcons/MCC-Goods.svg
@@ -1,3 +1,6 @@
-<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M4 5C3.44772 5 3 5.44772 3 6V10C3 10.5523 3.44772 11 4 11H36C36.5523 11 37 10.5523 37 10V6C37 5.44772 36.5523 5 36 5H4ZM4 14H36V31C36 33.2091 34.2091 35 32 35H8C5.79086 35 4 33.2091 4 31V14ZM14 21C14 19.8954 14.8954 19 16 19H24C25.1046 19 26 19.8954 26 21C26 22.1046 25.1046 23 24 23H16C14.8954 23 14 22.1046 14 21Z" fill="black"/>
+<svg viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+<style type="text/css">
+	.st0{fill-rule:evenodd;clip-rule:evenodd;}
+</style>
+<path class="st0" fill-rule="evenodd" clip-rule="evenodd" d="M4 5C3.44772 5 3 5.44772 3 6V10C3 10.5523 3.44772 11 4 11H36C36.5523 11 37 10.5523 37 10V6C37 5.44772 36.5523 5 36 5H4ZM4 14H36V31C36 33.2091 34.2091 35 32 35H8C5.79086 35 4 33.2091 4 31V14ZM14 21C14 19.8954 14.8954 19 16 19H24C25.1046 19 26 19.8954 26 21C26 22.1046 25.1046 23 24 23H16C14.8954 23 14 22.1046 14 21Z"/>
 </svg>
diff --git a/assets/images/MCCGroupIcons/MCC-Groceries.svg b/assets/images/MCCGroupIcons/MCC-Groceries.svg
index e957d6ee0238..349154ca5496 100644
--- a/assets/images/MCCGroupIcons/MCC-Groceries.svg
+++ b/assets/images/MCCGroupIcons/MCC-Groceries.svg
@@ -1,3 +1,6 @@
-<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M25.715 5.97082C25.1467 5.02366 23.9182 4.71653 22.971 5.28483C22.0238 5.85312 21.7167 7.08165 22.285 8.02881L26.4676 14.9998H13.5324L17.715 8.02881C18.2833 7.08165 17.9762 5.85312 17.029 5.28483C16.0818 4.71653 14.8533 5.02366 14.285 5.97082L8.86762 14.9998H3C2.44772 14.9998 2 15.4475 2 15.9998V17.9998C2 18.5521 2.44772 18.9998 3 18.9998H4L5.78101 33.2479C5.90612 34.2487 6.75692 34.9998 7.76556 34.9998H32.2344C33.2431 34.9998 34.0939 34.2487 34.219 33.2479L36 18.9998H37C37.5523 18.9998 38 18.5521 38 17.9998V15.9998C38 15.4475 37.5523 14.9998 37 14.9998H31.1324L25.715 5.97082ZM10.6051 21C10.0135 21 9.55117 21.5108 9.61004 22.0995L10.41 30.0995C10.4612 30.6107 10.8913 31 11.4051 31H11.5001C12.0524 31 12.5001 30.5523 12.5001 30V22C12.5001 21.4477 12.0524 21 11.5001 21H10.6051ZM19.5513 21C18.9794 21 18.524 21.4788 18.5526 22.0499L18.9526 30.0499C18.9792 30.5821 19.4185 31 19.9513 31H20.0488C20.5817 31 21.021 30.5821 21.0476 30.0499L21.4476 22.0499C21.4762 21.4788 21.0207 21 20.4488 21H19.5513ZM27.5001 22C27.5001 21.4477 27.9478 21 28.5001 21H29.3951C29.9867 21 30.449 21.5108 30.3901 22.0995L29.5901 30.0995C29.539 30.6107 29.1089 31 28.5951 31H28.5001C27.9478 31 27.5001 30.5523 27.5001 30V22Z" fill="black"/>
+<svg viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+<style type="text/css">
+	.st0{fill-rule:evenodd;clip-rule:evenodd;}
+</style>
+<path class="st0" fill-rule="evenodd" clip-rule="evenodd" d="M25.715 5.97082C25.1467 5.02366 23.9182 4.71653 22.971 5.28483C22.0238 5.85312 21.7167 7.08165 22.285 8.02881L26.4676 14.9998H13.5324L17.715 8.02881C18.2833 7.08165 17.9762 5.85312 17.029 5.28483C16.0818 4.71653 14.8533 5.02366 14.285 5.97082L8.86762 14.9998H3C2.44772 14.9998 2 15.4475 2 15.9998V17.9998C2 18.5521 2.44772 18.9998 3 18.9998H4L5.78101 33.2479C5.90612 34.2487 6.75692 34.9998 7.76556 34.9998H32.2344C33.2431 34.9998 34.0939 34.2487 34.219 33.2479L36 18.9998H37C37.5523 18.9998 38 18.5521 38 17.9998V15.9998C38 15.4475 37.5523 14.9998 37 14.9998H31.1324L25.715 5.97082ZM10.6051 21C10.0135 21 9.55117 21.5108 9.61004 22.0995L10.41 30.0995C10.4612 30.6107 10.8913 31 11.4051 31H11.5001C12.0524 31 12.5001 30.5523 12.5001 30V22C12.5001 21.4477 12.0524 21 11.5001 21H10.6051ZM19.5513 21C18.9794 21 18.524 21.4788 18.5526 22.0499L18.9526 30.0499C18.9792 30.5821 19.4185 31 19.9513 31H20.0488C20.5817 31 21.021 30.5821 21.0476 30.0499L21.4476 22.0499C21.4762 21.4788 21.0207 21 20.4488 21H19.5513ZM27.5001 22C27.5001 21.4477 27.9478 21 28.5001 21H29.3951C29.9867 21 30.449 21.5108 30.3901 22.0995L29.5901 30.0995C29.539 30.6107 29.1089 31 28.5951 31H28.5001C27.9478 31 27.5001 30.5523 27.5001 30V22Z"/>
 </svg>
diff --git a/assets/images/MCCGroupIcons/MCC-Hotel.svg b/assets/images/MCCGroupIcons/MCC-Hotel.svg
index 8de897bfafff..04be004b24bb 100644
--- a/assets/images/MCCGroupIcons/MCC-Hotel.svg
+++ b/assets/images/MCCGroupIcons/MCC-Hotel.svg
@@ -1,3 +1,6 @@
-<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M1 8C0.447715 8 0 8.44772 0 9V22V24V27C0 27.5523 0.447715 28 1 28H3C3.55228 28 4 28.4477 4 29V35C4 35.5523 4.44772 36 5 36H7C7.55228 36 8 35.5523 8 35V29C8 28.4477 8.44772 28 9 28H31C31.5523 28 32 28.4477 32 29V35C32 35.5523 32.4477 36 33 36H35C35.5523 36 36 35.5523 36 35V29C36 28.4477 36.4477 28 37 28H39C39.5523 28 40 27.5523 40 27V23V18C40 14.6863 37.3137 12 34 12H23.0552C21.2514 12 19.6707 13.2073 19.1961 14.9475L17.2727 22H5C4.44772 22 4 21.5523 4 21V9C4 8.44772 3.55228 8 3 8H1ZM16 15C16 17.7614 13.7614 20 11 20C8.23858 20 6 17.7614 6 15C6 12.2386 8.23858 10 11 10C13.7614 10 16 12.2386 16 15Z" fill="black"/>
+<svg viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+<style type="text/css">
+	.st0{fill-rule:evenodd;clip-rule:evenodd;}
+</style>
+<path class="st0" fill-rule="evenodd" clip-rule="evenodd" d="M1 8C0.447715 8 0 8.44772 0 9V22V24V27C0 27.5523 0.447715 28 1 28H3C3.55228 28 4 28.4477 4 29V35C4 35.5523 4.44772 36 5 36H7C7.55228 36 8 35.5523 8 35V29C8 28.4477 8.44772 28 9 28H31C31.5523 28 32 28.4477 32 29V35C32 35.5523 32.4477 36 33 36H35C35.5523 36 36 35.5523 36 35V29C36 28.4477 36.4477 28 37 28H39C39.5523 28 40 27.5523 40 27V23V18C40 14.6863 37.3137 12 34 12H23.0552C21.2514 12 19.6707 13.2073 19.1961 14.9475L17.2727 22H5C4.44772 22 4 21.5523 4 21V9C4 8.44772 3.55228 8 3 8H1ZM16 15C16 17.7614 13.7614 20 11 20C8.23858 20 6 17.7614 6 15C6 12.2386 8.23858 10 11 10C13.7614 10 16 12.2386 16 15Z"/>
 </svg>
diff --git a/assets/images/MCCGroupIcons/MCC-Mail.svg b/assets/images/MCCGroupIcons/MCC-Mail.svg
index 56b4d7bd1005..e554fa44f37f 100644
--- a/assets/images/MCCGroupIcons/MCC-Mail.svg
+++ b/assets/images/MCCGroupIcons/MCC-Mail.svg
@@ -1,4 +1,7 @@
-<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M0 29L1.01054e-06 13.2871C9.19619e-07 12.2471 1.19609 11.6619 2.0172 12.3003L16.9312 24.9447C18.7364 26.3481 21.2636 26.3481 23.0688 24.9447L37.9828 12.3003C38.8039 11.6619 40 12.2471 40 13.2871L40 29C40 31.7614 37.7614 34 35 34L5 34C2.23858 34 2.41411e-07 31.7614 0 29Z" fill="black"/>
-<path d="M18.5467 19.4728L2.47189 6.30004C1.56324 5.55543 2.05463 4 3.19851 4H36.8015C37.9454 4 38.4368 5.55544 37.5281 6.30004L21.4532 19.4728C20.5954 20.1757 19.4045 20.1757 18.5467 19.4728Z" fill="black"/>
+<svg viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+<style type="text/css">
+	.st0{fill-rule:evenodd;clip-rule:evenodd;}
+</style>
+<path class="st0" d="M0 29L1.01054e-06 13.2871C9.19619e-07 12.2471 1.19609 11.6619 2.0172 12.3003L16.9312 24.9447C18.7364 26.3481 21.2636 26.3481 23.0688 24.9447L37.9828 12.3003C38.8039 11.6619 40 12.2471 40 13.2871L40 29C40 31.7614 37.7614 34 35 34L5 34C2.23858 34 2.41411e-07 31.7614 0 29Z"/>
+<path class="st0" d="M18.5467 19.4728L2.47189 6.30004C1.56324 5.55543 2.05463 4 3.19851 4H36.8015C37.9454 4 38.4368 5.55544 37.5281 6.30004L21.4532 19.4728C20.5954 20.1757 19.4045 20.1757 18.5467 19.4728Z"/>
 </svg>
diff --git a/assets/images/MCCGroupIcons/MCC-Meals.svg b/assets/images/MCCGroupIcons/MCC-Meals.svg
index e8b9eab9d803..df3672cf52a6 100644
--- a/assets/images/MCCGroupIcons/MCC-Meals.svg
+++ b/assets/images/MCCGroupIcons/MCC-Meals.svg
@@ -1,3 +1,6 @@
-<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M25.7843 6.88298C25.9053 4.70448 27.7071 3 29.889 3C32.1594 3 34 4.84057 34 7.11103V21V26V35.0001C34 36.1046 33.1046 37.0001 32 37.0001H30.1289C28.9753 37.0001 28.0609 36.0267 28.1328 34.8753L28.8658 23.1477L27.1903 22.2168C25.8507 21.4726 25.054 20.0284 25.139 18.4983L25.7843 6.88298ZM7.91281 4.39153C7.96365 4.16277 8.16656 4 8.4009 4H9.47281C9.75928 4 9.98718 4.24021 9.97212 4.52628L9.52752 12.9737C9.51246 13.2598 9.74036 13.5 10.0268 13.5H10.5497C10.8056 13.5 11.0202 13.3068 11.0469 13.0523L11.9527 4.44766C11.9795 4.19318 12.1941 4 12.4499 4H13.5497C13.8056 4 14.0202 4.19318 14.0469 4.44766L14.9527 13.0523C14.9795 13.3068 15.1941 13.5 15.4499 13.5H15.9728C16.2593 13.5 16.4872 13.2598 16.4721 12.9737L16.0275 4.52628C16.0125 4.24021 16.2404 4 16.5268 4H17.5987C17.8331 4 18.036 4.16277 18.0868 4.39153L20.0474 13.2143C20.8561 16.8532 18.7773 20.3411 15.5171 21.5515L15.9354 34.9375C15.9706 36.066 15.0654 37 13.9363 37H12.9998H12.0633C10.9342 37 10.029 36.066 10.0643 34.9375L10.4826 21.5515C7.22232 20.3411 5.14356 16.8532 5.95219 13.2143L7.91281 4.39153Z" fill="black"/>
+<svg viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+<style type="text/css">
+	.st0{fill-rule:evenodd;clip-rule:evenodd;}
+</style>
+<path class="st0" fill-rule="evenodd" clip-rule="evenodd" d="M25.7843 6.88298C25.9053 4.70448 27.7071 3 29.889 3C32.1594 3 34 4.84057 34 7.11103V21V26V35.0001C34 36.1046 33.1046 37.0001 32 37.0001H30.1289C28.9753 37.0001 28.0609 36.0267 28.1328 34.8753L28.8658 23.1477L27.1903 22.2168C25.8507 21.4726 25.054 20.0284 25.139 18.4983L25.7843 6.88298ZM7.91281 4.39153C7.96365 4.16277 8.16656 4 8.4009 4H9.47281C9.75928 4 9.98718 4.24021 9.97212 4.52628L9.52752 12.9737C9.51246 13.2598 9.74036 13.5 10.0268 13.5H10.5497C10.8056 13.5 11.0202 13.3068 11.0469 13.0523L11.9527 4.44766C11.9795 4.19318 12.1941 4 12.4499 4H13.5497C13.8056 4 14.0202 4.19318 14.0469 4.44766L14.9527 13.0523C14.9795 13.3068 15.1941 13.5 15.4499 13.5H15.9728C16.2593 13.5 16.4872 13.2598 16.4721 12.9737L16.0275 4.52628C16.0125 4.24021 16.2404 4 16.5268 4H17.5987C17.8331 4 18.036 4.16277 18.0868 4.39153L20.0474 13.2143C20.8561 16.8532 18.7773 20.3411 15.5171 21.5515L15.9354 34.9375C15.9706 36.066 15.0654 37 13.9363 37H12.9998H12.0633C10.9342 37 10.029 36.066 10.0643 34.9375L10.4826 21.5515C7.22232 20.3411 5.14356 16.8532 5.95219 13.2143L7.91281 4.39153Z"/>
 </svg>
diff --git a/assets/images/MCCGroupIcons/MCC-Misc.svg b/assets/images/MCCGroupIcons/MCC-Misc.svg
index 8bd292d0568f..a4ef1615d146 100644
--- a/assets/images/MCCGroupIcons/MCC-Misc.svg
+++ b/assets/images/MCCGroupIcons/MCC-Misc.svg
@@ -1,3 +1,6 @@
-<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M40 23.4V24.2L38 36.4C37.8 37.4 37 38 36 38H4C3 38 2.2 37.4 2 36.4L0 24.4V23.6C0 23.4 0 23.2 0.2 23L4.8 15.8L2 6.6V6.4V6V5.6C2.2 3.6 4 2 6 2H34C36 2 37.8 3.6 38 5.6V6V6.4V6.6L35.2 15.6L39.8 22.8C39.8 22.9 39.85 23 39.9 23.1C39.95 23.2 40 23.3 40 23.4ZM31.4 14.4L33.4 8H6.6L8.6 14.4H31.4ZM26 23C26 22.4 26.4 22 27 22H34.4L31.6 17.6H8.4L5.6 22H13C13.6 22 14 22.4 14 23V30C14 31 15 32 16 32H24C25 32 26 31 26 30V23ZM22.5999 24.4C22.5999 25.4 22.1999 26.2 21.3999 26.6L22.7999 29.2C22.9999 29.6 22.7999 30 22.3999 30H17.9999C17.5999 30 17.3999 29.6 17.5999 29.2L18.9999 26.6C18.1999 26 17.7999 25.4 17.7999 24.4C17.7999 23.2 18.9999 22 20.1999 22C21.3999 22 22.5999 23 22.5999 24.4Z" fill="black"/>
+<svg viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+<style type="text/css">
+	.st0{fill-rule:evenodd;clip-rule:evenodd;}
+</style>
+<path class="st0" fill-rule="evenodd" clip-rule="evenodd" d="M40 23.4V24.2L38 36.4C37.8 37.4 37 38 36 38H4C3 38 2.2 37.4 2 36.4L0 24.4V23.6C0 23.4 0 23.2 0.2 23L4.8 15.8L2 6.6V6.4V6V5.6C2.2 3.6 4 2 6 2H34C36 2 37.8 3.6 38 5.6V6V6.4V6.6L35.2 15.6L39.8 22.8C39.8 22.9 39.85 23 39.9 23.1C39.95 23.2 40 23.3 40 23.4ZM31.4 14.4L33.4 8H6.6L8.6 14.4H31.4ZM26 23C26 22.4 26.4 22 27 22H34.4L31.6 17.6H8.4L5.6 22H13C13.6 22 14 22.4 14 23V30C14 31 15 32 16 32H24C25 32 26 31 26 30V23ZM22.5999 24.4C22.5999 25.4 22.1999 26.2 21.3999 26.6L22.7999 29.2C22.9999 29.6 22.7999 30 22.3999 30H17.9999C17.5999 30 17.3999 29.6 17.5999 29.2L18.9999 26.6C18.1999 26 17.7999 25.4 17.7999 24.4C17.7999 23.2 18.9999 22 20.1999 22C21.3999 22 22.5999 23 22.5999 24.4Z"/>
 </svg>
diff --git a/assets/images/MCCGroupIcons/MCC-RentalCar.svg b/assets/images/MCCGroupIcons/MCC-RentalCar.svg
index f88d28723569..789cb5bc3fe3 100644
--- a/assets/images/MCCGroupIcons/MCC-RentalCar.svg
+++ b/assets/images/MCCGroupIcons/MCC-RentalCar.svg
@@ -1,3 +1,6 @@
-<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M2 17.5407L2 32C2 33.1046 2.89543 34 4 34H8C9.10457 34 10 33.1046 10 32V28H16.5H25.8027C26.8401 26.2066 28.7792 25 31 25H34.8676C35.9919 25 37.0721 25.3146 38 25.8826V17.5407C38 17.0223 37.9496 16.5064 37.8502 16H39C39.5523 16 40 15.5523 40 15V14C40 12.8954 39.1046 12 38 12H36.4L34.689 7.72251C34.252 6.63006 33.3586 5.78626 32.2176 5.49892C29.8653 4.9065 25.3859 4 20 4C14.6141 4 10.1347 4.9065 7.78237 5.49892C6.64139 5.78626 5.74798 6.63006 5.311 7.72251L3.6 12H2C0.895431 12 0 12.8954 0 14V15C0 15.5523 0.447715 16 1 16H2.14975C2.05038 16.5064 2 17.0223 2 17.5407ZM7.34965 13.5608L8.74048 10.2228C8.90883 9.81881 9.20554 9.48425 9.61481 9.32905C10.8182 8.87268 13.9149 8 19.9992 8C26.0835 8 29.181 8.87267 30.3849 9.32904C30.7943 9.48425 31.0912 9.8189 31.2596 10.2231L32.6502 13.5604C32.8485 14.0364 32.6444 14.5668 32.153 14.723C30.6828 15.1905 27.1101 16 19.9983 16C12.8868 16 9.31576 15.1905 7.84651 14.7231C7.35529 14.5668 7.15139 14.0366 7.34965 13.5608ZM26 20.5615C26 20.2315 26.2246 19.9438 26.5448 19.8638L32.7575 18.3106C33.3886 18.1528 34 18.6302 34 19.2808V20C34 21.1046 33.1046 22 32 22H27.4384C26.644 22 26 21.356 26 20.5615ZM6 19.2808C6 18.6302 6.61139 18.1528 7.24254 18.3106L13.4552 19.8638C13.7754 19.9438 14 20.2315 14 20.5615C14 21.356 13.356 22 12.5616 22H8C6.89543 22 6 21.1046 6 20V19.2808ZM31 29C29.8954 29 29 29.8954 29 31V32H16.5C16.2239 32 16 32.2239 16 32.5V33.7324C16 33.8996 16.0836 34.0557 16.2227 34.1484L18.4962 35.6641C18.8247 35.8831 19.2107 36 19.6056 36H29V37C29 38.1046 29.8954 39 31 39H34.8676C35.5701 39 36.2212 38.6314 36.5826 38.029L37.7652 36.058C38.5252 34.7913 38.5252 33.2087 37.7652 31.942L36.5826 29.971C36.2212 29.3686 35.5701 29 34.8676 29H31ZM36 34C36 34.5523 35.5523 35 35 35C34.4477 35 34 34.5523 34 34C34 33.4477 34.4477 33 35 33C35.5523 33 36 33.4477 36 34Z" fill="black"/>
+<svg viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+<style type="text/css">
+	.st0{fill-rule:evenodd;clip-rule:evenodd;}
+</style>
+<path class="st0" fill-rule="evenodd" clip-rule="evenodd" d="M2 17.5407L2 32C2 33.1046 2.89543 34 4 34H8C9.10457 34 10 33.1046 10 32V28H16.5H25.8027C26.8401 26.2066 28.7792 25 31 25H34.8676C35.9919 25 37.0721 25.3146 38 25.8826V17.5407C38 17.0223 37.9496 16.5064 37.8502 16H39C39.5523 16 40 15.5523 40 15V14C40 12.8954 39.1046 12 38 12H36.4L34.689 7.72251C34.252 6.63006 33.3586 5.78626 32.2176 5.49892C29.8653 4.9065 25.3859 4 20 4C14.6141 4 10.1347 4.9065 7.78237 5.49892C6.64139 5.78626 5.74798 6.63006 5.311 7.72251L3.6 12H2C0.895431 12 0 12.8954 0 14V15C0 15.5523 0.447715 16 1 16H2.14975C2.05038 16.5064 2 17.0223 2 17.5407ZM7.34965 13.5608L8.74048 10.2228C8.90883 9.81881 9.20554 9.48425 9.61481 9.32905C10.8182 8.87268 13.9149 8 19.9992 8C26.0835 8 29.181 8.87267 30.3849 9.32904C30.7943 9.48425 31.0912 9.8189 31.2596 10.2231L32.6502 13.5604C32.8485 14.0364 32.6444 14.5668 32.153 14.723C30.6828 15.1905 27.1101 16 19.9983 16C12.8868 16 9.31576 15.1905 7.84651 14.7231C7.35529 14.5668 7.15139 14.0366 7.34965 13.5608ZM26 20.5615C26 20.2315 26.2246 19.9438 26.5448 19.8638L32.7575 18.3106C33.3886 18.1528 34 18.6302 34 19.2808V20C34 21.1046 33.1046 22 32 22H27.4384C26.644 22 26 21.356 26 20.5615ZM6 19.2808C6 18.6302 6.61139 18.1528 7.24254 18.3106L13.4552 19.8638C13.7754 19.9438 14 20.2315 14 20.5615C14 21.356 13.356 22 12.5616 22H8C6.89543 22 6 21.1046 6 20V19.2808ZM31 29C29.8954 29 29 29.8954 29 31V32H16.5C16.2239 32 16 32.2239 16 32.5V33.7324C16 33.8996 16.0836 34.0557 16.2227 34.1484L18.4962 35.6641C18.8247 35.8831 19.2107 36 19.6056 36H29V37C29 38.1046 29.8954 39 31 39H34.8676C35.5701 39 36.2212 38.6314 36.5826 38.029L37.7652 36.058C38.5252 34.7913 38.5252 33.2087 37.7652 31.942L36.5826 29.971C36.2212 29.3686 35.5701 29 34.8676 29H31ZM36 34C36 34.5523 35.5523 35 35 35C34.4477 35 34 34.5523 34 34C34 33.4477 34.4477 33 35 33C35.5523 33 36 33.4477 36 34Z"/>
 </svg>
diff --git a/assets/images/MCCGroupIcons/MCC-Services.svg b/assets/images/MCCGroupIcons/MCC-Services.svg
index f4d632e86581..25c67065c105 100644
--- a/assets/images/MCCGroupIcons/MCC-Services.svg
+++ b/assets/images/MCCGroupIcons/MCC-Services.svg
@@ -1,3 +1,6 @@
-<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M26 5C26 4.44772 25.5523 4 25 4H15C14.4477 4 14 4.44772 14 5V7C14 7.55228 14.4477 8 15 8H17C17.5523 8 18 8.44772 18 9V12.0822C10.0512 12.7364 2.62918 17.2755 2.03789 24.9992C1.99573 25.5499 2.44772 26 3 26H37C37.5523 26 38.0043 25.5499 37.9621 24.9992C37.3708 17.2755 29.9488 12.7364 22 12.0822V9C22 8.44772 22.4477 8 23 8H25C25.5523 8 26 7.55228 26 7V5ZM2.69425 30C1.71658 30 0.882196 30.7068 0.721466 31.6712L0.388133 33.6712C0.184956 34.8903 1.12504 36 2.36092 36H37.6391C38.875 36 39.815 34.8903 39.6119 33.6712L39.2785 31.6712C39.1178 30.7068 38.2834 30 37.3057 30H2.69425Z" fill="black"/>
+<svg viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+<style type="text/css">
+	.st0{fill-rule:evenodd;clip-rule:evenodd;}
+</style>
+<path class="st0" fill-rule="evenodd" clip-rule="evenodd" d="M26 5C26 4.44772 25.5523 4 25 4H15C14.4477 4 14 4.44772 14 5V7C14 7.55228 14.4477 8 15 8H17C17.5523 8 18 8.44772 18 9V12.0822C10.0512 12.7364 2.62918 17.2755 2.03789 24.9992C1.99573 25.5499 2.44772 26 3 26H37C37.5523 26 38.0043 25.5499 37.9621 24.9992C37.3708 17.2755 29.9488 12.7364 22 12.0822V9C22 8.44772 22.4477 8 23 8H25C25.5523 8 26 7.55228 26 7V5ZM2.69425 30C1.71658 30 0.882196 30.7068 0.721466 31.6712L0.388133 33.6712C0.184956 34.8903 1.12504 36 2.36092 36H37.6391C38.875 36 39.815 34.8903 39.6119 33.6712L39.2785 31.6712C39.1178 30.7068 38.2834 30 37.3057 30H2.69425Z"/>
 </svg>
diff --git a/assets/images/MCCGroupIcons/MCC-Taxi.svg b/assets/images/MCCGroupIcons/MCC-Taxi.svg
index 89d3eb239371..2cc31e4db079 100644
--- a/assets/images/MCCGroupIcons/MCC-Taxi.svg
+++ b/assets/images/MCCGroupIcons/MCC-Taxi.svg
@@ -1,3 +1,6 @@
-<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path fill-rule="evenodd" clip-rule="evenodd" d="M2 19.5407L2 34C2 35.1046 2.89543 36 4 36H8C9.10457 36 10 35.1046 10 34V30H30V34C30 35.1046 30.8954 36 32 36H36C37.1046 36 38 35.1046 38 34V19.5407C38 19.0223 37.9496 18.5064 37.8502 18H39C39.5523 18 40 17.5523 40 17V16C40 14.8954 39.1046 14 38 14H36.4L34.689 9.72251C34.252 8.63006 33.3586 7.78626 32.2176 7.49892C29.8653 6.9065 25.3859 6 20 6C14.6141 6 10.1347 6.9065 7.78237 7.49892C6.64139 7.78626 5.74798 8.63006 5.311 9.72251L3.6 14H2C0.895431 14 0 14.8954 0 16V17C0 17.5523 0.447715 18 1 18H2.14975C2.05038 18.5064 2 19.0223 2 19.5407ZM7.34965 15.5608L8.74048 12.2228C8.90883 11.8188 9.20554 11.4843 9.61481 11.329C10.8182 10.8727 13.9149 10 19.9992 10C26.0835 10 29.181 10.8727 30.3849 11.329C30.7943 11.4842 31.0912 11.8189 31.2596 12.2231L32.6502 15.5604C32.8485 16.0364 32.6444 16.5668 32.153 16.723C30.6828 17.1905 27.1101 18 19.9983 18C12.8868 18 9.31576 17.1905 7.84651 16.7231C7.35529 16.5668 7.15139 16.0366 7.34965 15.5608ZM26 22.5615C26 22.2315 26.2246 21.9438 26.5448 21.8638L32.7575 20.3106C33.3886 20.1528 34 20.6302 34 21.2808V22C34 23.1046 33.1046 24 32 24H27.4384C26.644 24 26 23.356 26 22.5615ZM6 21.2808C6 20.6302 6.61139 20.1528 7.24254 20.3106L13.4552 21.8638C13.7754 21.9438 14 22.2315 14 22.5615C14 23.356 13.356 24 12.5616 24H8C6.89543 24 6 23.1046 6 22V21.2808Z" fill="black"/>
+<svg viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+<style type="text/css">
+	.st0{fill-rule:evenodd;clip-rule:evenodd;}
+</style>
+<path class="st0" fill-rule="evenodd" clip-rule="evenodd" d="M2 19.5407L2 34C2 35.1046 2.89543 36 4 36H8C9.10457 36 10 35.1046 10 34V30H30V34C30 35.1046 30.8954 36 32 36H36C37.1046 36 38 35.1046 38 34V19.5407C38 19.0223 37.9496 18.5064 37.8502 18H39C39.5523 18 40 17.5523 40 17V16C40 14.8954 39.1046 14 38 14H36.4L34.689 9.72251C34.252 8.63006 33.3586 7.78626 32.2176 7.49892C29.8653 6.9065 25.3859 6 20 6C14.6141 6 10.1347 6.9065 7.78237 7.49892C6.64139 7.78626 5.74798 8.63006 5.311 9.72251L3.6 14H2C0.895431 14 0 14.8954 0 16V17C0 17.5523 0.447715 18 1 18H2.14975C2.05038 18.5064 2 19.0223 2 19.5407ZM7.34965 15.5608L8.74048 12.2228C8.90883 11.8188 9.20554 11.4843 9.61481 11.329C10.8182 10.8727 13.9149 10 19.9992 10C26.0835 10 29.181 10.8727 30.3849 11.329C30.7943 11.4842 31.0912 11.8189 31.2596 12.2231L32.6502 15.5604C32.8485 16.0364 32.6444 16.5668 32.153 16.723C30.6828 17.1905 27.1101 18 19.9983 18C12.8868 18 9.31576 17.1905 7.84651 16.7231C7.35529 16.5668 7.15139 16.0366 7.34965 15.5608ZM26 22.5615C26 22.2315 26.2246 21.9438 26.5448 21.8638L32.7575 20.3106C33.3886 20.1528 34 20.6302 34 21.2808V22C34 23.1046 33.1046 24 32 24H27.4384C26.644 24 26 23.356 26 22.5615ZM6 21.2808C6 20.6302 6.61139 20.1528 7.24254 20.3106L13.4552 21.8638C13.7754 21.9438 14 22.2315 14 22.5615C14 23.356 13.356 24 12.5616 24H8C6.89543 24 6 23.1046 6 22V21.2808Z"/>
 </svg>
diff --git a/assets/images/MCCGroupIcons/MCC-Utilities.svg b/assets/images/MCCGroupIcons/MCC-Utilities.svg
index 464344b41b4e..27e7290bf4e5 100644
--- a/assets/images/MCCGroupIcons/MCC-Utilities.svg
+++ b/assets/images/MCCGroupIcons/MCC-Utilities.svg
@@ -1,4 +1,7 @@
-<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M37.4142 2.58579C38.1953 3.36683 38.1953 4.63316 37.4142 5.41421L34.2058 8.62264C37.2073 12.9679 36.3295 18.4797 32.4195 22.3795L31.2738 23.5222C30.6351 24.1593 29.5985 24.1593 28.9597 23.5222L16.4791 11.2645C15.8403 10.6274 15.8403 9.59355 16.4791 8.95647L17.935 7.50432C21.8305 3.61902 27.2121 2.84712 31.3921 5.77947L34.5858 2.58579C35.3668 1.80474 36.6332 1.80474 37.4142 2.58579Z" fill="black"/>
-<path d="M6.6079 36.2205L3.41421 39.4142C2.63317 40.1953 1.36684 40.1953 0.585787 39.4142C-0.195262 38.6332 -0.195262 37.3668 0.585786 36.5858L3.79422 33.3774C0.792677 29.0321 1.67048 23.5203 5.58052 19.6205L6.72619 18.4778C7.36495 17.8407 8.40151 17.8407 9.04027 18.4778L10.8835 20.2881L14.5858 16.5858C15.3668 15.8047 16.6332 15.8047 17.4142 16.5858C18.1953 17.3668 18.1953 18.6332 17.4142 19.4142L13.7374 23.091L16.9376 26.234L20.5858 22.5858C21.3668 21.8047 22.6332 21.8047 23.4142 22.5858C24.1953 23.3668 24.1953 24.6332 23.4142 25.4142L19.7915 29.037L21.5209 30.7355C22.1597 31.3726 22.1597 32.4065 21.5209 33.0435L20.065 34.4957C16.1695 38.381 10.7879 39.1529 6.6079 36.2205Z" fill="black"/>
+<svg viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
+<style type="text/css">
+	.st0{fill-rule:evenodd;clip-rule:evenodd;}
+</style>
+<path class="st0" d="M37.4142 2.58579C38.1953 3.36683 38.1953 4.63316 37.4142 5.41421L34.2058 8.62264C37.2073 12.9679 36.3295 18.4797 32.4195 22.3795L31.2738 23.5222C30.6351 24.1593 29.5985 24.1593 28.9597 23.5222L16.4791 11.2645C15.8403 10.6274 15.8403 9.59355 16.4791 8.95647L17.935 7.50432C21.8305 3.61902 27.2121 2.84712 31.3921 5.77947L34.5858 2.58579C35.3668 1.80474 36.6332 1.80474 37.4142 2.58579Z"/>
+<path class="st0" d="M6.6079 36.2205L3.41421 39.4142C2.63317 40.1953 1.36684 40.1953 0.585787 39.4142C-0.195262 38.6332 -0.195262 37.3668 0.585786 36.5858L3.79422 33.3774C0.792677 29.0321 1.67048 23.5203 5.58052 19.6205L6.72619 18.4778C7.36495 17.8407 8.40151 17.8407 9.04027 18.4778L10.8835 20.2881L14.5858 16.5858C15.3668 15.8047 16.6332 15.8047 17.4142 16.5858C18.1953 17.3668 18.1953 18.6332 17.4142 19.4142L13.7374 23.091L16.9376 26.234L20.5858 22.5858C21.3668 21.8047 22.6332 21.8047 23.4142 22.5858C24.1953 23.3668 24.1953 24.6332 23.4142 25.4142L19.7915 29.037L21.5209 30.7355C22.1597 31.3726 22.1597 32.4065 21.5209 33.0435L20.065 34.4957C16.1695 38.381 10.7879 39.1529 6.6079 36.2205Z"/>
 </svg>
diff --git a/assets/images/eReceiptBGs/eReceiptBG_blue.png b/assets/images/eReceiptBGs/eReceiptBG_blue.png
new file mode 100644
index 000000000000..f317b72dc4fc
Binary files /dev/null and b/assets/images/eReceiptBGs/eReceiptBG_blue.png differ
diff --git a/assets/images/eReceiptBGs/eReceiptBG_green.png b/assets/images/eReceiptBGs/eReceiptBG_green.png
new file mode 100644
index 000000000000..55fe8886bca9
Binary files /dev/null and b/assets/images/eReceiptBGs/eReceiptBG_green.png differ
diff --git a/assets/images/eReceiptBGs/eReceiptBG_navy.png b/assets/images/eReceiptBGs/eReceiptBG_navy.png
new file mode 100644
index 000000000000..2b9616d42c11
Binary files /dev/null and b/assets/images/eReceiptBGs/eReceiptBG_navy.png differ
diff --git a/assets/images/eReceiptBGs/eReceiptBG_pink.png b/assets/images/eReceiptBGs/eReceiptBG_pink.png
new file mode 100644
index 000000000000..41b6492c3a35
Binary files /dev/null and b/assets/images/eReceiptBGs/eReceiptBG_pink.png differ
diff --git a/assets/images/eReceiptBGs/eReceiptBG_tangerine.png b/assets/images/eReceiptBGs/eReceiptBG_tangerine.png
new file mode 100644
index 000000000000..00a8cd6dd612
Binary files /dev/null and b/assets/images/eReceiptBGs/eReceiptBG_tangerine.png differ
diff --git a/assets/images/eReceiptBGs/eReceiptBG_yellow.png b/assets/images/eReceiptBGs/eReceiptBG_yellow.png
new file mode 100644
index 000000000000..7eb9d1f87fa6
Binary files /dev/null and b/assets/images/eReceiptBGs/eReceiptBG_yellow.png differ
diff --git a/assets/images/eReceiptIcon.svg b/assets/images/eReceiptIcon.svg
index f4fc8c9fcc34..e54c3a106a48 100644
--- a/assets/images/eReceiptIcon.svg
+++ b/assets/images/eReceiptIcon.svg
@@ -1,3 +1,6 @@
-<svg width="72" height="100" viewBox="0 0 72 100" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M0 95.6235V4.3765C0 2.49065 2.35447 1.61234 3.6053 3.03159L7.45184 7.39606C8.27143 8.32601 9.72857 8.32601 10.5482 7.39606L16.4518 0.69746C17.2714 -0.232485 18.7286 -0.232487 19.5482 0.697458L25.4518 7.39606C26.2714 8.32601 27.7286 8.32601 28.5482 7.39606L34.4518 0.69746C35.2714 -0.232485 36.7286 -0.232487 37.5482 0.697458L43.4518 7.39606C44.2714 8.32601 45.7286 8.32601 46.5482 7.39606L52.4518 0.69746C53.2714 -0.232485 54.7286 -0.232487 55.5482 0.697458L61.4518 7.39606C62.2714 8.32601 63.7286 8.32601 64.5482 7.39606L68.3947 3.03159C69.6455 1.61235 72 2.49065 72 4.3765V95.6235C72 97.5093 69.6455 98.3877 68.3947 96.9684L64.5482 92.6039C63.7286 91.674 62.2714 91.674 61.4518 92.6039L55.5482 99.3025C54.7286 100.232 53.2714 100.232 52.4518 99.3025L46.5482 92.6039C45.7286 91.674 44.2714 91.674 43.4518 92.6039L37.5482 99.3025C36.7286 100.232 35.2714 100.232 34.4518 99.3025L28.5482 92.6039C27.7286 91.674 26.2714 91.674 25.4518 92.6039L19.5482 99.3025C18.7286 100.232 17.2714 100.232 16.4518 99.3025L10.5482 92.6039C9.72857 91.674 8.27143 91.674 7.45184 92.6039L3.6053 96.9684C2.35448 98.3877 0 97.5093 0 95.6235Z" fill="black"/>
+<svg viewBox="0 0 72 100" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
+<style type="text/css">
+	.st0{fill-rule:evenodd;clip-rule:evenodd;}
+</style>
+<path class="st0" d="M0 95.6235V4.3765C0 2.49065 2.35447 1.61234 3.6053 3.03159L7.45184 7.39606C8.27143 8.32601 9.72857 8.32601 10.5482 7.39606L16.4518 0.69746C17.2714 -0.232485 18.7286 -0.232487 19.5482 0.697458L25.4518 7.39606C26.2714 8.32601 27.7286 8.32601 28.5482 7.39606L34.4518 0.69746C35.2714 -0.232485 36.7286 -0.232487 37.5482 0.697458L43.4518 7.39606C44.2714 8.32601 45.7286 8.32601 46.5482 7.39606L52.4518 0.69746C53.2714 -0.232485 54.7286 -0.232487 55.5482 0.697458L61.4518 7.39606C62.2714 8.32601 63.7286 8.32601 64.5482 7.39606L68.3947 3.03159C69.6455 1.61235 72 2.49065 72 4.3765V95.6235C72 97.5093 69.6455 98.3877 68.3947 96.9684L64.5482 92.6039C63.7286 91.674 62.2714 91.674 61.4518 92.6039L55.5482 99.3025C54.7286 100.232 53.2714 100.232 52.4518 99.3025L46.5482 92.6039C45.7286 91.674 44.2714 91.674 43.4518 92.6039L37.5482 99.3025C36.7286 100.232 35.2714 100.232 34.4518 99.3025L28.5482 92.6039C27.7286 91.674 26.2714 91.674 25.4518 92.6039L19.5482 99.3025C18.7286 100.232 17.2714 100.232 16.4518 99.3025L10.5482 92.6039C9.72857 91.674 8.27143 91.674 7.45184 92.6039L3.6053 96.9684C2.35448 98.3877 0 97.5093 0 95.6235Z"/>
 </svg>
diff --git a/assets/images/eReceipt_background.svg b/assets/images/eReceipt_background.svg
new file mode 100644
index 000000000000..5070ed3b2f24
--- /dev/null
+++ b/assets/images/eReceipt_background.svg
@@ -0,0 +1,1635 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 335 540" style="enable-background:new 0 0 335 540;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#002E22;}
+
+		.st1{opacity:0.1;clip-path:url(#SVGID_00000124869483467423175860000005510948212279836589_);fill:#03D47C;enable-background:new    ;}
+	.st2{fill:url(#SVGID_00000083050264588742134660000005562034446681723823_);}
+	.st3{fill:none;}
+	.st4{fill:url(#SVGID_00000167365478286501123900000012248723858192563861_);}
+</style>
+<rect class="st0" width="335" height="540"/>
+<g>
+	<defs>
+		<rect id="SVGID_1_" width="335" height="540"/>
+	</defs>
+	<clipPath id="SVGID_00000016764957890984265480000008356558692590065833_">
+		<use xlink:href="#SVGID_1_"  style="overflow:visible;"/>
+	</clipPath>
+
+		<path style="opacity:0.1;clip-path:url(#SVGID_00000016764957890984265480000008356558692590065833_);fill:#03D47C;enable-background:new    ;" d="
+		M-63.4,57.8c-4.2,0.4-7.4,1.2-9.7,2.2v-0.1c0-2.4,0.6-4.4,1.9-6c1.2-1.5,2.9-2.6,5.1-3.4c1.5-0.5,3.3-0.9,5.6-1.2
+		c0.3,0,0.6,0,0.9,0c0.6,0,1.4,0.1,2.4,0.1c0.4,0,0.8,0,1.1-0.1c2.2,0.3,4,0.7,5.5,1.2c2.2,0.8,3.9,1.9,5.1,3.4
+		c1.3,1.6,1.9,3.5,1.9,5.8c-0.2-0.1-0.4-0.2-0.7-0.2C-48.8,57.6-55.2,57.1-63.4,57.8z M-66.9,74.8c0.8-0.3,1.9-0.8,3.4-1.5
+		c0.9-0.3,2.3-0.5,4.3-0.5c2.7-0.1,4.8,0,6.2,0.1c1.4,0.2,2.8,0.5,4,1c0.1-1.1,0.4-2.2,0.9-3.3c0.5-1.1,1.4-2.6,2.8-4.6
+		c0.7-1.1,1.2-2.3,1.5-3.6h-0.1c-0.2,0-0.9-0.1-2-0.4c-2.6-0.9-5.5-1.5-8.8-1.7c-2.5-0.1-5.5,0-9,0.4c-3.7,0.4-6.6,1-8.6,1.8
+		c-0.2,0.1-0.3,0.1-0.5,0.2c0.3,1.1,0.8,2.2,1.4,3.3c1.4,1.9,2.4,3.5,2.8,4.6c0.7,1.4,1,2.9,0.9,4.4C-67.4,75-67.1,74.9-66.9,74.8z
+		 M-74.4,107.1c0.8,1.3,1.4,2.3,1.8,3.1c0.5,1,0.8,2,1.1,3.1c1.1-0.6,2.8-1,5.1-1.2c4.5-0.4,9.3-0.4,14.4,0c2.4,0.2,4.4,0.5,6.1,0.9
+		c0.4,0.1,0.7,0.3,1,0.4c0.2-1.2,0.6-2.2,1.1-3.2c0.4-0.8,0.9-1.8,1.8-3.1c0.9-1.4,1.6-2.5,1.9-3.1c1.3-2.5,1.9-5.3,1.8-8.2
+		c-0.1-3-0.9-5.7-2.4-8c-0.4-0.6-1.9-2.3-4.3-5.1c-1.8-2.1-2.9-3.9-3.4-5.5c0-0.1,0-0.1-0.1-0.2c-0.4-0.1-0.9-0.2-1.4-0.4
+		c-0.9-0.3-1.4-0.5-1.6-0.5c-0.8-0.2-2.1-0.4-3.8-0.4c-2.6-0.1-4.6,0-5.9,0.1c-0.8,0.1-1.5,0.2-2,0.4c-1,0.5-1.7,0.8-2.3,0.9
+		c-0.6,0.1-1,0.2-1.4,0.4c-0.6,0.2-0.9,0.2-1.2,0.2c-0.6,1.5-1.6,3.1-3.2,4.9c-2.5,2.8-3.9,4.5-4.3,5.1c-1.5,2.3-2.3,5-2.4,8
+		c-0.1,2.9,0.5,5.7,1.8,8.2C-76,104.7-75.4,105.7-74.4,107.1z M43.4,438.5c0.4-0.1,0.7-0.3,0.9-0.7c0.3-0.4,0.4-0.9,0.4-1.5
+		c0-0.4,0-0.9-0.1-1.4c-0.2-0.6-0.5-1.2-1.1-1.6c-0.6-0.4-1.2-0.7-1.9-0.8c-0.7,0-1.3,0.2-1.6,0.5c-0.2,0.2-0.5,0.6-0.8,1.1
+		c-0.5,0.9-0.7,1.6-0.5,2.2c0,0.4,0.2,0.7,0.6,1.1c0.5,0.6,1.2,0.9,1.9,1.2C42,438.8,42.7,438.8,43.4,438.5z M-54.1,421.3
+		c-0.7,1.8-1.3,3.1-1.5,4.1c-1.5,4.8-1.3,9.6,0.5,14.3c0.3,0.8,0.4,1.4,0.4,1.8c3.4,3.6,6.5,7.4,9.5,11.3h0.1
+		c0.1-0.1,0.3-0.2,0.5-0.3c0.4-0.2,1.2-0.3,2.1-0.3c0.9,0,1.8,0,2.6-0.1c0.1-0.1,0.2-0.2,0.3-0.3c1.5-1.6,2.4-3.6,2.8-5.9
+		c0.4-2.3,0.1-4.4-0.8-6.5c-0.3-0.6-0.8-1.5-1.5-2.6c-0.7-1.2-1.3-2.1-1.5-2.7c-1.7-3.5-2-7-0.9-10.6c0.3-1,0.9-2.3,1.7-3.9
+		c1-2,1.6-3.3,1.8-3.9c1.3-3.2,1.9-6.5,1.6-10.1c-0.2-3.6-1.2-6.8-3-9.7c-0.3-0.5-1.9-2.6-4.7-6.3c-1.9-2.5-3.1-4.8-3.6-6.8
+		c-0.9-3.4-0.3-7.6,1.8-12.6c0.4-0.9,1-2.3,1.8-4.1c0.7-1.7,1.2-3.1,1.4-4.3c1-4.3,0.6-8.6-1.2-13c-1.8-4.3-4.6-7.7-8.3-10.2
+		c-3.6-2.5-7.7-3.9-12.4-4.3c-4.5-0.4-8.9,0.3-13.2,1.9c-3.6,1.4-6.6,3.4-9.2,5.9c-2.8,2.8-4.7,5.8-5.6,9.2
+		c-0.7,2.5-0.9,5.4-0.7,8.7c0.3,3.4,1,6.5,2.2,9.4c1.1,2.5,1.9,4.3,2.4,5.6c0.9,2.1,1.4,4,1.5,5.7c0.2,2.8-0.7,6.2-2.8,10.1
+		c-2,3.6-3.2,5.9-3.5,6.8c-1.5,4.4-1.4,8.6,0.4,12.7c0.1,0.1,0.1,0.2,0.2,0.4c4.6,2.7,9,5.6,13.3,8.7c-0.6-1.3-1.1-2.7-1.5-4.1
+		c-0.7-3-0.8-5.8-0.2-8.5c0.5-2,1.8-4.9,3.9-8.7c2.1-3.7,3.3-6.6,3.7-8.8c0.5-2.7,0.3-5.8-0.7-9.2c-0.5-1.7-1.7-4.7-3.4-8.9
+		c-1.7-4-2.5-7.1-2.6-9.3c0-3.1,1-6,3-8.5c2.1-2.6,4.7-4.2,7.7-4.8c3-0.6,6,0,8.9,1.7c2.8,1.7,4.7,4.1,5.6,7.1
+		c0.9,3.3,0.5,7.6-1.4,12.8c-1.1,2.7-1.8,4.8-2.3,6.2c-0.8,2.4-1.3,4.5-1.4,6.4c-0.2,2.5,0.2,4.9,1,7.4c0.5,1.5,1.5,3.4,3,5.9
+		c1.6,2.7,2.6,4.6,3.1,5.9c2.1,4.9,2.4,10,0.8,15.2C-52.8,418.1-53.3,419.4-54.1,421.3z M31.1,439c-0.3-0.2-0.5-0.4-0.7-0.5
+		c-0.3,0.7-0.6,1.3-0.8,1.8c-0.9,2.3-1.4,4.7-1.4,7.4c0.1,2.6,0.6,5,1.7,7.1c0.6-0.6,1.5-1.5,2.7-2.8c1.6-1.9,2.3-4.1,2.3-6.3
+		c0-0.9-0.2-1.8-0.5-2.7C33.8,441.4,32.7,440.1,31.1,439z M-42.3,136.9c-0.2-1.7-0.5-3.9-1.1-6.6c-0.3-1.2-0.5-2.2-0.7-3
+		c-2.1-0.7-5.4-1.1-9.9-1.1h-8.5c-1.4,0-2.5,0-3.2,0.1c-1,0.1-3.3,0.7-6.9,1.9h-0.1c-0.1,0.7-0.3,1.4-0.5,2.1
+		c-0.6,2.7-1,4.9-1.1,6.6c-0.1,0.9-0.1,1.8-0.1,2.7c2.7-1,6.7-1.8,11.9-2.5c2.2-0.3,3.8-0.5,4.9-0.5c3.8-0.2,8.2,0.2,13.2,1.4
+		c1,0.2,1.7,0.5,2.3,0.7C-42.2,138-42.2,137.4-42.3,136.9z M-71.8,152.8c-0.3,0-0.5,0.1-0.8,0.1c0.7,3.2,1.3,5.8,1.7,7.6
+		c0,0.2,0.1,0.3,0.1,0.4l1.3-0.4c3-0.6,6.8-1,11.4-1.2c5-0.2,9.1,0,12.1,0.5c0.1,0,0.2,0,0.4,0.1c0.4-1.8,0.9-4.3,1.6-7.4
+		C-53.2,150.6-62.5,150.7-71.8,152.8z M-80.1,192.4c0.6,1,1.8,2.5,3.4,4.6c0.9,1.1,1.6,2.1,2.2,2.9c0.3-0.1,0.7-0.3,1.1-0.4l3.4-0.7
+		c10-1.6,18.6-1.4,26,0.6c0.7,0.3,1.2,0.5,1.4,0.6c0.1,0,0.2,0.1,0.2,0.2c0.6-0.9,1.4-2,2.4-3.2c1.7-2,2.8-3.5,3.4-4.6
+		c1.3-2.2,2.1-4.7,2.4-7.4c0.3-2.6,0.1-5.2-0.7-7.8c-1.5-5-4.6-9.2-9.2-12.4c-0.7-0.5-1.1-0.9-1.2-1.1c-0.2-0.3-0.3-0.6-0.3-0.8
+		c-0.4,0.1-1,0.1-1.7-0.1c-7.6-0.8-15.2-0.6-22.8,0.7c-0.6,0.1-1.1,0.1-1.4,0.1c0,0.1-0.1,0.1-0.1,0.2c-0.2,0.3-0.6,0.7-1.2,1.1
+		c-4.6,3.2-7.7,7.4-9.2,12.4c-0.7,2.6-0.9,5.2-0.7,7.8C-82.2,187.7-81.4,190.2-80.1,192.4z M40.7,458.6c0.6,0.3,1.2,0.4,1.8,0.4
+		c0.7,0.1,1.3,0,1.8-0.4c0.4-0.2,0.7-0.5,0.9-0.9c0.2-0.4,0.3-0.9,0.2-1.4c0-0.7-0.4-1.6-1.1-2.4c-0.5-0.5-0.9-0.8-1.2-0.9
+		c-0.9-0.3-1.8-0.1-2.6,0.8c-0.2,0.2-0.4,0.5-0.7,1c-0.2,0.3-0.3,0.6-0.4,0.9c-0.2,0.6-0.2,1.1-0.1,1.5
+		C39.7,457.8,40.1,458.3,40.7,458.6z M-526.8,131.2c0,3.4-0.2,6.7-0.4,10.1c-0.1,0.9-0.2,1.6-0.2,2.3c2.2,0.3,4.2,0.6,6.2,0.9
+		c0.7,0.1,1.4,0.2,2.1,0.3l0.1,0.1c0.1,0.1,0.2,0.2,0.3,0.2c0.2,0,0.4,0.1,0.5,0.2c0.4,0,0.8,0.1,1.2,0.1c0.2,0,0.3,0.1,0.5,0.2h1.4
+		c-0.3-0.7-0.6-1.6-0.9-2.6c-1.5-4.9-3.5-9.6-6-14.1c-0.5-0.9-0.9-1.6-1.1-2.3c-0.2-0.5-0.4-1.2-0.7-2.2c-0.3-0.7-0.9-1.6-1.8-2.7
+		c-0.6-0.7-1.1-1.5-1.6-2.3c0.2,2.4,0.3,4.8,0.4,7.2c0,0,0,0.1-0.1,0.1v2.9c0,0.1,0.1,0.2,0.1,0.2v0.2c0,0.1,0,0.1,0.1,0.2
+		c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2v0.6C-526.7,131.4-526.8,131.3-526.8,131.2z M-42.3,223.5c-0.4-1.4-1-3.5-1.8-6.3
+		c-0.1-0.4-0.2-0.7-0.3-1.1c-0.2,0-0.5-0.1-0.8-0.1c-4.8-0.8-10-1.1-15.5-0.9c-0.2,0-0.4,0-0.6,0.1c-3.4,0.1-7,0.5-10.7,1.1
+		c-0.1,0-0.2,0-0.2,0c-0.1,0.3-0.1,0.7-0.2,1c-0.9,2.8-1.5,4.9-1.8,6.3c-0.9,3.5-1.3,7.1-1.3,10.7c1.1-0.5,2.4-0.8,3.8-1.1
+		c4.3-1,9-1.5,14.2-1.4c4,0.1,8.8,0.5,14.3,1.2c1,0.1,1.8,0.3,2.3,0.7C-41,230.2-41.4,226.8-42.3,223.5z M-530.1,143.2
+		c0.8-11.6,0.5-21.6-0.8-30.1c-1.1-6.7-2.9-12.1-5.5-16.1c-1.6-2.5-3.6-4.6-5.9-6.2c-2.2-1.6-4.5-2.6-6.9-3c-0.1,0-0.2,0.1-0.3,0.1
+		c-0.2,0-0.4-0.1-0.6-0.2c-2.9-0.4-5.7,0.2-8.4,1.5c-2.7,1.4-4.6,3.4-5.6,6c-0.8,2-1,4.4-0.7,7.2c0.1,0.5,0.2,1.2,0.3,2
+		c1.8-0.8,3.7-1.2,5.8-1.1c2.3,0.1,4.4,0.8,6.3,2c2.8,1.8,4.9,4.6,6.3,8.4c1,2.7,1.6,6.2,2,10.5c0.7,7.1,0.6,12.9-0.1,17.4
+		C-539.2,142.2-534.5,142.7-530.1,143.2z M77,174c0.5-0.9,1-1.5,1.7-1.9c0.6-0.3,1.4-0.4,2.7-0.4c0.8,0,1.4,0.1,1.7,0.2
+		c0.4,0.2,1.2,0.8,2.3,1.7c0.8,0.8,1.9,1.7,3.1,2.7c0.2,0.2,0.4,0.3,0.6,0.5v-2c0-1.2,0-2.3-0.1-3.3c-0.4,0-0.8-0.2-1.3-0.5
+		c-0.6-0.4-1.3-1-2.2-1.9c-0.9-0.9-1.7-1.5-2.3-1.9c-1.8-1.2-3.7-1.5-5.8-0.9c-2.1,0.5-3.6,1.7-4.7,3.6c-0.6,1.1-1,2.6-1.2,4.3
+		c-0.3,2.3-0.2,4.2,0.3,5.7c0.5,1.7,1.5,3.3,3,4.8c3.3,3.4,7.5,5.5,12.8,6.2c0.6,0.1,1.1,0.2,1.4,0.3c0.1,0,0.1,0.1,0.2,0.1
+		l-0.1-4.7c-0.2,0.1-0.4,0.1-0.7,0.2c-0.7,0-1.7-0.1-3.1-0.5c-2.1-0.6-3.5-1.3-4.3-2.1c-0.1-0.1-0.2-0.2-0.4-0.4
+		c-0.2-0.1-0.4-0.2-0.7-0.4c-0.4-0.3-0.7-0.6-0.9-0.9l-0.1-0.3c-0.2-0.1-0.3-0.2-0.5-0.3l-0.6-0.8l-0.8-1.5
+		c-0.6-1.3-0.7-2.6-0.4-3.9C76.6,175.1,76.8,174.6,77,174z M-629.2,92.6c-6.9,8.5-12.3,15.7-16.4,21.8
+		c-7.1,10.5-12.5,20.6-16.2,30.3c-0.2,0.5-0.4,0.9-0.6,1.2c2.8-0.5,5.7-0.9,8.7-1.4c10.6-1.6,23.8-3,39.6-4.3
+		c7.2-0.6,13-0.8,17.1-0.7c0.3,0,0.6,0.1,0.8,0.1c2.4-0.1,4.7-0.1,6.7-0.2l-23.9-28.6c-7.2-8.5-12.4-14.5-15.5-17.8
+		C-629,92.9-629.1,92.7-629.2,92.6z M59.6,225.8c1,0.4,2.8,0.7,5.4,0.9c8.8,0.7,16.5,0.9,23,0.4c0.7-0.1,1.3,0,1.7,0.1l-0.4-29.8
+		c-1.2,1.5-2.6,2.7-4.2,3.9c-2.8,1.9-6,3-9.4,3.4c-1.2,0.1-2.8,0.2-4.8,0.2c-2.3,0-3.9,0-4.9,0.1c-3.9,0.3-6.9,1.4-8.8,3.3
+		c-2,1.9-3.1,4.7-3.4,8.2c-0.2,2.7,0.2,4.8,1.3,6.4C56.2,224.2,57.7,225.2,59.6,225.8z M224.7,7.2l-6.6,9.6c-2.1,3-4.1,6-6.1,9.1
+		c-0.1,0.2-0.3,0.4-0.4,0.5c2.6,0.2,5.1,0.4,7.5,0.7c0.2-0.2,0.8-0.5,1.7-0.9c1.3-0.6,2.6-1.7,4-3.2c1.2-1.4,2.1-2.8,2.7-4.1
+		c0.9-2.3,1.1-4.8,0.5-7.6c-0.4-1.8-1.2-3.7-2.2-5.6C225.4,6.2,225.1,6.7,224.7,7.2z M199.8-4.2l-1.2,0.1c-0.3,0-0.6,0-0.8-0.1
+		c-0.4,0-0.8,0-1.2,0c-0.1,0.2-0.3,0.3-0.4,0.5l-3,3.2c-1.9,2.1-3.8,4.3-5.5,6.6c-1.5,2.1-3.2,4.5-5,7.2c-2,3.2-3.9,6.5-5.7,9.8
+		c-0.2,0.4-0.4,0.8-0.7,1.1c-0.4,0.4-0.8,0.5-1.2,0.3c-0.1,0-0.1-0.1-0.2-0.1c0.9,0.9,1.8,1.6,2.7,2c0.9,0.5,1.4,0.7,1.7,0.9
+		c3.6-0.5,7.4-0.8,11.4-0.9c0-0.1,0-0.2,0-0.2c0-0.4,0.3-0.9,0.7-1.7l5.7-9.1c2.5-4.1,4.5-7.1,6-9c1.4-1.9,4-4.8,7.8-8.8
+		c0.2-0.2,0.4-0.4,0.5-0.6c-3.3-0.5-7.1-0.9-11.4-0.9C199.9-4.2,199.8-4.2,199.8-4.2z M156.2,62.9c0.3,0.2,0.6,0.4,0.8,0.6
+		c0.5-0.2,1-0.4,1.5-0.5c10.9-3.6,22.4-5.6,34.6-6.1c14.7-0.6,30,1,46,4.9c1.2,0.3,2.3,0.6,3.3,0.9c1.4-0.9,2.6-1.8,3.3-2.9
+		c1.7-2.4,2.4-5.3,1.9-8.7c-0.4-2.7-1.3-5.3-3-7.8c-1.5-2.3-3.4-4.3-5.8-6c-4-2.9-9.2-5-15.6-6.2c-3-0.6-6.7-1.1-10.9-1.4
+		c-2.3-0.2-5.5-0.4-9.8-0.7l-5.3-0.1c-0.1,0-0.2,0.1-0.3,0.1c-4.9,0.3-8.6,0.6-11,0.8c-4.2,0.4-7.9,0.8-10.9,1.4
+		c-6.4,1.2-11.6,3.3-15.6,6.2c-2.4,1.7-4.3,3.8-5.8,6c-1.6,2.5-2.6,5.1-3,7.8c-0.5,3.4,0.2,6.3,1.9,8.7
+		C153.4,60.9,154.6,61.9,156.2,62.9z M52.4,418.1c-0.5-1-1.2-1.8-2-2.4c-1.2-0.9-2.7-1.3-4.6-1.3c-0.2,0.2-0.4,0.2-0.7,0.3H45
+		c-0.2,0-0.3-0.1-0.5-0.1c-0.4-0.1-0.8-0.1-1.2-0.2c-0.2,0-0.3-0.1-0.5-0.1h-3.6v0.1c-0.2,0-0.3,0-0.5,0.1c-0.3,0-0.7,0.1-1,0.1
+		c0,0-0.1-0.1-0.1-0.1c-1.9,0-3.4,0.4-4.6,1.3c-0.9,0.6-1.5,1.4-2,2.4c-0.5,1.1-0.6,2.1-0.4,3.2c0.2,0.7,0.6,1.7,1.3,2.7
+		c0.8,1.2,1.3,2.1,1.5,2.6c0.2,0.5,0.3,0.9,0.4,1.4c0.1,0,0.2-0.1,0.3-0.1c2.1-0.6,5.1-0.9,8.9-1c2.8,0,5,0.3,6.6,0.8
+		c0.1,0,0.1,0,0.2,0.1c0.1-0.4,0.2-0.8,0.4-1.2c0.2-0.5,0.7-1.4,1.5-2.6c0.7-1.1,1.2-2,1.4-2.7C53,420.3,52.9,419.2,52.4,418.1z
+		 M48.3,444.3c-0.4,1.6-0.7,2.7-0.7,3.3c-0.1,1.6,0.3,3.1,1.2,4.4c0.8,1.3,1.9,2.3,3.4,3.1c0.2,0.1,0.4,0.2,0.6,0.4
+		c0.2-0.3,0.3-0.6,0.4-0.8c1.1-2.2,1.6-4.6,1.7-7.2c0-2.6-0.4-5.1-1.4-7.4c-0.2-0.5-0.5-1.2-0.9-2c-0.2,0.2-0.5,0.5-0.9,0.8
+		c-0.7,0.6-1.3,1.1-1.8,1.5C49.5,441.2,48.9,442.5,48.3,444.3z M-25.8,452.6h0.7c-0.2,0.1-0.3,0.1-0.5,0.2c-0.3,0-0.7,0.1-1,0.1
+		c-0.2,0.1-0.3,0.1-0.5,0.2c-0.2,0-0.4,0.1-0.6,0.1c-0.1,0-0.3,0.1-0.4,0.1c-0.1,0-0.2,0.1-0.3,0.1c-0.2,0.1-0.3,0.2-0.5,0.2
+		c-0.3,0-0.7,0.1-1,0.1c-0.2,0.1-0.3,0.1-0.5,0.2l-1.9,0.1c-0.1,0-0.2,0.1-0.4,0.1c-0.1,0-0.2,0.1-0.3,0.1c-0.1,0.1-0.2,0.2-0.4,0.2
+		h-0.5c-0.2,0-0.3-0.1-0.5-0.2h-0.6c-0.2,0.1-0.4,0.1-0.5,0.2c-0.5,0-1,0.1-1.6,0.1c-0.2,0.1-0.3,0.1-0.5,0.2
+		c-0.2,0.1-0.3,0.2-0.5,0.2c-0.1,0.1-0.2,0.1-0.4,0.2c-0.1,0-0.2,0.1-0.3,0.1c-0.2,0-0.3-0.1-0.5-0.1c-0.5,0-1-0.1-1.5-0.1
+		c0,0-0.1,0-0.2-0.1c-0.2,0.1-0.6,0.2-1.2,0.2h-0.5c-0.1,0-0.1,0-0.2,0.1c-0.1,0-0.2,0.1-0.3,0.1h-0.4c1.6,2.1,3.1,4.3,4.6,6.6
+		c5.2,7.9,9.6,16,13.1,24.3c11.9-2,23-6.2,33.3-12.4c8.2-5,14.9-10.8,20-17.4c0.1-0.1,0.1-0.2,0.1-0.2c-1.3-2.6-1.9-5.6-1.9-9
+		c0-3.9,0.9-7.4,2.6-10.7c0.3-0.5,0.7-1.2,1.2-2.1c0.4-0.8,0.8-1.6,1-2.2c0.7-1.8,0.8-3.4,0.3-4.7c-0.2-0.6-0.6-1.2-1.1-1.9
+		c-0.7-0.9-1.2-1.5-1.3-1.8c-0.7-1.2-1-2.7-0.8-4.3c0.1-1.5,0.6-2.9,1.5-4.1c1.7-2.3,4-3.6,6.9-4c1.2-0.2,2.6-0.2,4.2,0v-1.9
+		c0-0.1-0.1-0.2-0.1-0.2v-33.4c0-0.1-0.1-0.2-0.1-0.2v-67l0.1-0.2v-3.7c0-0.1,0-0.3-0.1-0.4c-0.4-4.4,0.5-9,2.6-13.8
+		c2.3-5.5,5.8-10.1,10.4-14c4.7-4,9.8-6.5,15.5-7.6c3-0.6,7.3-0.9,12.8-0.9h8.1v-28.6c-0.1,0.1-0.3,0.3-0.5,0.4
+		c-0.5,0.2-1.3,0.4-2.4,0.4c-4.1-0.1-7.6-0.2-10.3-0.3c-0.6,0.1-1.2,0.1-1.8-0.1c-2.1,0-3.7,0-4.7,0c-6.4,0.1-11.9,0.8-16.7,2
+		c-9.4,2.4-17.7,7-25,13.9c-5.4,5.1-9.8,11.1-13.1,17.8c-1.4,3.4-2.3,6.8-2.9,10.4c-0.3,1.8-0.5,3.1-0.7,4.1c0,0.2-0.1,0.4-0.1,0.5
+		l-0.3,2.2c0.1,1.2,0.1,2.1,0.1,2.7l-0.2,1.7c-0.1,0.5-0.1,1.3-0.1,2.5l0.1,3.7c0,0.6,0,1-0.1,1.4v1.5c0,0.1,0.1,0.2,0.1,0.3v8.2
+		c0,0,0.1,0,0.1,0v34.3l-0.1,0.2v18.3c0,0.1,0,0.1-0.1,0.2v6c0,0.1-0.1,0.2-0.1,0.2v3.3l0.1,1.4c0.1,6,0.2,12.1,0.1,18.2
+		c-0.1,0-0.3,0.1-0.4,0.1c0.2,6.5-0.5,12.8-1.9,18.9c-2.1,8.6-5.6,16.1-10.6,22.4c-4.9,6.2-11.1,11-18.5,14.4
+		C-22.3,451.3-24,452-25.8,452.6z M-570,120.5c-1.7,1.8-3,3.1-3.8,4.1c-1.7,2.2-2.9,3.8-3.9,4.8c-0.9,1-1.4,1.6-1.7,2
+		c-0.7,1.2-1.3,2.1-1.7,2.6c-0.2,0.2-0.7,0.8-1.7,1.8c-0.9,0.8-1.9,1.9-2.8,3.2c-0.1,0.2-0.3,0.4-0.4,0.5c3,0,5.5,0,7.4,0.1
+		c0.2,0,0.4,0,0.6-0.1c3.6-0.1,8.4,0.1,14.4,0.5c0-0.3,0-0.7,0.1-1.1c0.7-8.2,0.1-16.5-1.7-24.7C-567.3,117.2-568.9,119.3-570,120.5
+		z M60.3,229.2c-0.2,0.9-0.3,1.9-0.2,2.9c0,2.1,0.6,3.4,1.8,4c0.4,0.2,0.9,0.3,1.7,0.4c2,0.1,3.4-0.5,4.3-1.7c0.4-0.5,0.6-1.2,0.7-2
+		c0.1-0.5,0.2-1.3,0.2-2.3c0-0.2,0-0.4,0.1-0.6c-0.3,0-0.6,0-0.9-0.1c-3.4-0.2-5.9-0.4-7.7-0.8C60.3,229.1,60.3,229.2,60.3,229.2z
+		 M73.7,236.3c0.2,0.1,0.3,0.2,0.5,0.2h2.7c0.6-0.2,1.1-0.5,1.5-0.9c1.2-1.2,1.7-2.7,1.7-4.6c0-0.2,0-0.5-0.1-0.7c-0.5,0-1,0-1.5,0
+		c-1.5,0-3.7-0.1-6.6-0.2c0,0.3,0,0.6,0,0.9C71.6,233.7,72.2,235.4,73.7,236.3z M580.5,185.1c-2.7-1.5-5.7-2.4-8.9-2.6
+		c-4.4-0.2-8.5,0.7-12.2,2.6c-3.1,1.5-5.9,3.7-8.4,6.6c-2.3,2.6-4.2,5.7-5.7,9.2c-2.5,5.7-3.8,12.7-4,21.1c-0.1,2.1-0.2,3.4-0.3,4
+		c-0.1,0.5-0.3,0.9-0.6,1.2c-0.4,0.4-0.7,0.5-1.1,0.4c-0.4-0.2-0.7-0.7-0.7-1.5c-0.3-5-0.1-9.6,0.5-13.9c0-5.2-0.7-10.4-2-15.7
+		c-1.6-6.4-4.1-12.1-7.5-17.1c0-0.1-0.1-0.1-0.1-0.2c-3.9-4.8-8.8-9.2-14.7-13.3c-4.8-3.3-10.7-6.6-17.5-9.8
+		c-6.4-3-9.8-4.7-10.3-4.9c-3.9-2-7.2-3.9-9.8-5.9c-5.6-4.1-10.3-9.3-14-15.7c-3.6-6.2-6-12.9-7.1-20c-0.5-2.8-0.9-6.8-1.1-12
+		c-0.3-5.5-0.6-9.5-0.9-12c-0.2-1.6-0.5-3.1-0.8-4.6c-0.5-1.5-1.1-3.4-1.8-5.7c-2.1-5.7-5.8-10.6-11.3-14.9
+		c-4.7-3.6-10.3-6.4-16.8-8.4c-4.9-1.3-8.6-2.3-11.1-3.1c-6.3-2.1-12-5-17-8.8c-2.5-1.8-4.6-3.7-6.3-5.6c-4.5-4.9-7.7-11.1-9.7-18.5
+		c-1.6-6-2.3-13-2.1-20.9c0.1-4.2,0.5-7.7,1.2-10.3c1.2-3.8,3-6.7,5.5-8.7c1.7-1.4,3.7-2.3,5.9-2.7c0.1,0,0.3,0,0.4-0.1
+		c0.7-0.2,1.4-0.4,2.2-0.5c3.1-0.5,6.2-0.1,9.2,1.2c3.1,1.4,5.4,3.4,7,6.1c1.2,1.9,1.9,4.3,2.3,7c0.3,1.7,0.5,4.2,0.5,7.5l0.2,9.9
+		c0.1,3.6,0.3,6.2,0.4,7.8c0,0.5,0.1,0.9,0.1,1.3c0.4,1.4,0.9,2.4,1.2,3.1c0.5,1,1.3,2.3,2.4,3.9c1.8,2.5,3,4.1,3.7,4.8
+		c2.2,2.3,5.7,4.4,10.4,6.4c0.6,0.3,1.2,0.5,1.8,0.7c5.2,1,9.5,2.2,12.9,3.4c6.5,2.4,11.7,5.5,15.8,9.5c6.3,6.1,10.4,14.9,12.4,26.4
+		c0.7,3.8,1.2,8.7,1.5,14.7c0.6,9,0.9,13.9,1,14.7c0.8,9,2.4,16.7,4.6,23.3c2.8,8.2,6.8,15,11.9,20.3c3.3,3.5,8.9,7.7,16.6,12.6
+		c8,5.1,13.6,9.3,16.8,12.4c5,4.9,9,10.9,11.8,17.9c2,5,3.4,10.2,4.1,15.6c0.3-0.8,0.5-1.5,0.8-2.3c1.6-4.1,3.7-7.7,6.3-10.9
+		c1.8-2.1,3.7-3.9,5.7-5.5c-0.4-0.2-0.6-0.8-0.7-1.8c-0.5-6.6-3.1-12.7-7.8-18.6c-4-4.9-9.2-9.2-15.7-12.7c-3.8-2-6.6-3.5-8.5-4.6
+		c-7-4-12.5-8.9-16.4-14.8c-3-4.4-5.2-9.7-6.8-15.8c-1.3-4.9-2.2-10.6-2.7-17.3c-0.3-3.8-0.6-9.6-0.9-17.4
+		c-0.4-6.8-1.2-12.6-2.2-17.3c-2.8-12.8-8.7-24.2-17.7-34c-6.9-7.5-14.3-12.4-22.2-14.8c-1.9-0.6-4.3-1.1-7.2-1.6
+		c-3.2-0.5-5.7-0.9-7.3-1.2c-1-0.2-1.5-0.6-1.5-1.2c0-0.2,0.1-0.4,0.2-0.6v-0.8c0.1-5.3,0.1-9.1,0.1-11.3c-0.1-4.2-0.4-8-0.9-11.3
+		c-1.3-8.4-4.1-15.3-8.5-20.7c-1.9-2.3-4.2-4.4-6.8-6.3c-6.1-4.5-13-7.5-20.7-8.8c-6.8-1.2-13.3-1-19.7,0.5
+		c-0.1,0.1-0.3,0.2-0.5,0.2c-1.9,0.7-3.3,1.3-4.3,1.7c-1.7,0.7-3.1,1.4-4.2,2c-6.1,3.2-11.2,8.6-15.4,16.1
+		c-3.9,6.9-6.3,14.3-7.2,22.1c-0.8,6.8-0.4,14.8,1.1,24.1c0.7,4.5,1.7,8.5,2.7,11.8c2.5,7.5,6.4,14.3,11.9,20.2
+		c5.5,6,11.9,10.5,19.2,13.6c3,1.3,7,2.6,11.9,3.9c7.2,1.9,11.2,3,12,3.3c9.8,3,16.8,7.1,21.2,12.6c0.2,0.2,0.3,0.4,0.4,0.6
+		c3.4,4.1,6,9,7.7,14.9c1.4,4.9,2.3,10.9,2.7,17.8c0.2,4.7,0.4,8.2,0.7,10.6c0.8,8,2.8,15.2,5.9,21.6c3.5,7.1,8.2,12.8,14.1,17.1
+		c4,2.8,9.4,5.5,16.3,7.9c3.8,1.3,9.6,3.3,17.3,6c11.9,4.8,20.4,11.4,25.6,19.8c3.5,5.7,5.7,12.8,6.6,21.2c0.4,3.1,0.6,6.8,0.8,11.1
+		c0.1,5,0.2,8.7,0.3,11.2c0.1,2.6,0.2,4.7,0.5,6.2c0.3,2.3,0.9,4.3,1.7,5.9c0.9,2,2.3,3.6,3.9,4.8c1.8,1.3,3.7,2,5.7,2
+		c1.6,0,3.2-0.5,4.7-1.5c1.4-0.9,2.6-2.1,3.6-3.6c1.5-2.3,2.5-5.5,3-9.5c0.1-0.7,0.2-2.3,0.4-5c0.2-2.1,0.3-3.7,0.5-5
+		c0.6-4,2-7.6,4.2-10.8c2.3-3.5,5.1-6,8.5-7.4c1.5-0.6,3.7-1.4,6.8-2.2c5.1-1.7,9.3-4.7,12.7-8.9c2-2.5,3.4-5.3,4.2-8.2
+		c0.8-3.2,0.6-6.2-0.5-8.9C585.4,189,583.4,186.8,580.5,185.1z M-50.5,235.2c-1.5-0.2-3.2-0.2-5.1-0.2c-4.3-0.1-7.8,0-10.4,0.2
+		c-3.6,0.3-6.8,1-9.5,2.1c0,0.4,0.1,0.7,0.1,1.1c0.5,5,1.9,9.8,4,14.3c0.2,0.5,0.4,0.9,0.5,1.3c0.1,0,0.2,0,0.3-0.1
+		c2.3-0.4,5.3-0.7,9.2-0.9c6.8-0.3,12-0.2,15.7,0.4c0.1-0.2,0.2-0.5,0.4-0.8c2.2-4.5,3.5-9.3,4-14.3c0.1-0.7,0.1-1.4,0.2-2.1
+		c-0.3,0.1-0.7,0.1-1.2,0.1C-45.9,235.7-48.6,235.4-50.5,235.2z M502.4,486.6c1.6-9,2.4-16,2.5-21c0.1-8.5-1.3-16-4.3-22.5
+		c-3.5-7.7-8.5-13.3-15.2-16.9c-3.4-1.9-8.1-3.4-13.9-4.6c-13.8-2.8-29.9-4.1-48.2-3.7c-2.3,0-4.1,0-5.6-0.3c-0.6,0-1.2,0-1.7,0.1
+		c0,2.6-0.4,4.6-1.1,6h-0.5c-0.3,0.4-0.6,0.7-0.9,0.9c0.7,0.8,1.2,1.9,1.5,3.3l0.8,3.1c0.2,1.1,0.2,1.9,0.2,2.5v0.2
+		c1.7,0,3.4,0.1,5.1,0.1c0.1,0,0.1,0,0.2,0c3.4-0.1,5.4-0.2,6-0.2c4.4,0,8.2,0.1,11.6,0.4c8.9,0.8,16.3,3.1,22,6.7
+		c3.8,2.4,7.2,5.5,10.1,9.4c2.8,3.7,4.9,7.7,6.4,12.2c2.8,8.2,3.6,17.3,2.1,27.3c-0.3,2.1-1,5.9-2.2,11.4c-1,4.7-1.7,8.5-2,11.4
+		c-0.3,2.3-0.4,4.9-0.3,7.6h24c-0.2-2.5-0.1-5,0.2-7.4c0-1.6,0-3.3,0.1-5C499.8,503.2,335.7,496.2,502.4,486.6z M-259,360.8l2.5-0.3
+		c4.1-0.4,8.1-0.1,12,0.8c0.1,0,0.1,0,0.2,0c0-0.1,0-0.2-0.1-0.3c-0.2-1.1-0.9-2.9-2.2-5.2c-1.2-2.2-1.8-3.9-1.9-5.2
+		c0-0.5,0-1.1,0.1-2c-0.2,0-0.4,0-0.7-0.1c-3.4-0.5-6.8-0.4-10.1,0.4c-0.2,0-0.4,0.1-0.5,0.1c0.1,0.7,0.1,1.2,0.1,1.6
+		c-0.1,1.3-0.7,3-1.9,5.2c-1.3,2.3-2,4-2.2,5.2c-0.1,0.3-0.1,0.6-0.1,0.9c0.6-0.2,1.2-0.4,1.8-0.6
+		C-261.1,361.1-260.1,360.9-259,360.8z M-668,53.7c-0.4-0.1-1-0.5-1.8-1v21.9c6.7-5.5,14.1-10.1,22.4-13.5c1.8-0.8,3.9-1.6,6.3-2.4
+		l-0.4-0.7c-0.1-0.2-0.1-0.4-0.1-0.7c0-0.2,0.1-0.3,0.2-0.5c0-0.1,0-0.1,0.1-0.2c-1.7-1.7-3.1-3.8-4.2-6.1c-0.2,0.4-0.6,0.8-1.1,1.1
+		c-1.6,1-3.4,1.8-5.3,2.2c-1.5,0.4-3.8,0.5-7,0.5c-2.4,0-4.2,0-5.3-0.1C-665.8,54.3-667,54.1-668,53.7z M475.2,464.4
+		c-1.3-4.2-3.2-8-5.7-11.6c-2.6-3.6-5.7-6.6-9.2-9c-4.7-3.2-10.7-5.3-17.9-6.4c-4.2-0.6-10.6-0.9-19.2-0.8c-3.2,0.1-5.6,0-7.2-0.2
+		c-0.1,0-0.2,0-0.3-0.1c0,0.3-0.1,0.5-0.2,0.7l-0.8,1.8c-0.2,0.4-0.4,0.9-0.8,1.5c-0.6,0.8-1.2,1.5-2,2.2c-0.2,0.2-0.5,0.4-0.7,0.6
+		c3.8,2.4,7.1,5.4,9.8,8.8c0.3,0.4,0.6,0.7,0.8,1.1c1.7,0,3.4,0.1,5.1,0.3c4.9,0.4,9.1,1.5,12.8,3.3c4.4,2.1,7.5,4.9,9.4,8.5
+		c2.2,4.1,2.8,9.1,1.9,14.9c-0.4,2.1-0.9,4.6-1.8,7.4c-1,3.2-1.7,5.7-2.2,7.3c-2.6,8.6-4.2,17-4.7,25.1h29.6c0-4.5,0.4-9,1.1-13.4
+		c0.3-1.7,0.9-4.5,1.7-8.3c0.8-3.6,1.3-6.4,1.7-8.3C478.1,480.6,477.6,472.1,475.2,464.4z M-268.8,384.7c-0.2,0.1-0.3,0.2-0.5,0.3
+		c-2.2,0.9-3.7,1.7-4.4,2.2c-3.4,2.1-5.5,5-6.5,8.9c-0.4,1.5-0.6,3.8-0.7,6.9c0,2.2-0.1,3.9-0.4,5.3c8.7-4.8,17.9-8.8,27.5-12.1
+		c7.8-2.7,15.6-4.8,23.5-6.3c-0.6-0.6-1.5-1.4-2.9-2.3c-1-0.7-1.8-1.2-2.4-1.5c-0.9-0.4-2.4-0.9-4.4-1.5c-0.8-0.3-1.6-0.6-2.3-1.1
+		c-1.3-0.7-2.4-1.7-3.3-2.7c-0.9-1.1-1.4-2.2-1.5-3.4c-0.2-0.5-0.3-1-0.2-1.8c0-1.5,0.6-3.9,1.8-7.4c0.6-1.6,0.9-3,1.1-4.3
+		c-0.6,0.1-1.7,0-3.1-0.2c-3.3-0.6-7.1-0.6-11.5-0.1c-1.9,0.2-3.3,0.5-4.2,0.9c-0.1,0-0.2,0.1-0.4,0.1c0.2,1.1,0.5,2.3,1,3.6
+		c1.2,3.5,1.8,6,1.8,7.4c0,0.4,0,0.7-0.1,1c0.3,1.9,0,3.5-1.1,4.6c-0.4,0.5-1.2,1.1-2.3,1.7c-1.8,1-3.2,1.5-4.1,1.6
+		C-268.5,384.7-268.6,384.7-268.8,384.7z M-652,45.1c0.8-0.2,1.3-0.3,1.6-0.5c0.5-0.3,1-1,1.6-2c0.3-0.7,0.6-1.3,0.8-2.1
+		c0-1.7,0.1-3.4,0.4-5.1l-1.5,0.3c-2.9,0.4-6.2,0.6-9.9,0.5c0,0-0.1,0-0.1,0c0,1.8,0,3.2,0.1,4.2c0.2,1.7,0.8,3,1.8,3.9
+		C-656.1,45.2-654.3,45.5-652,45.1z M-482,142c-0.4,0.6-1,1.1-1.8,1.7c-1.8,1.7-3.2,3-4.1,3.9c-1.2,1.1-2.4,2.1-3.5,2.8
+		c2.4,0.7,4.8,1.3,7.1,2c0.6,0.2,1.2,0.4,1.8,0.5c0.1,0,0.2,0.1,0.2,0.1c0.1-0.1,0.2-0.2,0.2-0.2c0.6-0.5,1.2-1.1,1.8-1.7
+		c2.3-2.5,3.7-5.8,4.3-9.9c0.3-2.1,0.3-4.6,0.1-7.5c-0.3,0.5-0.6,0.9-1,1.4c-1.3,1.5-2.2,2.6-2.7,3.4
+		C-480.6,140.1-481.4,141.3-482,142z M424.6,463.8c1.4,3.9,2.1,7.8,2.1,11.9c0,4.2-0.9,8.1-2.4,11.8c-0.5,1.3-1.3,2.8-2.3,4.6
+		c-1.6,2.8-2.4,4.3-2.5,4.4c-3.1,5.7-4.3,10.7-3.5,14.9c0.4,2.4,1.6,4.9,3.4,7.7c0.2,0.3,0.4,0.6,0.6,0.9H347
+		c0.2-0.3,0.4-0.6,0.6-0.9c1.8-2.8,2.9-5.3,3.4-7.7c0.8-4.2-0.4-9.2-3.5-14.9c-0.1-0.2-0.9-1.6-2.5-4.4c-1-1.8-1.8-3.3-2.3-4.6
+		c-1.6-3.7-2.4-7.6-2.4-11.8c0-4,0.7-8,2.1-11.9c0.9-2.5,2.1-4.8,3.5-7.1c0.7-1.1,1.6-2.2,2.4-3.3c2.6-3.1,5.6-5.8,9-8.1
+		c1.2-0.8,1.7-1.5,1.3-2.3c-0.1-0.2-0.2-0.3-0.4-0.4c0-0.2-0.1-0.5-0.3-0.8c-0.1-0.1-0.4-0.5-1-1.1c-1.3-1.3-2.2-2.7-2.7-4.4h0.9
+		c-0.1-0.1-0.3-0.2-0.4-0.3c-0.1-0.2-0.3-0.3-0.4-0.5c-0.1-0.1-0.2-0.2-0.3-0.2c0-0.4-0.1-0.7-0.1-1.1l-0.1-1.2l0.8-3.7
+		c0.2-1.3,0.6-2.2,1.1-2.8l0.3-0.2V426c0-0.1,0.1-0.2,0.2-0.2c0-0.1,0-0.2,0.1-0.2v-0.7c0-0.1,0.1-0.2,0.1-0.2
+		c0-0.1,0.1-0.1,0.1-0.2c0.1-0.1,0.1-0.2,0.2-0.2c0-0.1,0.1-0.2,0.1-0.2c-0.1-0.1-0.2-0.2-0.2-0.2c0-0.1,0-0.1-0.1-0.2
+		c0-0.1,0-0.1-0.1-0.2c-0.1-0.1-0.2-0.1-0.3-0.1h-0.2c-0.1-0.1-0.2-0.3-0.4-0.4h-0.6c-0.7-1.3-1.1-3.1-1.1-5.3
+		c0-1.2,0.1-2.2,0.2-2.8c0.2-0.7,0.5-1.5,0.9-2.3c0.6-1,1.1-1.8,1.7-2.4c0.7-0.7,1.7-1.4,3-2c0.2-0.1,1-0.4,2.3-0.9
+		c0.2,0,0.6,0,1.1-0.1c0.5-0.1,1.2-0.2,2-0.2c2.2,0,4.4,0,6.6,0.1h24c2.4,0,4.8-0.1,7.2-0.1c0.4,0,0.7-0.1,1.1-0.1
+		c0.2,0,0.3-0.1,0.5-0.1c1.9,0.7,3,1.2,3.3,1.3c1.2,0.6,2.2,1.3,3,2c0.6,0.6,1.2,1.4,1.7,2.4c0.5,0.8,0.8,1.6,0.9,2.3
+		c0,0.2,0.1,0.4,0.1,0.7c-0.1,0-0.3,0-0.5,0c0,0.1,0.1,0.2,0.1,0.4v1.8c0,0.1,0.1,0.2,0.1,0.3c0.1,0,0.2,0,0.4,0
+		c0,2.1-0.4,3.8-1.1,5h-0.7c-0.1,0.1-0.2,0.2-0.3,0.4c-0.1,0-0.2-0.1-0.3-0.1c-0.2,0-0.3-0.1-0.5-0.1c0,0,0,0.1,0.1,0.1
+		c0,0.1-0.1,0.2-0.1,0.2s0,0.2,0.1,0.2v0.7c0,0.1-0.1,0.2-0.1,0.2c0,0-0.1,0.1-0.1,0.2c0,0.1-0.1,0.2-0.1,0.2c0,0.1,0,0.2-0.1,0.2
+		c0,0.1-0.1,0.2-0.1,0.2c0,0-0.1,0.1-0.1,0.2h0.1l0.1,0.1l0.9,0.9c0.5,0.6,0.9,1.6,1.1,2.8l0.8,3.7l-0.1,1.2
+		c-0.1,0.6-0.2,1.2-0.4,1.8c-0.1,0-0.2,0-0.4,0.1c-0.2,0.1-0.4,0.1-0.5,0.2h0.8c-0.5,1.6-1.3,3.1-2.6,4.4c-0.6,0.6-0.9,0.9-1,1.1
+		c-0.2,0.3-0.3,0.5-0.3,0.8c-0.2,0.1-0.3,0.2-0.4,0.4c-0.4,0.7,0.1,1.5,1.3,2.3c3.4,2.3,6.4,5,9,8.1c0.7,0.8,1.3,1.7,1.9,2.5
+		c0,0.1,0,0.1-0.1,0.2c0,0.1-0.1,0.3-0.1,0.4c0.2,0,0.3-0.1,0.5-0.1C422.4,458.7,423.6,461.2,424.6,463.8L424.6,463.8z M372.9,455.8
+		c-0.6-1.3-1.7-2.3-3.2-3c-3-1.6-6.1-1.7-9.2-0.5c-1.7,0.7-3.5,1.9-5.3,3.7c-4.1,4.1-6.5,9.1-7.2,14.8c-0.4,2.8-0.3,5.5,0.3,8.3
+		c0.6,2.8,1.5,5.4,3,7.8c0.7,1.3,1.6,2.4,2.5,3.1c1.3,1.1,3,1.6,4.9,1.5c1.8,0,3.5-0.6,5-1.6c1.2-0.7,2-1.6,2.6-2.6
+		c0.9-1.6,1.3-3.7,1.1-6.4c0-0.7-0.1-1.8-0.2-3.3c-0.1-1.3-0.1-2.4,0-3.3c0.2-2.2,1.1-4.1,2.5-5.9c0.2-0.2,0.6-0.7,1.3-1.5
+		c0.6-0.6,1-1.1,1.2-1.5c1-1.5,1.5-3.4,1.5-5.8C373.6,458.1,373.4,456.8,372.9,455.8z M412.4,456.7l-0.2-0.2c-4.6,0-9.3,0-13.9,0.1
+		C403,456.7,407.7,456.7,412.4,456.7z M-566.7,54.5c-0.2-0.1-0.4-0.1-0.6-0.2c-0.2,0-0.4-0.1-0.5-0.1c-0.2,0-0.5,0-0.7,0v0.1
+		c-0.2,0-0.4,0.1-0.5,0.1c-0.4,0-0.8,0.1-1.2,0.2c-0.1-0.1-0.1-0.2-0.2-0.3c0-0.1-0.1-0.2-0.1-0.3c-0.5,0-1.1-0.1-1.5-0.2
+		c-2.8,0-6.3-0.1-10.6-0.3c0.3,0.3,0.7,0.6,1,0.8c1.8,1.5,3.6,2.9,5.5,4.3l3.7,2.9c1,0.9,2.3,2.2,3.8,3.9c1.7,1.9,3,3.2,3.7,3.9
+		c2.2,1.9,3.8,3.4,4.7,4.5c0.9,1.2,1.5,2,2,2.5c1.5,1.5,2.6,2.6,3.3,3.4c0.6,0.6,1.7,1.8,3.3,3.7c0.2,0.2,0.3,0.4,0.4,0.6
+		c0.2-0.1,0.3-0.2,0.5-0.2c0.2-0.1,0.5-0.3,0.8-0.5c0.4-0.3,0.8-0.7,1.2-1.1l7.4-7.6c3.6-3.8,6.3-6.8,8-9.2c1-1.4,1.6-2.3,1.9-2.6
+		c-0.1,0-0.2-0.1-0.4-0.1c-2.5-1-5.1-1.9-7.6-2.7c0,0.1-0.1,0.2-0.2,0.3c0,0,0,0-0.1-0.1c-0.2,0-0.3-0.1-0.5-0.1
+		c-0.1,0-0.1-0.1-0.2-0.1c-0.2,0-0.3-0.1-0.4-0.1c-0.1-0.1-0.2-0.2-0.4-0.2c-0.2,0-0.3-0.1-0.5-0.1h-0.3c-0.1-0.1-0.2-0.1-0.3-0.2
+		c0.1,0,0.1-0.1,0.2-0.2c-8-2.4-16.3-4-24.7-4.9c0.2,0.2,0.3,0.3,0.4,0.4h-0.1C-566.4,54.6-566.5,54.5-566.7,54.5z M-498.5,41
+		c-2.1-0.7-4.9-1.2-8.6-1.7c-8.3-1-15.6-1.5-21.7-1.4c-7.9,0.1-15,1.2-21.3,3.1c-0.4,0.1-0.7,0.2-1,0.2c-0.1,0.2-0.1,0.4-0.2,0.7
+		l-0.9,2.2c-0.2,0.4-0.4,0.9-0.5,1.5c-0.1,0.4-0.2,0.7-0.2,1.1l-0.2,0.8l-0.1,0.8c-0.2,1.7-0.2,3.3,0.1,4.8
+		c5.1,1.1,10.4,2.5,15.8,4.3c3.9,1.3,7.1,2.5,9.8,3.6c13.9,5.8,25.6,14.7,35.1,26.4c0.1,0.1,0.2,0.2,0.3,0.4
+		c0.1-0.7,0.3-1.5,0.5-2.4c1.2-5.8,0.6-10.9-1.7-15.2c-0.5-0.9-0.8-1.6-0.9-2.1c-0.2-0.7-0.1-1.5,0.1-2.5c0.1-0.6,0.4-1.4,0.7-2.5
+		c1-3.4,1.3-6.8,0.8-10.4c-0.5-3.6-1.7-6.9-3.6-9.9c-0.2-0.2-0.3-0.5-0.4-0.7l0.4-0.8C-496.8,41.5-497.5,41.3-498.5,41z
+		 M-586.2,53.3L-586.2,53.3c0.1,0.2,0.1,0.4,0.2,0.6c0.3,0.6,0.8,1.1,1.6,1.7c3.7,2.8,6.4,5,8.2,6.5c3.1,2.5,5.6,4.9,7.5,7.1
+		c1.7,1.9,2.8,3,3.1,3.3l2.5,2.1c0.2,0.1,0.8,0.9,2,2.3c0.6,0.7,1.6,1.8,2.9,3.3l4.2,4.5c-1.4,0.2-2.8,0.6-4.3,1.2
+		c-0.8,0.3-1.6,0.8-2.4,1.2c-2.1,1.3-3.7,2.8-4.9,4.6c-1.8,2.7-2.5,6.3-2.1,10.6c0.2,1.5,0.5,3.4,0.9,5.5c0.3,1.3,0.6,2.3,0.8,3.3
+		c0,0.1-0.1,0.1-0.2,0.2c-0.7,0.6-1.5,1.4-2.3,2.4c-0.8,1.3-1.5,2.3-2,2.8c-0.6,0.8-1.7,1.9-3.1,3.4c-2.5,2.6-5.8,6.5-9.8,11.7
+		l-4.4,5.6c-0.1,0.1-0.1,0.2-0.2,0.2c-0.3-0.4-0.6-0.8-0.9-1.2c-14.6-18.3-26.1-32-34.5-41.3c-1.4-1.5-2.8-3-4.2-4.5
+		c0.7-0.9,1.5-1.8,2.2-2.7c0.5-0.5,1.2-1.1,1.8-1.8c0.2-0.3,0.5-0.6,0.8-0.9l0.1,0.1c0.1,0,0.2-0.1,0.3-0.1c0.1-0.1,0.2-0.1,0.3-0.2
+		v-0.1c-0.1,0-0.2,0-0.4-0.1c0.4-0.5,0.8-1,1.1-1.6l2.8-3c1.3-1.4,2.3-2.5,2.9-3.3c1.1-1.4,1.8-2.1,2-2.3l2.5-2.1
+		c0.3-0.3,1.3-1.4,3.1-3.3c1.9-2.2,4.4-4.6,7.5-7.1c1.5-1.3,3.8-3,6.7-5.3c1.6-0.8,2.8-1.6,3.7-2.4c0.4-0.4,0.7-0.7,0.8-1.1
+		C-588.4,53.3-587.3,53.3-586.2,53.3z M-587.1,91.7c-0.9-0.3-1.6-0.1-2.3,0.5c-0.1,0.1-0.4,0.5-0.9,1.1c-0.7,1.1-0.9,2-0.5,2.7
+		c0.1,0.3,0.4,0.6,0.9,0.9c1,0.7,2,0.9,3,0.7c0.6-0.1,1-0.4,1.4-0.8c0.4-0.4,0.6-0.8,0.7-1.3c0-0.5-0.1-1.1-0.4-1.8
+		C-585.7,92.6-586.3,92-587.1,91.7z M-587,68.3c-0.3-0.1-0.7-0.2-1.3-0.2c-0.3,0-0.6,0.1-0.9,0.2c-0.3,0.1-0.6,0.3-0.9,0.7
+		c-0.5,0.5-0.8,1-0.9,1.5c-0.2,0.6-0.1,1.2,0.2,1.8c0.2,0.4,0.6,0.7,1.2,1c1.2,0.6,2.3,0.6,3.2-0.1c0.6-0.4,1-1,1.1-1.8
+		c0.1-0.8-0.1-1.5-0.5-2.2C-586.3,68.8-586.7,68.5-587,68.3z M-640.8,61.9c-0.1,0-0.2,0.1-0.4,0.1c-0.2,0.1-0.5,0.2-0.7,0.2
+		c-0.2,0-0.4,0.1-0.6,0.2c-0.1,0-0.2,0-0.4,0.1c0,0-0.1,0-0.1,0c-0.2,0.1-0.3,0.1-0.5,0.2c-3.5,1.3-6.8,2.8-9.7,4.3l4.3,3.3
+		c4.3,3.5,8.9,7.6,13.6,12.3c0,0,0.1,0.1,0.1,0.1c0,0,0,0.1,0.1,0.1l2.9,3.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0,0.1,0.1,0.2,0.1
+		c0.7,0.7,1.4,1.4,2.1,2.1c0.1-0.1,0.2-0.2,0.3-0.4c0.1-0.1,0.2-0.2,0.3-0.4c0.4-0.6,1.1-1.3,2.1-2.1c1-1,1.9-2.1,2.7-3.1
+		c0,0,0-0.1,0-0.2c1.1-1.3,1.8-2.1,2.3-2.5c0.7-0.8,1.8-1.9,3.3-3.4c0.5-0.5,1.2-1.3,2-2.5c1-1.1,2.6-2.6,4.7-4.5
+		c0.7-0.7,2-2,3.7-3.9c1.5-1.7,2.8-3,3.8-3.9l3.7-2.9c1.7-1.3,3.5-2.6,5.2-4c0.2,0,0.4,0,0.6-0.1c0.4-0.4,0.9-0.8,1.4-1.2
+		c-2.8,0.1-5.4,0.2-7.8,0.4c-0.1,0-0.2,0-0.3,0l0.1,0.1v0.1c0,0,0,0.1-0.1,0.1c-0.2,0-0.4-0.1-0.5-0.1c-1.3,0-2.5,0-3.8,0V54
+		c-0.2,0-0.3,0.1-0.5,0.1c-0.1,0-0.1,0-0.2,0c-0.9,0.1-1.8,0.2-2.7,0.3c-0.1,0.1-0.2,0.3-0.4,0.4l-0.4,0.4c-1,0-2,0-3,0
+		c-0.2,0-0.5,0-0.7,0l0.3-0.3c-9.2,1.3-18.2,3.6-27.1,6.8c0,0.1,0,0.1,0.1,0.1c0,0,0,0-0.1,0.1C-640.6,61.8-640.7,61.9-640.8,61.9z
+		 M-479.2,118.6c-0.3-1-0.7-2.1-1.1-3.1l-1.2,1.7c-3.9,5.1-8.2,9.9-12.8,14.4l-15.9,14.6c0,0-0.1,0.1-0.1,0.1
+		c5.3,1,10.4,2.1,15.3,3.3c0.2-0.2,0.6-0.6,1.3-1.1c2.1-1.5,4.8-3.8,8.1-7c0.8-0.8,1.5-1.5,2-2.1l1.1-1.7c0.5-0.7,1.4-1.9,2.7-3.5
+		c1.2-1.4,2.1-2.6,2.6-3.5c0.2-0.5,0.4-0.9,0.7-1.1c-0.1-0.5-0.2-1.1-0.3-1.7C-477.4,124.7-478.2,121.6-479.2,118.6z M-49.3,212.3
+		c0-0.5,0.2-1.1,0.7-1.7l3.7-4.9c0.2-0.2,0.3-0.4,0.4-0.6c0-0.2,0.1-0.4,0.1-0.5c0.5-0.7,0.8-1.4,1.1-2.1c-0.4,0.1-1.1,0-2-0.2
+		c-1.4-0.4-2.9-0.7-4.4-0.9c0,0.4-0.2,0.9-0.6,1.5l-4.7,6.8l-0.5,1.1l-1.2,1.4c2.9,0,4.9,0,6.2,0.1
+		C-50.2,212.3-49.8,212.3-49.3,212.3z M580,496.6c-0.5-1.5-1.3-3.4-2.6-5.8c-0.9-1.7-1.6-3-2.1-4c-0.5,1.1-1.2,2.3-2,3.6
+		c-7,11.8-14.8,21.7-23.4,29.7h31.5c0.4-5.4,0.3-11.2-0.5-17.4C580.8,335.1,580.4,498.1,580,496.6L580,496.6z M573.9,483.4
+		c0-0.4,0.1-1,0.5-1.9c4-9.5,6-19.5,6.1-30.1c0.2-10.5-1.6-20.5-5.3-30.1c-0.9-2.4-2.5-5.9-4.7-10.6c0,0,0,0.1-0.1,0.1
+		c-1.8,4.1-3.1,7.1-4.1,9.1c-1.6,3.3-3.2,6.2-4.9,8.7c-1.2,1.9-2.8,4.1-4.9,6.9c-7.2,9.4-13.9,16.9-20.3,22.5
+		c-0.9,0.8-1.8,1.5-2.6,2c0,2-0.2,4.1-0.4,6.1c-0.4,3.7-1.2,8.5-2.4,14.5c-1.5,7.5-2.5,12.3-2.8,14.4c-0.7,4.1-1,7.7-0.9,10.8
+		c0.2,3.9,0.9,7.7,2.3,11.4c0.4,1,0.8,2,1.3,2.9h15.1c10.6-9.4,20-21.5,28-36.3C574,483.6,573.9,483.5,573.9,483.4L573.9,483.4z
+		 M-492.3,92.7c4.5,6.2,8.2,12.8,11,19.8c-0.1,0.1-0.2,0.2-0.4,0.4c-0.1,0.1-0.2,0.2-0.3,0.4l-2.6,3.2c-2.3,2.9-4.2,5.3-5.9,7.2
+		c-1.1,1.2-2.7,2.8-5,5c-5.8,5.7-11.5,11-17,15.9l-0.9-2.9c-1-3-1.9-5.5-2.8-7.6c-0.4-0.8-1.1-2.3-2.2-4.4c-0.9-1.9-1.7-3.4-2.1-4.5
+		c-0.6-1.3-0.9-2.3-1.2-2.7l-1.5-2.1c-1.5-1.9-2.8-3.9-3.8-5.8c-0.3-0.6-0.7-1-1-1.2c0-0.1,0-0.2-0.1-0.3c-0.3-2.6-0.8-5-1.4-7.1
+		c-1.4-5-3.8-9.5-7.2-13.3c-1.9-2.2-3.9-3.9-6.2-5.3c-0.2-0.2-0.4-0.4-0.7-0.5L-545,86c-0.8-0.3-1.2-0.5-1.3-0.5
+		c-0.3-0.1-0.6-0.2-1.1-0.2v-0.1c0-0.1-0.1-0.2-0.1-0.2c0-0.1,0.1-0.2,0.1-0.2c0-0.1,0-0.2,0.1-0.2s0.1-0.1,0.1-0.2l0.2-0.2
+		c0.2-0.1,0.3-0.2,0.5-0.2c0.1,0,0.2-0.1,0.3-0.1l0.1-0.1c0.1,0,0.2,0,0.4-0.1c0.1,0,0.1,0,0.2-0.1c0-0.1-0.1-0.2-0.1-0.3
+		c1.4-1.3,3-2.9,4.9-4.9l3.6-3.9c2.7-2.8,4.6-5,5.8-6.6l1.9-2.8c0.3-0.5,0.6-0.9,0.7-1.3c2.8,1.2,5.3,2.3,7.7,3.6
+		C-509.8,73.4-335.2,81.8-492.3,92.7z M-508.8,85.7c0.6,0.3,1.3,0.3,2-0.1c0.4-0.2,0.7-0.5,0.9-0.9c0.2-0.4,0.3-0.9,0.2-1.3
+		c-0.1-0.9-0.7-1.6-1.7-2l-0.5-0.2l-0.4-0.4c-0.4-0.3-0.7-0.3-1-0.1c-0.4,0.2-0.6,0.6-0.7,1.1l-0.1,1.2c-0.1,0.9-0.2,1.4-0.1,1.5
+		C-510.2,85-509.7,85.4-508.8,85.7z M-503.4,104.5c-0.1-0.4-0.3-0.7-0.6-0.9c-0.4-0.4-1.1-0.5-1.9-0.4c-0.5,0-0.9,0.1-1.1,0.2
+		c-0.2,0.1-0.4,0.4-0.7,0.8c-0.4,0.6-0.6,1.1-0.6,1.4c0,0.4,0.1,0.7,0.2,0.9c0.2,0.7,0.7,1.3,1.3,1.7c0.6,0.3,1.2,0.4,1.9,0.2
+		c0.7-0.2,1.2-0.6,1.5-1.1C-503,106.5-502.9,105.6-503.4,104.5z M-61,205.2c0.7-1,1.8-2.5,3.4-4.3c-1.9,0-4.1,0.1-6.5,0.3
+		c-0.7,0-1.3,0.1-1.9,0.1c0,0.3-0.2,0.6-0.4,0.9c-1.3,2.3-2.7,4.6-4.4,7.1c-0.3,0.4-0.6,0.7-0.9,0.9h-0.1c0.1,1.1,0.2,2.1,0.2,3.1
+		c1.8-0.4,3.8-0.7,5.8-0.9L-61,205.2z M-122.1,397.3c0.1-0.3,0.2-0.7,0.4-1.1c1.2-1.9,3.2-2.9,6.2-3.1c1.5-0.1,2.7,0,3.7,0.4v-8.8
+		c-0.2-0.1-0.5-0.3-0.8-0.6c-1.4-1.1-2.9-1.5-4.6-1.2c-1.7,0.2-3,1.1-3.9,2.7l-0.7,1c-0.3,0.4-0.6,0.6-0.9,0.6
+		c-0.5,0-0.9-0.2-1.3-0.7c0,0-0.3-0.5-0.8-1.3c-0.6-1.1-1.7-1.9-3.1-2.4c-1.3-0.4-2.6-0.5-4-0.2c-1.9,0.4-3.3,1.3-4.2,2.7l-0.6,1.1
+		c-0.3,0.4-0.6,0.6-0.9,0.7c-0.5,0.2-1,0-1.5-0.5l-1-1.4c-1.1-1.5-2.7-2.2-4.7-2.1c-1.8,0.1-3.4,0.9-4.7,2.3
+		c-0.1,0.1-0.2,0.2-0.4,0.3c0,1-0.1,2.2-0.1,3.4c0,0.2,0,0.4-0.1,0.5c8.4,1.6,16.7,3.8,24.9,6.6
+		C-124.1,396.6-123.1,396.9-122.1,397.3z M-260.3,346.3c0.1,0,0.3,0,0.4-0.1c3.6-0.8,7.1-1,10.7-0.5c0.5,0,0.9,0.1,1.2,0.3
+		c0.1-0.5,0.3-1.1,0.4-1.7c0.6-2.6,0.5-4.5-0.2-5.9c-0.7-1.4-2-2.4-3.9-2.9c-0.6-0.2-1.1-0.2-1.7-0.3c-1.2-0.1-2.3,0-3.3,0.3
+		c-1.8,0.5-3.1,1.5-3.9,2.9c-0.7,1.4-0.8,3.4-0.2,5.9C-260.5,345.1-260.4,345.7-260.3,346.3z M525.1,495.6c0.3-2.3,1.3-7.6,3.1-16.1
+		c1.3-6.6,2.2-12.1,2.4-16.2c0.6-8-0.2-15.8-2.3-23.4c-2.3-7.9-5.8-14.9-10.6-21c-5-6.3-11.1-11.2-18.3-14.8c-7.4-3.6-15-5.3-22.8-5
+		c-0.5,0-0.9,0-1.2-0.1H315.4c-1.4-0.1-2.8-0.1-4.2-0.2v1.4c-0.1,0-0.3,0.1-0.4,0.1v0.4c0,0.1,0,0.2,0.1,0.2v12.3h-0.1
+		c0.1,0.7,0.1,1.5,0.1,2.4h0.2v-0.2h39.7c0.1-0.9,0.2-1.6,0.4-2.2c0.2-0.7,0.6-1.5,1.1-2.4c0.5-0.8,0.9-1.5,1.2-2
+		c0.9-1.1,2.6-2.2,5.1-3.4l2.3-1c0.6-0.2,1-0.2,1.4-0.2h0.1l0.5-0.1h8.5V404h24v0.1h8.5l0.5,0.1h0.1c0.4,0,0.8,0,1.4,0.2l2.3,1
+		c2.5,1.2,4.2,2.4,5.1,3.4c0.4,0.5,0.8,1.1,1.2,2c0.6,0.9,0.9,1.7,1.1,2.4c0.2,0.6,0.4,1.3,0.4,2.2c0.1,0,0.1,0,0.2,0
+		c0.7-0.1,2.3-0.2,4.8-0.3c10.5-0.2,19.5,0,26.9,0.5c9.7,0.6,18.5,1.9,26.5,3.8c4.9,1.2,8.8,2.6,11.8,4.1c4,2,7.5,4.8,10.6,8.5
+		c2.9,3.4,5.3,7.3,7,11.7c3.1,7.7,4.4,16.7,3.7,26.9c-0.3,3.9-1,9-2.1,15.3c-1.3,7.7-2.2,12.8-2.5,15.3c-0.6,4.6-0.8,9.1-0.8,13.4
+		c0,0.9-0.1,1.5-0.4,1.8l-0.1,0.1c0,1.2,0.1,2.5,0.3,3.7h25.7c-2-4.5-3.1-9.2-3.3-14.2C524.4,503.1,524.6,499.7,525.1,495.6
+		L525.1,495.6z M-138.6,382.4c0.2,0.3,0.4,0.4,0.5,0.4c0,0,0.2-0.1,0.5-0.3c2-2.1,4.4-3.1,7.4-3.1c2.9,0.1,5.4,1.1,7.3,3.2
+		c1.7-1.5,3.6-2.5,5.8-2.8c1.9-0.2,3.5,0.1,4.9,0.9c0-0.1,0-0.2-0.1-0.4c-0.7-3.2-2.1-5.7-4-7.5c-0.6-0.5-1.5-1.1-2.7-1.8
+		c-1.3-0.8-2.2-1.4-2.7-1.9c-1.5-1.3-2.5-3-2.9-5c0-0.1,0-0.2-0.1-0.3l-0.7,0.1c-4.2,0.1-7.6,0-10.3-0.2c-0.5,0-1-0.1-1.3-0.2
+		c0,0.2-0.1,0.4-0.1,0.7c-0.4,2-1.4,3.7-2.9,5c-0.6,0.5-1.5,1.1-2.7,1.9c-1.3,0.7-2.2,1.4-2.7,1.8c-2,1.7-3.3,4.2-4,7.5
+		c-0.1,0.5-0.2,0.9-0.3,1.5c1.5-1,3.4-1.5,5.7-1.5C-141.5,380.3-139.7,381-138.6,382.4z M-96.7,408.8c-4.1-2.3-8.2-4.4-12.5-6.3
+		v-3.8c0-0.2,0.1-0.3,0.1-0.4v-7.4c0.2-0.3,0.2-0.7,0.2-1.3c0.1-3.2,0-5.9-0.2-8.1v-1.4c0.1-0.2,0.1-0.3,0.2-0.5v-8
+		c0-0.1-0.1-0.2-0.1-0.4c0.3-2,0.5-4.4,0.5-7.2c0-2.1-0.1-5.3-0.1-9.5c0-2.2,0.3-5,0.8-8.3c1-6.4,2.5-11.9,4.5-16.5
+		c2.6-5.8,5.9-10.3,10.1-13.6c0.9-0.7,3.3-2.3,7.1-4.7c2.9-1.9,5.1-3.6,6.6-5.2c1.7-1.8,3-3.8,3.8-6c1-2.4,1.3-4.7,0.9-6.9
+		c-0.3-2-1.4-4.3-3.2-7c-2.3-3.4-3.7-5.7-4.2-6.6c-1-2.1-1.5-4.3-1.5-6.7c0-2.4,0.4-4.6,1.3-6.7c0.9-2.1,2.2-4,4-5.6
+		c1.7-1.6,3.7-2.8,5.9-3.5c0.5-0.2,0.9-0.3,1.2-0.5c0.2,0,0.4,0,0.6,0c6.4-0.5,10.9-0.8,13.3-0.8c2.6,0,6.6,0.2,11.8,0.5
+		c0.4,0.3,0.9,0.5,1.5,0.8c2.2,0.7,4.1,1.9,5.9,3.5c1.7,1.6,3.1,3.5,4,5.6c0.9,2.1,1.3,4.3,1.3,6.7c0,2.4-0.5,4.6-1.5,6.7
+		c-0.4,1-1.8,3.2-4.2,6.6c-1.8,2.7-2.9,5-3.2,7c-0.4,2.2,0,4.5,0.9,6.9c0.8,2.2,2.1,4.2,3.8,6c1.5,1.6,3.7,3.3,6.6,5.2
+		c3.8,2.4,6.1,3.9,7.1,4.7c4.2,3.3,7.5,7.9,10.1,13.6c2,4.5,3.5,10,4.5,16.5c0.5,3.3,0.8,6.1,0.8,8.3c0,4.2-0.1,7.4-0.1,9.5
+		c0,2.8,0.1,5.2,0.5,7.2c0,0.1-0.1,0.2-0.1,0.3v8c0,0.2,0.1,0.3,0.2,0.5v12.2c0,0.1-0.1,0.2-0.2,0.2c0,0.1-0.1,0.2-0.1,0.2
+		c0,0.1,0,0.2-0.1,0.2v0.2c0,0.1,0,0.2-0.1,0.2v2.3c0,0.1-0.1,0.1-0.1,0.2v2.5c0,0.1-0.1,0.1-0.1,0.2v3.8c0,0.1,0,0.2-0.1,0.2v18
+		c0,0.1,0,0.2-0.1,0.2V435c0,0.1,0.1,0.2,0.1,0.2v2.9c-1.4,1.4-3,2.8-4.6,4V432c0-0.1,0.1-0.2,0.1-0.2v-39.2c0-0.1-0.1-0.2-0.1-0.2
+		v-9.1c0-0.1,0-0.2-0.1-0.2v-1.8c0.1-0.7,0.1-1.3,0.1-2c-0.1-1.2-0.4-2.4-0.7-3.5l-0.4-1.1c-0.1-0.1-0.4-0.5-0.9-1.1
+		c-1-0.9-1.7-1.4-2.1-1.7c-1.5-0.8-3.3-1-5.4-0.5c-1.9,0.4-3.1,1.2-3.7,2.4c-0.3,0.5-0.5,1.2-0.7,2.1c0,0,0,0-0.1,0.1
+		c0,0.1,0,0.2-0.1,0.2c0,0.1-0.1,0.2-0.1,0.2c0,0.1-0.1,0.2-0.1,0.2c0,0.1,0,0.1-0.1,0.2c0,0.1,0,0.2-0.1,0.2c0,0.1-0.1,0.2-0.1,0.2
+		v0.4c0,0.1-0.1,0.2-0.1,0.2v2.3c0,0.1,0,0.2-0.1,0.2v9.5c0,0.1,0,0.2-0.1,0.2v52.5c0,0.1,0.1,0.2,0.1,0.2v3.6
+		c0,0.1,0.1,0.2,0.1,0.2v2c0,0,0.1,0.1,0.1,0.2v0.8c-3,1-6,1.7-9.1,2.1c1-1.5,1.7-3.2,2.1-5c0.6-2.7,0.3-5.3-0.7-7.8
+		c-0.2-0.6-1.1-2.2-2.6-4.9c-1.1-2-1.8-3.7-2-5c-0.2-1.8,0.2-3.9,1.2-6.3c0.6-1.4,1.5-3.4,2.8-6.2c1.5-3.6,2.1-7.5,1.7-11.6
+		c-0.4-4.1-1.7-7.8-3.9-11.1c-0.9-1.3-2.3-3.2-4.4-5.8c-1.7-2.3-2.8-4.4-3.1-6.3c-0.6-2.8-0.1-6.1,1.5-10.1c0.4-1.1,1.1-2.6,2-4.7
+		c0.8-1.9,1.3-3.5,1.7-4.9c1.2-4.7,0.7-9.4-1.4-14.2c-1.9-4.3-4.8-7.9-8.7-10.8c-3.9-2.9-8.2-4.7-12.9-5.4
+		c-4.6-0.7-9.2-0.2-13.9,1.3c-4.5,1.5-8.6,3.9-12,7.1c-2.4,2.2-4.2,4.5-5.3,6.9c-1.9,3.7-2.7,7.9-2.3,12.7c0.3,4.1,1.4,8.5,3.3,13
+		c1.1,2.6,1.8,4.1,2,4.7c0.6,1.8,0.9,3.5,0.9,5c0,2-0.8,4.4-2.3,7.1c-2.3,4.2-3.4,6.4-3.6,6.8c-1.1,2.7-1.5,5.5-1.3,8.4
+		C-97.3,406.2-97.1,407.5-96.7,408.8z M-35.5,335.4c0-0.1-0.1-0.2-0.2-0.2c0,0-0.1-0.1-0.2-0.1C-35.7,335.2-35.7,335.3-35.5,335.4
+		C-35.5,335.4-35.5,335.4-35.5,335.4z M-42,317.4c0,0.1-0.1,0.2-0.2,0.2c-0.1,0.1-0.2,0.1-0.2,0.2c0,0.1-0.1,0.2-0.2,0.2
+		c0,0.1-0.1,0.2-0.1,0.2c0,0.1-0.1,0.2-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2c0,0.1,0,0.2-0.1,0.2c0,0.1-0.1,0.2-0.1,0.2v2.7
+		c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2v0.2c0,0.1,0.1,0.2,0.1,0.2v0.2c0,0.1,0,0.2,0.1,0.2c0,0,0.1,0.1,0.1,0.2
+		c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.2,0.2,0.2c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0,0.1,0.1,0.2,0.2c0,0.1,0.1,0.2,0.1,0.2
+		c0,0.1,0.1,0.2,0.2,0.2c0,0.1,0.1,0.2,0.1,0.2c0.1,0,0.2,0.1,0.2,0.2c0,0.1,0.1,0.2,0.2,0.2c0,0.1,0.1,0.2,0.1,0.2s0.1,0.2,0.1,0.2
+		c0.1,0,0.2,0.1,0.2,0.2c0,0.1,0.1,0.2,0.2,0.2c0,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.1,0.2,0.2,0.2c0,0.1,0,0.1,0.1,0.2
+		c0.1,0.1,0.2,0.2,0.2,0.2c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0.1,0.2,0.2,0.4,0.2c0.1,0.1,0.2,0.1,0.2,0.2c0.1,0.1,0.2,0.2,0.2,0.2
+		c0,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0.1,0.2,0.1,0.2,0.2c0.1,0.1,0.2,0.2,0.2,0.2c0.1,0.1,0.2,0.2,0.3,0.2
+		s0.2,0.2,0.4,0.2c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.2,0.2,0.2,0.2c0.1,0.1,0.2,0.2,0.2,0.2c0,0.1,0.1,0.2,0.2,0.2l0.2,0.2
+		c0.1,0.1,0.2,0.2,0.2,0.2c0.1,0.1,0.1,0.2,0.2,0.2l0.5,0.5c0.1,0,0.2,0.1,0.2,0.2c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.2,0.2,0.2
+		l0.2,0.2c0.1,0,0.2,0.1,0.2,0.2c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.1,0.2,0.2,0.2c0,0.1,0.1,0.2,0.1,0.2c0,0,0.1,0.1,0.2,0.2
+		c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.1,0.2,0.2,0.2c0,0.1,0.1,0.2,0.1,0.2c0,0,0.1,0.1,0.2,0.2c0,0.1,0,0.2,0.1,0.2s0.1,0.2,0.1,0.2
+		l0.1,0.2c0,0,0.1,0.1,0.1,0.2s0.1,0.2,0.1,0.2c0.1,0.1,0.1,0.2,0.2,0.2s0.1,0.2,0.1,0.2c0,0,0.1,0.1,0.2,0.2c0,0.1,0.1,0.2,0.1,0.2
+		c0,0.1,0.1,0.2,0.1,0.2c0,0,0,0,0,0.1c0,0,0.1,0,0.1,0.1c0,0.1,0.1,0.2,0.1,0.2s0.1,0.2,0.1,0.2v0.2c0.1,0.1,0.1,0.1,0.2,0.2
+		c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.2,0.2,0.2c0,0.1,0,0.2,0.1,0.2c0,0.1,0.1,0.1,0.2,0.2c0,0.1,0,0.2,0.1,0.2c0,0.1,0,0.2,0.1,0.2
+		c0,0.1,0.1,0.2,0.2,0.2c0,0.1,0,0.1,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2l0.1,0.2c0,0.1,0.1,0.1,0.1,0.2
+		c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0,0.2,0.1,0.2v0.2c0,0.1,0,0.1,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2
+		c0,0.1,0,0.2,0.1,0.2v0.4c0,0.1,0.1,0.2,0.1,0.2l0.1,0.2v0.2c0,0,0,0.1,0.1,0.2v0.9c0,0.1,0.1,0.2,0.1,0.2l0.1,0.2v0.2
+		c0,0,0,0.1,0.1,0.2v3.1c0,0.1,0,0.2,0.1,0.2c0,0.1,0.1,0.1,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0,0.2,0.1,0.2v1.1
+		c0,0.1,0.1,0.1,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2v0.2c0,0.1,0,0.2,0.1,0.2c0,0.1,0.1,0.1,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2v0.2
+		c0,0.1,0,0.2,0.1,0.2v0.2c0.1,0,0.2,0.1,0.2,0.2c0,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.2,0.2,0.2c0.1,0.1,0.2,0.2,0.2,0.2
+		c0.1,0,0.2,0.1,0.2,0.2c0,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.2,0.2,0.2c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0,0.2,0.1,0.4,0.2l0.5,0.2
+		c0.1,0,0.2,0.1,0.4,0.2c0,0,0.1,0,0.2,0.1c0.1,0,0.2,0,0.4,0.1c0.1,0,0.2,0,0.3,0.1c0.2,0,0.5,0,0.7,0c1.3-0.1,2.5-0.6,3.7-1.3
+		c1.1-0.8,2-1.8,2.6-2.9c0.7-1.5,1.1-3.6,1.1-6.2c0-1.5-0.1-2.9-0.2-4.1c-0.2-1.5-1-3.9-2.4-7.1c-0.9-2.3-1.7-4-2.3-5
+		c-0.9-1.8-2.5-3.9-4.5-6.4c-2.4-2.8-4.7-4.8-6.8-5.9c-0.5-0.3-1-0.5-1.5-0.7c-0.3-0.1-0.6-0.2-0.9-0.3h-2.8c-0.2,0-0.5,0.1-0.7,0.2
+		c-0.1,0.1-0.2,0.1-0.3,0.2c-0.2,0-0.4,0.1-0.6,0.1c-0.2,0.1-0.3,0.2-0.5,0.2c-0.1,0.1-0.2,0.2-0.3,0.2c-0.1,0.1-0.1,0.2-0.2,0.2
+		c-0.1,0-0.2,0.1-0.3,0.2c-0.2,0.1-0.3,0.2-0.4,0.2c-0.1,0.1-0.2,0.2-0.3,0.2c-0.1,0.1-0.2,0.2-0.2,0.2c0,0.1-0.1,0.1-0.2,0.2
+		c-0.1,0.1-0.1,0.2-0.2,0.2C-41.8,317.2-41.9,317.3-42,317.4z M-46.5,262.1c0.1,0,0.2,0.1,0.3,0.1l0.8-0.2c-0.2,0-0.5,0-0.8,0.1
+		C-46.3,262.1-46.4,262.1-46.5,262.1z M-54,273.7c0.5,0.8,0.9,1.5,1.1,1.9c0.6,1,0.9,1.6,1,1.7c0.3,0.4,0.8,0.7,1.5,1.1
+		c1.3,0.8,2.6,1.2,3.7,1.2c0.7,0,1.5-0.1,2.4-0.3c1.4-0.4,2.4-0.9,3.1-1.7c0.4-0.4,0.8-1.1,1.2-2c0.2-0.6,0.4-1.1,0.5-1.5
+		c0.2-0.6,0.2-1.4,0.1-2.4c-0.2-2-0.8-3.9-2-5.8c-0.5-0.6-0.9-1.1-1.1-1.4c-0.5-0.6-1.1-1-2-1.4c-0.8-0.4-1.5-0.7-2.2-0.8
+		c-1.5-0.2-2.8,0.1-3.9,0.9c-1.2,0.7-2,1.7-2.7,3l-0.5,1.2c-0.5,1.3-0.7,2.4-0.8,3.1C-54.5,271.6-54.4,272.7-54,273.7z
+		 M-138.9,355.9c0.7,1.1,1.1,1.9,1.4,2.4c0.4,0.9,0.6,1.8,0.7,2.8h0.5l10.6-0.1c0.4,0,0.7,0,0.9,0.1c0.1-0.9,0.3-1.8,0.7-2.7
+		c0.2-0.5,0.7-1.3,1.4-2.4c0.6-1,1.1-1.9,1.3-2.5c0.5-1.4,0.6-2.9,0.2-4.4c-0.4-1.6-1.1-2.9-2.2-3.9c-0.3-0.2-0.9-0.7-1.8-1.4
+		c-0.7-0.5-1.3-1-1.7-1.4c-1.1-1.1-1.7-2.5-1.7-4.1c-0.1-1.7,0.4-3.1,1.4-4.3c0.3-0.4,0.8-0.9,1.5-1.7c0.6-0.6,0.9-1.3,1-1.9
+		c0.1-0.8-0.1-1.6-0.8-2.3c-0.6-0.6-1.3-1.1-2.2-1.4c-0.6-0.2-1.4-0.4-2.6-0.5c-0.2,0-0.4-0.1-0.6-0.1c-0.2,0-0.3,0.1-0.5,0.1
+		c-1.1,0.1-2,0.3-2.6,0.5c-0.9,0.3-1.6,0.7-2.2,1.4c-0.6,0.7-0.9,1.5-0.8,2.3c0.1,0.6,0.4,1.3,1,1.9c0.7,0.7,1.2,1.3,1.5,1.7
+		c1,1.2,1.4,2.6,1.4,4.3c0,1.7-0.6,3-1.7,4.1c-0.4,0.4-1,0.9-1.7,1.4c-0.9,0.7-1.5,1.1-1.8,1.4c-1.1,1-1.8,2.3-2.2,3.9
+		c-0.4,1.5-0.3,3,0.2,4.4C-139.9,354-139.5,354.9-138.9,355.9z M246.2,40c-0.6-0.9-1.3-1.7-2-2.5c0.2-1.2,0.3-2.5,0.4-4.1
+		c0-1.2,0.1-2.9,0.1-5.2c0.3-5.4,1.6-10.2,4-14.3c2.6-4.7,6.2-8.1,10.7-10.3c1-0.5,2.5-1.1,4.5-2c1.7-0.8,3.1-1.7,4-2.7
+		c1.5-1.7,2.3-3.8,2.4-6.4c0.1-2.4-0.5-4.7-1.6-7c-0.1-0.2-0.6-1.1-1.5-2.8c-0.6-1.2-1.1-2.1-1.4-2.9c-0.8-2.3-0.9-4.8-0.2-7.4
+		c0.7-2.5,2.1-4.6,4.1-6.1c0.9-0.7,1.4-1.3,1.5-1.8c0.1-0.6,0-1.1-0.5-1.7c-0.2-0.3-0.7-0.7-1.4-1.4c-2.5-2.1-3.9-4.8-4.1-8.2
+		c-0.2-3.3,0.9-6.1,3.2-8.6c0.9-0.9,1.5-1.6,1.7-2c0.6-0.8,0.7-1.5,0.4-2.2c-0.2-0.4-0.7-1-1.5-1.7c-2.9-2.4-4.5-5.5-4.9-9.4
+		c-0.4-3.7,0.6-7.1,3-10.1c0.4-0.4,0.9-1.1,1.8-2c0.5-0.5,0.9-1,1.2-1.4c0.1,0,0.2,0,0.2-0.1c0.1,0,0.1-0.1,0.2-0.1h1.7
+		c1.8,0,3.6,0,5.5,0.1h16.1c0.1,0,0.3-0.1,0.4-0.1h1.7c0,0,0.1,0,0.2,0.1c0.1,0,0.2,0.1,0.2,0.1c0.3,0.4,0.7,0.9,1.2,1.4
+		c0.8,0.9,1.4,1.6,1.8,2c2.4,3,3.4,6.4,3,10.1c-0.4,3.8-2,7-4.9,9.4c-0.8,0.7-1.3,1.2-1.5,1.7c-0.3,0.7-0.1,1.4,0.4,2.2
+		c0.2,0.4,0.7,1,1.7,2c2.3,2.5,3.4,5.3,3.2,8.6c-0.2,3.4-1.6,6.1-4.1,8.2c-0.7,0.6-1.2,1.1-1.4,1.4c-0.4,0.6-0.6,1.1-0.5,1.7
+		c0.1,0.5,0.6,1.1,1.5,1.8c2,1.5,3.3,3.6,4.1,6.1c0.7,2.6,0.7,5-0.2,7.4c-0.3,0.8-0.7,1.8-1.4,2.9c-0.9,1.7-1.5,2.6-1.5,2.8
+		c-1.2,2.3-1.7,4.6-1.6,7c0.1,2.6,0.9,4.7,2.4,6.4c0.9,1,2.2,1.9,4,2.7c2,0.8,3.5,1.5,4.5,2c4.5,2.2,8.1,5.6,10.7,10.3
+		c2.3,4.2,3.7,9,4,14.3c0,2.3,0.1,4.1,0.1,5.2c0.1,1.6,0.2,3,0.4,4.2c-0.4,0.4-0.9,0.9-1.2,1.4c-1.5,0.7-2.7,1.7-3.6,2.9
+		c-0.9,1.2-1.3,2.6-1.4,4.1c-0.1,1.5,0.2,3,0.8,4.3c0.8,1.2,1.4,2.1,1.8,2.6c0.7,1,1,2,1.1,2.8c0.1,1.1-0.3,2.3-1.2,3.5
+		c-1.2,1.4-2,2.5-2.5,3.1c-1.3,1.8-2.1,3.7-2.3,5.9c-2.1-1-4.4-1.9-6.8-2.7l0.5-24.4c0.2-3.6,0-6.4-0.5-8.4
+		c-0.6-2.6-1.7-4.8-3.3-6.8c-1.7-2.1-3.8-3.4-6.1-3.9c-1.3-0.4-2.6-0.4-4-0.2c-2.5,0.2-4.6,0.7-6.2,1.8c-0.7,0.5-1.4,1.1-2,1.7
+		c-0.2,0.2-0.4,0.5-0.6,0.8c-0.3,0.4-0.5,0.9-0.7,1.4c-0.5-1-1.1-1.9-1.7-2.6c-0.8-0.9-1.7-1.7-2.7-2.3c-1.4-0.8-3-1.2-4.9-1.3
+		c-2.9-0.2-5.6,0.5-8.2,1.8c-2.6,1.5-4.6,3.5-5.9,6c-0.9,1.7-1.4,3.8-1.7,6.3c-0.2,1.6-0.2,3.9-0.2,6.8l0.2,17.6
+		c0,1.6,0.1,2.8,0.3,3.7c-2.3,0.2-5.1,0.8-8.4,1.7c-0.4,0.1-0.8,0.2-1.1,0.4c-1-0.6-2.2-1.2-3.6-1.7c0.4-0.4,0.7-0.8,1.1-1.2
+		c1.7-2.1,2.7-3.7,3.1-5c0.4-1.3,0.6-2.8,0.5-4.4c-0.2-3.7-1.2-7.3-3-10.6C247.4,41.7,246.8,40.8,246.2,40z M277.4-73
+		c0,1,0.1,1.7,0.4,2.1l0.4,0.7c0.2,0.5,0.3,0.8,0.5,1c0.2,0.4,0.6,0.7,1.3,1.1l1.4,0.9c0.7,0.3,1.9,0.4,3.5,0.4
+		c1.1,0,1.9-0.1,2.4-0.3c0.6-0.3,1.4-0.9,2.3-2c0.7-0.9,1.1-1.6,1.2-2.1c0.1-0.4,0.2-1,0.1-1.6c0-0.4,0-0.9-0.1-1.6
+		c0-0.6,0-1-0.1-1.2c0-0.3-0.2-0.6-0.4-1c-0.9-1.7-2.1-2.8-3.6-3.3c-0.6-0.2-1.5-0.4-2.7-0.6c-0.6-0.1-1.1-0.1-1.4,0
+		c-0.3,0-0.7,0.2-1.1,0.4c-0.8,0.4-1.4,0.7-1.8,1c-1.1,0.8-1.8,1.8-2.1,3.1C277.5-75.3,277.4-74.3,277.4-73z M290.9-47.1l-0.4-1.9
+		c-0.2-0.5-0.5-1.1-0.9-1.8c-0.5-0.7-0.8-1.2-1-1.4c-0.4-0.3-1-0.6-2-0.9c-0.7-0.3-1.3-0.4-1.6-0.5c-0.2,0-0.5-0.1-0.9-0.1
+		c-0.5,0-0.8-0.1-0.9-0.1c-0.6,0-1,0-1.4,0.1l-0.8,0.3c-0.4,0.2-0.9,0.4-1.3,0.7c-0.7,0.6-1.3,1.5-1.8,2.8l-0.3,1.1
+		c-0.1,0.4-0.1,0.9-0.1,1.5c0,1.8,0.3,3.2,0.9,4c0.2,0.3,0.4,0.6,0.8,1c0.4,0.4,0.8,0.7,1.1,0.9l1.5,0.6c1.7,0.4,3.3,0.3,4.9-0.4
+		c1.6-0.7,2.8-1.8,3.6-3.3c0.3-0.5,0.5-1,0.5-1.5L290.9-47.1z M278.4-16.3c0.4,0.4,0.9,0.7,1.4,1.1c0.7,0.5,1.3,0.8,2,0.9
+		c0.6,0.2,1.6,0.2,2.9,0.2c0.8,0,1.4,0,1.7-0.1c0.7-0.2,1.4-0.5,2.1-1.1c0.8-0.6,1.4-1.4,1.8-2.3l0.5-1.5c0.3-1,0.4-1.9,0.4-2.6
+		c-0.1-1-0.8-2.2-2-3.5c-0.3-0.3-0.6-0.6-0.8-0.8c-0.2-0.4-0.4-0.6-0.4-0.7c-0.2-0.2-0.5-0.3-0.8-0.4c-0.4-0.1-0.8-0.2-1-0.2
+		c-0.4-0.1-0.6-0.2-0.8-0.2c-0.5-0.1-1-0.1-1.6-0.1c-0.3,0-0.6,0.1-0.9,0.2c-0.4,0-0.7,0.1-0.9,0.1c-0.2,0-0.5,0.2-0.9,0.5
+		c-0.7,0.5-1.2,0.8-1.5,1c-1.5,1.2-2.3,2.8-2.6,4.7C276.6-19.3,277.1-17.7,278.4-16.3z M278.4,9.5c0.4,0.4,0.9,0.7,1.4,1.1
+		c0.7,0.5,1.3,0.8,2,0.9c0.6,0.2,1.6,0.2,2.9,0.2c0.8,0,1.4,0,1.7-0.1c0.7-0.2,1.4-0.5,2.1-1.1c0.8-0.6,1.4-1.4,1.8-2.3l0.5-1.5
+		c0.3-1,0.4-1.9,0.4-2.6c-0.1-1-0.8-2.2-2-3.5c-0.3-0.3-0.6-0.6-0.8-0.8c-0.2-0.4-0.4-0.6-0.4-0.7c-0.2-0.2-0.5-0.3-0.8-0.4
+		c-0.4-0.1-0.8-0.2-1-0.2c-0.4-0.1-0.6-0.2-0.8-0.2c-0.5-0.1-1-0.1-1.6-0.1c-0.3,0-0.6,0.1-0.9,0.2c-0.4,0-0.7,0.1-0.9,0.1
+		c-0.2,0-0.5,0.2-0.9,0.5c-0.7,0.5-1.2,0.8-1.5,1c-1.5,1.2-2.3,2.8-2.6,4.7C276.6,6.6,277.1,8.2,278.4,9.5z M860.3,401.8v-27.3
+		l0.1-0.1l-0.1-0.6v-2.7c-0.1,0-0.2,0-0.2,0v-0.1c0.4-1.8,0.5-3.9,0.4-6.2c0-0.6-0.1-1.1-0.1-1.7v-35.6c-0.1,0-0.2,0-0.3,0.1
+		c-0.1,0-0.1,0-0.2,0c-3.2,0.9-6,2-8.5,3.4c-3.6,2-6.6,4.7-9.1,8c5.3,3.8,8.8,7.9,10.5,12.3c0.6,1.5,1.1,3.3,1.4,5.5
+		c0.7,4.7,0.7,9.5-0.2,14.2c-0.9,4.8-2.6,9.2-5,13.3c-1.6,2.8-3.4,5-5.4,6.5c0.7,0.9,1.6,1.7,2.4,2.5c4.2,3.9,8.9,6.6,14.1,8.2
+		C860.1,401.7,860.2,401.8,860.3,401.8z M159.4-19.9c-0.8-2.8-1.2-6-1.1-9.7c0.1-3.2,0.5-6.1,1.4-8.7c1.1-3.4,3-6.5,5.6-9.4
+		c2.5-2.7,5.4-4.9,8.8-6.8c5.6-3,12.7-4.8,21.4-5.5c1.6-0.1,2.8-0.3,3.7-0.4c0.9,0.1,2.2,0.2,3.7,0.4c8.7,0.7,15.8,2.5,21.4,5.5
+		c3.4,1.8,6.3,4.1,8.8,6.8c2.6,2.9,4.5,6,5.6,9.4c0.8,2.6,1.3,5.5,1.4,8.7c0.1,3.7-0.2,6.9-1.1,9.7c-1.1,3.8-3,7.1-5.9,9.9
+		c-2.9,2.8-6.2,4.8-9.9,5.9c-0.7,0.2-1.3,0.5-1.7,0.8c-1.3-0.7-2.7-1.3-4.4-1.9c-4.9-1.5-10.5-2.1-16.7-1.6c-0.5,0-0.9,0-1.2,0.1
+		c-0.3-0.1-0.7-0.1-1.2-0.1c-6.2-0.5-11.7,0.1-16.7,1.6c-1.7,0.5-3.1,1.2-4.4,1.8c-0.4-0.3-1-0.5-1.7-0.8c-3.7-1.1-7-3-9.9-5.9
+		C162.4-12.8,160.5-16.1,159.4-19.9z M165.4-29.6c0.3,0.6,0.7,1.2,1.2,1.8c0.8,0.9,1.6,1.5,2.3,1.8c0.7,0.3,1.7,0.4,3,0.2
+		c0.7-0.1,1.2-0.2,1.5-0.3c1.5-0.6,2.6-1.7,3.4-3.6c0.5-1,1-2.6,1.6-4.9c0.6-2,1.3-3.5,2.3-4.5c0.5-0.5,1.3-1.1,2.6-1.9
+		c1.2-0.7,2.1-1.4,2.6-2c0.8-1,1.2-2.1,1.3-3.4c0.1-0.9-0.1-1.7-0.6-2.3c-0.4-0.6-1.1-1-2-1.4c-1.4-0.5-2.9-0.7-4.4-0.6
+		c-1.5,0.1-3,0.5-4.3,1.2c-0.6,0.3-1.3,0.8-2.3,1.5c-2.2,1.7-3.9,3.3-5,4.7c-2.1,2.8-3.4,6-3.7,9.5C164.7-32,164.9-30.6,165.4-29.6z
+		 M644.6,383.2c-0.3,0.1-0.6,0.1-0.9,0c-0.2,0-0.7-0.2-1.5-0.6c-1.5-0.7-3-1.1-4.7-1.1s-3.2,0.3-4.7,1c-0.6,0.3-1,0.5-1.4,0.5
+		c-0.1,0-0.2,0-0.3,0c-0.4,0.9-0.8,1.6-0.9,2c-0.7,1.7-0.8,3.4-0.1,5.1c0.3,0.7,0.8,1.6,1.6,2.7c0.8,1.1,1.3,2,1.5,2.7
+		c0.3,0.7,0.5,1.4,0.5,2.1c1.3-0.7,3-1,5.2-1c1.3,0,2.3,0.1,3.2,0.4c0.1-0.5,0.3-0.9,0.5-1.4c0.2-0.6,0.7-1.5,1.5-2.7
+		c0.8-1.1,1.3-2,1.6-2.7c0.7-1.7,0.6-3.4-0.1-5.1C645.3,384.6,645,384,644.6,383.2z M830.4,443.6c-0.6,0-1.7-0.1-3.4-0.4
+		c-2.9-0.4-6.9-0.3-12.1,0.3c-0.2,0-0.3,0-0.5,0c0.6,2.6,0.7,4.7,0.3,6.3c0.5-0.2,1.4-0.3,2.5-0.5l5-0.2c3,0,5.2,0.1,6.7,0.2
+		c0.8,0,1.4,0.2,1.8,0.4c-0.3-1.6-0.2-3.6,0.4-6.2C830.8,443.6,830.6,443.6,830.4,443.6z M817.2,440.5c0.4,0,1.5-0.1,3.4-0.2
+		c2.2-0.1,3.8-0.1,4.9-0.1c1.8,0.1,3.4,0.3,4.7,0.7c0.5,0.1,0.9,0.3,1.2,0.5c0.6-3,0.6-5.2,0-6.6c-0.8-1.8-2.3-3.2-4.6-4.1
+		c-1.2-0.5-2.5-0.7-4.2-0.8c-1.6,0-3,0.3-4.2,0.8c-2.3,0.9-3.8,2.3-4.6,4.1c-0.6,1.4-0.6,3.5-0.1,6.5L817.2,440.5z M865.2,349.9
+		c0.7-1.4,0.4-3-0.9-4.7c-0.4-0.5-0.8-0.9-1.2-1.1v-8.5c0.2-0.2,0.4-0.4,0.6-0.6c0.9-1,2.1-1.6,3.7-1.8c1.5-0.1,2.8,0.2,4.2,0.8
+		c1.1,0.7,1.9,1,2.5,1c0.7,0,1.4-0.3,2.2-0.9c0.5-0.4,1.2-0.9,2-1.7c1.4-0.9,2.9-1.1,4.7-0.7c1.4,0.4,2.8,1.3,4,2.6
+		c0.7,0.9,1.4,1.4,1.9,1.5c0.4,0,0.9-0.1,1.4-0.4c0.2-0.2,0.6-0.5,1.2-1.1c1.5-1.3,3-1.9,4.6-1.9c1.8-0.1,3.4,0.6,4.6,1.9
+		c0.6,0.7,1,1,1.3,1.1c0.2,0,0.3,0,0.5,0c0,0,0,0,0,0c0.8-0.6,1.4-1.3,2.2-1.8c0.8-0.5,1.6-0.8,2.5-0.9c0.9-0.1,1.7,0,2.5,0.4
+		c0.4,0.2,0.8,0.4,1.3,0.6c0.1,0.1,0.3,0.2,0.4,0.3c0.7,0.6,1.5,0.9,2.2,0.9c0.6,0,1.4-0.3,2.5-1c1.3-0.7,2.7-0.9,4.2-0.8
+		c1.5,0.2,2.8,0.7,3.7,1.8c0.2,0.2,0.4,0.4,0.6,0.6v8.5c-0.5,0.2-0.9,0.6-1.2,1.1c-1.3,1.7-1.6,3.3-0.9,4.7c0.2,0.3,0.4,0.7,0.7,1.1
+		l0.8,0.9c0.2,0.4,0.4,0.6,0.6,0.7c0,0,0,0,0.1,0.1v10.8c-0.1,0-0.2,0-0.3,0c-1.3,0-2.5-0.1-3.7-0.1h-10.1v-0.1
+		c-0.3,0-0.5,0-0.8-0.1h-32.3v0.1h-10.1c-1.2,0-2.5,0-3.7,0.1c-0.1,0-0.2,0-0.3,0v-10.8c0,0,0,0,0.1-0.1c0.2-0.1,0.4-0.4,0.6-0.7
+		l0.8-0.9C864.8,350.6,865.1,350.2,865.2,349.9z M905.6,347.8c-0.1,1.2,0.3,2.6,1.2,3.4c0,0,0.1,0.1,0.1,0.1c0,0,0,0,0,0
+		c0.2,0.1,0.5,0.2,0.8,0.2c0.2,0,0.5,0,0.7,0.1c0.6,0.1,1.2,0.1,1.8,0c1.1-0.2,1.8-0.6,2.3-1.3c0.4-0.6,0.6-1.3,0.5-2.3
+		c0-0.9-0.2-1.7-0.5-2.3c-0.2-0.3-0.5-0.7-1.1-1.2c-0.5-0.4-1-0.7-1.5-0.8c-0.2,0-0.4,0-0.5,0c-0.2,0-0.4,0.1-0.6,0.2
+		c-0.5,0-0.9,0.2-1.4,0.4C906.2,345.1,905.7,346.5,905.6,347.8L905.6,347.8z M891.2,349.5c0.6,1.2,1.5,1.9,2.8,2
+		c0.3,0,0.9,0,1.8-0.2c1.2-0.3,2-0.7,2.4-1c0.9-0.6,1.3-1.3,1.1-2.3c0-0.1-0.1-0.2-0.2-0.4v-0.1c0-0.6,0-1-0.1-1.3
+		c-0.2-0.7-0.7-1.3-1.4-2c-0.6-0.6-1.1-0.8-1.5-0.7c-0.1,0-0.3,0.1-0.5,0.3c-0.4-0.1-0.9-0.1-1.4,0c-0.5,0-1,0.3-1.4,0.7
+		c-0.8,0.6-1.3,1.3-1.7,2.3C890.8,347.8,890.8,348.7,891.2,349.5z M875,350.3c0.4,0.7,1.2,1.1,2.3,1.3c1.5,0.3,2.8-0.1,3.9-1
+		c0.6-0.4,0.9-1,1.1-1.7c0.2-0.7,0.2-1.4,0-2c-0.3-0.9-0.9-1.6-1.8-2.3c-0.7-0.6-1.4-0.9-2.1-0.9c-0.7,0-1.5,0.3-2.3,0.9
+		c-0.6,0.5-0.9,0.9-1.1,1.2c-0.4,0.6-0.5,1.3-0.5,2.3C874.4,348.9,874.6,349.7,875,350.3z M899.8,497.8c0.2-1.4,0-2.6-0.4-3.6
+		c-0.5-1.3-1.2-2.2-2.3-2.7c-1.1-0.5-2.3-0.5-3.6,0.1c-1.2,0.6-2.2,1.4-2.9,2.5c-0.6,0.9-1,2.1-1.4,3.5c0,0.2-0.3,1.4-0.7,3.7
+		c-0.4,2-1.1,5-2.2,9c-0.9,3.2-1.8,6.5-2.6,9.7H894l5-18.6C899.5,499.9,899.7,498.7,899.8,497.8z M863.1,414.2
+		c0,0.1-0.1,0.2-0.1,0.2v6.3c2-0.4,4.3-0.6,6.8-0.7c2.5,0,6.1,0.1,11.1,0.4c0.8,0,4.5-0.1,11.3-0.4c3.5-0.1,6.6-0.1,9.1,0.2h2.8
+		v-0.1h5.3c0,0,0,0.1,0,0.1c0.7,0,1.3-0.1,1.8-0.1h0c2.6-0.1,4.8-0.2,6.3-0.2c2.5,0,4.8,0.2,6.8,0.7v-6.3c0-0.1-0.1-0.2-0.1-0.2v-17
+		c-0.1,0.1-0.3,0.2-0.4,0.4c-0.9,0.7-1.9,1.1-3,1.2c-2.2,0.2-4.2-0.5-6.1-2.2c-1.1,1.1-2.3,1.8-3.7,2.2v-0.1
+		c-0.2,0.1-0.3,0.1-0.5,0.1c-1.2,0-2.5-0.1-3.7-0.5c-0.5-0.1-1-0.3-1.5-0.4c-0.4-0.1-0.8-0.2-1.2-0.4c-0.5-0.1-0.9-0.4-1.4-0.7
+		c-0.2-0.1-0.4-0.3-0.5-0.4c-0.9-0.4-1.9-0.9-2.8-1.6c-0.7,1.1-1.7,2-3,2.7c-1.2,0.7-2.5,1.1-3.9,1.2c-1.3,0.1-2.7-0.1-4-0.7
+		c-1.3-0.5-2.4-1.3-3.3-2.3c-1.7,1.9-3.7,3-6.2,3.1c-2.5,0.1-4.7-0.7-6.5-2.5c-1.9,1.7-3.9,2.4-6.1,2.2c-1.1-0.1-2.1-0.5-3-1.2
+		c-0.1-0.1-0.3-0.2-0.4-0.4L863.1,414.2L863.1,414.2z M360.2,144.2l-8.5-0.8l0.1,23.8l3-0.1c1.2-0.1,2,0,2.7,0.3
+		c0.5,0.2,1.1,0.5,1.7,0.9c0.5,0.3,1.3,0.6,2.4,1.1c0.9,0.4,1.9,1.1,3,2.1c1.9,1.9,3.4,4,4.4,6.3c1.4,3.2,1.8,6.6,1.4,10.1
+		c7.1,1.4,13.9,3.1,20.3,5l0.2-9.8c-2.3-0.5-4.7-0.7-7.3-0.6c-1.3,0-2.1-0.2-2.4-0.7c-0.2-0.3-0.3-0.9-0.3-1.7l0.4-9l-8.4-0.7
+		c-0.8,0-1.4-0.2-1.9-0.5c-0.5-0.5-0.7-1.3-0.6-2.6l0.6-8.2l-7.9-1.2c-1.2-0.2-2.1-0.6-2.5-1c-0.5-0.6-0.7-1.6-0.7-3.1L360.2,144.2z
+		 M355.3,180.6c-0.4-0.3-1.1-0.6-1.9-0.8c-0.7-0.2-1.3-0.3-1.6-0.4v5.2c0,0.2,0,0.4-0.1,0.6c2.1,0.3,4.3,0.5,6.5,0.8
+		c-0.1-0.7-0.5-1.6-1.1-2.9C356.4,181.8,355.8,181,355.3,180.6z M322.1,81.6c0.7-0.1,1.8-0.1,3.3,0c2.5,0.1,4.4,0.3,5.8,0.8
+		c0.8,0.2,1.3,0.3,1.5,0.3c0.2,0,0.3,0,0.5-0.1c0,0.3,0.1,0.7,0.2,1c0.1,0,0.1-0.1,0.2-0.1c0,0.4,0.1,0.7,0.2,1.1
+		c0.2,0.6,0.8,1.4,1.7,2.4l3,2.4c0.4,0.4,0.7,0.8,0.9,1.1c0.3,0.4,0.6,0.9,0.9,1.4c0.1,0.3,0.3,0.6,0.4,0.9c-0.1,0-0.1,0-0.2,0
+		c0.2,0.3,0.3,0.5,0.4,0.7c0.1,0.7,0.2,1.4,0.2,2.2c0,0.6,0.1,1,0.2,1.2c0,0.2,0,0.3-0.1,0.5c-0.2,1-0.7,2-1.3,2.8
+		c-0.6,0.7-0.9,1.2-0.9,1.4c-0.1,0.3-0.1,0.6-0.1,0.8c0,0.1,0,0.2,0.1,0.2c0,0.1-0.1,0.2-0.1,0.4c-0.1,0.3,0,0.5,0.1,0.7
+		c0.1,0.2,0.2,0.3,0.4,0.5c0.3,0.3,0.8,0.5,1.4,0.8c1.8,0.8,3.4,2.1,4.7,3.9c1.2,1.6,2.1,3.5,2.7,5.6c0.5,1.8,0.9,3.8,1,6.2
+		c0.1,1.4,0.1,3.5,0.1,6.3c0,1.9,0,3.8-0.1,5.8c0,2.8,0,5.6-0.1,8.5c0,0.3,0,0.6,0,0.8c0,2.2,0,4.5,0,6.7c0,7,0,14,0.1,21.1
+		c-2.5-9.1-5.2-18.2-8.1-27.1c-1.2-3.7-1.9-6.1-2.1-7.3c-0.1-0.7-0.3-1.3-0.5-1.7c0.1-0.1,0.1-0.1,0.1-0.2c0.3-0.1,0.5-0.3,0.7-0.8
+		c0-0.1,0.1-0.5,0.2-1.2c0.1-2.4,0.1-5.9,0.1-10.6c0-0.7,0-1.3-0.1-1.7c-0.2-0.7-0.5-1.4-1-2.1c-1.5-2.4-3.4-3.6-5.6-3.7
+		c-0.6,0-1.3,0.1-2.1,0.3c-0.7,0.2-1.2,0.5-1.6,0.7c-1.5,0.9-2.6,2.2-3,3.8c-0.1,0.4-0.3,1.4-0.5,3l-0.2,4.3
+		c-0.1,0.7-0.2,1.3-0.2,1.7l-0.1,2.8c-0.2,0.9-0.2,1.6-0.1,2c0.1,0.2,0.2,0.4,0.3,0.5c0,0,0,0.1-0.1,0.1c-0.2,0.2-0.3,0.6-0.3,1.2
+		c0.1,1.1,0.4,2.4,1,4.1c1.3,4,2.8,9.3,4.5,15.9c2.1,8.3,3.5,13.6,4.2,16c1.2,4.4,2.7,9.1,4.4,14.1c-9.7-0.5-18.7-0.2-27.1,1
+		c-0.1,0-0.2,0-0.3,0l0.1-10.3c0.1-8.7-0.1-15.2-0.4-19.5c-0.4-4.2-1.3-10-2.7-17.5c0-0.5,0-1,0-1.5c0-1.1,0-2.1-0.1-2.8
+		c0-0.2-0.1-0.5-0.1-0.8l-0.7-1.4c0-0.2,0-0.5,0-0.7c0-1.1,0-2.3-0.1-3.4c0-2.8,0-4.9,0.1-6.3c0.2-2.3,0.5-4.4,1-6.2
+		c0.6-2.1,1.5-4,2.7-5.6c1.3-1.8,2.9-3.1,4.7-3.9c0.6-0.2,1-0.5,1.4-0.8c0.2-0.2,0.3-0.3,0.4-0.4v-0.1c-0.1,0-0.1,0-0.2,0
+		c0.2-0.6,0.1-1.1-0.1-1.4c-0.1-0.2-0.3-0.3-0.6-0.5c-0.2-0.4-0.6-0.9-1.1-1.4c-1.3-1.4-2-3.1-2.2-5.1c-0.2-2,0.2-3.8,1.2-5.5
+		c0.4-0.7,1-1.4,1.8-2.3c0.4-0.5,1.1-1.2,2-2.1c1.2-1.4,1.9-2.7,2.1-3.9C321.2,81.6,321.6,81.6,322.1,81.6z M322.1,88.4
+		c-0.3-0.1-0.7-0.1-1-0.1c-0.6,0.2-1.1,0.5-1.6,1.1c-1,1.2-1.6,2.6-1.8,4.1c-0.3,1.5-0.1,3,0.4,4.4c0.4,0.8,0.8,1.4,1.2,1.7
+		c0.4,0.2,0.7,0.3,1.1,0.3c0.4,0,0.7-0.1,0.9-0.4c0.3-0.4,0.4-0.9,0.2-1.5c0-0.2-0.2-0.7-0.5-1.5c-0.6-1.8-0.4-3.4,0.7-4.7
+		c0.5-0.7,0.8-1.2,0.9-1.3c0.4-0.5,0.4-1,0.2-1.5C322.6,88.7,322.4,88.5,322.1,88.4z M851.6,366.2c0.5-5.9-0.3-11-2.4-15.2
+		c-1.8-3.6-4.6-6.8-8.4-9.5c-0.1-0.1-0.2-0.2-0.4-0.2c-1.3,2-2.5,4.2-3.6,6.7c-0.5,1.2-1,2.5-1.4,3.7c0.1,0,0.3,0.1,0.4,0.2
+		c0.9,0.5,1.6,0.9,1.9,1.2c0.5,0.5,0.9,1.3,1.4,2.4l1.1,2.5c1,2.7,1.5,5.5,1.3,8.5c-0.2,3-0.9,5.7-2.3,8.2c-0.4,0.8-0.8,1.5-1.2,2
+		c-0.4,0.6-1,1.1-1.8,1.8c-0.2,0.1-0.3,0.2-0.5,0.4c0.2,0.4,0.3,0.8,0.5,1.2c1.3,3.2,3.1,6.2,5.2,8.9c2.8-2.8,5.1-6.3,6.9-10.3
+		C850.2,374.8,851.2,370.6,851.6,366.2z M626.4,411.2c-0.3-0.1-0.6-0.2-0.8-0.3c0.4-0.8,0.9-1.6,1.5-2.3c0.2-0.2,0.4-0.4,0.6-0.6
+		c2.1-1.3,3.7-2.9,4.8-4.9c0.5-0.9,0.8-1.8,1-2.8c0.1,0,0.2,0,0.2,0l1.2-0.4c1.9-0.7,4-0.7,6.1-0.2c0.4,0.1,0.7,0.1,0.9,0.2
+		c0.2,1.1,0.6,2.2,1.1,3.1c1.1,1.9,2.7,3.6,4.8,4.9c0.2,0.2,0.4,0.4,0.6,0.6c0.6,0.7,1.1,1.5,1.5,2.4c-0.1,0-0.2,0.1-0.3,0.2
+		c-0.5,0.3-1,0.8-1.4,1.4c-0.8,1.3-1.2,2.4-1.2,3.5c-0.1,1.3,0.3,2.5,1.2,3.4c0.3,0.2,0.5,0.4,0.8,0.5c-0.2,0.4-0.5,0.9-0.9,1.3
+		c-0.9,1.2-1.5,2-1.7,2.3c-1,1.6-1.5,3.2-1.7,4.8c-0.2-0.2-0.4-0.4-0.7-0.5c-0.8-0.5-2.1-0.8-4-0.9c-1.5-0.2-2.8-0.2-3.9-0.1
+		c-1.1,0.1-2.3,0.3-3.6,0.7c-0.8,0.2-1.5,0.4-2.1,0.6c-0.1-1.5-0.7-3-1.6-4.5c-0.2-0.4-0.8-1.1-1.7-2.3c-0.1-0.2-0.2-0.3-0.4-0.5
+		c0.3-0.1,0.6-0.4,0.9-0.7c0.8-1,1.2-2.2,1.3-3.5c0.1-1.4-0.2-2.6-0.9-3.7C627.7,412.1,627.1,411.6,626.4,411.2z M634.9,417.1
+		c0.7,0.8,1.6,1.2,2.7,1.3c1,0.1,1.9-0.1,3-0.8c1.1-0.7,1.7-1.5,2-2.5c0.3-0.9,0.2-1.9-0.4-2.8c-0.5-0.9-1.2-1.7-2-2.1
+		c-1-0.5-1.9-0.7-2.7-0.4c-0.8,0.2-1.5,0.7-2.2,1.5c-0.7,0.9-1.1,1.9-1.2,2.9C633.9,415.2,634.2,416.2,634.9,417.1z M645.3,431.8
+		c-0.2-0.6-0.3-1.2-0.4-1.8c-0.1,0.2-0.3,0.3-0.6,0.4c-0.4,0.2-1,0.2-1.9,0c-2.4-0.4-3.8-0.7-4.2-0.7c-1-0.1-2.5,0.1-4.5,0.5
+		l-2.5,0.6c-0.3,0.1-0.5,0.1-0.8,0.1c-0.1,0.3-0.1,0.6-0.2,0.8c-0.3,0.7-0.9,1.9-2,3.6c-1,1.5-1.6,2.7-1.8,3.7
+		c-0.4,1.7-0.1,3.7,0.8,6c1.3,2.6,2.1,4.6,2.5,5.9c0.1,0.4,0.2,0.8,0.4,1.2h0.1l2.4-0.6c1.5-0.2,3.4-0.4,5.8-0.4
+		c3,0.1,5.5,0.4,7.2,1c0,0,0,0,0.1,0c0.1-0.4,0.2-0.9,0.4-1.3c0.4-1.3,1.2-3.3,2.5-5.9c0.9-2.3,1.2-4.3,0.8-6
+		c-0.2-0.9-0.9-2.2-1.8-3.7C646.2,433.7,645.5,432.5,645.3,431.8z M965.6,428.7c-1.3-0.9-3.3-2-6.1-3.2c-1.2-0.5-2.3-0.9-3.3-1.2
+		c-1.4-0.4-3.3-0.7-5.7-0.9c-2-0.2-3.5-0.3-4.5-0.4c-0.1,0-0.2,0-0.2,0.1c-0.4,0-0.7,0-1.1,0.1h-4.9c1.1,1.2,2.1,2.5,2.9,3.9
+		c1.3,2.2,2.1,4.5,2.4,6.9c0.2,1.6,0.4,4.1,0.5,7.4c0.4,3,1.2,5.3,2.6,6.8c0.7,0.8,1.8,1.6,3.3,2.4c0.8,0.4,2,1,3.6,1.8
+		c2.8,1.6,4.9,3.8,6.5,6.6c1.7,2.9,2.3,5.9,1.9,8.8v0.1h-0.1c0,0.1,0,0.2,0,0.3v2.4c0,0.1,0,0.2,0.1,0.2v5.8c0,0.1,0,0.2,0.1,0.2
+		V520h7.5v-85.8C970.1,432.4,966.7,429.6,965.6,428.7z M874.2,447.4c-0.1-0.9-0.2-1.8-0.2-2.7l0.6-5.6c0.2-1.7,0.5-3.1,1-4.2
+		c-0.5,0.1-0.9,0.2-1.2,0.2c-1.9,0.5-3.5,1.4-4.9,2.7c-1.5,1.3-2.4,2.9-2.9,4.6c-0.2,0.8-0.3,1.6-0.4,2.4c-0.2,1.7-0.1,3.1,0.2,4.3
+		c0.4,1.4,1.2,2.7,2.4,3.9c1.1,1,2.4,1.8,4,2.4c0.9,0.4,2.1,0.7,3.6,0.9c-0.2-0.4-0.5-0.9-0.7-1.5
+		C875,452.5,874.5,450.1,874.2,447.4z M883,128.4c0.8,0.6,1.3,1.1,1.5,1.5c0,0,0,0.1,0.1,0.1c0.1,0,0.2,0,0.3-0.1l3.9-0.8l5.3-0.1
+		c2.7,0,4.9,0.2,6.5,0.5l1.2,0.4c0.4,0.3,0.6,0.6,0.7,0.9c0,0,0.1,0,0.1-0.1c0,0,0.1-0.1,0.1-0.1c0-0.3,0.1-0.6,0.2-0.9
+		c0.2-0.4,0.7-0.9,1.5-1.5c1.9-1.4,3.1-3.1,3.6-5c0.3-1,0.4-2.1,0.1-3.1c-0.2-1.1-0.7-2-1.4-2.7c-0.4-0.4-1-0.9-1.8-1.7
+		c-0.1-0.1-0.2-0.3-0.3-0.4c-0.1,0.1-0.2,0.2-0.4,0.2c-0.5,0.1-1.2,0.1-2.1-0.2c-1.3-0.3-2.9-0.5-4.8-0.7c-2.9-0.2-5.1-0.3-6.6-0.1
+		c-0.9,0.1-2.2,0.3-3.6,0.5c-1.9,0.4-3.1,0.6-3.6,0.7c-0.4,0.1-0.8,0.1-1.2,0c-0.8,0.7-1.4,1.3-1.8,1.7c-0.7,0.7-1.2,1.6-1.4,2.7
+		c-0.2,1.1-0.2,2.1,0.1,3.1C879.9,125.3,881.1,126.9,883,128.4z M906.5,168.7c-0.6,1.3-1.4,3.4-2.6,6.3c-1.2,2.9-2.2,5.2-3.1,6.8
+		c0.4,0.5,0.8,1.4,1.4,2.5l5.6,11.3c0,0,0,0,0.1,0.1c0.2-0.6,0.5-1.2,0.7-2c2.2-6.4,2.7-12,1.4-16.7c-0.4-1.5-1.1-3.3-2.1-5.5
+		C907.4,170.4,906.9,169.5,906.5,168.7z M890,168.1c1.3-3.8,2.5-6.7,3.6-8.8c-3.2-0.1-6.4,0.1-9.6,0.7c-0.1,0.3-0.3,0.6-0.4,0.8
+		c-0.1,0.4-0.3,0.6-0.4,0.7c-0.1,1.4-0.5,3-1.1,4.6c-0.3,0.8-1.2,2.6-2.5,5.5c-1,2.2-1.7,4.1-2.1,5.5c-1.3,4.7-0.8,10.3,1.4,16.7
+		c0.7,1.9,1.3,3.5,1.6,4.6c0.2,0.1,0.4,0.3,0.5,0.5l0.7,1.6c0,0.1,0.3,0.6,0.7,1.3c0.7,1.2,1.2,2.3,1.5,3.3c2.6-0.6,5.4-0.9,8.5-0.9
+		c0.8,0,1.7,0,2.6,0l-3.4-7.1c-1.2-2.5-2-4.2-2.4-5.2c-1.1-3-1.9-5-2.4-5.8c-0.5-0.9-0.9-1.5-1.1-2c-0.4-0.7-0.7-1.4-0.8-2.1
+		c-0.2-1,0.3-2.6,1.4-4.9C887.2,175.5,888.5,172.4,890,168.1z M881.7,112.2c0.5,0.4,0.9,0.8,1.1,1c0.3-0.1,0.7-0.1,1.2-0.2
+		c0.9-0.2,2.2-0.5,4-0.9c2.7-0.6,6.3-0.7,10.7-0.2c2.2,0.3,3.5,0.5,4.1,0.7c0.9,0.2,1.6,0.5,2,0.7c0.2-0.3,0.6-0.6,1.1-1
+		c0.9-0.7,1.5-1.6,1.8-2.8c0.3-1.2,0.2-2.2-0.2-3.2c-0.2-0.7-0.7-1.5-1.5-2.4c-0.9-1.1-1.7-1.8-2.4-2.1c-0.8-0.4-1.8-0.7-2.8-0.8
+		h-0.4c-0.2,0-0.5,0-0.8,0.1c-0.8,0.1-1.3,0-1.7-0.2c-0.7,0-2,0-4.1-0.1c-2.1,0.1-3.5,0.1-4.2,0.1c-0.4,0.2-0.9,0.3-1.7,0.2
+		c-0.3,0-0.6-0.1-0.8-0.1c-0.1,0-0.2,0-0.3,0.1c-1.1,0.1-2,0.3-2.8,0.8c-0.7,0.4-1.5,1.1-2.4,2.1c-0.7,0.9-1.2,1.7-1.5,2.4
+		c-0.4,1-0.5,2.1-0.2,3.2C880.2,110.6,880.8,111.5,881.7,112.2z M885.2,97.1c0.5,0.4,1,0.7,1.7,0.9c0.4,0,0.8,0,1.2-0.1
+		c1.9-0.1,3.8-0.1,5.6,0c1.8-0.1,3.7-0.1,5.6,0c0.4,0,0.8,0,1.2,0.1c0.7-0.2,1.3-0.5,1.8-0.9c0.6-0.5,1.1-1.3,1.5-2.5
+		c0.4-0.8,0.6-1.6,0.7-2.4c0-0.4-0.1-1-0.2-1.6c-0.2-0.7-0.5-1.3-0.9-1.8c-0.3-0.3-0.8-0.7-1.5-1.2c-0.9-0.5-1.4-0.8-1.7-0.9
+		c-1-0.5-2-0.8-3.2-0.9c0,0,0,0-0.1,0.1c-0.7,0.1-1.8,0.1-3.1,0.1h-0.2c-1.3,0.1-2.3,0.1-3.1-0.1c0,0-0.1,0-0.1-0.1
+		c-1.1,0.2-2.2,0.5-3.1,0.9c-0.3,0.1-0.9,0.4-1.7,0.9c-0.7,0.5-1.2,0.9-1.5,1.2c-0.4,0.5-0.7,1.1-0.9,1.8c-0.2,0.6-0.2,1.2-0.2,1.6
+		c0,0.7,0.3,1.5,0.7,2.4C884.1,95.7,884.6,96.6,885.2,97.1z M880,152.6c0.8,0.8,1.4,1.5,1.8,2c0.6,0.8,1,1.7,1.2,2.7
+		c0.1,0,0.2-0.1,0.3-0.1c1.6-0.4,3.6-0.7,5.9-0.9c3.9-0.2,7.8,0,11.7,0.8c1.3,0.2,2.3,0.6,3,0.9c0.1,0.1,0.2,0.1,0.3,0.2
+		c0.2-1.3,0.7-2.5,1.5-3.6c0.4-0.5,0.9-1.2,1.8-2c0.9-0.9,1.5-1.6,1.8-2c1.2-1.7,1.8-3.8,1.9-6.3c0.1-2.5-0.5-4.8-1.8-6.9
+		c-1.3-2.3-3.1-3.7-5.3-4.3c-1.1-0.3-1.8-0.7-2-1.2c-0.3,0.2-0.6,0.4-0.9,0.5c-0.4,0.1-1,0-2.1-0.1c-0.7-0.1-2.2-0.2-4.6-0.3h-3.4
+		c-2.3,0.1-4.2,0.2-5.8,0.5c-0.1,0-0.3,0-0.4,0c-0.3,0.3-0.8,0.5-1.4,0.7c-2.2,0.6-4,2-5.3,4.3c-1.3,2.1-1.9,4.4-1.8,6.9
+		c0.1,2.5,0.7,4.6,1.9,6.3C878.6,151,879.1,151.7,880,152.6z M865.6,382.7c0.2-0.6,0.2-1.3,0.1-2.3c-0.1-0.7-0.3-1.3-0.7-1.8
+		c-0.4-0.6-0.9-0.9-1.5-1.1c-0.1,0-0.2,0-0.4,0V366c0.1,0,0.2,0,0.3,0.1c1.3,0,2.5,0,3.7,0.1c3.4,0,6.7,0,10.1,0.1h32.3
+		c0.5,0,1.1-0.1,1.6-0.1v0.1c3.1,0,6.2-0.1,9.3-0.1c1.2,0,2.5-0.1,3.7-0.1c0.1,0,0.2,0,0.3-0.1v11.6c-0.1,0-0.2,0-0.4,0
+		c-0.6,0.1-1.2,0.5-1.5,1.1c-0.3,0.4-0.5,1-0.7,1.8c-0.2,0.9-0.1,1.7,0.1,2.3c0.2,0.5,0.4,1,0.8,1.4c0.6,0.6,1.1,0.9,1.7,0.9v8.2
+		c-0.1,0.1-0.2,0.2-0.3,0.2c-0.4,0.3-0.8,0.8-1.4,1.5c-0.9,0.8-1.9,1.1-3.2,0.9c-1.1-0.2-2-0.8-2.9-1.7c-0.6-0.6-0.9-1-1.1-1.1
+		c-0.4-0.4-0.9-0.5-1.2-0.4c-0.3,0.1-0.6,0.3-0.9,0.6c-0.2,0.2-0.4,0.5-0.7,0.9c-0.5,0.7-1.2,1.2-2,1.6c-0.8,0.3-1.7,0.4-2.6,0.3
+		c-1.4-0.1-2.6-0.7-3.6-1.8c-1.3-0.3-2.4-0.9-3.2-1.8c-0.3-0.3-0.5-0.6-0.7-0.7c-0.3-0.3-0.6-0.5-0.8-0.5c-0.6-0.1-1.1,0.1-1.7,0.5
+		c-0.5,0.6-0.9,1.1-1.1,1.4c-1.2,1.7-2.9,2.7-5,2.8c-1,0-1.9-0.2-2.8-0.7c-0.9-0.4-1.7-1.1-2.2-1.9c-0.6-1-1.1-1.6-1.5-1.6
+		c-0.4,0-0.8,0.1-1.1,0.5c-0.2,0.1-0.5,0.5-0.9,1.1c-1.1,1.7-2.6,2.6-4.3,2.7c-0.9,0.1-1.7,0-2.5-0.3c-0.8-0.4-1.5-0.9-2-1.6
+		c-0.3-0.4-0.5-0.7-0.7-0.9c-0.3-0.3-0.6-0.5-0.9-0.6c-0.4-0.1-0.8,0-1.2,0.4c-0.1,0.1-0.5,0.4-1.1,1.1c-0.9,0.9-1.8,1.5-2.9,1.7
+		c-1.3,0.2-2.3-0.1-3.2-0.9c-0.6-0.7-1-1.2-1.4-1.5c-0.1-0.1-0.2-0.2-0.3-0.2v-8.2c0.6,0,1.1-0.3,1.7-0.9
+		C865.2,383.7,865.4,383.2,865.6,382.7z M906,383.9c0.2,0.3,0.5,0.6,0.7,0.9c0-0.2,0.1-0.3,0.1-0.5c0.6,0.4,1.3,0.7,2.4,0.7
+		c1.6,0.2,2.7-0.2,3.3-1.1c0.3-0.5,0.5-1.4,0.5-2.7c-0.1-0.9-0.2-1.4-0.2-1.5c-0.1-0.2-0.3-0.7-0.8-1.2c-0.5-0.6-0.9-1-1.3-1.2
+		c-0.4-0.1-1-0.1-1.7,0.2c-1,0.3-1.8,0.7-2.2,1.1c0,0,0-0.1,0-0.1c-0.4,0.3-0.7,0.6-0.9,1.1C905.3,380.9,905.2,382.6,906,383.9
+		L906,383.9z M890.9,381.9c0.2,0.6,0.6,1.1,1.2,1.5c0.5,0.3,1.1,0.5,1.9,0.6c1.8,0.3,3.1-0.1,3.9-1.2c0.6-0.9,0.7-2.1,0.3-3.5
+		c-0.2-0.9-0.6-1.6-1.2-2.1c-0.4-0.3-0.9-0.5-1.4-0.5c-1.2-0.1-2.1,0.2-2.8,0.8c-0.3,0.2-0.6,0.7-1,1.3
+		C891,380.2,890.7,381.2,890.9,381.9z M874.6,381.3c0,1.3,0.2,2.2,0.5,2.7c0.6,0.9,1.7,1.3,3.3,1.1c1.2-0.1,2.1-0.4,2.7-1
+		c0.7-0.8,0.9-2,0.6-3.6c-0.2-0.8-0.4-1.4-0.7-1.7c-0.4-0.6-1.2-1-2.4-1.3c-0.7-0.2-1.2-0.3-1.7-0.2c-0.4,0.2-0.8,0.6-1.3,1.2
+		c-0.4,0.6-0.7,1-0.8,1.2C874.7,379.9,874.6,380.4,874.6,381.3z M893,435.5c-3.5-0.7-7.1-1-10.7-1.1c0.6,0.5,1,1.2,1.4,2
+		c0.4,1,0.6,2.2,0.6,3.7c0,1.1-0.2,1.9-0.6,2.3c-0.2,0.3-0.8,0.7-1.7,1.1l-3.1,1.2c-0.2,0.1-0.3,0.2-0.2,0.3
+		c1.8,0.4,3.3,0.9,4.4,1.4c0.7,0.4,1.2,0.8,1.4,1.2c0.3,0.6,0.3,1.4,0,2.5l-0.5,2.3c-0.4,1.7-0.8,3.1-1.4,4.1
+		c2.5,0.1,3.9,0.2,4.4,0.1c4-0.1,7.3-1.1,10-2.9c1.5-1,2.7-2.2,3.7-3.7c1-1.5,1.6-3.2,1.7-4.9c0.3-2.8-0.5-5-2.2-6.8
+		C898.7,437.2,896.3,436.2,893,435.5z M932.5,512.2c0,0.2,0.1,0.3,0.1,0.4v7.4h-35.8c0.8-3.1,1.7-6.3,2.6-9.6l2.1-7.7
+		c0.8-3.2,1.2-5.6,1.1-7.1c-0.2-2.9-1.2-5-3.1-6.3c-1.5-1.1-3.4-1.3-5.5-0.7c-2,0.5-3.7,1.6-5,3.1c-1.1,1.3-2,3.1-2.7,5.2
+		c-0.4,1-0.9,2.9-1.5,5.7c-0.3,1.4-0.6,2.8-0.9,4.3c-0.2-0.1-0.5-0.2-0.7-0.3c-0.2-0.3-0.6-0.7-0.9-1c-1.3-1-2.3-1.7-3-2.3
+		c-2-1.8-3.3-4.3-3.9-7.6c-0.4-2.3-0.5-5.3-0.3-9.2c0.2-3.8,0.1-6.9-0.4-9.2c-0.7-3.3-2.1-5.8-4.2-7.5c-1.3-1-3.4-1.9-6.2-2.6
+		c-3.4-0.9-5.6-1.5-6.6-2c-2-0.9-3.7-2.3-5.2-4.2c-1.4-1.7-2.5-3.7-3.3-5.9c-1.3-4-1.4-8.5-0.5-13.5c0.7-3.8,1.9-7.1,3.7-9.9
+		c2.1-3.3,4.6-5.5,7.7-6.8c2.5-1,6.4-1.4,11.9-1.2c6.5,0.2,12.7,0.2,18.6-0.1c3.4-0.1,5.9-0.2,7.4-0.1c2.8,0,5.2,0.3,7.4,0.8
+		c2.6,0.6,4.8,1.6,6.8,3c2.2,1.5,3.7,3.4,4.7,5.5c0.8,1.8,1.3,5,1.5,9.6c0.2,4.2,1,7.3,2.3,9.2c0.7,1.1,1.9,2.4,3.7,3.9
+		c2,1.7,3.3,2.9,4,3.7c1.9,2.3,3.1,5.5,3.7,9.5c0.3,1.8,0.5,4.3,0.7,7.5c0,0.1,0,0.2-0.1,0.4V512.2z M903.6,438.3
+		c-1.3-2.1-3.4-3.7-6.2-4.7c-1.8-0.7-4.4-1.2-7.8-1.6l-6.6-0.5c-5-0.2-8.9,0.3-11.7,1.6c-2.4,1.1-4.4,2.8-5.9,5.1
+		c-1.5,2.3-2.3,4.7-2.3,7.4c0,2.6,0.7,5.1,2.2,7.4c1.5,2.3,3.4,4,5.8,5.1c1.4,0.6,3.1,1,5,1.3c1,0.1,2.7,0.2,5.2,0.4
+		c2.6,0.2,4.4,0.2,5.5,0.2c2.1,0,3.9-0.2,5.5-0.5c1.8-0.4,3.6-1.2,5.4-2.3c1.8-1.1,3.2-2.3,4.3-3.7c1.9-2.3,3-5,3.3-8
+		C905.4,442.7,904.9,440.3,903.6,438.3z M836.9,456.3c-0.4-0.4-1.3-1.1-3-2.3c-1.1-0.8-2-1.6-2.5-2.3c0,0,0,0.1-0.1,0.1
+		c-0.2,0.4-0.6,0.5-1.1,0.5c-0.1,0-0.5,0-1.2-0.1c-0.4,0-1.5-0.1-3.4-0.2c-4.5-0.1-7.7,0-9.6,0.2c-0.7,0.1-1.2,0.1-1.5,0
+		c-0.2-0.1-0.4-0.2-0.6-0.3c-0.5,0.7-1.3,1.4-2.3,2.1c-1.6,1.2-2.6,2-3,2.3c-1.3,1.3-2.2,2.9-2.6,4.8c-0.4,2-0.2,3.8,0.5,5.5
+		c0.4,0.9,1.7,2.8,3.8,5.6c1.2,1.6,2,3,2.4,4.3c0.2-0.1,0.3-0.1,0.5-0.2c0.7-0.2,1.5-0.4,2.5-0.6c4.7-0.7,9.5-0.7,14.3-0.1
+		c1.2,0.1,2.2,0.3,3,0.5c0.4-1.2,1.2-2.5,2.3-4c2.1-2.8,3.4-4.6,3.8-5.6c0.7-1.7,0.9-3.5,0.5-5.5
+		C839.1,459.1,838.2,457.5,836.9,456.3z M960.7,466c0-0.1,0-0.2,0.1-0.2v-0.3c-0.2-1.6-0.8-3.2-1.5-4.6c-1-2-2.4-3.7-4.2-4.9
+		c-0.7-0.6-2-1.3-3.7-2.2c-1.7-0.9-3-1.6-3.7-2.2c-1.9-1.5-3.3-3.4-4.1-5.6c-0.5-1.4-0.8-3.3-0.9-5.6c-0.2-3-0.3-4.9-0.5-5.8
+		c-0.6-4-2.3-7.5-5.2-10.4c-0.4-0.4-0.6-0.8-0.8-1.1h-25.1c1,0.5,2,1.1,2.9,1.7c3.4,2.3,5.5,5.2,6.5,8.7c0.4,1.3,0.6,4,0.8,8.2
+		c0.2,3.4,0.8,6,1.8,7.8c0.7,1.2,1.8,2.4,3.4,3.8c2.1,1.8,3.4,2.9,3.9,3.4c2.4,2.6,3.9,6.1,4.5,10.5c0.3,2.3,0.4,5.3,0.3,9
+		c0,0.1,0.1,0.2,0.1,0.4c0,0.2,0.1,0.3,0.2,0.4v35.2c-0.1,0.2-0.1,0.3-0.2,0.4v7.4h25.4v-43.3c0-0.1,0-0.2,0.1-0.2v-5.8
+		c0-0.1,0-0.2,0.1-0.2v-3.4c0,0,0.1-0.1,0.1-0.2v-0.5c0-0.1,0-0.2-0.1-0.2C960.8,466.1,960.7,466.1,960.7,466z M862.8,271.9
+		c0-0.1-0.1-0.2-0.1-0.2v-0.5c0.2-0.9,0.3-2.1,0.4-3.4c0.3-2.7,0.7-5.1,1.2-7.1c0.4-1.5,0.8-2.9,1.4-4c0.4-0.9,1.5-2.3,3.1-4.3
+		c1.8-2,3.2-3.3,4.3-4c0.8-0.5,1.8-1,3-1.5c0.7-0.3,1.8-0.7,3.1-1.2c0.3-0.1,0.6-0.3,0.9-0.4c0.3,0.1,0.5,0.1,0.8-0.1
+		c0.7-0.4,0.9-1.2,0.4-2.6c-1.4-4.1-2.3-7.4-2.8-10.1c-0.7-3.8-0.8-7.2-0.3-10.3c0.2-1.3,1-4.1,2.4-8.7c0.6-1.9,1-3.5,1.2-5
+		c0.3,0,0.8,0,1.3-0.1c6.3-1.5,13.6-1.5,21.9,0c0.4,0.1,0.7,0.1,0.9,0.1c0.2,1.5,0.7,3.2,1.2,5c1.4,4.5,2.2,7.4,2.4,8.7
+		c0.5,3.1,0.4,6.6-0.3,10.3c-0.5,2.6-1.5,6-2.8,10.1c-0.5,1.4-0.4,2.3,0.4,2.6c0.2,0.1,0.5,0.2,0.8,0.1c0.2,0.1,0.5,0.2,0.9,0.4
+		c1.4,0.5,2.4,0.9,3.1,1.2c1.2,0.5,2.2,1,3,1.5c1,0.7,2.5,2,4.3,4c1.6,1.9,2.6,3.4,3.1,4.3c0.6,1.1,1,2.4,1.4,4
+		c0.5,2.1,0.9,4.4,1.2,7.1c0.1,1.1,0.2,2.1,0.4,3c0,0.1,0,0.3,0.1,0.4v0.5c0,0.1-0.1,0.2-0.1,0.2v0.7c0,0.1,0,0.2-0.1,0.2v1.4
+		c0,0-0.1,0.1-0.1,0.2v3.1c0,0.1-0.1,0.2-0.1,0.2v7.4c0,0.1-0.1,0.1-0.1,0.2v46.4c-1-0.8-2.2-1.2-3.6-1.4c-2.1-0.4-4.1,0-6.2,1
+		c-0.6,0.3-1.1,0.4-1.3,0.4c-0.3,0-0.7-0.3-1.2-0.8c-1.7-1.5-3.8-2.3-6.1-2.3c-0.1,0-0.1,0-0.2,0c-1,0.5-1.9,1.3-2.7,2.2
+		c-0.4,0.4-0.6,0.6-0.8,0.6c-0.3,0.1-0.7,0-1.2-0.4c-1.6-1-3.4-1.5-5.5-1.4c-2,0-3.8,0.6-5.3,1.7c-0.7,0.4-1.2,0.7-1.5,0.7
+		c-0.4,0-0.9-0.3-1.5-0.9c-1.7-1.6-3.7-2.4-6.1-2.4s-4.3,0.8-6.1,2.3c-0.5,0.5-0.9,0.7-1.2,0.8c-0.2,0-0.7-0.1-1.3-0.4
+		c-2.1-1-4.1-1.4-6.2-1c-1.4,0.2-2.6,0.7-3.6,1.4v-46.4c0,0-0.1-0.1-0.1-0.2v-7.4c0-0.1,0-0.2-0.1-0.2v-3.1c0-0.1,0-0.1-0.1-0.2
+		v-1.4c0-0.1-0.1-0.2-0.1-0.2V271.9z M903.4,260.2c0,1.2,0.2,2.3,0.8,3.4c0.6,1.1,1.4,1.9,2.4,2.5c1,0.6,2.2,0.9,3.4,0.9
+		c1.2,0,2.3-0.2,3.4-0.8c1.1-0.6,2-1.3,2.4-2.3c0.1-0.2,0.3-0.5,0.5-1.1l0.4-1.4c0.4-2.2-0.1-3.9-1.4-5.2l-2.7-2
+		c-1.3-0.8-2.7-1-4.3-0.7c-1.5,0.3-2.8,1.1-3.6,2.4L904,257c-0.2,0.5-0.3,1-0.4,1.5L903.4,260.2z M869.5,308.7
+		c0.1,1.8,0.3,3.1,0.6,3.9c0.6,2,1.8,3.3,3.6,3.9c0.4,0.1,0.8,0.2,1.2,0.2c0.7,0,1.5-0.2,2.3-0.6c1.1-0.6,2-1.5,2.6-2.7
+		c0.5-1,0.8-2.2,0.9-3.6c0.1-0.8,0.1-2.1,0.1-3.7c-0.1-3.6-0.2-9-0.4-16.3c-0.1-6.4,0-11.9,0.2-16.4c0.1-3.3,0.7-5.6,2-6.9
+		c0.4-0.4,1-0.9,1.9-1.5c0.9-0.6,1.5-1.1,1.9-1.4c1-1.1,1.5-2.6,1.5-4.5c0-1.5-0.4-2.8-1.2-3.6c-0.8-0.9-1.9-1.5-3.4-1.7
+		c-0.3,0-0.5-0.1-0.8-0.1c-1,0-2.1,0.2-3.1,0.6c-2.1,0.8-3.9,2-5.4,3.6c-1.5,1.5-2.6,3.4-3.3,5.5c-0.6,1.9-0.9,4.8-0.9,8.5
+		l-0.4,35.3V308.7z M631.1,380.4c1.9-1.1,3.9-1.6,6.2-1.7c2.3,0,4.4,0.4,6.3,1.4c0.3,0.2,0.5,0.3,0.7,0.4c0.2-0.4,0.7-1,1.4-1.8
+		c1-1.1,1.5-2.5,1.5-4.2c0-1.6-0.4-3.1-1.2-4.4c-0.4-0.7-1-1.3-1.6-1.8c-2.2-1.5-4.4-2.2-6.8-2.3c-2.3,0.1-4.6,0.9-6.7,2.3
+		c-0.7,0.5-1.2,1.1-1.7,1.8c-0.8,1.3-1.2,2.8-1.2,4.4c0,1.7,0.6,3.1,1.5,4.2C630.4,379.4,630.9,380,631.1,380.4z M301.6,116.3
+		c1.3,2.7,2.3,5.3,3.3,8c0.1-2.8,0.2-5.1,0.4-6.7c0.3-2.9,0.9-5.4,1.8-7.5c1.5-3.2,3.8-5.5,6.8-7.1c-0.1-0.1-0.2-0.3-0.2-0.4
+		c-0.1-0.3-0.2-0.6-0.3-0.9h-0.2c-0.7-1-1.3-2.2-1.7-3.4c-0.5-1.5-0.7-3.1-0.6-4.6c-0.1,0-0.3-0.1-0.5-0.2c-4.4-1.8-9.5-3.1-15.2-4
+		c-3.6-0.5-8-0.9-13.2-1.2c1.9,2,3.8,4.1,5.6,6.2C293.3,101.6,298,108.8,301.6,116.3z M253.7,67.4c3.2,1.6,6.3,3.5,9.4,5.5
+		c5.7,3.8,11.1,8.1,16.1,12.9c2.8-0.2,5.7-0.2,8.7,0c1.6,0,3.5,0.2,5.5,0.5c5.9,0.8,11.7,2.2,17.4,4.2c0.2,0.1,0.3,0.2,0.5,0.2
+		c0.7-2.2,2-4.2,3.9-6c1-0.9,1.6-1.5,1.6-1.5c0.6-0.6,0.9-1.3,1-1.9c0-0.2,0.1-0.4,0.1-0.6v-0.1c0-0.1,0-0.2-0.1-0.4
+		c-0.1-0.5-0.3-1-0.7-1.6c-0.7-1.1-1.3-1.9-1.7-2.4c-1-1.4-1.6-3-1.9-4.7c-0.3-0.1-0.7-0.2-1.2-0.4c-2.7-1.4-5.1-2.4-7.2-3
+		c-0.9-0.3-1.4-0.5-1.5-0.7c-0.2-0.1-0.3-0.3-0.4-0.4c-0.7,0-1.8-0.2-3.1-0.5c-3.9-0.9-8.3-1.4-13.2-1.6c-3-0.1-7.4-0.1-13.3,0
+		c-4.2,0.1-7.3,0.3-9.4,0.7c-0.7,0.1-1.4,0.2-2,0.2c0,0,0,0-0.1,0.1c-0.2,0.1-0.7,0.3-1.4,0.4C258.1,66.5,255.8,66.9,253.7,67.4z
+		 M295.4,49.6c-0.4-1.6-1.1-2.8-2.2-3.6c-1-0.7-2.3-1.1-4-1.1c-1.3,0.1-2.3,0.3-3.2,0.7l-0.4,0.2l-0.5,15.8v0.1
+		c1.5,0,2.9,0.1,4.1,0.1c2.3,0.1,4.5,0.3,6.6,0.7c0-0.3-0.1-0.6-0.1-0.9v-7.6C295.7,51.8,295.6,50.3,295.4,49.6z M275.3,53.8
+		c-0.1-1.8-0.3-3.2-0.6-4.4c-0.5-1.7-1.2-2.9-2.3-3.8c-0.8-0.7-1.8-1-3-1.1c-1.1-0.1-2.1,0-3.1,0.4c-1.2,0.6-2.1,1.2-2.7,2.1
+		c-0.6,0.8-1.1,2.2-1.5,4.1c-0.1,0.4-0.2,0.7-0.3,0.9c0,4-0.1,7.6-0.2,10.8c1.7-0.3,3.6-0.6,5.8-0.8c1.5-0.2,3.8-0.3,6.9-0.4
+		c0.4,0,0.9,0,1.2,0c-0.1-0.8-0.2-1.8-0.1-3.1L275.3,53.8z M340.5,176.1c1.9,0.1,4.1,0.1,6.5,0.1c0.4,0,0.8,0,1.1,0.1
+		c0,0,0-0.1,0-0.1l-2.2-7.4c-0.4,0.1-1,0.1-1.8,0c-0.8-0.1-1.9-0.1-3.2,0c-1.7,0.1-2.8,0.2-3.1,0.2c-0.2,0-0.4,0-0.6-0.1
+		c0.8,2.9,1.4,5.4,2,7.3C339.5,176.1,340,176,340.5,176.1z M347.7,179.2c-0.4,0-1.9-0.1-4.4-0.2c-1.3-0.1-2.4-0.2-3.4-0.4
+		c0.8,2.4,1.3,4.2,1.6,5.3c0,0.1,0,0.2,0,0.3c2.6,0.2,5.1,0.4,7.8,0.7v-0.5c0-1.7-0.1-3.5-0.1-5.2
+		C348.7,179.3,348.2,179.3,347.7,179.2z M660.2,512.2c-0.4,0.7-0.8,1.9-1.2,3.4c-0.4,1.5-0.7,2.9-0.9,4.4h7.3v-14.4
+		C663.1,507.5,661.3,509.7,660.2,512.2z M-670,35.2v4.1c0.1,0.1,0.1,0.3,0.2,0.4v2.3c0.2,0.1,0.3,0.3,0.4,0.6
+		c0.1,0.4,0.2,0.7,0.3,0.9c0.3,0.6,0.8,1.1,1.6,1.4c0.6,0.2,1.4,0.2,2.3,0.1c0.8-0.1,1.3-0.2,1.7-0.5c0.4-0.3,0.6-0.7,0.8-1.3
+		c0.4-1,0.7-2.3,0.8-3.9c0.1-0.8,0.1-1.9,0.2-3.3c-2-0.1-4.5-0.4-7.4-0.7C-669.4,35.4-669.7,35.3-670,35.2z M595.4,111.4
+		c-1.5-1-3.3-1.5-5.4-1.5c-1.9,0-3.8,0.3-5.6,1.1c-2.9,1.2-4.9,3-6.1,5.3c-0.6,1.2-0.9,2.7-1,4.4v4.7c0,1.1-0.2,1.8-0.6,2.3
+		c-0.3,0.3-0.7,0.5-1.2,0.6c-0.1,0-0.6,0.1-1.5,0.1c-2.1,0.1-4,0.7-5.9,1.7c-1.9,1-3.4,2.4-4.6,4.2c-1.2,1.7-2,3.9-2.5,6.4
+		c-0.4,1.8-0.6,4.2-0.7,7.1c0,2.8,0.4,4.9,1.1,6.3c0.7,1.4,1.9,2.4,3.4,3.1c1.5,0.6,3.1,0.8,4.6,0.4c1.5-0.3,2.8-1.1,4-2.3
+		c1.2-1.2,1.9-2.5,2.2-4.1c0.2-1,0.4-2.5,0.5-4.5c0.4-1.5,1.1-2.9,2.3-4.1c1.2-1.1,2.5-1.9,4-2.4c1-0.3,2.6-0.5,4.7-0.6
+		c3.4-0.6,6.3-2.1,8.8-4.7c2.3-2.4,3.8-5.4,4.5-8.9c0.6-2.9,0.6-5.6-0.1-8.1C599.3,115,597.8,112.8,595.4,111.4z M641,505.5
+		c-0.6,0-1,0.1-1.4,0.2c-0.6,0.2-1,0.3-1.4,0.4c-0.6,0.2-1,0.1-1.4-0.2c-0.5-0.4-0.6-1.1-0.1-2.1c0.5-1.2,1.1-2.5,1.9-4.1
+		c-1.2-1.7-2.3-2.8-3.2-3.3c-0.7-0.3-1.2-0.3-1.7-0.1c-0.5,0.3-0.7,0.8-0.7,1.5l0.2,1.7l-0.2,1.4c-0.1,0.4-0.1,0.9-0.1,1.7
+		c0,3,0,6,0,9.1c0,0.6,0.1,1,0.4,1.2c0.2,0.2,0.5,0.3,1.1,0.3c0.3,0,1.2,0,2.6-0.1c1-0.1,1.9-0.1,2.6,0c0.8,0.1,1.4,0,1.7-0.1
+		c0.4-0.3,0.7-0.9,0.7-1.7l-0.6-5.9C641.2,505.5,641.1,505.5,641,505.5z M617.4,514.5c-0.6-2-1.4-3.6-2.4-4.7
+		c-0.8-1-2.3-2.3-4.6-3.8c-0.2-0.1-0.3-0.2-0.4-0.3V520h8.4c0-0.6,0-1.2-0.1-1.7C618.2,517.2,617.9,515.9,617.4,514.5z M338.3,166.3
+		c1.7-0.3,3-0.4,3.9-0.5c1,0,2,0,2.8,0.2l-1.5-5.2c-0.1,0-0.2,0-0.2,0l-7.8-0.4c-0.2,0-0.5-0.1-0.7-0.1c0.6,2.3,1.2,4.4,1.7,6.3
+		C336.8,166.6,337.4,166.5,338.3,166.3z M334.3,158.1c0.2-0.1,0.5-0.1,0.7-0.2c1.2-0.2,2.5-0.2,4.2-0.2c0.8,0,2,0.1,3.6,0.2
+		l-1.9-6.3c-0.1,0.1-0.3,0.1-0.5,0.1c-0.8,0.1-1.9,0.1-3.2,0c-1.5-0.2-2.6-0.2-3.2-0.2c-0.5,0-0.9,0-1.3,0c0.4,1.5,0.8,3.1,1.2,4.7
+		C334,157,334.2,157.5,334.3,158.1z M343.7,187.5c9.3,0.7,19.6,2.3,30.9,4.8c11.2,2.4,20.6,5.1,28.1,8.1c9.2,3.7,19,9.1,29.6,16.3
+		c16.9,11.4,31.8,24.1,44.6,38.2c13.8,15.1,24.6,31.3,32.6,48.4c0.1,0.3,0.2,0.5,0.4,0.7c-0.9,1.2-1.5,2.5-1.9,4
+		c-0.4,1.6-0.5,3.1-0.3,4.6c-0.3,0.4-0.4,1.1-0.5,2l-0.5,10c0,0.3,0,0.5,0,0.7c-0.3,0.3-0.5,0.5-0.6,0.8l-0.1,0.1
+		c0,0-0.1,0.1-0.1,0.1c-0.4,0.3-0.7,0.7-1,1.4c-2,4.3-3.2,10.1-3.7,17.4c-0.2,3.1-0.3,6.2-0.2,9.3c-0.9-0.8-1.9-1.3-3.2-1.5
+		c-1.8-0.4-3.5-0.3-5.2,0.4c-1.6,0.7-2.9,1.8-3.9,3.3c-1,1.5-1.6,3.1-1.8,4.9c-0.2,1.2-0.1,2.6,0.1,4.4c0.4,2,0.6,3.5,0.7,4.4
+		c0.2,2.4,0,4.3-0.8,5.6c-0.5,0.9-1.2,1.5-2.1,1.9c-0.9,0.4-1.9,0.5-2.7,0.1c-0.9-0.4-1.6-1.2-2.2-2.4c-0.2-0.4-0.5-1.6-1-3.4
+		c-0.7-2.3-1.7-4.1-3.1-5.5c-1.8-1.7-3.7-2.4-5.8-2.3c-2.3,0.1-4.2,1.1-5.8,3c-1.3,1.7-2.1,3.8-2.1,6.3c0,1.2,0.2,2.6,0.5,4.4
+		c0.6,2.8,0.9,4.3,0.9,4.4c0.4,3,0.2,5.6-0.7,7.8c-1.1,2.8-2.9,4.6-5.5,5.5c-0.5,0.2-0.8,0.4-1,0.6h-61.8c0.1-0.2,0.1-0.5,0.1-0.8
+		c0-1-0.2-2.5-0.5-4.4c-1.2-7.8-3.4-15.3-6.5-22.6c0.8,0.6,1.6,1.1,2.7,1.4c2,0.7,4,0.7,5.8-0.1c1.8-0.7,3.3-2,4.4-3.8
+		c1.1-1.8,1.6-3.7,1.5-5.6c0-1.1-0.2-2.4-0.6-3.9c-0.2-0.8-0.5-2.1-0.9-3.9c-0.6-3.3-0.1-5.8,1.5-7.5c0.9-0.9,2-1.5,3.4-1.7
+		c1.3-0.2,2.7,0,4,0.5c2,0.8,4,2.6,5.9,5.3c0.7,1,1.7,2.5,3,4.6c1.3,1.7,2.6,3,3.9,3.8c1.8,1.1,3.8,1.5,6.1,1.2
+		c2.3-0.3,4.1-1.1,5.6-2.6c1.5-1.5,2.5-3.3,2.9-5.5c0.4-2.2,0.2-4.2-0.6-6.2c-0.2-0.6-1.4-2.5-3.4-5.6c-1.4-2.2-2.1-4.1-2-5.8
+		c0.1-1.5,0.6-2.8,1.6-3.9c1-1.1,2.3-1.8,3.7-2.1c1.8-0.3,3.6,0.1,5.4,1.3c1.5,1,2.9,2.4,4.2,4.1c0.7,1.1,1.8,2.7,3.3,4.9
+		c1.3,1.9,2.6,3.2,4,4.1c1.9,1.3,4.1,1.9,6.5,1.8c2.5-0.1,4.5-0.9,6.3-2.4c1.8-1.4,3-3.3,3.6-5.6c0.6-2.4,0.5-4.6-0.4-6.7
+		c-0.4-1.1-1.2-2.3-2.1-3.6c-1.2-1.5-2-2.6-2.6-3.4c-2.1-2.9-2.8-5.5-2.2-7.8c0.3-1.2,1-2.2,2-3.1c1-0.9,2.1-1.4,3.4-1.7
+		c2.6-0.4,5,0.2,7.2,1.9c1.3,0.9,2.9,2.9,5,5.9c1.9,2.7,3.7,4.5,5.3,5.5c2.6,1.5,5.3,1.8,8.2,0.8c1.3-0.5,2.5-1.3,3.6-2.3
+		c1-1,1.8-2.2,2.2-3.6c0.7-2,0.8-4.4,0.2-7.2c-0.4-2.3-1.3-4.6-2.6-7.1c-0.9-1.8-2.2-4-4-6.6c-14-21.4-30.8-40.3-50.2-56.9
+		c-0.6-0.6-1.2-0.9-1.5-0.9c-0.2,0-0.3-0.1-0.4-0.1c-1.2-0.6-2.5-1-3.8-1.1c-2.5-0.3-4.5,0.4-6.3,2c-1.3,1.2-2.1,2.9-2.6,5
+		c-0.4,2.4-0.4,4.6,0.2,6.6c0.6,2.5,2,5,4.1,7.7c1.3,1.5,3.3,3.8,6,6.6c1.7,1.9,2.7,3.6,3,5.1c0.3,1.9-0.2,3.5-1.6,5
+		c-1.4,1.4-3,1.9-4.9,1.6c-0.8-0.1-1.7-0.5-2.8-1c-1.5-0.8-2.4-1.2-2.8-1.4c-2.3-0.8-4.7-0.7-7.1,0.3c-2.5,1-4.3,2.6-5.5,4.7
+		c-1.2,2.1-1.8,4.5-1.7,7.1c0.1,2.5,0.7,4.8,2,7.1c1.2,1.9,2,3.3,2.4,4.3c0.8,1.9,0.9,3.4,0.4,4.7c-0.5,1.3-1.5,2.3-3.1,3.1
+		c-2.5,1.1-4.6,1-6.4-0.2c-0.6-0.5-1.3-1.2-1.9-2.1c-0.7-1.1-1.2-1.9-1.6-2.4c-1.2-1.5-2.6-2.8-4.4-3.6c-1.8-0.9-3.7-1.3-5.6-1.2
+		c-1.9,0.1-3.7,0.7-5.4,1.8c-1.7,1.1-2.9,2.6-3.7,4.3c-1.5,3.2-1.3,6.8,0.4,10.7c0.1,0.2,0.7,1.4,1.8,3.6c0.7,1.5,1.2,2.7,1.4,3.8
+		c0.3,1.4,0.2,2.8-0.4,4.1c-0.6,1.4-1.4,2.3-2.7,2.7c-1.7,0.6-3.5,0.1-5.5-1.5c-1-0.8-1.8-1.5-2.3-1.9c-0.9-0.7-1.8-1.2-2.6-1.6
+		c-1.6-0.7-3.4-0.8-5.3-0.4c-1.9,0.5-3.4,1.5-4.6,2.8c-2.1,2.4-3,5.2-3,8.6c-2.1-2.3-4-4-5.6-5.2c-2.1-1.7-4.9-3.5-8.4-5.3
+		c-5.9-3-11.9-5.5-18.1-7.4c-0.4-0.1-0.7-0.2-1-0.2c0-1.8-0.1-3.7-0.2-5.5v-19.6c0-0.1,0-0.2-0.1-0.2v-4.1c1.1,0.6,2.3,1,3.5,1.2
+		c1.7,0.3,3.2,0.1,4.6-0.4c1.5-0.6,2.7-1.6,3.5-3c0.9-1.5,1.2-3,0.8-4.5c-0.1-0.3-0.5-1.3-1.1-2.8c-0.5-1.1-0.7-2.1-0.6-2.9
+		c0.2-1.2,1-2.1,2.3-2.7c1.1-0.6,2.4-0.8,3.7-0.7c1.3,0.1,3.1,0.6,5.4,1.5c2.5,0.9,4.2,1.5,5.3,1.7c2.3,0.4,4.3,0.2,6.1-0.7
+		c2.1-0.9,3.4-2.4,4-4.5c0.4-1.7,0.2-3.4-0.6-5.2c-0.7-1.6-1.9-3-3.4-4.3c-0.9-0.8-2.5-1.8-4.5-3c-2.1-1.3-3.6-2.3-4.5-3
+		c-1.1-0.9-2-1.9-2.6-2.9c-0.7-1.3-0.9-2.5-0.7-3.6c0.2-1.2,0.9-2.3,2.1-3.1c1.1-0.7,2.3-1.2,3.7-1.2c1.2,0,2.5,0.1,3.9,0.5
+		c0.5,0.1,1.8,0.5,3.8,1.2c3.2,1.1,5.8,1.3,7.7,0.7c1.1-0.3,2.1-0.9,3-1.8c0.9-0.8,1.5-1.8,1.8-3c0.4-1.1,0.4-2.3,0.2-3.4
+		c-0.2-1.2-0.7-2.2-1.4-3.1c-0.3-0.4-0.7-0.9-1.4-1.5c-0.7-0.7-1.2-1.2-1.4-1.5c-1.2-1.3-1.5-2.5-1.1-3.7c0.3-0.9,1.1-1.6,2.3-2
+		c1-0.3,2.1-0.4,3.3-0.2c1,0.2,2.6,0.5,4.9,1.1c2.1,0.5,3.7,0.8,4.9,0.9c1.9,0.1,3.5-0.1,5-0.7c1.7-0.6,3-1.6,3.8-3
+		c0.8-1.4,1-2.9,0.7-4.7c-0.3-1.7-1-3.1-2.1-4.4c-1.6-1.9-4.4-3.6-8.2-5.2c-20.4-8.4-43.7-11.9-70-10.6c-2.5,0.1-4.5,0.4-6.1,0.7
+		l0.1-10.1c0.4,0,0.8,0,1.2-0.1C322.3,186.8,332.6,186.6,343.7,187.5z M401.2,241.8c-2.7-1.1-5.1-1.2-7.1-0.4
+		c-1.6,0.7-2.7,1.9-3.4,3.6c-0.7,1.7-0.8,3.4-0.1,4.9c0.3,0.7,0.8,1.5,1.5,2.4c0.4,0.5,1,1.2,1.9,2.1c0.9,1.1,1.2,2.1,0.7,2.8
+		c-0.5,0.7-1.5,0.7-3.1,0.1c-1.8-0.8-3.1-1.3-3.9-1.5c-1.5-0.4-2.8-0.5-4-0.3c-1.9,0.4-3.4,1.4-4.3,3.1c-1,1.7-1.1,3.5-0.5,5.4
+		c0.6,1.7,2,3.2,4.2,4.7c0.5,0.4,1.4,0.9,2.7,1.7c1.2,0.7,2.1,1.2,2.7,1.7c0.9,0.6,2,1.6,3.3,2.8c1.7,1.7,2.7,2.7,3.1,3
+		c2.8,2.3,5.5,3.4,7.9,3.1c1.3-0.1,2.5-0.6,3.6-1.4c1.1-0.8,1.9-1.8,2.5-3c1.1-2.4,1-4.9-0.2-7.5c-0.2-0.4-0.6-1.1-1.1-2
+		c-0.4-0.8-0.7-1.5-0.8-2.1c-0.1-0.7,0-1.2,0.3-1.5c0.4-0.4,0.9-0.5,1.6-0.3c0.2,0,0.7,0.3,1.5,0.7c1,0.5,2.1,0.7,3.3,0.5
+		c1.2-0.2,2.2-0.6,3.1-1.4c0.9-0.7,1.5-1.6,1.9-2.8c0.4-1.2,0.4-2.3,0.2-3.4c-0.3-1.3-1-2.6-2.1-3.9c-1.2-1.5-2.7-3-4.6-4.5
+		c-1.1-0.8-2.9-2-5.4-3.7C404.2,243.2,402.3,242.2,401.2,241.8z M507.8,327.6c0,0.2-0.1,0.5-0.2,0.8c-2.3,6.2-3.5,13.9-3.6,23.2
+		c-0.1,13.3,1.8,26.4,5.7,39.2c0.2-0.2,0.5-0.4,0.9-0.7c13.3-8.6,24.8-18.1,34.6-28.5c10.8-11.5,19.1-23.8,25-36.8
+		c-1.7-0.2-3.7-0.5-6.1-1.1c-4.4-1-6.9-1.6-7.6-1.7c-3.2-0.6-7.6-0.8-13.3-0.8c-14.2,0.2-25.8,2.2-34.8,6.2
+		C508.3,327.4,508,327.5,507.8,327.6z M570.7,402.4c4.6-10.8,7.2-22.2,7.8-34.1c0.6-12-0.8-23.6-4.2-34.8c-0.3-1-0.8-2.6-1.4-4.6
+		c-0.3-1-0.5-1.9-0.7-2.7c-2.2,5.6-4.8,10.8-7.9,15.7c-2.2,3.6-5,7.5-8.5,11.9c-12.5,15.7-27.3,28.8-44.5,39.3
+		c-0.6,0.4-1.1,0.5-1.5,0.5c0,0.1-0.1,0.1-0.2,0.2c0,0.4-0.1,0.9-0.3,1.5c-1,3.2-1.6,6.3-1.9,9.5c0,0.2-0.1,0.4-0.1,0.5
+		c5,3.3,9.3,7.4,13.1,12.2c5.1,6.6,8.8,14.3,11,23c1.4,5.3,2.2,10.7,2.3,16.2c13.2-12.3,23.1-24.6,29.8-37.1c1.7-3.1,3.5-7,5.6-12
+		c-0.1-0.4,0-0.8,0.2-1.4C569.5,405.1,570,403.9,570.7,402.4z M665.3,496.2c0,0.2,0.1,0.4,0.1,0.6v5.5c-2.5,1.8-4.4,3.4-5.5,4.8
+		c-0.9,1.2-1.7,2.5-2.4,4.1c-1.2,2.8-2,5.8-2.4,8.8h-33.8c0-1.2-0.1-2.4-0.4-3.6c-0.4-2.1-1-3.8-1.6-5.1c-1.8-3.8-4.7-6.6-8.7-8.2
+		c-0.3-0.1-0.5-0.2-0.7-0.2v-6.2c0-0.2,0.1-0.4,0.1-0.6c0-0.4,0.2-2.7,0.5-6.9c0.2-2.8,0.5-5.1,1-6.9c1.3-4.9,4-9,7.9-12
+		c0.4-0.3,1.4-1,3.1-2.1c1.3-0.9,2.3-1.6,3-2.3c2-1.8,3.4-4.1,4.2-6.9c0.4-1.4,0.5-2.7,0.5-4c0.1,0,0.2,0,0.2-0.1
+		c0.8-0.2,1.8-0.4,3-0.5c1.9-0.2,4.2-0.2,6.6-0.1c1.4,0.1,2.6,0.2,3.5,0.5c0.6,0.2,1.2,0.4,1.5,0.4c0,1.2,0.2,2.5,0.5,3.8
+		c0.7,2.8,2.1,5.1,4.2,6.9c0.7,0.7,1.7,1.4,3,2.3c1.7,1.2,2.7,1.9,3.1,2.1c4,3.1,6.6,7.1,7.9,12c0.5,1.8,0.8,4.1,1,6.9
+		C665.1,493.5,665.3,495.8,665.3,496.2z M647.6,489.8c0-0.1-0.1-0.2-0.1-0.2v-0.3c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.2-0.1-0.3
+		c0-0.1,0-0.2-0.1-0.2c0-0.2-0.1-0.4-0.2-0.5c0.1-0.2,0.1-0.4,0-0.7c-0.1-0.6-0.3-1.1-0.4-1.5c-0.4-1.4-0.9-2.5-1.6-3.2
+		c-0.9-1-2.2-1.7-3.7-2.1c-0.9-0.2-2.3-0.3-4.2-0.3l-1.4,0.1h-0.1c-0.4,0.1-0.8,0.2-1.1,0.4c-1.7,0.7-3,1.6-3.7,2.8l-0.7,1.3
+		c-0.2,0.6-0.3,1-0.4,1.2c0,0.2-0.1,0.7-0.1,1.7c-0.1,0.9-0.2,1.4-0.2,1.6c0,0.4,0.1,0.7,0.3,0.9v1.5c0,0.1-0.1,0.2-0.1,0.3v6.2
+		c0,0.1-0.1,0.2-0.1,0.3V514c0,0.1,0,0.2,0.1,0.2c0,0.1,0,0.2,0.1,0.3c0,0.1,0.1,0.2,0.1,0.2c0.1,0.1,0.2,0.2,0.2,0.2l0.1,0.1
+		c0,0.4,0.4,0.8,0.9,1.1c0.5,0.1,1,0.1,1.5,0.1c3.6-0.4,7.2-0.3,10.7,0.2c0.9,0.1,1.6,0.1,2-0.1c0.4-0.1,0.6-0.3,0.8-0.5
+		c0.1,0,0.2-0.1,0.2-0.1c0.1-0.1,0.2-0.2,0.3-0.2c0-0.1,0.1-0.2,0.1-0.3c0,0,0.1-0.1,0.1-0.2c0-0.1,0.1-0.2,0.1-0.3
+		c0-0.1,0-0.2,0.1-0.2v-0.3c0,0,0.1-0.1,0.1-0.2v-0.5c0-0.1,0.1-0.2,0.1-0.2v-0.8l0.1-0.2v-5.8c0-0.1,0-0.2,0.1-0.2V489.8z
+		 M815.8,508.7c-1.5-2.3-3-3.4-4.6-3.5c-0.5,0-1,0.1-1.5,0.2c0.1,0.1,0.1,0.2,0.2,0.2h-0.4c-0.1,0.1-0.2,0.1-0.3,0.2
+		c-0.1,0.1-0.3,0.2-0.4,0.2c-0.1,0.1-0.2,0.1-0.3,0.2c-0.1,0.1-0.2,0.2-0.2,0.2l-0.2,0.2l-0.2,0.2c0,0.1-0.1,0.1-0.1,0.2
+		c0,0.1,0,0.1-0.1,0.2c0-0.1-0.1-0.1-0.1-0.2c-0.1,0.2-0.2,0.4-0.4,0.6v0.2c-0.1,1.6,0.1,3.4,0.7,5.3c0.1,0.2,0.1,0.4,0.2,0.5
+		c1,1.8,2.1,3.9,3.2,6.1h10.8c-0.7-1.3-1.4-2.7-2.2-4.2C818,512.3,816.7,510,815.8,508.7L815.8,508.7z M835,484.1
+		c-1.3-1.9-2.1-3.6-2.4-5.1c-0.7,0-2.2-0.2-4.7-0.6c-1.6-0.2-4-0.3-7.2-0.2c-3,0.1-5.2,0.3-6.6,0.8c-0.7,0.2-1.1,0.3-1.3,0.3h-0.1
+		c-0.3,1.4-1,3-2.3,4.8c-2.2,3.1-3.5,5.1-3.9,5.9c-1.2,2.8-1.1,6,0.2,9.6c0.3,1,0.9,2.1,1.5,3.3c1.2-0.6,2.5-0.8,3.7-0.7
+		c-0.1-0.3-0.2-0.6-0.3-0.9c0.2,0.1,0.3,0.3,0.4,0.4c0.2,0.3,0.5,0.5,0.9,0.6h0.3c0.5,0.6,1.3,1.3,2.4,2c0.2,0.1,0.4,0.2,0.5,0.3
+		v0.1c0.4,0.4,0.9,0.9,1.3,1.5c1.1,1.4,2.5,3.9,4.4,7.3c1.2,2.3,2.3,4.4,3.4,6.5h4.3l0.2-2.5c0.4-2.6,0.8-4.3,1.3-5.2
+		c0.1-0.2,0.3-0.5,0.4-0.7c0.4-1,1.1-2.1,2.1-3.5c2.5-3.3,4.1-6.1,4.9-8.4c1.3-3.6,1.4-6.8,0.2-9.6
+		C838.5,489.2,837.2,487.3,835,484.1z M523.3,299.9c0-0.6,0-1.4-0.1-2.5c0-0.9,0.1-1.7,0.2-2.4c0.6-2.5,2.3-4.5,5-5.9
+		c1.8-0.9,4.4-1.6,7.7-2.1c6.8-0.9,12-0.4,15.6,1.5c1.6,0.7,2.7,1.7,3.3,3c0.4,0.8,0.6,1.8,0.7,3.1c0,1.4-0.1,2.5-0.1,3.2
+		c0,0.9,0.2,1.5,0.6,1.9c0.5,0.4,1.5,0.3,3.1-0.2c1.1-0.4,2.3-0.4,3.5-0.1c1.2,0.3,2.2,0.8,3.1,1.6c1.8,1.6,2.8,3.7,2.9,6.3
+		c0,1,0.1,1.8,0.1,2.3c-0.3,0.2-0.6,0.5-1,0.8c-1.5,1.3-3.1,2.5-4.9,3.6c-0.7,0.4-1.2,0.5-1.5,0.5c-0.4,0-1-0.3-1.7-0.8l-6.9-5.6
+		c-1.2-0.8-2.1-1.3-2.6-1.4c-0.9,0-1.9,0.4-3.1,1.2c-2,1.5-3.8,3-5.5,4.4c-0.5,0.4-0.9,0.6-1.2,0.7c-0.4,0-1-0.2-1.6-0.8l-3.2-2.8
+		c-1.3-1.1-2.3-1.6-3.2-1.6c-0.5,0-1.3,0.4-2.4,1.2l-6.8,5c-0.9,0.7-1.7,1.2-2.4,1.3c-0.8,0.2-1.9,0-3.4-0.6l-7.1-2.6
+		c-0.1,0-0.2-0.1-0.4-0.1c0-0.1,0-0.3,0-0.4c-0.1-1.3,0.1-2.7,0.6-4c0.5-1.3,1.2-2.4,2.2-3.3c1-0.9,2.2-1.6,3.5-2
+		c1.3-0.4,2.7-0.6,4-0.4c0.9,0.1,1.4,0,1.7-0.1C523,301.8,523.3,301.1,523.3,299.9z M544,294.2c0,0.5,0.1,0.9,0.3,1.2
+		c0.2,0.3,0.5,0.5,1,0.8c1,0.4,1.8,0.3,2.6-0.3c0.9-0.6,1.2-1.4,0.8-2.4c-0.2-0.7-1-1.3-2.3-1.7c-0.9-0.2-1.6-0.2-2,0.2
+		c-0.2,0.2-0.3,0.5-0.4,0.9C544,293.3,544,293.7,544,294.2z M537.5,304c0.4,0.6,1.1,0.8,2,0.7c0.9,0,1.6-0.2,2.1-0.7l0.6-0.8
+		l0.3-0.8c0-0.2-0.1-0.6-0.4-0.9c-0.5-0.9-1.1-1.5-1.8-1.7c-0.3-0.1-0.7,0-1.4,0.1c-0.9,0.4-1.5,1-1.8,1.8
+		C536.8,302.6,537,303.4,537.5,304z M531.3,295.7c0.2,0.5,0.5,0.8,1,1.1c0.4,0.2,0.9,0.3,1.4,0.2c0.9-0.2,1.6-0.8,2.1-1.8
+		c0.2-0.5,0.2-1,0.1-1.5c-0.1-0.6-0.4-1-0.7-1.3c-0.4-0.4-0.9-0.6-1.5-0.5c-0.8,0.1-1.4,0.5-1.8,1.2c-0.2,0.3-0.3,0.7-0.5,1.1
+		C531.1,294.7,531.1,295.2,531.3,295.7z M336,119.5c-0.2-0.7-0.6-1.3-1.2-1.9c-0.7-0.6-1.3-1-1.9-1.1c-0.4-0.1-1,0-1.8,0.1
+		c-0.6,0.1-1,0.3-1.5,0.7c-0.4,0.4-0.7,0.9-1,1.7c-0.1,0.2-0.1,0.4-0.2,0.7c0.5,0,1,0.1,1.5,0.4c1.4,0.8,2.3,2.2,2.6,4.2
+		c0.1,0.9,0.1,2.6-0.2,5c-0.2,0.9-0.3,1.6-0.5,1.8c-0.2,0.3-0.3,0.5-0.5,0.7l4.9,0.2c0.1,0,0.2,0,0.2,0c0-0.2-0.1-0.5-0.1-0.9
+		l0.1-8.3C336.4,121.3,336.3,120.2,336,119.5z M327.4,134.2L327.4,134.2c0.6,1.7,1.2,3.6,1.8,5.6c0.2-0.1,0.5-0.1,0.7-0.1
+		c2.3-0.2,4.6-0.1,7.1,0.1c0.1,0,0.2,0,0.2,0l-1.4-4.6c0-0.2-0.1-0.3-0.1-0.5h-0.3c-3.1-0.2-5.4-0.3-7.1-0.4
+		C328,134.4,327.7,134.3,327.4,134.2z M332.3,149.1c2.4-0.3,5-0.2,7.8,0.2l-2-6.4c-0.2,0-0.6,0.1-1.1,0.1c-3.7-0.3-5.8-0.5-6.2-0.5
+		c-0.3,0-0.6,0-0.8-0.1c0.6,2.1,1.3,4.3,1.9,6.8C332.1,149.1,332.2,149.1,332.3,149.1z M327.8,258.6c0,0.1,0,0.1,0.1,0.2v0.5
+		c0,0.1-0.1,0.2-0.1,0.2v2c0,0.1,0,0.1-0.1,0.2v17.6c0,0.1,0.1,0.2,0.1,0.2v0.6c0.2,0.1,0.3,0.2,0.4,0.2c0.2,0,0.7,0.1,1.2,0.1
+		c0.3,0,0.6,0,1.1-0.1v-1c0-0.1,0-0.2,0.1-0.2v-17.1c0-0.1-0.1-0.2-0.1-0.2v-2c0,0-0.1-0.1-0.1-0.2v-0.7c0,0,0-0.1-0.1-0.2v-0.2
+		c0-0.1-0.1-0.2-0.1-0.2v-0.2c0,0-0.1-0.1-0.1-0.2v-0.2c0-0.1-0.1-0.2-0.1-0.2c0-0.1-0.1-0.2-0.1-0.2c-0.1,0-0.2-0.1-0.3-0.2
+		c-1.2-5.6-3.8-11.8-8.1-18.4c-2.7-4.2-5.7-8.2-8.8-11.9c-0.5-0.6-1.1-1.2-1.6-1.8c-0.1,0.8-0.1,1.5-0.1,2c0,0.7,0,1.4,0.1,2.3
+		c0.7,0.9,1.4,1.8,2.1,2.7c0.8,1,1.6,2.1,2.4,3.1c0.5,0.7,1,1.3,1.4,2v0.2c0,0.1,0,0.1-0.1,0.2v1.4c0,0.1-0.1,0.2-0.1,0.2v2.4
+		c0,0.1-0.1,0.2-0.1,0.2v5.3c0,0.1,0,0.2-0.1,0.2v16.2c0.5,0.2,1,0.4,1.4,0.6c0.4,0.1,0.8,0.2,1.2,0.2v-17c0-0.1,0-0.2-0.1-0.2v-5.3
+		c0-0.1-0.1-0.2-0.1-0.2v-1C322.9,246.1,325.7,252.2,327.8,258.6z M372,396.3H392c0-0.1,0-0.2-0.1-0.4c-1.7-15.4-6.9-29.5-15.5-42.4
+		c-3.2-4.8-7.5-10.1-12.8-16c-1.5-1.7-2.9-3.2-4.1-4.3c-3.4-3.2-7.7-6.1-13.1-8.6c-2.9-1.4-7.8-3.4-14.7-6c-0.2-0.1-0.5-0.2-0.7-0.2
+		c0,7-0.7,13.7-2,20.1c0.2,0,0.3,0.1,0.5,0.1c3,1.1,6.8,3.3,11.2,6.7c5,3.7,8.8,6.9,11.3,9.5c9.8,9.9,16.5,23.6,19.9,40.9
+		C372,395.9,372,396.1,372,396.3z M335.6,368.2c2.9,3.3,5.7,7.6,8.2,12.9c2.4,5,4.2,9.9,5.5,14.7c0,0.2,0.1,0.3,0.1,0.5h19.8
+		c-3.6-17.3-9.9-30.4-18.9-39.4c-2.1-2.1-5.5-5-10.1-8.7c-2.5-1.9-4.3-3.3-5.5-4.1c-2.1-1.4-4.1-2.4-6-3.2c-0.1,0.6-0.3,1.3-0.4,1.9
+		c-1.4,5.7-3.3,11-5.6,15.9c1.2,0.4,2.5,1,4.1,2C330.1,362.9,333.1,365.3,335.6,368.2z M-768,200.8c1,0.6,2.1,0.9,3.3,0.9
+		c1.2,0,2.3-0.4,3.2-1.1c0.9-0.7,1.6-1.6,1.9-2.8c0.3-1.2,0.2-2.3-0.4-3.3c-0.4-0.8-1-1.6-2.1-2.3s-2-1-2.8-1
+		c-1.2,0-2.3,0.4-3.4,1.3c-1.5,1.3-2.2,2.6-2.2,4.1C-770.4,198.4-769.6,199.8-768,200.8z M-1029.3,480c1.3-2.8,3-5.4,4.9-7.9
+		c6.1-7.9,14.6-14,25.6-18.2c3.3-1.3,6.9-2.4,10.7-3.3c1.6-3.8,2.5-7.3,2.7-10.4c0.2-4.5-0.9-9.7-3.6-15.6
+		c-7.3,1.1-13.9,2.6-19.8,4.5c-13.3,4.5-25,12-35.1,22.5c-10.1,10.5-17.1,22.5-21,35.9c-3.2,11.3-4,22.2-2.3,32.5c0,0,0,0,0,0.1
+		h34.2c-1-3.9-1.6-8.1-1.8-12.7C-1034.9,496.9-1033.2,487.9-1029.3,480z M306.5,142.8c1.9,11.7,2.6,27.5,2.1,47.6
+		c-0.3,12.6-0.5,23-0.5,31.2c-2.7-2.7-5.6-5.3-8.7-7.6c-3.5-2.7-6.9-4.7-10-5.9c-0.1-0.1-0.3-0.2-0.5-0.4c-1.1-0.6-1.9-1.1-2.5-1.5
+		c-0.9-0.6-1.7-1.2-2.3-1.7c-0.9-0.8-1.7-1.9-2.5-3.4c-0.4-0.7-0.7-1.4-0.8-2c-0.3-1.1-0.3-2.3,0.1-3.5c0.3-1.2,0.9-2.3,1.8-3.1
+		c0.6-0.5,1.1-0.8,1.6-0.9c0.4-0.1,0.9-0.2,1.7-0.2c1.4,0,2.4,0.2,3,0.5c1,0.6,1.5,1.7,1.6,3.2c0.1,0.8-0.1,1.5-0.4,2.1
+		c-0.4,0.8-1,1.1-1.7,1.1c-0.6,0-1.1-0.4-1.6-1c-0.3-0.4-0.5-0.6-0.6-0.8c-0.3-0.3-0.6-0.4-0.8-0.5c-0.4-0.1-0.7,0-1.1,0.4
+		c-0.3,0.3-0.5,0.6-0.6,1c0,0.7,0.3,1.4,0.9,2.1c0.9,1,2.1,1.6,3.4,1.8c1.5,0.1,2.7-0.3,3.7-1.3c0.5-0.5,0.9-1.1,1.1-1.7
+		c0.7-1.6,0.8-3.3,0.3-5.2c-0.4-1.1-0.9-2.1-1.7-2.8c-0.8-0.9-1.8-1.4-2.8-1.6c-0.6-0.1-1.5-0.2-2.6-0.2c-1,0-1.8,0.1-2.3,0.2
+		c-0.4,0.1-0.9,0.3-1.5,0.7c-0.6,0.4-1.3,0.9-1.9,1.5c-1,1-1.8,2.3-2.2,3.7c-0.4,1.5-0.5,2.9-0.2,4.3c0.3,1.3,0.9,2.8,1.7,4.4
+		c0.6,0.9,0.9,1.5,1.2,1.8c0.3,0.4,0.8,0.9,1.5,1.5c-1.6,0-3.2,0.2-4.7,0.7c-2.7,0.8-4.9,2.3-6.5,4.3c-1.4,1.8-2.3,4.1-2.8,6.9
+		c-0.3,1.9-0.5,4.4-0.5,7.7v7.4c-9.8-4.8-20.6-8-32.4-9.7c-0.2,0-0.5,0-0.7-0.1c0,0,0-0.1,0.1-0.1c0.4-2.8,0.6-6.4,0.6-10.8v-0.4
+		c0-0.1,0.1-0.2,0.1-0.2v-0.9c0-0.1,0.1-0.2,0.1-0.2V210c0,0,0-0.1,0.1-0.2v-2.3l2.8,1.4c4.1,1.9,7.4,2.8,10,2.9c3,0,5.7-0.8,8-2.4
+		c1.2-0.8,2.6-2.1,4.2-3.9c0.9-1.1,1.7-2.1,2.2-3c0.8-1.5,1.3-3.3,1.5-5.5c0.2-2.6-0.1-4.9-1-6.8c-0.8-1.8-2.6-3.9-5.3-6.3
+		c-3.4-3-5.8-4.9-7-5.9h-0.1l0.1-0.1c1.2-1,3.6-3,7-5.9c2.7-2.4,4.5-4.5,5.3-6.3c0.9-1.9,1.2-4.2,1-6.8c-0.2-2.2-0.7-4-1.5-5.5
+		c-0.5-0.9-1.2-2-2.2-3c-1.5-1.7-2.9-3-4.2-3.9c-2.3-1.6-5-2.4-8-2.4c-2.6,0.1-5.9,1-10,2.9l-2.8,1.4V146c0-0.1-0.1-0.1-0.1-0.2
+		v-1.1c0-0.1-0.1-0.2-0.1-0.2v-0.9c0-0.1,0-0.2-0.1-0.2v-0.4c0-4.4-0.2-8-0.6-10.8c-0.9-6.3-2.8-11.5-5.9-15.7
+		c-0.2-0.2-0.3-0.5-0.5-0.7c-2.5-3.2-5.7-5.6-9.5-7.4c-3-1.3-6.1-2.1-9.1-2.3c-0.5,0-1,0-1.5-0.1c-0.1,0-0.2-0.1-0.3-0.1
+		c-0.6-0.2-1.2-0.3-1.8-0.4c-0.4,0-0.9,0.1-1.6,0.2l-1.3,0.2c-0.8,0-1.6,0-2.4,0.1c-3.1,0.2-6.1,0.9-9.1,2.3c-3.8,1.7-7,4.2-9.5,7.4
+		c-0.2,0.2-0.4,0.4-0.5,0.7c-3,4.1-5,9.3-5.9,15.7c-0.4,2.8-0.6,6.4-0.6,10.8v0.4c0,0.1-0.1,0.2-0.1,0.2v0.9c0,0.1-0.1,0.2-0.1,0.2
+		v1.1c0,0,0,0.1-0.1,0.2v2.3l-2.8-1.4c-4.1-1.9-7.4-2.8-10-2.9c-3,0-5.7,0.8-8,2.4c-1.2,0.8-2.6,2.1-4.2,3.9c-0.9,1.1-1.7,2.1-2.2,3
+		c-0.8,1.5-1.3,3.3-1.5,5.5c-0.2,2.6,0.1,4.9,1,6.8c0.8,1.8,2.6,3.9,5.3,6.3c3.4,3,5.8,4.9,7,5.9l0.1,0.1h-0.1c-1.2,1-3.6,3-7,5.9
+		c-2.7,2.4-4.5,4.5-5.3,6.3c-0.9,1.9-1.2,4.2-1,6.8c0.2,2.2,0.7,4,1.5,5.5c0.5,0.9,1.2,2,2.2,3c1.5,1.7,2.9,3,4.2,3.9
+		c2.3,1.6,5,2.4,8,2.4c2.6-0.1,5.9-1,10-2.9l2.8-1.4v2.3c0,0.1,0.1,0.1,0.1,0.2v1.1c0,0.1,0.1,0.2,0.1,0.2v0.9c0,0.1,0,0.2,0.1,0.2
+		v0.4c0,4.4,0.2,8,0.6,10.8c0.9,6.3,2.8,11.5,5.9,15.7c2.6,3.5,5.9,6.1,10,8c4.2,1.9,8.4,2.6,12.7,2.3c0.2,0,0.4-0.1,0.6-0.1
+		c0.2,0,0.4,0,0.6-0.1c0.2,0.1,0.5,0.2,0.7,0.2c4.3,0.4,8.5-0.4,12.7-2.3c4.1-1.9,7.5-4.5,10-8c2.6-3.4,4.3-7.7,5.3-12.7h0.1
+		c18.4,2.6,34.1,8.9,47.3,18.7c7,5.3,12.9,11.4,17.8,18.4c3.9,5.6,6.9,11.5,9,17.6v108.8c0,0-0.1,0-0.2,0H308
+		c-10.6-1.4-19.9-2.6-27.9-3.6l-0.4-76.6c0-3.1-0.1-5.5-0.2-7.2c-0.2-2.6-0.7-5-1.4-7c-1-2.8-2.7-5.7-5.2-8.6
+		c-3.8-4.2-8.5-7.3-14.1-9.1c-5.7-1.9-11.2-2.1-16.5-0.7c-3.4,0.9-6.4,2.3-9.1,4.4c-2.8,2.2-4.9,4.8-6.2,7.8c-0.9,2.1-1.6,4.5-2,7.2
+		c-0.4,2.6-0.6,5.7-0.7,9.1l0.1,9.2c0.1,7.8-0.6,13.9-2,18.3c-1,3-2.4,5.8-4.2,8.2c-1.9,2.6-4.2,4.7-6.8,6c-1.9,0.9-4,1.7-6.5,2.2
+		c-1.1,0.2-2.4,0.4-4,0.5c-1.5-0.2-2.8-0.3-3.9-0.5c-2.5-0.5-4.7-1.2-6.5-2.2c-2.6-1.4-4.8-3.4-6.8-6c-1.8-2.4-3.2-5.1-4.2-8.2
+		c-1.4-4.4-2-10.5-2-18.3l0.1-9.2c0-3.5-0.3-6.5-0.7-9.1c-0.4-2.7-1-5.1-2-7.2c-1.3-3-3.4-5.6-6.2-7.8c-2.7-2.1-5.7-3.6-9.1-4.4
+		c-5.3-1.4-10.8-1.2-16.5,0.7c-5.5,1.8-10.2,4.8-14.1,9.1c-2.5,2.9-4.2,5.8-5.2,8.6c-0.7,2-1.2,4.4-1.4,7c-0.2,1.7-0.2,4.1-0.2,7.2
+		l-0.4,77.4c0,0.2,0,0.5,0,0.7c-1.6,0.2-3.3,0.4-4.8,0.6c-10,1.3-17.9,2.5-23.8,3.6c-0.2,0-0.3,0.1-0.5,0.1c-0.2,0-0.3,0.1-0.5,0.1
+		v-95.4c-0.1,0-0.2,0-0.4,0.1v-5.9c0.1,0,0.2,0,0.4-0.1V235c0-0.2-0.1-0.3-0.2-0.5c0.4-9,0.4-23.7-0.1-44.1
+		c-0.5-20.1,0.2-35.9,2.1-47.6c0.2-1.1,0.4-2.7,0.7-4.8c2.5-10.6,6.6-20.7,12.5-30.2c6.5-10.5,14.5-19.4,24.1-26.7
+		c1.8-1.3,4.6-3.3,8.3-5.8c3.4-2.3,6-3.9,7.8-4.9c1.5-0.8,3-1.6,4.7-2.4c14.8-5.3,30.4-8.1,46.9-8.1c15.9-0.1,31.4,2.3,46.6,7.1
+		c1.1,0.4,2.1,0.9,3,1.3c0.1,0,0.2,0.1,0.3,0.1c1.4,0.7,2.7,1.3,3.9,2c0.2,0.1,0.5,0.3,0.8,0.4c1.7,1,4.1,2.5,7,4.5
+		c0.3,0.2,0.7,0.5,0.9,0.7c3.3,2.2,5.7,3.9,7.4,5.2c9.6,7.3,17.6,16.2,24.1,26.7c5.9,9.5,10,19.6,12.5,30.2c0.1,0.9,0.3,1.7,0.4,2.4
+		c0,0.4,0.1,0.7,0.1,1.1c0,0.4,0.1,0.8,0.2,1C306.5,142.7,306.5,142.7,306.5,142.8z M165.5,86.6c-1.2-1.3-3-2.3-5.3-3
+		c-6.8-1.8-14.5,0-23.1,5.5c-2.8,1.8-5.3,3.6-7.2,5.6c-2.2,2.1-4.5,5-6.9,8.5c-5.4,8-9.8,16.5-13.1,25.5c-3.4,9.2-5.5,18.5-6.4,28
+		c-0.5,4.8-0.7,12-0.7,21.6v0.3l-0.1,13.8c0,1.7,0,6.5,0.1,14.3v0.1l0.1,46.5c0,4.3,0.3,7.5,0.9,9.5c0.6,1.9,1.5,3.6,2.8,5.1
+		c1.4,1.6,3,2.7,4.7,3.3c2.1,0.7,4.2,0.7,6.5,0c2.2-0.6,4.1-1.8,5.7-3.4c2.9-2.9,4.7-6.9,5.5-12c0.3-1.9,0.4-4.1,0.4-6.6
+		c0-0.8,0-3.1-0.1-6.7c-0.1-3.6,0-8.3,0.1-14.1c0.2-7.4,0.3-12.1,0.3-14.1c0-2.5,0.1-5.7,0.1-9.6c-0.1-0.1-0.2-0.2-0.2-0.2
+		c0-5,0.1-10.9,0.1-18l-0.1-5.8c0.1,0.1,0.2,0.2,0.2,0.3c0-3,0-6.3,0-10.1c0.1-7.6,0.5-14.1,1.2-19.6c2.3-15.2,7.6-26.9,16-35.1
+		c1.5-1.5,3.5-3.2,6-5c1.4-1.1,3.5-2.6,6.3-4.7c2.5-2,4.3-3.7,5.4-5.2c1.7-2.3,2.6-4.8,2.8-7.6C167.7,90.7,167,88.4,165.5,86.6z
+		 M278.8,116.5c0.9-1.3,1.5-2.8,1.7-4.6c0.2-1.7,0.1-3.3-0.4-5c-0.7-2.6-2.2-5.5-4.7-8.8c-3.8-4.7-8.2-8.7-13.1-11.9
+		c-0.8-0.5-1.6-1-2.4-1.4c-0.1,0-0.3,0-0.5-0.1c-0.2,0-0.3-0.1-0.5-0.1c-0.2-0.1-0.4-0.1-0.7-0.2c-0.2,0-0.3-0.1-0.5-0.1h-4.3
+		c-0.2,0-0.4,0.1-0.5,0.1c-0.2,0-0.5,0.1-0.7,0.2c-0.3,0-0.5,0.1-0.8,0.2c-0.1,0.1-0.2,0.2-0.3,0.2c-0.1,0.1-0.2,0.2-0.4,0.2
+		c-0.1,0.1-0.2,0.2-0.4,0.2c-0.1,0-0.2,0.1-0.3,0.2c-0.2,0.1-0.3,0.2-0.4,0.2c-0.1,0.1-0.2,0.2-0.3,0.2c-0.1,0.1-0.2,0.2-0.3,0.2
+		c-0.2,0-0.3,0.1-0.5,0.2c-0.2,0.1-0.3,0.2-0.4,0.2l-0.2,0.2c0,0.1-0.1,0.2-0.2,0.2c-0.1,0.1-0.2,0.1-0.2,0.2l-0.5,0.5
+		c0,0.1,0,0.2-0.1,0.2s-0.1,0.1-0.1,0.2c-0.1,0.1-0.1,0.2-0.2,0.2l-0.2,0.2c0,0.1,0,0.2-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2
+		c0,0.1-0.1,0.2-0.1,0.2v0.2c0,0.1,0,0.2-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2c0,0.1-0.1,0.2-0.1,0.2v0.2c0,0.1,0,0.2-0.1,0.2
+		c0,0.1-0.1,0.1-0.1,0.2v0.7c0,0.1-0.1,0.1-0.1,0.2v0.2c0,0.1-0.1,0.2-0.1,0.2c0,0.1-0.1,0.2-0.1,0.2v3.3c0,0.1,0.1,0.2,0.1,0.2
+		s0.1,0.2,0.1,0.2v0.2c0,0.1,0.1,0.2,0.1,0.2v0.2c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.1,0.1,0.2v0.2c0,0.1,0.1,0.2,0.1,0.2v0.2
+		c0,0.1,0,0.1,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.1,0.1,0.2
+		c0.1,0.1,0.1,0.2,0.2,0.2c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.2,0.2,0.2c0,0.1,0.1,0.1,0.1,0.2c0,0.1,0.1,0.2,0.2,0.2
+		c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.1,0.2,0.2,0.2l0.2,0.2c0,0.1,0,0.2,0.1,0.2
+		c0,0.1,0.1,0.1,0.1,0.2c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0.1,0.2,0.2,0.2,0.2
+		c0.1,0,0.2,0.1,0.3,0.2c0.1,0.1,0.2,0.2,0.3,0.2l0.2,0.2c0,0.1,0.1,0.2,0.2,0.2c0.1,0,0.1,0.1,0.2,0.2c0,0.1,0.1,0.2,0.1,0.2
+		l0.1,0.2c0,0.1,0.1,0.2,0.2,0.2c0.1,0,0.2,0.1,0.2,0.2l0.5,0.5c0,0.1,0.1,0.2,0.2,0.2c0.2,0,0.3,0.1,0.5,0.2
+		c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0.1,0.2,0.2,0.3,0.2c0.2,0.1,0.3,0.2,0.4,0.2c0.1,0,0.2,0.1,0.2,0.2c0.1,0.1,0.2,0.2,0.3,0.2
+		c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0.1,0.2,0.2,0.2,0.2c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.2,0.2,0.4,0.2c0.1,0.1,0.2,0.2,0.3,0.2
+		c0.1,0.1,0.2,0.2,0.4,0.2c0.1,0.1,0.2,0.1,0.2,0.2l0.5,0.5c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.1,0.2,0.2l0.5,0.5
+		c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.1,0.2,0.2l0.5,0.5c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.1,0.2,0.2l0.5,0.5
+		c0,0.1,0.1,0.2,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.2c0,0.1,0.1,0.2,0.1,0.2c0.1,0.1,0.1,0.2,0.2,0.2l0.2,0.2c0,0,0,0.1,0.1,0.2
+		c0.6,0.6,1.6,1.6,2.9,3.1c1.3,1.5,2.6,2.6,3.7,3.2c2,1.2,4.2,1.6,6.6,1.1C275.6,119.7,277.5,118.4,278.8,116.5z M297.3,139
+		c-0.1-0.4-0.3-0.9-0.6-1.4c-0.3-0.5-0.9-1.2-1.8-2.1c-0.7-0.7-1.3-1.2-1.9-1.6c-1.1-0.8-2.4-1.2-3.9-1.4c-1.4-0.1-2.8,0.1-4,0.7
+		c-1.3,0.6-2.3,1.4-3.3,2.5c-0.9,1.1-1.5,2.3-1.8,3.7c-0.2,1.1-0.2,2.1-0.2,3.2l0.2,1.8c0.1,0.5,0.3,1,0.5,1.4
+		c0.8,1.7,2.1,3,3.9,3.9c1.7,0.9,3.5,1.2,5.5,0.9c1.6-0.2,3.1-0.8,4.5-1.8c1.3-1,2.3-2.3,2.9-3.8C298.1,143,298.1,141,297.3,139z
+		 M302.4,220.2v2.1c0,0,0,0.1,0.1,0.2v29l0.2,0.5c0.1,0.4,0.2,1,0.1,1.7c0,0.8,0,1.4,0.1,1.7l0.2,0.8l0.1,0.9l-0.1,5
+		c0,0.5,0,0.9-0.1,1.2c0.4-0.2,0.8-0.2,1.4-0.3c0.7-0.1,1.2-0.1,1.6-0.1l2.3,0.1V235c0-0.2,0.1-0.3,0.1-0.5
+		c-0.1-2.5-0.2-5.4-0.2-8.8C306.3,223.8,304.4,222,302.4,220.2z M-1005.2,507.7c-1.4-8.3-0.7-17.1,2.2-26.3c2.2-7,5.6-14,10.3-21
+		c-0.2,0.1-0.5,0.2-0.8,0.2c1.1-2,2.1-3.7,2.8-5c0.3-0.5,0.5-0.9,0.7-1.4c-5.7,1.6-11,3.6-15.7,6c-3.2,1.7-6,3.5-8.2,5.3
+		c-6.6,5.2-11.4,11.9-14.5,20.2c-2.9,7.7-3.9,16-3.2,24.8c0.3,3.4,0.8,6.5,1.6,9.4h29.5c-1.4-2-2.5-4.3-3.4-6.7
+		C-1004.3,511.9-1004.8,510-1005.2,507.7z M-1189.6,134.4c-0.9-1.5-1.8-2.5-2.7-3.2c-1.3-1-2.7-1.3-4-1.1c-0.9,0.2-1.6,0.4-2,0.4
+		c-0.6,0-1.1,0-1.5-0.1c-0.1-0.1-0.2-0.2-0.4-0.3c-0.3-0.4-0.4-0.9-0.4-1.5c0-0.4,0.1-0.9,0.2-1.7c0.2-1.4-0.2-2.7-1.2-4
+		c-0.9-1.2-2.1-2.1-3.5-2.5c-2.5-0.9-5.3-0.6-8.4,0.8c-1.5,0.7-2.5,0.9-3.2,0.4c-0.2-0.1-0.4-0.4-0.6-0.8c-0.2-0.4-0.4-0.8-0.5-1.4
+		v-0.1c0.1-0.4,0.3-0.8,0.4-1.2c-0.4-0.2-0.8-0.5-1.2-1c-0.9-1.1-2.1-1.9-3.4-2.4c-1.4-0.6-2.8-0.8-4.3-0.6
+		c-1.4,0.2-2.7,0.8-3.9,1.8c-1.2,1-1.9,2.1-2.3,3.4v0.1c-0.2,0.6-0.3,1-0.5,1.4c-0.2,0.4-0.4,0.7-0.6,0.8c-0.6,0.5-1.7,0.4-3.2-0.4
+		c-3.1-1.4-5.8-1.7-8.4-0.8c-1.4,0.4-2.6,1.3-3.5,2.5c-1,1.3-1.3,2.6-1.2,4c0.1,0.8,0.2,1.4,0.2,1.7c0.1,0.7-0.1,1.2-0.4,1.5
+		c-0.1,0.1-0.2,0.2-0.3,0.3c-0.4,0.1-0.9,0.2-1.4,0.1c-0.4,0-1.1-0.2-2-0.4c-1.3-0.3-2.7,0.1-4.1,1.1c-0.9,0.7-1.9,1.7-2.7,3.2
+		c-0.6,1-1,1.9-1.2,2.8c-0.4,1.7,0,3.4,1.1,5c1.1,1.5,2.4,2.6,4.1,3.2c0.4,0,0.9,0.2,1.6,0.6c0.7,0.2,1.5,0.4,2.4,0.5h1.8
+		c0.7,0.2,1.2,0.5,1.4,0.9c0.1,0.3,0.1,0.7,0.1,1.2c-0.2,0.6-0.3,0.9-0.3,1.2v0.4c0.1,0.3,0.1,0.6,0.1,0.9c0,0.2,0,0.5-0.1,0.9v0.1
+		c0,0.5,0,1-0.1,1.4c0,1.1,0.4,2.3,1.2,3.4c0.9,1.3,2.1,2.1,3.5,2.5c2.5,0.9,5.3,0.6,8.4-0.9c1.5-0.7,2.5-0.8,3.2-0.4
+		c0.2,0.2,0.4,0.5,0.6,0.9c0.2,0.3,0.4,0.8,0.5,1.4c0.1,0.4,0.2,0.9,0.5,1.3c0.4,0.8,1,1.5,1.8,2.1c1.2,0.9,2.5,1.5,3.9,1.8
+		c1.5,0.2,2.9,0,4.3-0.5c1.3-0.6,2.5-1.4,3.4-2.5c0.2-0.2,0.4-0.3,0.5-0.5c0-0.2-0.1-0.3-0.2-0.4c0.2-0.4,0.4-0.9,0.5-1.3
+		c0.1-0.6,0.3-1,0.5-1.4c0.2-0.4,0.4-0.7,0.6-0.9c0.6-0.5,1.7-0.4,3.2,0.4c3.1,1.5,5.8,1.8,8.4,0.9c1.4-0.4,2.6-1.3,3.5-2.5
+		c0.8-1.1,1.2-2.2,1.2-3.4c-0.1-0.4-0.1-0.9-0.1-1.4V152c0-0.4-0.1-0.7-0.1-0.9c0-0.3,0-0.6,0.1-0.9v-0.4c0-0.2-0.1-0.6-0.3-1.2
+		c-0.1-0.6-0.1-1,0.1-1.2c0.2-0.4,0.7-0.7,1.4-0.9h1.8c0.9-0.1,1.7-0.2,2.4-0.5c0.7-0.4,1.2-0.6,1.6-0.6c1.7-0.6,3-1.7,4.1-3.2
+		c1.1-1.6,1.5-3.3,1.2-5C-1188.6,136.3-1189,135.3-1189.6,134.4z M-1218.1,417.4c0.4,2.1,0.8,4.6,1,7.4v0.4c0,0.4-0.1,0.7-0.1,1.1
+		v18.8c0,0.4-0.1,0.8-0.2,1.2V520h-54.4l-0.4-0.5c-1.2-1.6-1.8-3-1.7-4.2c0.1-0.7,0.4-1.4,0.8-2c0.5-0.6,1-1,1.7-1.1
+		c0.9-0.1,1.6-0.2,2.1-0.4c0.4,0,0.7,0.1,1.1,0.1h4.7v0.1h4.2c0.3,0,0.6-0.1,0.8-0.1c0.2,0,0.3,0,0.5-0.1c0.2,0,0.3-0.1,0.5-0.1
+		c0,0,0.1-0.1,0.2-0.1c2.6,0.1,4.6-0.2,6.1-1.1c0.9-0.5,2-1.5,3.3-2.8c0.9-1,1.4-1.9,1.7-2.5l0.3-1.3l0.2-2.1c0.1-0.7,0-1.3-0.2-1.7
+		c0-0.1-0.1-0.1-0.1-0.2c0,0,0-0.1,0.1-0.2c0.2-0.4,0.3-1,0.2-1.7l-0.2-2.1l-0.3-1.3c-0.2-0.6-0.8-1.5-1.7-2.5
+		c-1.2-1.4-2.3-2.3-3.3-2.8c-1.5-0.8-3.5-1.2-6.1-1.1c-0.1,0-0.1-0.1-0.2-0.1c-0.1,0-0.3-0.1-0.5-0.1c-0.2,0-0.3-0.1-0.5-0.1
+		c-0.3,0-0.6-0.1-0.8-0.1h-4.2v0.1h-4.7c-0.3,0-0.7,0-1.1,0.1c-0.5-0.2-1.2-0.3-2.1-0.4c-0.7-0.2-1.2-0.5-1.7-1.1
+		c-0.5-0.6-0.8-1.2-0.8-2c-0.1-1.2,0.5-2.6,1.7-4.2l6.8-8.1c3.9-4.7,6.8-8.1,8.5-10.3c0.4-0.3,0.8-0.7,1.2-1.3
+		c0.5-0.7,0.8-1.1,0.9-1.4c0-0.1,0.1-0.1,0.1-0.2c0.8,0,1.7,0,2.8-0.1c2.4-0.1,4.2-0.1,5.3-0.2c2.1-0.1,3.8-0.3,5.3-0.7
+		c4.1-0.8,7-2.6,8.8-5.4c1.2-1.9,1.8-4.5,1.8-7.6c0-1.3-0.1-2.4-0.3-3.2c-0.2-0.7-0.7-1.7-1.5-2.9c-1-1.5-1.8-2.6-2.3-3.1
+		c-1.7-1.8-4-3-6.8-3.7c-2-0.4-4.2-0.5-6.5-0.4c-0.2,0-0.4-0.1-0.6-0.1c-0.5,0-1.1,0-1.6-0.1c-0.9,0-1.8-0.1-2.7-0.1
+		c-1.5,0-3.1-0.1-4.6-0.1h-64v0.1h-9.3c-1.1,0-2.2,0-3.4,0c-2.5-0.1-4.5-2.1-4.7-4.5V422c0.2-1.7,0.4-3.2,0.7-4.6
+		c0.6-3.2,1.7-6.6,3.2-10.4c4.1-10.7,9.5-18.7,16-24c2.7-2.1,6-4.2,10-6.3c4.7-2.4,8.7-3.7,12-4.1c0.2,0.1,0.4,0.1,0.7,0.1
+		c0.6,0,1.1-0.2,1.3-0.6c0.2-0.4,0.2-0.8,0.1-1.1c0-0.2-0.1-0.3-0.2-0.4c-0.3-0.4-0.8-0.9-1.5-1.2c-4.9-2.8-8.5-7-10.9-12.5
+		c-2.1-5.1-2.8-10.6-1.9-16.5c0.4-2.7,1.1-4.9,2.1-6.5c0.7-1.2,1.8-2.6,3.4-4l3.9-3.7c1.9-2.1,3.1-4.2,3.8-6.5
+		c0.4-1.5,0.6-3,0.4-4.6c-0.2-1.6-0.8-3.1-1.6-4.3c-0.4-0.6-1.1-1.5-2.1-2.5c-1-1.1-1.7-2-2.1-2.5c-0.9-1.4-1.5-3-1.7-4.8
+		c-0.2-1.8,0-3.5,0.6-5.1c1.2-3.3,3.5-5.8,6.8-7.5c1.1-0.5,1.6-1,1.7-1.6c0.8-0.6,1.4-1.3,1.9-2.3c0.6-1,1-2.1,1.1-3.2
+		c0.2,0,0.4-0.1,0.7-0.1c5.5-1.2,10.5-1.7,15.1-1.5c1.9,0.1,4.8,0.5,8.6,1.1c0.5,0,0.8,0.1,1,0.1c0.4,0,0.7-0.1,0.9-0.2
+		c0,0,0,0,0.1-0.1c0.1,1.4,0.5,2.7,1.2,4c0.5,0.9,1.1,1.7,1.8,2.3c0.1,0.6,0.7,1.1,1.7,1.6c3.4,1.7,5.6,4.2,6.8,7.5
+		c0.6,1.6,0.8,3.3,0.7,5.1c-0.2,1.8-0.7,3.4-1.7,4.8c-0.4,0.6-1.1,1.4-2.1,2.5c-1,1-1.8,1.9-2.1,2.5c-0.8,1.3-1.4,2.7-1.6,4.3
+		c-0.2,1.6-0.1,3.1,0.4,4.6c0.7,2.3,1.9,4.5,3.8,6.5l3.9,3.7c1.5,1.5,2.7,2.8,3.4,4c1,1.7,1.7,3.8,2.1,6.5
+		c0.9,5.8,0.2,11.3-1.9,16.5c-2.3,5.5-6,9.6-10.9,12.5c-0.7,0.4-1.2,0.8-1.5,1.2c-0.1,0.1-0.2,0.3-0.2,0.4c-0.2,0.4-0.2,0.8,0.1,1.2
+		c0.2,0.4,0.7,0.6,1.3,0.6c0.2,0,0.4-0.1,0.7-0.1c3.3,0.4,7.3,1.7,12,4.1c4,2.1,7.4,4.1,10,6.3c6.6,5.3,11.9,13.2,16,24
+		C-1219.8,410.8-1218.7,414.3-1218.1,417.4z M-1270.8,300.9c0.1,0.4,0.4,1,0.8,1.7l1.5,1.7l0.9,0.8c0.4,0.3,0.9,0.5,1.4,0.6
+		c1.9,0.4,3.6,0.1,5-0.8c0.5-0.4,1-0.8,1.4-1.3l0.9-1.6c0.1-0.3,0.2-0.8,0.2-1.4l-0.1-2.1c0-0.5,0-0.9-0.1-1.1l-1.2-1.7l-0.7-0.7
+		c-1.3-0.8-2.2-1.3-2.9-1.4c-1.2-0.3-2.4-0.1-3.7,0.7c-1.6,0.8-2.7,2-3.1,3.4c-0.2,0.7-0.3,1.3-0.3,1.8
+		C-1270.9,300-1270.9,300.5-1270.8,300.9z M-1268.8,361c2.2,0.4,4.6-0.1,7.1-1.5c0.7-0.4,1.3-0.8,1.8-1.2c0.6-0.6,1.2-1.2,1.8-1.9
+		c1.3-1.5,2.2-2.7,2.7-3.5c0.9-1.3,1.6-2.6,2-3.9c0.5-1.4,0.8-3.1,0.8-5.2c0-1.3-0.1-2.4-0.4-3.2c-0.4-1.2-1-2.2-2-3
+		c-1.8-1.7-3.9-2.4-6.4-2.1c-2.5,0.3-4.4,1.5-5.8,3.5c-0.4,0.6-0.9,1.4-1.5,2.6c-0.4,0.6-1.3,1.8-2.7,3.4c-1.2,1.4-1.9,2.6-2.3,3.6
+		c-0.2,0.5-0.5,1.3-0.7,2.5c-0.6,3.3-0.2,5.8,1.3,7.4c0.4,0.5,1,1,1.7,1.4C-1270.6,360.4-1269.7,360.8-1268.8,361z M-1230.6,404.2
+		c-0.3-1.5-1.1-3.3-2.2-5.4c-1.2-2.1-2.4-3.9-3.6-5.4c-1.3-1.7-3-3.4-5.1-5.2c-1.5-1.3-2.7-2.2-3.6-2.8c-2.1-1.5-4.3-2.6-6.7-3.5
+		c-2.6-1-4.9-1.4-6.9-1.2c-1.4,0.1-2.8,0.6-4.2,1.3c-1.3,0.8-2.4,1.7-3.1,2.8c-0.6,0.9-1,2-1.1,3.2c-0.1,1.2,0.1,2.3,0.5,3.3
+		c0.8,1.9,2.6,3.6,5.3,5.2l3.4,1.9c4,2.2,6.8,4.6,8.5,7.4c0,0,1,1.8,2.7,5.4c1.1,2.2,2.3,3.7,3.6,4.7c1.7,1.3,3.6,1.7,5.7,1.4
+		c2.1-0.3,3.8-1.3,5-3c1.1-1.5,1.7-3.5,1.9-6C-1230.3,406.7-1230.3,405.3-1230.6,404.2z M-1048.5,452.2c10-11.4,21.8-19.7,35.4-25
+		c6.7-2.6,14.2-4.5,22.5-5.8c-1.5-3-3.6-7.1-6.3-12.2v-0.5c-2.5-4.1-4.5-8.4-5.9-13.2c-0.2-0.6-0.4-1.2-0.5-1.8
+		c-0.2,0-0.4,0.1-0.5,0.1c-10.7,2-21,5.5-30.9,10.3c-9.9,4.9-19,10.9-27.1,18.2c-4.3,3.8-8.3,7.9-12.2,12.3
+		c-6,6.7-10.5,13.1-13.7,19c-0.3,0.5-1.4,2.7-3.3,6.5c-0.9,1.9-1.8,3.5-2.6,4.8c-0.7,1.6-1.3,3.3-2,5c-1.2,3.2-2,6-2.5,8.5
+		c-0.4,1.5-0.7,3.8-1.1,7c-1.5,12.9-1.3,24.3,0.7,34.4h28.8c0-0.2-0.1-0.5-0.1-0.7c-1.4-9.4-0.9-18.9,1.4-28.6
+		C-1065.2,476.4-1058.5,463.6-1048.5,452.2z M-803.1,455.4c0,0-0.1-0.1-0.1-0.1v-1.8c0-0.1-0.1-0.3-0.1-0.4v-3c-8.9,0-17.8,0-26.7,0
+		c0.2,0.3,0.4,0.7,0.6,1c2.9,4.9,4.8,9,5.7,12.6c0.7,2.8,1.1,7,1.2,12.7c0,0.6,0,1.2,0,1.7h21.1c-0.2-1.1-0.4-2.2-0.6-3.3
+		C-802.9,469.1-803.3,462.6-803.1,455.4z M243.5,383.8C243.5,383.8,243.6,383.8,243.5,383.8c0.2,0.1,0.4,0.1,0.6,0.2
+		c0.1,0,0.2,0,0.4-0.1c0,0,0.1-0.1,0.2-0.1c0,0,0.1-0.1,0.2-0.2c0,0,0-0.1,0.1-0.1c0.1,0,0.3,0.1,0.4,0.1c0.1,0,0.2,0,0.4-0.1
+		l0.2-0.1c0.1-0.1,0.2-0.2,0.3-0.2c0-0.1,0-0.2,0.1-0.2c0-0.1,0.1-0.2,0.2-0.2v-0.2c0-0.1,0-0.2,0.1-0.2v-52.8c0-0.1,0-0.2,0.1-0.2
+		c0-0.1,0.1-0.2,0.2-0.2v-0.2c0-0.1,0-0.2,0.1-0.2v-0.2c0-0.1,0-0.2,0.1-0.2c0-0.1,0.1-0.2,0.1-0.2c0,0,0.1-0.1,0.1-0.2
+		c0-0.1,0-0.2,0.1-0.2v-0.2c0-0.1,0-0.2,0.1-0.2c0,0,0.1-0.1,0.1-0.2c0-0.1,0.1-0.2,0.1-0.2l0.1-0.2c0-0.1,0.1-0.2,0.1-0.2
+		c0.1,0,0.1-0.1,0.2-0.2c0-0.1,0-0.2,0.1-0.2s0.1-0.2,0.2-0.2c0-0.1,0.1-0.2,0.1-0.2c0.1,0,0.2-0.1,0.2-0.2c0-0.1,0-0.2,0.1-0.2
+		c0-0.1,0.1-0.2,0.2-0.2c0-0.1,0.1-0.2,0.1-0.2c0.1,0,0.2-0.1,0.2-0.2c0.1-0.1,0.2-0.2,0.3-0.2c0.1-0.1,0.2-0.2,0.4-0.2
+		c0.1-0.1,0.2-0.2,0.2-0.2c0.1-0.1,0.2-0.1,0.3-0.2c0.1-0.1,0.2-0.2,0.3-0.2c0.2-0.1,0.3-0.2,0.4-0.2c0.1,0,0.2-0.1,0.3-0.2
+		c0.7-0.1,1.4-0.2,2.2-0.1c0.1,0.1,0.2,0.1,0.4,0.2c0.2,0,0.3,0.1,0.5,0.1c0.1,0,0.2,0.1,0.2,0.1c0.1,0.1,0.2,0.1,0.3,0.2
+		c0.1,0.1,0.3,0.2,0.4,0.2c0.2,0,0.3,0.1,0.5,0.2c0.1,0.1,0.2,0.2,0.3,0.2c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2
+		c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.1,0.2,0.2,0.2,0.2c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.2
+		c0,0.1,0.1,0.2,0.1,0.2l0.1,0.2c0,0.1,0,0.2,0.1,0.2c0,0.1,0,0.1,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2v0.2c0.1,0.1,0.1,0.2,0.2,0.2
+		c0,0.1,0,0.1,0.1,0.2v0.9c0,0.1,0.1,0.2,0.1,0.2l0.1,0.2c0,0.1,0,0.2,0.1,0.2c0,0.1,0,0.2,0.1,0.2v54.7c0,0.1,0.1,0.2,0.1,0.2v0.2
+		c0,0,0.1,0.1,0.1,0.2c0,0.1,0.1,0.2,0.2,0.2c0.1,0.1,0.2,0.2,0.3,0.2c0.2,0,0.4,0.1,0.5,0.1c0.1,0,0.1,0,0.1-0.1
+		c0.1,0,0.1,0,0.2,0.1h1.4c0.1,0,0.2,0,0.2-0.1c1.8,0.2,3.7,0.3,5.7,0.5c-0.4-19.5-0.6-36.2-0.6-50.2c0-4.3-0.1-7.5-0.2-9.6
+		c-0.2-3.1-0.5-5.6-1.1-7.5c-0.8-2.7-2.3-5-4.4-7c-2.1-2-4.6-3.2-7.3-3.7c-2.8-0.5-5.5-0.1-8.1,1.2c-2.7,1.3-4.6,3.2-5.8,5.7
+		c-0.6,1.3-1.1,2.9-1.3,4.8c-0.1,1.1-0.2,2.8-0.2,5.1l-0.5,56.7c0.2,0.8,0.2,1.7-0.1,2.7C239.2,383.6,241.4,383.7,243.5,383.8z
+		 M-757.2,519.6c-1,0-2.1,0-3.1-0.1c-0.6,0-1.2-0.1-1.8-0.1c-0.3,0-0.6-0.1-0.9-0.1c-0.1,0-0.2-0.1-0.3-0.1c-0.2,0-0.5,0-0.7,0.1
+		v0.1c-0.1,0.2-0.2,0.3-0.3,0.4c0,0.1-0.1,0.1-0.1,0.2h60c0-0.1,0-0.3,0-0.4H-757.2L-757.2,519.6z M-768.9,520h3.5
+		c-0.3-0.1-0.6-0.3-1-0.4C-767.3,519.7-768.1,519.8-768.9,520z M-845.5,437.8c-1.3-0.8-3.2-2-5.9-3.4c-2.6-1.5-4.6-2.6-5.9-3.4
+		c-4.6-3-7.5-6.4-8.7-10.2c-0.7-2.1-0.8-4.4-0.5-6.8c0.4-2.3,1.2-4.4,2.4-6.5c2.1-3.5,5.4-6.6,9.8-9.3c3.3-3.1,6-6.7,8.1-10.8
+		c2.6-5.1,4.2-10.5,4.5-16.2c0.4-7.4-1.1-14-4.4-19.7c-1.7-3-3.9-5.6-6.6-7.8c-1.9-1.5-3.9-2.8-6-3.7c-1-0.4-1.9-0.8-2.9-1.1
+		c-0.6-0.2-1.1-0.4-1.4-0.6c-0.2-0.2-0.3-0.3-0.4-0.5l0.1-0.1c0-0.1,0-0.1,0.1-0.2c0-0.1,0-0.2,0.1-0.2c0-0.1,0.1-0.2,0.2-0.2
+		c0-0.1,0-0.2,0.1-0.2c0-0.1,0-0.1,0.1-0.2c0-0.1,0.1-0.2,0.2-0.2c0-0.1,0-0.2,0.1-0.2c0-0.1,0-0.2,0.1-0.2c0-0.1,0.1-0.1,0.1-0.2
+		c0-0.1,0.1-0.2,0.1-0.2c0-0.1,0-0.2,0.1-0.2c0-0.1,0-0.2,0.1-0.2c0-0.1,0.1-0.2,0.2-0.2c0,0,0-0.1,0.1-0.2v-0.2
+		c0-0.1,0-0.2,0.1-0.2V334c0,0,0.1-0.1,0.1-0.2c0.1-0.1,0.1-0.2,0.2-0.2v-0.2c0-0.1,0-0.2,0.1-0.2l0.2-0.2c0-0.1,0-0.2,0.1-0.2
+		c0-0.1,0-0.2,0.1-0.2v-0.2c0,0,0.1-0.1,0.1-0.2c0-0.1,0.1-0.2,0.1-0.2c0-0.1,0-0.2,0.1-0.2v-0.2c0,0,0-0.1,0.1-0.2v-3
+		c0.2-0.3,0.3-0.5,0.4-0.8c0-0.6-0.1-1.2-0.2-1.8c-0.6-3.2-2.5-6-5.8-8.4c-3.4-2.5-7.7-4.2-12.8-5.1c-3.1-0.5-7.7-0.8-13.9-0.9
+		c-0.4,0-0.7-0.1-1-0.2c-0.2,0.1-0.3,0.1-0.5,0.2c-0.4-0.1-0.7-0.2-1-0.3h-3.3v0.1c-0.4,0-0.7,0.1-1.1,0.2c-0.9,0.1-1.9,0.2-2.8,0.3
+		h-0.1c-2.5,0.2-4.5,0.4-6.2,0.7c-5.1,0.9-9.4,2.6-12.8,5.1c-3.3,2.5-5.2,5.3-5.8,8.4c-0.1,0.6-0.2,1.2-0.2,1.7
+		c0.1,0.3,0.3,0.5,0.4,0.8v3c0,0.1,0.1,0.1,0.1,0.2v0.2c0,0.1,0.1,0.2,0.1,0.2l0.1,0.2c0,0.1,0,0.1,0.1,0.2v0.2
+		c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.2c0,0.1,0.1,0.2,0.1,0.2v0.2c0,0.1,0.1,0.2,0.2,0.2
+		c0,0.1,0,0.1,0.1,0.2v0.2c0,0.1,0.1,0.2,0.1,0.2v0.2c0,0.1,0.1,0.1,0.1,0.2c0.1,0.1,0.1,0.2,0.2,0.2c0,0.1,0.1,0.2,0.1,0.2
+		c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2c0,0,0,0.1,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2
+		c0.1,0.1,0.1,0.2,0.2,0.2c0,0,0.1,0.1,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2c0.1,0.1,0.1,0.2,0.2,0.2c0,0.1,0.1,0.2,0.1,0.2
+		c0,0,0.1,0.1,0.1,0.2c-0.1,0.2-0.2,0.4-0.4,0.6c-0.3,0.2-0.7,0.4-1.4,0.6c-1,0.3-2,0.7-2.9,1.1c-2.1,1-4.1,2.2-6,3.8
+		c-2.6,2.2-4.8,4.8-6.6,7.8c-3.3,5.7-4.8,12.3-4.4,19.7c0.4,5.7,1.9,11,4.5,16.2c2.1,4.1,4.8,7.7,8.1,10.8c4.4,2.7,7.7,5.8,9.8,9.3
+		c1.2,2.1,2,4.2,2.4,6.5c0.4,2.4,0.2,4.7-0.5,6.8c-1.2,3.8-4.1,7.2-8.7,10.2c-1.3,0.8-3.2,2-5.9,3.4c-2.7,1.4-4.7,2.5-5.9,3.4
+		c-6.4,4.2-11.5,10.1-15.1,17.7c-3.5,7.2-5.2,14.9-5.3,23c0,6.6,1.2,12.1,3.5,16.6c0.7,1.4,2,3.5,3.9,6.2c1.8,2.6,3.1,4.6,3.8,6.1
+		c1.9,3.9,2.8,8.1,2.6,12.6h111.1c-0.2-4.5,0.6-8.7,2.6-12.6c0.7-1.5,2-3.5,3.8-6.1c1.9-2.7,3.1-4.7,3.9-6.2
+		c2.3-4.5,3.5-10,3.5-16.6c0-8.1-1.8-15.8-5.3-23C-834,447.9-839.1,442.1-845.5,437.8z M-954.1,511.2c1,2.8,1.4,5.8,1.2,8.8h-43.7
+		c-1.7-2-3-4.4-4.1-7.2c-1.5-4-2.3-8.7-2.2-13.9c0.1-6.1,1.1-12,3-17.6c1.2-3.3,2.8-7,4.9-11c1.1-2,3-5.5,5.9-10.5
+		c0.4-0.8,0.7-1.4,0.7-1.7c0-0.1,0-0.2-0.1-0.3c0.3-0.5,0.6-1,0.8-1.4c3.3-5.9,5.1-11.1,5.4-15.7c0.4-5.7-1.3-12.3-5.1-19.8
+		c-0.6-1.1-2.2-4.1-4.9-9.1c-0.1-0.1-0.2-0.3-0.2-0.4c0-0.3-0.1-0.6-0.3-1c-0.7-1.6-1.9-4-3.6-7.1c-3.6-7.2-5.4-15-5.5-23.3
+		c0-8.3,1.7-16.1,5.2-23.4c0.1-0.3,0.3-0.6,0.5-1c1.3-2.3,3-5.2,5.1-8.4c3.8-6,6.1-11.1,6.9-15.1c1.1-5.8-0.3-13.7-4.2-23.9
+		c-2.1-5.6-3.7-10.5-4.7-14.6c1,0.7,2.1,1.1,3.4,1.4c2,0.5,4.2,0.4,6.5-0.2c3-0.9,5.5-2.5,7.7-5c2.1-2.5,3.3-5.3,3.7-8.3
+		c0.1-0.7,0.2-1.7,0.2-3.1c-0.1-1.8-0.3-3.2-0.5-4c-0.2-0.6-0.7-1.7-1.5-3.3c-0.6-1.2-1.2-2.1-1.6-2.6c-1.2-1.5-2.7-2.5-4.7-3.1
+		c-1.9-0.6-3.8-0.7-5.8-0.5c-0.7,0.1-1.4,0.3-2,0.5c0.1-0.2,0.3-0.4,0.4-0.6c2.2-3,5-6.3,8.6-9.8c0.2,0,0.4,0,0.6-0.1l0.5-0.4
+		l0.9-0.4c0.3-0.2,0.7-0.5,1-0.9c0.7-0.7,2.1-1.7,4-3c1.8-1.2,3.1-2.2,3.9-3.1l1.7-1.7c0.1-0.2,0.1-0.4,0.1-0.5
+		c1.3-1.1,2.4-2.5,3.3-4c1.1-1.8,1.8-3.8,2.2-5.9c0.3-2.2,0.2-4.2-0.4-6.2c-0.3-1-0.7-2.2-1.3-3.5c-0.4-0.7-0.9-1.9-1.6-3.4
+		c-2.4-5.5-2.6-9.9-0.5-13.5c0.6-0.9,1.1-1.5,1.4-2c0.5-0.8,0.8-1.5,0.9-2.2c0.2-0.8,0-1.8-0.4-2.9c0-0.1-0.5-1-1.4-2.7
+		c-1.3-2.6-2.1-5.2-2.2-7.9c-0.1-3,0.5-5.5,2-7.7c1-1.3,1.7-2.3,2.2-3c0.8-1.2,1.2-2.3,1.2-3.3c0-1-0.4-2.1-1.2-3.2
+		c-0.4-0.6-1.2-1.6-2.1-2.8c-1.4-2.2-2-4.7-1.6-7.6c0.3-2.8,1.3-5.2,3.1-7.4c2.2-2.7,5.2-4.7,8.9-6c0.2,0,0.4,0,0.7-0.1
+		c0.5-0.1,1-0.2,1.5-0.4c0.2,0.1,0.6,0.1,1,0.1c0.1,0,0.2-0.1,0.3-0.1c0,0,0.1-0.1,0.1-0.1c0.1,0,0.3-0.1,0.4-0.1
+		c0.4-0.1,0.7-0.1,1.1-0.2c0.2,0,0.4-0.1,0.5-0.1v-0.1h7.6c0.2,0,0.3,0.1,0.5,0.1c0,0,0.1,0,0.1,0.1c0.1,0,0.2-0.1,0.3-0.2
+		c5.4,1.1,9.6,3.4,12.5,6.9c1.7,2.2,2.8,4.6,3.1,7.4c0.4,2.9-0.2,5.4-1.6,7.6c-1,1.3-1.7,2.2-2.1,2.8c-0.7,1.1-1.2,2.2-1.2,3.2
+		c0,1,0.4,2.1,1.2,3.3c0.5,0.7,1.2,1.7,2.2,3c1.4,2.2,2.1,4.7,2,7.7c-0.1,2.7-0.9,5.4-2.2,7.9c-0.9,1.7-1.3,2.6-1.4,2.7
+		c-0.4,1.1-0.6,2.1-0.4,2.9c0.1,0.7,0.4,1.4,1,2.2c0.3,0.4,0.7,1.1,1.4,2c2.1,3.5,1.9,8-0.5,13.5c-0.7,1.5-1.2,2.7-1.6,3.4
+		c-0.6,1.3-1,2.5-1.3,3.5c-0.6,2-0.7,4.1-0.4,6.2c0.4,2.1,1.1,4.1,2.2,5.9c1.8,3,4.4,5.3,7.5,6.9c0.1,0.1,0.2,0.3,0.4,0.4
+		c0.3,0.3,0.7,0.7,1.2,1.1c0.6,0.4,1.1,0.8,1.4,1c0.9,1,1.7,1.7,2.2,2.1l1.7,1.2c0.5,0.5,0.9,0.8,1.1,1.1c0.5,0.4,0.9,0.7,1.3,0.9
+		c0,0,0,0,0.1,0c2.6,2.7,4.9,5.2,6.7,7.5c-2.1,0.4-4,1.4-5.7,2.8c-1.8,1.5-3.2,3.2-4.2,5.3c-0.9,2-1.4,4.2-1.5,6.5
+		c-0.1,2.3,0.2,4.5,0.9,6.7c0.4,1.1,0.8,2.2,1.4,3.2c1.3,2.2,3.2,3.8,5.7,5c2.2,1.1,4.7,1.6,7.4,1.7c1,0,1.8,0,2.6-0.2
+		c-1,3.9-2.5,8.5-4.4,13.8c-4.2-0.1-8.2,0.4-12.2,1.4c-4.5,1.1-8.3,2.9-11.3,5.2c-3.7,2.8-5.9,6.3-6.8,10.3
+		c-0.4,2.1-0.4,4.2,0.2,6.2c0.2,0.8,0.5,1.6,0.9,2.3c0.2,0.9,0.4,1.8,0.6,2.7c-1.7,0.5-3.4,1.2-4.9,2.1c-2.1,1.2-4,2.7-5.6,4.6
+		c-1.1,1.1-2.3,2.8-3.7,4.9c-1.9,2.8-3.2,5-4,6.8c-0.9,2.3-1.7,5-2.1,8c-1.1,7.6-0.2,15,2.7,22.2c2.2,5.5,5.2,10.2,9.1,14.1
+		c0.1,0.6,0.6,1.1,1.5,1.7c0.3,0.2,0.6,0.4,0.9,0.5c0.6,0.5,1.2,1,1.8,1.4c0.6,0.5,1.2,0.8,1.7,1.1c1.8,1.5,3.3,3.2,4.4,5
+		c1.1,1.8,1.8,3.6,2.2,5.6c0.4,2.1,0.2,4.1-0.4,5.9c-1.1,3.3-3.8,6.2-8.1,8.8c-1,0.6-2.8,1.5-5.4,2.7c-2.3,1.1-4.1,2.1-5.4,2.9
+		c-5,3.1-9.8,8.6-14.5,16.5c-2.9,4.9-4.8,9-5.7,12.6c-0.7,2.8-1.1,7-1.2,12.7c-0.1,3.8,0,6.7,0.1,8.8c0.3,3.2,0.9,6,1.8,8.5
+		c0.8,2.1,2.5,5,5.1,8.8C-956.6,506.1-954.9,509-954.1,511.2z M-940.5,261.5c-3.8-0.4-6.9,0-9.3,1.2c-1.1,0.6-2.1,1.4-3.2,2.5
+		c-2.5,2.5-4.1,5.5-4.9,9c-0.6,2.5-0.6,4.8,0,7.1c0.8,3.1,2.5,5.7,5.2,7.6c2.4,1.8,5.3,2.9,8.7,3.4c1.8,0.2,3.4,0.2,4.9-0.1
+		c4-0.8,7.2-2.9,9.8-6.4c1.3-1.8,2.3-3.8,2.8-5.8c0.6-2.2,0.7-4.3,0.2-6.3c-0.5-2.1-1.6-4.1-3.3-6.3c-1.8-2.1-3.7-3.6-5.8-4.5
+		C-936.8,262.1-938.5,261.7-940.5,261.5z M-958.7,198.4c0,0,0.8,0.9,2.3,2.7c0.9,1.1,1.4,2,1.6,2.9c0.3,1.5-0.1,3.2-1.4,5.1
+		c-1.5,1.9-2.4,3.5-2.9,4.6c-0.7,1.5-1,3.3-1,5.4c0,2.5,0.5,4.6,1.4,6.3c1.2,2.3,2.8,3.5,5,3.8c1.8,0.3,3.4-0.2,4.7-1.5
+		c1.3-1.3,1.9-2.9,1.5-4.7c0-0.3-0.2-0.9-0.5-1.8c-0.2-0.7-0.3-1.3-0.3-1.8c0-0.6,0.2-1.2,0.5-2c0.1-0.2,0.4-0.8,1-1.8
+		c1.7-2.8,2.7-5.6,3.1-8.4c0.5-3.2,0.1-6.1-1.2-8.7c-0.1-0.1-0.6-1-1.5-2.5c-0.6-1-1-1.9-1.2-2.7c-0.4-2,0.3-4.7,2.2-8.3
+		c1.9-3.7,2.8-6.5,2.5-8.4c-0.2-1-0.8-2.5-2-4.5c-1-1.9-1.6-3.4-1.6-4.6c0-0.7,0.1-1.5,0.4-2.6c0.3-1.3,0.5-2.2,0.5-2.7
+		c0.2-1.5-0.2-2.9-0.9-4.3c-0.8-1.4-1.9-2.2-3.3-2.5c-1.3-0.3-2.6,0-3.9,0.7c-1.2,0.6-2.3,1.6-3.3,2.8c-1.2,1.4-1.9,2.9-2.4,4.5
+		c-0.5,1.8-0.5,3.4,0.1,4.9c0.3,0.7,1.1,2,2.5,3.9c1.1,1.5,1.7,2.9,1.8,4c0.1,1.3-0.5,2.8-1.7,4.5c-2,2.7-3,4.1-3.1,4.3
+		c-0.9,1.8-1.4,3.9-1.2,6.5C-960.6,194.3-960,196.6-958.7,198.4z M-967.3,394.8c3.5-1.7,6.1-4.4,7.8-8.1c1.7-3.6,2.2-7.4,1.5-11.6
+		c-0.2-1.3-0.7-2.8-1.3-4.6c-0.5-1.5-1.1-2.7-1.8-3.7c-0.5-0.7-1.2-1.4-2.3-2.1c-2.7-2.2-5.1-3.5-7.2-4c-3.1-0.7-6.6-0.2-10.5,1.7
+		c-1.8,0.8-3.3,1.8-4.6,2.8c-2,1.7-3.6,3.9-4.7,6.5c-1.1,2.5-1.8,5.2-2,8.1c-0.1,1.7,0,3.1,0.2,4.3c0.4,2.1,1.3,4.2,2.6,6
+		c1.3,1.8,2.9,3.2,4.9,4.3c3.6,2.1,7.8,2.8,12.4,2C-970.5,396.2-968.9,395.6-967.3,394.8z M-958.7,73.6c2,2.3,4.1,4.4,6.3,6.4
+		l0.1-2.9c0-1.4,0-2.4-0.1-3.1c0-0.3-0.1-0.5-0.1-0.7C-954.7,73.9-956.7,74-958.7,73.6z M286,213.3v-1.8c0-0.1,0.1-0.2,0.1-0.2v-0.9
+		c0-0.1,0.1-0.2,0.1-0.2c-0.5-0.1-1-0.2-1.5-0.3c-2.4-0.4-4.6-0.1-6.8,0.7c-2.3,0.8-4.1,2.2-5.2,4c-0.7,1.2-1.3,2.7-1.5,4.4
+		c-0.2,1.1-0.3,2.7-0.4,4.7l-0.3,9.9c0,0.3-0.1,0.6-0.1,0.8c1.2-0.1,2.8,0,4.6,0.3l11,1.2c0.1,0,0.1,0,0.2,0v-1.8
+		c0-0.1-0.1-0.2-0.1-0.2v-20.5C286,213.4,286,213.3,286,213.3z M-941.2,78.2c1.9-1.3,3.2-3,3.9-5c0.4-1,0.5-2,0.3-2.8
+		c-0.2-1-0.7-1.8-1.5-2.3c-0.8-0.4-1.7-0.4-2.8-0.1c-0.6,0.2-1.4,0.7-2.6,1.4v0.1c0.2,0.2,0.3,0.5,0.4,0.9c0.3,1.3,0.5,3.2,0.5,5.8
+		c0,1.3,0,2.2-0.1,2.9C-942.5,78.9-941.8,78.5-941.2,78.2z M-952.3,52.2c0.2-0.4,0.3-0.9,0.2-1.4c-0.1-0.5-0.3-0.9-0.8-1
+		c-0.4-0.1-0.8,0-1.4,0.1c-2.3,0.7-4.2,1.4-5.5,2c0.6-1.3,1.1-2.2,1.5-2.5c0.6-0.6,1.6-1.2,2.8-1.6c3.9-1.3,7.7-1.1,11.4,0.7
+		c0.8,0.4,1.4,0.6,1.8,0.7c0.5,0,1.2-0.3,2.2-0.8c3.6-2.1,7.6-3.1,12-3.1c1.2,0,2.4,0.1,3.6,0.3c0,0,0.1,0,0.1,0.1
+		c0.2,0.1,0.5,0.2,0.9,0.1c1.2,0.2,2.4,0.6,3.6,1c0.1,0.3,0.4,0.6,1.1,0.8c4.5,1.9,8,3.2,10.3,4c3.9,1.3,7.4,2,10.7,2.3
+		c1.7,0.2,4,0.2,6.6,0c1.3-0.1,2.1,0.2,2.4,0.8c0.2,0.4,0.2,0.9-0.2,1.4c-0.3,0.4-0.7,0.8-1.2,1.1c-2.3,1.2-5.6,1.4-9.9,0.5
+		c-3.9-0.8-7.6-2-11.1-3.6c-0.8-0.4-1.4-0.5-2-0.3c-0.4,0.1-0.9,0.7-1.4,1.8c-0.7,1.5-1.7,2.7-3.2,3.6c-1.4,0.9-2.9,1.4-4.6,1.6
+		c-3.2,0.4-6.3-0.5-9.4-2.5c-0.7-0.5-1.8-1.3-3.3-2.4c-1.3-1-2.5-1.7-3.4-2.1c-2.5-1-5.2-1.2-8.1-0.5c-2.4,0.6-4.8,1.8-7.2,3.6
+		c-0.1-0.1-0.1-0.2-0.2-0.2c-1.3,1.1-2.5,2.3-3.6,3.4l-0.1-0.1c-0.9-0.6-1.5-1.3-2-2.1c0.7-0.3,1.6-0.9,2.7-1.8
+		c1.3-1.2,2.2-2,2.5-2.2C-953.3,53.2-952.5,52.6-952.3,52.2z M-935.1,50.8c0,0.5,0.1,0.8,0.2,1.1c0.1,0.2,0.4,0.5,1,0.8l4.7,3
+		c2,1.2,4.2,1.8,6.7,2.1c1.7,0.1,2.9-0.3,3.6-1c0.7-0.9,0.9-2,0.3-3.3c-0.2-0.4-0.4-0.7-0.7-1.1l-0.5-0.5l-0.4-0.5
+		c-0.4-0.5-0.9-0.9-1.8-1.4c-2.3-1.2-4.8-1.8-7.5-1.9c-2,0-3.5,0.3-4.7,1c-0.4,0.2-0.7,0.5-0.8,0.7
+		C-935.1,50.1-935.1,50.4-935.1,50.8z M-947.2,80.3c0.6-0.1,1.2-0.2,1.7-0.3c-0.1-0.3-0.1-0.6-0.1-0.9c0-1.6,0-3.3,0-4.9
+		c0.1-0.8,0.1-1.4,0.1-1.8c-0.1-0.8-0.2-1.4-0.2-1.7c-1.7,0.9-3.3,1.6-4.8,2.2c0,0,0,0.1,0.1,0.2c0.4,0.9,0.5,2.1,0.5,3.6v4
+		L-947.2,80.3z M-897.9,98.7c0.1,0.3,0.2,0.7,0.4,1.2c1.3,2.4,1.4,4.4,0.3,6.1c-0.9,1.3-2.6,2.1-5.3,2.6c-5.4,1-9.6,0.8-12.5-0.6
+		c-1.3-0.6-2.2-1.3-2.7-2.1c-1-1.5-1-3.6-0.2-6.5c0.1-0.4,0.2-0.7,0.2-0.9C-911.2,99.2-904.7,99.3-897.9,98.7z M-909.6,102.9
+		c-0.2-0.5-0.4-0.9-0.8-1c-0.2-0.1-0.5-0.1-0.9-0.1c-0.7,0-1.2,0.2-1.5,0.5c-0.2,0.2-0.3,0.6-0.4,1.1c0,0.7,0.2,1.3,0.5,1.7
+		c0.3,0.3,0.7,0.5,1.2,0.5c0.5,0,0.9-0.1,1.2-0.4c0.4-0.2,0.6-0.6,0.7-1C-909.5,103.8-909.5,103.4-909.6,102.9z M-901.4,103.3
+		c-0.2-0.7-0.7-1.2-1.5-1.2c-0.8,0-1.3,0.4-1.7,1.1c-0.1,0.2-0.2,0.5-0.3,0.9c-0.2,0.6-0.2,0.9-0.1,1.2c0.2,0.6,0.7,1,1.4,1.1
+		c0.6,0.1,1.2-0.1,1.6-0.5c0.3-0.4,0.5-0.9,0.6-1.5C-901.4,104-901.4,103.6-901.4,103.3z M-959,71.2c0.9,0.2,2.2,0.2,3.7-0.1
+		c2.7-0.4,4.8-0.9,6.2-1.5c0.6-0.3,1.4-0.8,2.3-1.4c1.4-0.9,2.1-1.4,2.3-1.5c1.9-1.2,3.5-1.6,5-1.5c1,0.1,1.9,0.5,2.8,1.2
+		c0.8,0.6,1.4,1.4,1.8,2.4c0.2,0.2,0.4,0.4,0.7,0.7c1.2,1.4,2.7,2.1,4.7,2c1.8,0,3.2-0.6,4.3-1.8c0.1,0,0.2,0,0.4,0l0.5-0.1
+		c0.1-0.1,0.2-0.2,0.3-0.2c0.1-0.1,0.2-0.2,0.3-0.2c0.1-0.1,0.2-0.2,0.2-0.2c0-0.1,0.1-0.1,0.2-0.2c0-0.1,0.1-0.2,0.1-0.2
+		c0-0.1,0.1-0.2,0.1-0.2v-0.2c0,0,0.1-0.1,0.1-0.1c0.3,0,0.7,0.1,1,0.4c0.1,0.1,0.5,0.5,1,1c1.4,1.5,3.3,2.3,5.5,2.5
+		c2.3,0.2,4.2-0.4,5.9-1.7c0.9-0.8,1.7-1.2,2.1-1.2c0.5,0,1.2,0.4,2.2,1.3c1.6,1.5,3.6,2.2,5.9,2.3c2.3,0,4.3-0.7,5.9-2.1
+		c0.4-0.4,0.7-0.6,0.9-0.8c0.4-0.3,0.8-0.4,1.1-0.5c0.4,0,0.8,0.1,1.2,0.4c0.6,0.3,0.9,0.6,1.2,0.7c1.9,1.3,4.1,1.8,6.6,1.6
+		c2.5-0.2,4.5-1.1,6.2-2.7c0.7-0.7,1.4-1.1,1.8-1.1c0.4,0,1,0.4,1.7,1.1c1.6,1.6,3.6,2.3,6,2.3c2.4,0,4.4-0.9,5.9-2.5
+		c0.6-0.6,1-1,1.4-1.1c0.6-0.2,1.3,0.2,2.4,1.1c1.5,1.2,3.2,1.7,5.1,1.7c1.2,0,2.2-0.4,3.1-1c1-0.7,1.5-1.6,1.4-2.6
+		c0-0.2,0-0.5-0.1-0.9v-0.1c-0.3-0.2-0.6-0.4-0.9-0.7c-5.4-5-11.3-9.1-17.8-12.2c-3.5-1.7-7.8-3.4-12.9-5c-4.4-1.4-8.2-2.4-11.3-2.9
+		c-3.8-0.6-8.8-0.9-15.1-0.9c-5,0-9.1,0.2-12.2,0.5c0.9,0.4,1.9,0.9,2.8,1.5c0.2,0.1,0.4,0.2,0.5,0.4c3.5,1.3,6.3,2.2,8.2,2.8
+		c4.3,1.5,7.9,2.2,11,2.1c1.2-0.1,2-0.1,2.6-0.1c1,0,1.9,0,2.7,0.2c0.9,0.2,1.7,0.5,2.4,1c0.7,0.6,1.2,1.2,1.5,2.1
+		c0.4,1.4,0,2.8-1.3,4.1c-0.9,0.9-2.2,1.5-4,2c-3,0.7-6.5,0.6-10.5-0.2c-1.6-0.4-5-1.4-10.3-3.2c-0.9,1.9-2.3,3.5-4.2,4.7
+		c-1.8,1.2-3.8,1.9-6.1,2.1c-4.1,0.4-8.1-0.9-12-3.7c-0.6-0.4-1.5-1.1-2.7-2.1c-1.1-0.8-2-1.3-2.9-1.7c-2.1-0.7-4.3-0.7-6.8,0.1
+		c-1.4,0.5-3,1.3-5,2.4c-2.8,2.3-5.3,4.9-7.7,7.6c0,0.3-0.1,0.6-0.2,0.9c-0.3,0.5-0.5,0.8-0.6,1.1c-0.3,0.6-0.4,1.1-0.4,1.6
+		c0,0,0,0.3,0.1,0.7C-959.9,71-959.4,71.1-959,71.2z M-1301.6,266.7c1,0.9,2.6,2,4.8,3.5c0.2,0.1,0.7,0.2,1.3,0.5
+		c0.8,0.4,1.5,0.7,1.9,0.9c0.7,0.4,1.3,0.7,1.7,1.1c0.6,0.5,1.4,1.5,2.3,2.9c0.4,0.6,0.7,1.2,0.7,1.7c0,0.2,0,0.3,0,0.4
+		c4.7-1.1,9.5-1.5,14.3-1.2c1.7,0.1,4.2,0.5,7.8,1c1,0.1,1.6,0.4,2,0.8c0-0.1,0-0.2,0.1-0.3c-0.2-0.1-0.4-0.4-0.6-0.7
+		c-0.5-0.6-1-1.6-1.7-3c-1.9-3.4-5.5-6.5-10.9-9.4c-1.4-0.8-3.6-2-6.5-3.6c-2.4-1.4-4.4-2.8-5.9-4.3c-0.7-0.6-1.4-1.5-2.2-2.5
+		c-2.7-3.7-4.2-7.8-4.3-12.2c-3.7,2.2-6.3,4.7-7.8,7.6c-1.4,2.8-1.9,5.8-1.3,8.9C-1305.4,262-1304,264.6-1301.6,266.7z
+		 M-1276.5,513.5c-0.6,2-0.4,3.9,0.7,5.9c0.1,0.2,0.2,0.4,0.3,0.5h-63.5v-40.4h3.7c0.5,0,1-0.1,1.5-0.1c0.1,0,0.2-0.1,0.4-0.1
+		c0,0,0.1,0,0.2-0.1c0.1,0,0.2-0.1,0.2-0.1c0.1,0,0.2-0.1,0.4-0.1h20.2c0.9,0,1.7,0,2.6-0.1c0.5,0,1,0,1.5-0.1
+		c0.1,0,0.2-0.1,0.3-0.1c0.2,0,0.3,0.1,0.5,0.1c1.9,0.3,3.8-0.3,5.6-1.6c1.4-1,2.7-2.5,3.9-4.5c1.3-2.3,2.3-4.1,3.1-5.2
+		c0.5-0.9,1.5-2.1,2.7-3.7c1.2-1.7,2.1-2.9,2.7-3.8c0.3-0.7,0.5-1.1,0.5-1.2c0.1-0.5,0-0.9-0.2-1.2c0,0,0-0.1-0.1-0.1
+		c-0.1,0-0.2-0.1-0.3-0.2c-0.1-0.1-0.2-0.1-0.4-0.2c-0.1,0-0.2,0-0.3-0.1c-0.1,0-0.3-0.1-0.4-0.1c-0.2,0-0.4-0.1-0.6-0.1
+		c-0.9,0-1.7,0-2.6-0.1c-1.5,0-3.1,0-4.6-0.1c-4.2,0-8.5-0.1-12.8-0.1h-26.3v0.1c-0.2,0-0.4,0.1-0.6,0.1c-0.1,0.1-0.2,0.2-0.3,0.2
+		l-0.2,0.2c0,0.1-0.1,0.1-0.1,0.2c0,0,0,0.1-0.1,0.1v-23.7c0.1,0,0.2,0,0.2,0c0.4,0,0.8,0,1.2,0.1c0.9,0,1.8,0,2.6,0.1
+		c1.3,0,2.7,0.1,4,0.1c3.1,0,6.2,0.1,9.3,0.1h64c1.5,0,3-0.1,4.6-0.1c0.9,0,1.8,0,2.7-0.1h0.2c3.1,0.1,5.3,0.2,6.5,0.5
+		c2.4,0.4,4.3,1.2,5.8,2.5c1,0.7,1.8,1.7,2.4,2.8c1.2,1.9,1.8,3.7,1.8,5.3c0,0.6-0.1,1.5-0.4,2.7c-0.4,1.5-0.7,2.4-1,2.8
+		c-0.2,0.4-0.9,1-2,1.9c-1.3,0.9-2.5,1.6-3.5,2c-1,0.4-2.5,0.7-4.4,0.8c-1.3,0.1-3.3,0.1-5.9,0.2c-2.1,0.1-3.8,0.3-5.3,0.6
+		c-0.2,0-0.3,0.1-0.4,0.1h-0.2c-0.8,0.2-1.2,0.4-1.3,0.9c0,0.2,0,0.3,0.1,0.5l-0.3,0.5l-1,1c-0.2,0.2-0.3,0.4-0.4,0.7l-0.6,0.8
+		c-0.4,0.7-0.7,1.1-0.7,1.4l-3.3,3.8c-3.2,3.9-6.1,7.3-8.8,10.3c-1.5,1.7-2.5,3-3,3.9c-1,2-1.2,3.9-0.7,5.9c0.3,0.9,0.8,1.8,1.5,2.5
+		c0.7,0.8,1.5,1.3,2.5,1.6c0.6,0.2,1.4,0.3,2.5,0.4c0.7,0,1.2-0.1,1.5-0.2h0.1c1.6,0,3.2,0,4.7,0.1h0.7c0.3,0.2,0.6,0.3,0.9,0.4
+		c0.8,0.1,1.9,0.1,3.3,0.1c1.5-0.1,2.6-0.1,3.3,0.1c1.2,0.2,2.4,0.7,3.4,1.4c1,0.7,1.8,1.6,2.4,2.7c0.3,0.7,0.5,1.2,0.5,1.6
+		c0,0.6,0,1,0.1,1.3l0.2,0.8c-0.1,0.3-0.1,0.6-0.1,0.7c0,0.2,0,0.3,0.1,0.4c-0.1,0.1-0.1,0.3-0.1,0.4c0,0.2,0,0.4,0.1,0.7l-0.2,0.8
+		c-0.1,0.3-0.1,0.7-0.1,1.3c0,0.4-0.2,0.9-0.5,1.6c-0.6,1.1-1.4,2-2.4,2.7c-1.1,0.7-2.2,1.2-3.4,1.4c-0.7,0.1-1.8,0.1-3.3,0.1
+		c-1.5-0.1-2.6-0.1-3.3,0.1c-0.3,0-0.6,0.2-0.9,0.4h-0.7c-1.5,0-3.1,0.1-4.7,0.1h-0.1c-0.3-0.2-0.9-0.2-1.5-0.2
+		c-1.2,0.1-2,0.2-2.5,0.4c-1,0.3-1.8,0.8-2.5,1.6C-1275.6,511.7-1276.2,512.6-1276.5,513.5z M-1285.4,499.8c0-0.9,0-1.5-0.1-1.9
+		c-0.2-0.9-0.9-1.8-2.1-2.7c-0.9-0.6-1.7-1-2.3-1.1c-0.4-0.1-1.1-0.2-2.1-0.2l-3,0.1c-0.5,0.1-1,0.3-1.4,0.5
+		c-1.9,0.9-2.9,2.5-3.3,4.6c-0.1,0.8,0,1.5,0.1,2.1c0.1,0.4,0.3,0.8,0.5,1.2c0.4,0.8,0.9,1.5,1.4,2c1.5,1.5,3.7,2.1,6.5,1.8l1.2-0.2
+		l2.2-1.5c1.1-1,1.8-2,2.1-3C-1285.4,501.2-1285.4,335.6-1285.4,499.8z M288.4,234v4c0,0.2,0,0.5,0,0.8v1.8c0,0.1-0.1,0.2-0.1,0.2
+		v0.2c0,0.1-0.1,0.1-0.1,0.2c0,0.6,0,1-0.1,1.4c-0.1,1.5,0,2.8,0.2,3.8c4.9,0.1,8.8,0.3,11.6,0.8v-24.8c0-0.1,0.1-0.1,0.1-0.2V220
+		c0-0.1,0-0.2,0.1-0.2v-0.9c0-0.1,0-0.2,0.1-0.2v-0.4c-1.1-0.9-2.2-1.7-3.3-2.5c-3.1-2.3-5.9-3.9-8.5-4.9v0.4c0,0.1,0,0.2,0.1,0.2v2
+		c0,0.1,0.1,0.2,0.1,0.2v20C288.4,233.8,288.4,233.9,288.4,234z M164.7,324.1c0-2.3-0.1-4-0.2-5.1c-0.2-1.9-0.7-3.5-1.3-4.8
+		c-1.2-2.5-3.1-4.4-5.8-5.7c-2.6-1.3-5.4-1.7-8.1-1.2c-2.7,0.5-5.2,1.8-7.3,3.7c-2.1,2-3.6,4.3-4.4,7c-0.6,1.9-1,4.4-1.1,7.5
+		c-0.1,2.1-0.2,5.3-0.2,9.6c0,14.1-0.2,31-0.6,50.7c0,0.2,0,0.4-0.1,0.5c0,0.1,0,0.2-0.1,0.3c2.2-0.2,4.2-0.4,6.2-0.7
+		c0,0,0-0.1,0-0.1v-0.1c0,0,0.1,0.1,0.2,0.1c0.2,0,0.3,0.1,0.5,0.1c0.1,0,0.2,0,0.4-0.1c0,0,0.1-0.1,0.1-0.1
+		c0.1-0.1,0.2-0.1,0.2-0.2c0-0.1,0.1-0.2,0.2-0.2c0,0,0.1-0.1,0.1-0.2c0-0.1,0.1-0.2,0.1-0.2v-0.2c0-0.1,0.1-0.2,0.1-0.2v-53.9
+		c0-0.1,0-0.1,0.1-0.2c0-0.1,0.1-0.2,0.1-0.2c0-0.1,0.1-0.2,0.1-0.2c0-0.1,0.1-0.2,0.1-0.2v-1.3l0.1-0.2c0-0.1,0.1-0.2,0.1-0.2v-0.2
+		c0-0.1,0.1-0.2,0.1-0.2v-0.5c0-0.1,0.1-0.1,0.1-0.2c0-0.1,0.1-0.2,0.1-0.2v-0.2c0-0.1,0.1-0.2,0.1-0.2c0-0.1,0.1-0.2,0.1-0.2
+		c0,0,0.1-0.1,0.1-0.2c0.1-0.1,0.1-0.2,0.2-0.2c0-0.1,0.1-0.2,0.1-0.2c0.1-0.1,0.2-0.2,0.3-0.2c0,0,0.1-0.1,0.1-0.2l0.1-0.2
+		c0.1-0.1,0.2-0.2,0.4-0.2c0.1-0.1,0.2-0.2,0.3-0.2c0.1,0,0.2-0.1,0.2-0.2c0.1-0.1,0.2-0.2,0.3-0.2c0.2-0.1,0.4-0.2,0.5-0.2
+		c0.2,0,0.4-0.1,0.6-0.1c0,0,0.1-0.1,0.2-0.1c0,0,0.1-0.1,0.2-0.1c0.2-0.1,0.4-0.2,0.5-0.2c0.2-0.1,0.5-0.2,0.7-0.2
+		c0.3,0,0.5-0.1,0.7-0.1h0.1c1.8,0.1,3.4,0.8,4.8,2.1c0.2,0.2,0.4,0.4,0.6,0.6c0,0.1,0.1,0.2,0.1,0.2c0.1,0.1,0.1,0.1,0.2,0.2
+		c0,0.1,0.1,0.2,0.1,0.2c0,0.1,0.1,0.2,0.1,0.2c0.1,0.1,0.1,0.2,0.2,0.2c0,0.1,0.1,0.1,0.1,0.2v0.2c0,0.1,0.1,0.2,0.1,0.2
+		c0.1,0.1,0.1,0.2,0.2,0.2v0.4c0,0.1,0.1,0.2,0.1,0.2v0.2c0,0.1,0.1,0.2,0.2,0.2v54.9c0,0.1,0,0.2,0.1,0.2v0.2
+		c0,0.1,0.1,0.2,0.1,0.2l0.2,0.2c0.1,0.1,0.2,0.2,0.3,0.2c0.2,0,0.3,0.1,0.5,0.1c0.1,0,0.2,0,0.4-0.1c0.1,0,0.1-0.1,0.2-0.1v0.2
+		c2.1-0.2,4-0.3,5.8-0.4c0.5,0,1.1,0,1.7-0.1l0.1-0.4v-0.1c-0.3-0.3-0.5-0.8-0.5-1.5v-0.6L164.7,324.1z M-1260.6,242.3
+		c-3.4-0.8-6.8-1.3-10.1-1.7c0.8,3.4,2.1,6.2,4,8.4c1.1,1.3,3.2,3,6.1,5.1l2.8,2c1.7,1.2,2.8,2.1,3.3,2.8c0.8,1.3,1.4,2.2,1.9,2.8
+		c0.4,0.5,0.7,0.9,0.8,1.2c0.6-1.2,1.1-2.5,1.4-3.9c0.6-3.1,0.1-6.1-1.3-8.9c-1.5-2.9-4.1-5.4-7.8-7.6
+		C-1259.7,242.4-1260.1,242.4-1260.6,242.3z M-1295.7,238.5c0.2,0.2,0.3,0.4,0.4,0.6c8.6-2.5,19.1-2.7,31.3-0.7
+		c1.1,0.2,2,0.4,2.8,0.6c0.1-0.1,0.3-0.3,0.4-0.5c1.3-1.3,2.4-2.9,3.1-4.6c0.5-1.2,0.8-2.3,0.7-3.3c0-1.1-0.4-2.3-1.2-3.7
+		c-0.6-1.1-1.3-2-2.1-2.7c-1.3-1.2-3.4-2-6.3-2.3c-0.2,0-0.5-0.1-0.8-0.1l-6.3-0.6c-0.3,0-0.7,0-1-0.1c-2.6-0.2-4.7-0.3-6.5-0.4
+		c-0.1,0.1-0.2,0.1-0.2,0.2c-0.4,0.2-0.9,0.3-1.7,0.3c-2.3,0.1-4.7,0.4-6.9,0.7c-0.7,0.1-1.4,0.2-2.1,0.4c-0.1,0-0.2,0.1-0.3,0.1
+		c-0.5,0.2-0.9,0.4-1.2,0.4c-0.1,0-0.1,0-0.2,0c-1,0.4-1.9,0.9-2.6,1.5c-0.8,0.6-1.4,1.5-2.1,2.7c-0.8,1.3-1.2,2.6-1.2,3.7
+		c0,1,0.2,2.1,0.7,3.3C-1298.1,235.6-1297,237.1-1295.7,238.5z M-970.3,152.4c0.8,1.1,2.2,2.2,4.2,3.3c0,0,0-0.1,0.1-0.1
+		c1.7-3.1,4.3-5.5,7.7-7.2c2.5-1.3,5.1-2,7.8-2c0.2,0,0.4-0.1,0.7-0.1c1.7-0.4,4-0.5,6.9-0.5c2.3,0,4.1,0.2,5.3,0.7
+		c2.4,0.2,4.8,0.8,7.1,2c3.4,1.7,5.9,4.1,7.7,7.2c0.1,0.1,0.1,0.2,0.2,0.4c1.9-1.3,3.4-2.9,4.3-5c0.8-1.9,1.1-3.8,0.8-5.8
+		c-0.1-0.4-0.1-0.8-0.2-1.2c-0.9-3.5-3.4-6.3-7.6-8.5c-1.4-0.7-3.2-1.5-5.5-2.2c-0.7-0.2-1.6-0.5-2.7-0.8c-0.2,0-0.5,0-0.8,0
+		c-6.1-1.3-12.2-1.6-18.3-0.7c-1.3,0.2-2.6,0.5-3.9,0.8c-3.6,0.8-6.6,2-8.9,3.4c-3,2-5,4.4-6,7.2c-0.5,1.5-0.7,3.1-0.5,4.7
+		C-971.8,149.7-971.2,151.2-970.3,152.4z M-879,91.7c5.1-1.7,9.4-3.3,12.9-5c0.3-0.2,0.6-0.3,0.9-0.4c-0.4,0-0.9,0-1.2-0.1
+		c-2.5-0.2-4.7-0.9-6.6-2.2c-2.3,2.1-5.2,3.3-8.5,3.6c-3.4,0.3-6.4-0.5-9-2.2c-2.3,1.4-4.9,2.2-7.6,2.4c-2.8,0.2-5.4-0.2-7.9-1.2
+		c-1.3-0.5-2.2-0.8-2.8-0.8c-0.5,0-1.1,0-1.8,0.2c-0.4,0.1-1,0.3-1.8,0.6c-1.6,0.6-3.3,0.7-5,0.6c-1.8-0.2-3.4-0.6-4.9-1.4
+		c-1.2-0.6-2-0.8-2.4-0.8c-0.3,0-0.8,0.2-1.7,0.6c-2.3,1-4.7,1.3-7.2,0.9c-2.5-0.4-4.7-1.5-6.5-3.1c-0.5-0.4-0.8-0.9-0.9-1.5
+		c-0.1-0.2-0.1-0.5-0.1-0.7c-0.2,0.1-0.5,0.3-0.8,0.4c-2.1,1.1-4.3,1.6-6.5,1.6c2.1,1.5,4.2,2.9,6.5,4.2c7.3,4.1,15,6.6,23.1,7.6
+		c3.3,0.4,7.8,0.7,13.5,0.7c6.3,0,11.3-0.3,15.1-0.9C-887.2,94.1-883.4,93.2-879,91.7z M64.7,502.2v13.7c-0.4-0.1-0.8,0-1.4,0.1
+		c-1.6,0.3-2.8,0.8-3.6,1.7c-0.4,0.5-0.8,1-1,1.6c-0.1,0.2-0.2,0.5-0.3,0.7H47.7l0-5.2c0-2.1-0.3-3.6-0.8-4.5
+		c-0.3-0.5-0.6-1-1.1-1.4s-0.9-0.7-1.3-0.9c-0.6-0.3-1.6-0.5-3-0.5c-0.9,0.1-1.5,0.2-1.7,0.2c-0.6,0.2-1.2,0.6-1.8,1.2
+		c-1.1,1.2-1.8,2.6-2.1,4.1c-0.1,0.5-0.2,1.2-0.3,2.2c-0.1,2.1-0.2,3.6,0,4.7H25.1l-0.2-0.5c-0.1-0.4-0.3-0.7-0.5-0.9
+		c-0.2-0.4-0.6-0.7-1-1.1c-0.4-0.3-0.8-0.5-1.2-0.7c-1-0.4-2-0.3-3.1,0.2c-0.2,0.1-0.4,0.2-0.5,0.2v-9.5c0.1-0.2,0.3-0.5,0.4-0.9
+		c0.3-1,0.9-1.9,1.8-2.7c0.9-0.7,1.8-1.1,2.9-1.3c0.7-0.1,1.6,0,2.8,0.1c1.3,0.1,2.3,0.2,2.8,0.1c2-0.2,3.6-1.2,4.7-3
+		c0.7-1.1,1.2-2.9,1.4-5.3c0.3-2.6,0.7-4.5,1.1-5.5c1-2,2.5-3.2,4.4-3.6c1-0.2,2-0.1,3,0.2c1,0.4,1.8,0.9,2.3,1.7
+		c0.7,0.9,1.1,2.5,1.2,4.6c0.1,2.4,0.3,4,0.6,4.9c0.5,1.3,1.4,2.3,2.7,3.1c1.3,0.7,2.7,1,4.1,0.8c0.4-0.1,1.1-0.3,2-0.6
+		s1.5-0.5,2-0.6c1.7-0.4,3-0.1,3.7,1c0.2,0.2,0.4,0.5,0.6,0.9c0.2,0.4,0.5,0.6,0.8,0.7C64.1,502.4,64.4,502.4,64.7,502.2L64.7,502.2
+		z M30.3,509.4c-0.2-0.3-0.5-0.6-0.9-0.9c-0.6-0.3-1.2-0.4-1.8-0.3c-0.7,0.2-1.1,0.6-1.4,1.2c-0.2,0.3-0.2,0.8-0.1,1.5
+		c0.1,0.4,0.2,0.7,0.3,0.8c0.1,0.1,0.3,0.3,0.6,0.4c0.6,0.3,1.1,0.4,1.4,0.4c0.6,0.1,1.1,0,1.4-0.4c0.3-0.3,0.5-0.7,0.7-1.4
+		C30.5,510.3,30.5,509.8,30.3,509.4z M43.9,493.3c-0.1-0.3-0.3-0.6-0.7-0.8c-0.2-0.3-0.6-0.5-1-0.5c-0.7-0.1-1.3,0.2-1.8,0.9
+		c-0.2,0.4-0.4,0.7-0.4,1c0,0.1-0.1,0.5-0.1,1.1c0.1,0.4,0.2,0.7,0.3,0.9c0.4,0.6,0.9,0.8,1.7,0.7c0.6-0.1,1.1-0.5,1.5-1.1
+		C44,494.6,44.1,493.9,43.9,493.3z M58.7,510.2c0-0.6-0.1-1.2-0.4-1.7c-0.3-0.4-0.5-0.6-0.6-0.7c-0.2-0.1-0.4-0.2-0.8-0.3
+		c-0.7-0.1-1.4,0.2-2,0.8c-0.5,0.6-0.7,1.3-0.6,2.1l0.2,0.7c0.2,0.2,0.4,0.4,0.8,0.5l1.3,0.2c0.6,0,0.9-0.1,1.2-0.2
+		C58.4,511.3,58.6,510.8,58.7,510.2z M288.5,426.9c-0.3-0.5-0.5-0.9-0.6-1.3c-3.2-0.4-6-0.7-8.4-0.9c-11-1.2-20.6-2.1-28.8-2.5
+		c-0.5,0-1-0.1-1.5-0.1c8,11.2,12.6,21.7,13.6,31.4c1.2,11.7-2,24-9.6,36.9c-2,3.3-3.8,5.9-5.5,7.9c-1.3,1.5-3.5,3.9-6.6,7.1
+		c-3,2.9-5.1,5.3-6.5,7.1c-1.9,2.4-3.2,5-4.1,7.5h48.2c0.3-3.1,1.1-6.1,2.4-8.9c0.9-2.1,2.5-4.6,4.6-7.6c2.6-3.8,4.3-6.2,5-7.5
+		c1.3-2.1,2.7-4.9,4.2-8.5c3.9-9.3,5.9-17.5,5.9-24.5c0-5.8-1.2-12.1-3.7-18.7C295.3,439.3,292.4,433.5,288.5,426.9z M207.5,422.2
+		c-0.1-0.2-0.3-0.5-0.4-0.7c-12.4,0-21,0.1-26,0.2c-5.2,0.1-10.5,0.3-15.7,0.6c3.9,5.3,6.8,10.1,8.6,14.5c2.5,6,3.4,11.8,2.8,17.4
+		c-0.4,2.9-1.3,6.7-3,11.2c-1.3,4-2.7,7.3-4,9.8c-2.1,4.1-5.3,8.3-9.4,12.6c-2,2-5.9,5.6-11.7,10.7l-3.9,3.7
+		c-4.7,4.8-8,10.8-10.1,17.8h45.7c0.7-2.9,1.8-5.7,3.4-8.2c1.6-2.6,4.1-5.3,7.4-8.2c1.8-1.7,4.6-4.1,8.4-7.4
+		c6.2-5.8,10.9-12.4,14.3-19.9c3.5-7.9,5-15.9,4.5-23.8C217.8,442.5,214.2,432.5,207.5,422.2z M308,412.9v-12c0-0.1,0.1-0.2,0.1-0.2
+		v-2.9c0-0.1,0-0.2,0.1-0.2v-0.9c0-0.1,0-0.2,0.1-0.2v-3.3h-0.1c-0.1,0-0.3,0-0.4-0.1c-12.5-1.5-21.9-2.6-28.2-3.3
+		c-11-1.2-20.6-2.1-28.8-2.5c-8.3-0.5-20.8-0.7-37.6-0.7h-2.3c-14.4,0-24.3,0.1-29.7,0.2c-21,0.6-41.9,2.2-62.7,5
+		c-7.7,1-15.4,2.2-23.1,3.5c-0.2,0-0.4,0-0.5,0.1c-1,0.2-1.8,0.2-2.4,0.1v25.4h-0.1c0.2,1.6,0.2,3.3,0.1,5v1.9
+		c0.2-0.1,0.3-0.1,0.5-0.2c0.2,0,0.3-0.1,0.5-0.1c8.4-1.7,20.9-3.4,37.5-5.3c14.7-1.7,25.8-2.7,33.1-3c3.6-0.2,9-0.3,16.1-0.5
+		c18.3-0.3,31.7-0.5,40.2-0.4c14.9,0.1,28.3,0.6,40.2,1.5c10.6,0.8,26.5,2.7,47.5,5.5v-7.6c0,0,0.1-0.1,0.1-0.2v-1.6
+		c0.1,0,0.2,0,0.3,0l-0.1-3C308.2,412.9,308.1,412.9,308,412.9z M22.3,474.5c0.6-0.4,1.6-1.2,3.1-2.2c1.3-0.9,2.3-1.6,3-2.3
+		c1-0.9,1.8-2,2.3-3.3c0.6-1.3,0.8-2.6,0.5-3.9c-0.1-0.8-0.5-1.7-1.1-2.7c-0.3-0.4-0.5-0.7-0.7-1.1c-0.7,0.9-1.5,1.8-2.3,2.7
+		c-2.5,2.9-5.7,5.8-9.4,8.7c-12.5,9.8-26.6,16-42.4,18.6c2.4,5.9,4.3,11.9,5.9,18H-19c1.5,3.8,2.9,8.1,4.2,12.9h30.7v-0.7
+		c0-0.1,0.1-0.2,0.1-0.2v-17.3l0.1-0.2v-6.9c0-0.1,0-0.2,0.1-0.2v-3c-0.4-3.1-0.1-6.2,0.9-9.2C18.3,479,20,476.5,22.3,474.5z
+		 M-21.8,507.1c-0.6-2.3-1.3-4.6-2.1-6.9l-0.5-1.5h0.1c-3.3-9.6-7.6-19.1-13-28.2c-9.8-16.8-22.3-31.2-37.4-43.3
+		c-14.8-11.9-31.6-21-50.2-27.4c-13.5-4.7-27.3-7.8-41.5-9.2c0,0-0.1,0-0.2-0.1c-0.5,0-0.9-0.1-1.4-0.1c-0.2,0-0.3-0.1-0.5-0.2
+		c-0.6,0-1.2-0.1-1.8-0.1c-0.1,0-0.2,0-0.3-0.1c-0.3,0-0.6,0-1-0.1c-0.3,0-1.1-0.1-2.3-0.2c-3.2-0.4-8.3-0.6-15.5-0.5l-12.5,0.2
+		c-0.9,0-1.6,0-2.3,0c0,0,0,0.1-0.1,0.1c-0.1,0.1-0.2,0.1-0.4,0.2c-0.1,0-0.2,0-0.2,0.1c-0.9,0-1.8,0.1-2.7,0.1
+		c-0.1,0-0.3,0.1-0.4,0.1c-0.1,0-0.2,0.1-0.3,0.1c0,0,0,0-0.1,0.1c-15.6,1.2-30.8,4.4-45.6,9.5c-18.6,6.4-35.4,15.6-50.2,27.4
+		c-15.1,12.1-27.6,26.6-37.4,43.3c-3.1,5.3-5.9,10.8-8.4,16.2c2.2,2.3,3.9,4.4,4.9,6.4c0.9,1.8,1.6,3.7,2,5.8
+		c0.5,3.1,0.3,6.2-0.6,9.4c-0.9,3.1-2.5,5.8-4.6,8.1c-1.6,1.7-3.1,2.9-4.8,3.6h26.9c4.3-12.7,9.9-24.4,17-35.1
+		c7.9-12,17.2-22.1,27.8-30.2c19.9-15.4,46.3-25.2,79.1-29.3c3.1-0.4,5.6-0.5,7.4-0.5c0.4,0,0.8,0,1.2,0.1c0.2,0,0.4,0,0.5,0
+		c6.5-0.2,11.4-0.2,14.7,0.2c0.5,0,1,0.1,1.4,0.2c0.1,0,0.2,0,0.3,0.1c32.8,4.2,59.1,14,79.1,29.3c10.6,8.2,19.8,18.3,27.8,30.2
+		c7.1,10.7,12.7,22.4,17,35.1h35.3c-1.2-4.4-2.4-8.8-3.8-12.9H-21.8L-21.8,507.1z M81.3,318.3c-0.3,0.6-0.6,1.3-0.9,2
+		c-0.8,2.2-1.5,5.1-1.9,8.8c0,0.2,0,0.3-0.1,0.4v1.2c0,0.1,0,0.2,0.1,0.2v1.4c0,0.1,0.1,0.1,0.1,0.2v3.4c0,0.1,0.1,0.2,0.1,0.2v66.3
+		c0,0.1-0.1,0.1-0.1,0.2l0.1,0.2v0.9c0,0.1-0.1,0.2-0.1,0.2v26.9h-0.1c0,0-0.1,0-0.1,0.1c0,1.7-0.1,3.5-0.1,5.3
+		c-0.2,4.2-0.3,7.3-0.5,9.4c-0.2,1.9-0.4,3.8-0.7,5.7c-0.9,6.2-2.4,12.3-4.5,18.3c-1.7,4.9-3.8,9.5-6.2,13.9c0.8,2.7,1,5.3,0.6,8.1
+		v10.1l0.1,0.2V520h4.6v-8.4c0,0,0.1-0.1,0.1-0.2v-6.6c0,0,0-0.1,0.1-0.2v-8.2c0-0.1,0.1-0.1,0.1-0.2c0-0.1,0.1-0.2,0.1-0.2V496
+		c0.6-0.3,1.3-0.5,2-0.8c0,0,0.1-0.1,0.2-0.1h0.1v-0.1c0.2-0.1,0.5-0.2,0.8-0.2l0.5,0.1h2.3c0,0-0.1,0.1-0.1,0.1h2.6v-0.1h9.2v-4
+		c0-0.1,0-0.3-0.1-0.4l-0.4-4.1c0-0.6,0.2-1.5,0.4-2.6v-55.6c0-0.2-0.1-0.5-0.1-0.7c-0.1-0.8,0-1.8,0.1-3.1v-111
+		C85.7,314,83,315.6,81.3,318.3z M89.5,289.6v-19.3c-2.1,0.4-4.7,0.6-7.9,0.6c-4.4,0-7.4,0-8.8,0.2c-3.7,0.4-7.3,1.4-10.7,3
+		c-3.5,1.6-6.5,3.8-9.2,6.4c-2.7,2.6-4.9,5.7-6.5,9.1c-1.7,3.4-2.8,7-3.2,10.7c-0.1,0.8-0.1,1.6-0.2,2.2v1.3c0,0.1,0.1,0.2,0.1,0.2
+		v4.4c0,0.1,0,0.2,0.1,0.2v66.8c0,0.1-0.1,0.1-0.1,0.2v33.2c0,0.1-0.1,0.2-0.1,0.2v2.2c1.6-0.2,3-0.2,4.2,0c3,0.4,5.3,1.7,7,4
+		c0.8,1.2,1.3,2.6,1.5,4.1c0.2,1.7-0.1,3.1-0.8,4.3c-0.2,0.3-0.6,0.9-1.3,1.8c-0.5,0.7-0.9,1.3-1.1,1.9c-0.5,1.3-0.4,2.9,0.2,4.7
+		c0.2,0.6,0.6,1.4,1.1,2.2c0.5,0.9,0.9,1.6,1.2,2.1c1.7,3.3,2.6,6.9,2.6,10.7c0,4.1-0.9,7.6-2.8,10.6c-0.4,0.6-0.9,1.4-1.5,2.4
+		c-0.6,0.9-0.9,1.8-1.1,2.7c-0.2,1.3-0.1,2.6,0.5,3.9c0.5,1.2,1.3,2.3,2.3,3.3c0.7,0.6,1.7,1.4,3,2.3c1.5,1,2.5,1.8,3.1,2.2
+		c1.7,1.4,3.1,3.2,4.2,5.4c0.4-0.6,0.7-1.3,1-1.9c3.8-7.4,6.4-16.1,7.9-26.3c0.2-1,0.3-2.1,0.4-3.2c0.6-5,1-11,1.2-17.9
+		c0.1-2.1,0.1-4.3,0.2-6.6c0-0.7,0.1-1.2,0.2-1.5V404c0-0.1-0.1-0.2-0.1-0.2v-67.9c0-0.1,0-0.2,0.1-0.2v-3.3c0-0.1,0-0.2,0.1-0.2
+		v-1.3c0-0.1,0.1-0.2,0.1-0.2v-0.5c0-0.1-0.1-0.2-0.1-0.2c-0.2-0.7-0.2-1.9,0-3.5l0.5-3.4c0.2-0.9,0.5-2.1,1.1-3.7l0.6-1.4
+		c1.1-2.3,2.6-4,4.7-5.2c2-1.1,4.2-1.6,6.5-1.4v-9.7c-0.1-0.4-0.1-0.9-0.1-1.5c0-0.6,0-1.2,0.1-1.8V298c0-2.1,0-4.5-0.1-7.1
+		C89.3,290.4,89.4,289.9,89.5,289.6z M64.4,485.7c-0.6-3.4-2.1-6.2-4.4-8.4c-0.6-0.5-2.1-1.7-4.7-3.4c-1.9-1.3-3.3-2.6-4.2-4
+		c-0.8-1.3-1.3-2.7-1.5-4.3c0-0.3,0-0.5-0.1-0.8c-0.6,0.2-1.4,0.3-2.5,0.2c-0.7,0-2.7-0.1-6.2-0.2l-6.5,0.3c-0.3,0-0.5,0-0.8,0
+		c0,0.2,0,0.4,0,0.6c-0.2,1.6-0.7,3.1-1.5,4.3c-0.8,1.3-2.2,2.7-4.2,4c-2.6,1.8-4.1,2.9-4.7,3.4c-2.3,2.2-3.8,5-4.4,8.4
+		c-0.1,0.6-0.2,1.6-0.4,3.1c0,0.6-0.1,1.1-0.1,1.5v0.7c0,0.1,0.1,0.1,0.1,0.2v3.4c0,0.1,0,0.2,0.1,0.2v7.1c0,0.1,0,0.1,0.1,0.2v0.5
+		c0.5-0.5,1.1-0.9,1.8-1.3c1.7-1,3.5-1.4,5.3-1.2c0.4,0,1.1,0.1,1.9,0.3c0.7,0.1,1.4,0.1,1.9-0.1c1.5-0.4,2.5-1.7,3-3.7
+		c0.2-1.1,0.4-2.7,0.5-5c0.2-1.7,0.9-3.3,1.8-4.7c1-1.5,2.3-2.7,3.9-3.4c1.6-0.7,3.3-1,5.1-0.7c1.8,0.3,3.3,1.1,4.4,2.4
+		c1.4,1.6,2.1,4,2.2,7.2c0,1.3,0.1,2.2,0.2,2.7c0.2,1,0.6,1.8,1.2,2.2c0.8,0.6,2,0.7,3.4,0.4c0.2-0.1,0.8-0.3,1.7-0.7
+		c0.7-0.2,1.2-0.4,1.7-0.5c1.2-0.2,2.3-0.1,3.5,0.4c1,0.4,1.9,1.1,2.6,2v-4.1l0.1-0.2v-3.4c0,0,0-0.1,0.1-0.2v-0.7
+		c-0.1-0.5-0.1-1-0.2-1.5C64.6,487.3,64.5,486.3,64.4,485.7z M-698.4,335.2c-1.4,1.9-2.6,4.1-3.6,6.9c-1,2.7-1.7,5.4-2.1,7.9
+		c-1.2,0.6-2.4,1.2-3.6,1.8h-49.5v0.1h-1.4c-0.2-0.1-0.5-0.1-0.9-0.2c-2.1-0.2-4.3-0.2-6.4-0.1c-1.4-0.6-2.8-1.3-4.1-2
+		c-9.3-5-16.4-11.4-21.2-19.1c-4-6.4-6.7-14.3-8-23.6c-0.8-5.9-1.2-14-1-24.3c0-0.2,0-0.5,0-0.8c0-0.7-0.1-1.3-0.3-1.7
+		c0,0,0-0.1-0.1-0.1v-0.6c0-0.2,0.1-0.3,0.1-0.5v-91.3c0.1,0,0.2,0,0.2,0.1v-0.8c0-0.7-0.1-1.2-0.2-1.5v-33.3c0.1,0,0.2,0,0.2,0.1
+		v-0.8c0-0.7-0.1-1.2-0.2-1.5V40.1c0-0.2-0.1-0.3-0.1-0.4V17.9c-0.1-0.2-0.1-0.3-0.2-0.5v-2.5c0.4-0.2,0.8-0.4,1.1-0.7
+		c7.9-5.2,17.2-9.1,28-11.7c8-1.9,17-3.1,27.1-3.6c0,0,0.1-0.1,0.2-0.1c0.1,0,0.1-0.1,0.2-0.2c0.1,0,0.1,0,0.2-0.1
+		c0.2,0,0.3-0.1,0.4-0.1c0.1-0.1,0.2-0.1,0.3-0.2h0.4v-0.1h1.5c0.2,0,0.3,0.1,0.5,0.1c0.2,0.1,0.3,0.2,0.4,0.2
+		c0.1,0.1,0.2,0.2,0.3,0.2c13-0.3,24.4,0.5,34.2,2.4c12.6,2.4,23.6,6.4,33,12c0.3,0.2,0.6,0.3,0.8,0.4c0,0,0,0.1-0.1,0.1
+		c0,0.2-0.1,0.3-0.1,0.5v3.1c0,0.2-0.1,0.3-0.2,0.5v21.8c0,0.1-0.1,0.3-0.1,0.4v37.1c-3.5,3.2-6.8,6.6-9.8,10.4c-0.8,1-1.6,2-2.4,3
+		v-44c0-0.2-0.1-0.3-0.1-0.5v-8.9c0,0,0-0.1-0.1-0.2c0-0.1,0-0.2,0-0.3c0-0.1-0.1-0.3-0.1-0.5v-0.8l-0.1-0.2v-0.4
+		c0-0.5,0-0.8-0.1-1.1l-0.1-0.2c0.1-0.6-0.4-1.2-1.4-1.7c-2.9-1.7-7.1-3.1-12.5-4.3c-11.5-2.6-23.3-3.9-35.3-3.9
+		c-11.9,0-23.7,1.3-35.3,3.9c-0.7,0.2-1.5,0.3-2.2,0.5c0,0.1,0,0.2,0,0.4c-6,1.6-10.8,3.6-14.4,6c-0.6,0.4-0.9,0.9-0.9,1.2
+		c0,0.3,0.1,0.5,0.3,0.7c-0.1,0.2-0.1,0.4-0.1,0.7c0,0.5,0,0.9,0,1.4l0.1,0.5l0.1,0.1V46c0,0.2-0.1,0.3-0.1,0.5v409.2
+		c0,0.2,0.1,0.3,0.1,0.4v0.9c0,0.2,0.1,0.3,0.2,0.5v0.4c-0.2,6.3,0.4,12.5,1.7,18.6c0.7,3.4,1.6,6.3,2.7,8.5c1.3,2.7,3.2,5.4,5.6,8
+		c5.1,5.4,11.3,9.6,18.6,12.6c4,1.7,8.2,2.9,12.5,3.6l-0.1,0.1c2.5,0.4,5,0.6,7.5,0.7c0.3,0,0.6,0.1,0.9,0.1h2
+		c7.2-0.3,14.2-1.8,20.8-4.4c7.6-3,14-7.1,19.2-12.6c0.2-0.3,0.5-0.5,0.7-0.8c1,0.8,2.1,1.4,3.2,2c-0.2,0-0.3,0.1-0.5,0.2
+		c0.1,0,0.2,0,0.4,0.1c0,0,0.1,0.1,0.1,0.1h-0.1c-1.5,1.1-2.8,2-3.7,2.8c-0.1,0-0.2-0.1-0.2-0.1
+		C-696.7,498.2-697.5,499.1-698.4,335.2z M-693.2,494.4c0.1,0,0.2-0.1,0.2-0.1l-0.1-0.1c0,0-0.1,0-0.1-0.1
+		C-693.1,494.3-693.1,494.4-693.2,494.4z M88.8,229.9c-1.8,0.2-3.8,0.3-5.9,0.4c0,0.2,0,0.4,0,0.6c0,1.1,0.1,2.1,0.2,3
+		c0.2,0.9,0.5,1.5,0.8,1.9c0.5,0.4,1.1,0.7,2,0.8c0.9,0.1,1.8-0.1,2.6-0.5c0.2-0.1,0.5-0.2,0.9-0.4c0,0,0,0,0.1-0.1v-1.2
+		c0.1-0.3,0.2-0.6,0.3-0.9l-0.1-3.9C89.5,229.7,89.1,229.8,88.8,229.9z M75.6,497.8h-0.9v7.1c0,0.1,0.1,0.2,0.1,0.2v6.5
+		c0,0.1,0.1,0.2,0.1,0.2v8.2h8c-0.1-2.9-0.1-5.5-0.1-7.8c0-0.9,0-1.6,0.1-2.1l0.2-1.2c0.3-0.8,0.7-1.6,1.1-2.3
+		c0.3-0.4,0.6-0.9,1.1-1.3c1.2-1.1,2.6-1.6,4.2-1.5v-5.9h-9.2C78.7,497.9,77.2,497.8,75.6,497.8z M-88.2,467.8
+		c-13.9-14-29.6-24-47.2-30.1c-5.8-2-12.6-3.8-20.2-5.3c-4.7-0.9-11.5-2.1-20.5-3.6l-3.2-0.5c-1,0-2.4,0-4-0.1
+		c-2.1-0.1-3.6-0.1-4.5-0.1c-1.4,0-3.4,0.1-6.1,0.3c-2.8,0.2-4.8,0.3-6.1,0.3c-0.4,0-0.7,0-1-0.1l-1.9,0.3c-9,1.4-15.9,2.6-20.5,3.6
+		c-7.6,1.5-14.3,3.3-20.2,5.3c-17.6,6-33.3,16.1-47.2,30.1c-13.6,13.7-23.7,29.4-30.4,47.3c-0.6,1.6-1.2,3.2-1.7,4.9h35.7
+		c1.7-3.3,3.6-6.5,5.7-9.7c6.7-10.2,14.9-19,24.5-26.4c9.5-7.4,20-13.2,31.6-17.5c0.1-0.1,0.3-0.1,0.4-0.2c0,0.1,0,0.2,0,0.2
+		c1.5-0.5,3-0.9,4.7-1.4c15.2-4.1,30.3-5.2,45.2-3.3c13.2,1.7,25.5,5.5,36.7,11.6l-0.1-0.3c5.9,3.2,11.4,6.8,16.7,10.8
+		c9.6,7.5,17.8,16.3,24.5,26.4c2.1,3.2,4,6.4,5.7,9.7H-56c-0.6-1.6-1.1-3.3-1.7-4.9C-64.5,497.3-74.7,481.5-88.2,467.8L-88.2,467.8z
+		 M94.5,126.7c0.2-0.2,0.3-0.3,0.4-0.4c0-0.2-0.1-0.3-0.2-0.4c0.2-0.4,0.4-0.8,0.5-1.2c0.1-0.5,0.3-0.9,0.4-1.2
+		c0.2-0.4,0.4-0.7,0.5-0.8c0.1,0,0.1-0.1,0.2-0.1c0.1-0.3,0.1-0.6,0.2-0.9c0.4-1.6,1.1-3.4,2.2-5.5c0.6-1.2,1.6-2.9,2.8-5.3
+		c0.4-0.7,1-1.9,1.7-3.3c0.7-1.2,1.9-2.9,3.7-5.1c1.8-2.2,3.1-3.9,3.7-5.1v-0.1c-0.2-0.3-0.2-0.7-0.2-1.1c0-0.4,0.1-0.9,0.2-1.5
+		c0.1-1.3-0.3-2.5-1.1-3.6c-0.8-1.2-1.8-1.9-3.1-2.3c-2.3-0.8-4.8-0.5-7.5,0.8c-1.3,0.6-2.3,0.7-2.8,0.3c-0.2-0.1-0.3-0.4-0.5-0.8
+		c-0.2-0.3-0.3-0.7-0.4-1.2v-0.1c0.1-0.4,0.2-0.7,0.4-1c-0.3-0.2-0.7-0.5-1.1-0.9c-0.9-1-1.9-1.7-3.1-2.2c-1.3-0.5-2.5-0.7-3.8-0.5
+		c-1.3,0.2-2.5,0.8-3.6,1.7c-1.1,0.9-1.8,1.9-2.1,3v0.1c-0.1,0.5-0.3,0.9-0.4,1.2c-0.2,0.4-0.4,0.7-0.5,0.8
+		c-0.6,0.4-1.5,0.3-2.8-0.3c-2.7-1.3-5.2-1.6-7.5-0.8c-1.3,0.4-2.3,1.1-3.1,2.3c-0.9,1.1-1.2,2.3-1.1,3.6c0.1,0.7,0.2,1.2,0.2,1.5
+		c0,0.6-0.1,1-0.4,1.4c-0.1,0.1-0.2,0.2-0.4,0.3c-0.3,0.1-0.7,0.2-1.3,0.1c-0.4,0-0.9-0.2-1.8-0.4c-1.2-0.2-2.4,0.1-3.6,1
+		c-0.9,0.6-1.7,1.5-2.5,2.8c-0.6,0.9-0.9,1.8-1.1,2.5c-0.3,1.6,0.1,3.1,1.1,4.6c0.9,1.4,2.2,2.3,3.7,2.8c0.4,0,0.8,0.2,1.4,0.5
+		c0.7,0.2,1.4,0.3,2.2,0.4h1.6c0.6,0.2,1,0.5,1.2,0.9c0.1,0.2,0.1,0.6,0.1,1.1c-0.2,0.5-0.3,0.9-0.3,1.1v0.3
+		c0.1,0.2,0.1,0.5,0.1,0.8c0,0.2,0,0.5-0.1,0.8v0.1c0,0.5,0,0.9-0.1,1.2c0,1.1,0.4,2.1,1.1,3.1c0.8,1.1,1.8,1.9,3.1,2.3
+		c2.3,0.8,4.8,0.5,7.5-0.8c1.3-0.6,2.3-0.7,2.8-0.4c0.2,0.2,0.3,0.4,0.5,0.8c0.2,0.3,0.3,0.7,0.4,1.2c0.1,0.4,0.3,0.8,0.5,1.2
+		c0.4,0.7,0.9,1.4,1.6,2c1.1,0.9,2.3,1.4,3.6,1.6c1.3,0.2,2.5,0,3.8-0.5C92.5,128.4,93.6,127.7,94.5,126.7z M-707.9,53.1
+		c0.4-1.2,0.5-2.4,0.1-3.4c-0.4-0.9-0.9-1.6-1.8-2.2c-0.8-0.6-1.7-0.9-2.7-0.9c-0.9-0.1-1.6,0-2.3,0.3c-0.4,0.2-0.8,0.5-1.4,1.1
+		c-0.7,0.8-1.1,1.7-1.2,2.7c-0.2,1.1,0,2.1,0.6,2.8c0.4,0.6,0.9,1,1.4,1.4c0.7,0.5,1.3,0.8,1.8,0.9c1.6,0.5,3,0.2,4.2-0.8
+		C-708.6,54.5-708.2,53.9-707.9,53.1z M121.6,427.3c-0.3-0.3-0.6-0.6-0.8-0.9c-8.5,1.1-17,2.3-25.5,3.8l-0.5,0.1
+		c-0.7,0.1-1.4,0.1-2,0.1l2.9,4.2c2.1,3.5,3.3,6.6,3.7,9.2c0.1,1.2,0.2,2.3,0.1,3.3c-0.2,5.4-2.4,11.3-6.6,17.7
+		c-0.2,0.3-0.4,0.5-0.6,0.7v39.4c0.1,0,0.1,0.1,0.2,0.1v5.7c0.2-0.6,0.5-1.2,0.8-1.9c3.2-7.3,7.5-13.9,13.1-19.8
+		c1.5-1.5,4-4,7.7-7.3c3.4-3,5.9-5.5,7.5-7.4c4.4-5,7.5-10.1,9.1-15.4c2-6.1,2.1-12,0.2-17.7C129.5,436.6,126.4,431.9,121.6,427.3z
+		 M-123.3,486.7c-4.3-3.4-8.9-6.5-13.6-9.2l-0.1-0.4c-0.1,0-0.2-0.1-0.3-0.1c-1.9-0.9-3.3-1.7-4.3-2.1c-13.2-6.8-27.9-10.5-44-10.9
+		c-12.5-0.3-25.2,1.3-38.1,5c0,0,0,0,0.1,0.1c-0.5,0.2-0.9,0.4-1.4,0.5c-11.3,4.2-21.5,9.9-30.6,17.1c-9.3,7.4-17.2,16-23.7,25.9
+		c-1.6,2.4-3,4.9-4.4,7.4h37.4c1.6-1.8,3.4-3.6,5.3-5.3c6.7-5.8,14.4-10.2,23.2-13.2c3-1.1,6.1-1.9,9.2-2.5c3-0.9,6.3-1.5,9.7-1.8
+		c2-0.2,4.4-0.3,7.1-0.3c2.9,0,6.3,0.1,10,0.4c2.3,0.1,4.3,0.4,5.8,0.8c5.1,0.7,10,1.9,14.9,3.6c8.8,3,16.5,7.4,23.2,13.2
+		c1.9,1.7,3.7,3.5,5.3,5.3h37.4c-1.4-2.5-2.8-4.9-4.4-7.4C-106.1,502.7-114,494.1-123.3,486.7z M-746,241.7c0.9,2.6,2.6,4.9,4.9,6.8
+		c2.2,1.8,4.7,3.1,7.5,3.8c4,1,7.9,0.7,11.7-0.7c4-1.5,7-4,9-7.5c1.6-2.8,2.3-5.8,2.2-9.2c-0.2-3.4-1.2-6.4-3.1-9.1
+		c-0.7-1.1-1.6-2-2.6-2.9c-1.9-1.7-4.1-2.9-6.7-3.9c-2.4-0.8-4.8-1.1-7.3-0.9c-2.6,0.2-4.9,0.9-7.1,2c-3.9,2.1-6.6,5.3-8.3,9.6
+		C-747.3,233.8-747.4,237.8-746,241.7z M-712.9,100.9c1.6-2.8,2.3-5.8,2.2-9.2c-0.2-3.4-1.2-6.4-3.1-9.1c-0.7-1.1-1.6-2-2.6-2.9
+		c-1.9-1.7-4.1-2.9-6.7-3.9c-2.4-0.8-4.8-1.1-7.3-0.9c-2.6,0.2-4.9,0.9-7.1,2c-3.9,2.1-6.6,5.3-8.3,9.6c-1.6,4.2-1.7,8.3-0.3,12.1
+		c0.9,2.6,2.6,4.9,4.9,6.8c2.2,1.8,4.7,3.1,7.5,3.8c0,0,0.1,0,0.1,0c0,0-0.1,0.1-0.1,0.1c-2.5,2.2-3.6,4.5-3.4,6.9
+		c0,0.3,0.1,1,0.4,2.1l0.6,1.7c0.3,0.6,0.8,1.2,1.5,1.9c1.9,2,4.1,3.2,6.5,3.6c1.2,0.2,2.4,0.2,3.6-0.2c0.6-0.2,1.4-0.6,2.6-1.2
+		c1-0.6,1.8-1.1,2.2-1.5c0.6-0.6,1.2-1.6,1.8-3c0.6-1.5,1-2.8,1-4c0.1-1.4-0.2-2.8-0.9-4.1c-0.7-1.3-1.6-2.3-2.8-3.1
+		c-0.2-0.1-0.3-0.2-0.5-0.3C-717.4,106.6-714.7,104.2-712.9,100.9z M-763.6,71.5c1.4-0.1,2.4-0.3,3.1-0.6c1.3-0.6,2.2-1.4,2.8-2.7
+		c0.6-1.2,0.9-2.4,0.8-3.7c0-1.4-0.3-2.6-0.9-3.6l-1-1.2c-0.7-0.7-1.2-1.2-1.7-1.5c-0.4-0.2-1-0.4-1.8-0.7l-1.4-0.4
+		c-1.1-0.2-2.3,0-3.6,0.5c-1,0.5-1.9,1.2-2.8,2.2c-0.3,0.3-0.5,0.6-0.8,0.9c0,2.3-0.1,4.6-0.1,6.9c0.7,1.5,1.8,2.6,3.1,3.2
+		C-766.8,71.4-765.4,71.6-763.6,71.5z M-709.4,161.2c-0.1-1.7-0.6-2.9-1.4-3.7c-0.5-0.5-1.2-0.9-2.1-1.2c-1.4-0.6-2.5-0.8-3.3-0.7
+		c-1.6,0.3-2.8,1.5-3.7,3.7c-0.5,1.3-0.7,2.3-0.5,3.2c0.2,1.5,1,2.6,2.4,3.4c1.2,0.7,2.6,0.9,4.2,0.7c2.1-0.4,3.5-1.3,4.1-2.8
+		C-709.4,162.9-709.3,162.1-709.4,161.2z M-455.5,514.1c-1.1-1-1.9-1.7-2.3-2.2c-2.8-3.2-4.2-7.8-4.2-13.8c0-1.4,0.2-3.8,0.5-7.4
+		c0.3-3.1,0.4-5.6,0.3-7.4c-0.2-5.7-1.9-9.8-5-12.3c-0.4-0.3-0.9-0.7-1.7-1.1c-0.1,0-0.2-0.1-0.3-0.1c-2.6-0.9-4.5-2.7-5.6-5.2
+		c-0.7-1.5-1-3.6-1-6.1c0-2.2,0.1-4.7,0.4-7.7c-7.5,0.1-17.5,0.6-30,1.5l-6.6,0.5c0.4,2,0.5,4.5,0.4,7.6c-0.1,4.3-0.2,6.9-0.1,7.9
+		c0.1,2.9,0.7,5.5,1.7,7.8c1.2,2.6,2.9,4.5,5,5.7c0.9,0.5,2,0.9,3.4,1.3c2,0.6,3.2,0.9,3.6,1c1.9,0.7,3.6,1.8,5,3.2
+		c1.5,1.4,2.6,3.1,3.4,4.9c1.1,2.5,1.6,6.2,1.5,10.9c-0.2,4.4-0.2,7.7-0.2,9.8c0,2.6,0.1,5,0.3,7.1h35.4c-0.5-1.4-1.1-2.7-1.9-3.7
+		C-453.8,515.7-454.5,515-455.5,514.1z M-421.6,497c0-3.6,0.4-6.3,1.2-8.1c1.2-2.5,3.2-4.4,6-5.6c1.7-0.6,2.9-1,3.7-1.4
+		c1.8-0.8,3.4-2,4.7-3.5c1.3-1.5,2.2-3.3,2.7-5.2c0.3-1.1,0.5-2.5,0.5-4.4c0.1-1.1,0.1-2,0.2-2.8c0,0,0-0.1,0-0.1c0,0,0-0.1,0-0.1
+		c0,0-0.1-0.1-0.1-0.1v-0.2c0,0,0-0.1-0.1-0.1v-7.5c0,0,0.1-0.1,0.1-0.1v-1c0,0,0-0.1,0.1-0.1c0,0,0-0.1,0-0.1c0,0,0-0.1,0-0.1
+		c0,0,0-0.1,0-0.1v-0.1c0,0,0-0.1,0-0.1c0,0,0-0.1,0-0.1c0,0,0-0.1,0-0.1c0,0,0-0.1,0-0.1c0,0,0-0.1,0-0.1c0,0,0-0.1,0-0.1
+		c0,0,0-0.1,0-0.1v-0.1c0,0,0-0.1,0-0.1c0,0,0-0.1,0-0.1c0,0,0,0,0.1-0.1c-2.6-0.3-5.4-0.5-8.2-0.8l-15.2-1.2v0.5
+		c-0.1,1.1-0.1,2.5-0.1,4.4c0,2.1,0,3.5,0,4.3c-0.2,3.6-1.1,6.3-2.7,8.1c-0.6,0.8-1.4,1.4-2.3,2c-0.5,0.5-1,1-1.5,1.4
+		c-0.4,0.3-1,0.6-1.7,0.9c-0.2,0.3-0.7,0.7-1.4,1.1c-2.3,1.3-4.3,3.2-5.9,5.5c-1.6,2.3-2.6,4.7-3.1,7.4c-0.1,0.8-0.2,1.8-0.4,3.1
+		c-0.1,1.5-0.2,2.5-0.2,3v0.1c0,0,0,0,0,0.1v0.1c0,0,0,0.1,0.1,0.1v0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1
+		c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1v0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1
+		c0,0,0,0.1,0,0.1c0,0,0,0.1,0.1,0.1v3.1c0,0,0.1,0.1,0.1,0.1V520h23.2c0.4-1.4,0.6-2.8,0.7-4.5c0.1-2.3-0.1-5.6-0.6-10.1
+		c-0.1-2.2,0-4.3,0.2-6.2V497z M-347.6,510.5c1.9-3.8,2.4-7.9,1.4-12.2c-0.5-1.9-1.2-3.6-2-5.1c-0.7-1.1-1.7-2.3-3-3.5
+		c0,0.1-0.1,0.2-0.1,0.3c0,0,0,0-0.1,0l-0.1-0.1v-0.4l-0.1-0.1c-0.1-0.1-0.1-0.2-0.2-0.2c-0.4-0.4-0.8-0.7-1.1-1.1c0,0,0,0-0.1,0
+		c-0.2,0-0.3-0.1-0.5-0.1h-0.5c0.1-0.2,0.2-0.4,0.2-0.6c-0.8-0.8-1.5-1.4-2-1.9c-3.4-3-5.2-6-5.5-9c-0.2-2.6,0.5-5.1,2.3-7.6
+		c1.2-1.7,3.1-3.6,5.8-5.6c-8.3-2.4-17.8-4.3-28.2-5.9c-4.6-0.7-10.2-1.3-16.8-2l-0.1,0.1c0,0-0.1,0-0.2-0.1h-0.3c0,0-0.1,0-0.1,0.1
+		l-0.2-0.1h-1.2v1.2c0,0,0,0.1,0.1,0.1v3.3c0,0,0.1,0.1,0.1,0.1v4.9c0,0,0,0.1-0.1,0.1v0.4l-0.1,0.1c0,0.4,0.1,0.8,0.1,1.3
+		c0.2,3.9-0.5,7.4-2,10.5c-1.7,3.6-4.3,6-7.6,7.3l-2.7,0.9c-1.1,0.4-1.9,0.7-2.5,1.1c-2.5,1.5-3.9,4.3-4.2,8.3c0,0.2,0,0.5-0.1,0.7
+		c0,0,0.1,0.1,0.1,0.1v0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1v0.1c0,0,0,0.1,0,0.1
+		c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1v0.1c0,0,0,0.1,0,0.1
+		c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0-0.1,0.1-0.1,0.1v0.1c0,0-0.1,0.1-0.1,0.1v1.3c0,0.2,0,0.4-0.1,0.7
+		c0,1.4,0,2.5-0.1,3.4c0.1,1.5,0.2,3.8,0.4,6.7c0.2,3.4,0.1,6.3-0.3,8.7c-0.1,0.4-0.2,0.7-0.2,1h60.7c0-0.2,0.1-0.3,0.2-0.4
+		c0-0.1,0.1-0.1,0.2-0.1c0.2-0.4,0.6-0.7,1.4-1c2-0.6,3.8-1.7,5.4-3.1C-349.8,514-348.6,512.4-347.6,510.5z M-489.5,335.6
+		c-0.2-3.2-0.6-5.7-1.4-7.6c-1.4-3-3.5-5.1-6.5-6.3c-0.7-0.3-1.8-0.7-3.3-1c-1.5-0.4-2.6-0.7-3.3-1c-2.6-1-4.7-2.7-6.3-5.1
+		c-1.3-2-2.2-4.4-2.6-7.4c-0.2-1.8-0.3-4.5-0.3-8l0.2-11.1v-0.1l-15.8,1.2c-12.3,1.1-22.1,2.1-29.5,3.2c-10.5,1.5-19.9,3.5-28.2,5.9
+		c2.7,2,4.6,3.9,5.8,5.6c1.8,2.5,2.6,5,2.3,7.6c-0.3,3-2.1,6-5.5,9c-0.9,0.8-2.2,2.1-4,3.7c-1.5,1.4-2.7,2.8-3.5,4
+		c-0.9,1.5-1.5,3.2-2,5.1c-1,4.4-0.6,8.4,1.4,12.2c0.9,1.9,2.2,3.5,3.9,4.9c1.6,1.4,3.4,2.5,5.4,3.1c0.8,0.3,1.3,0.6,1.4,1
+		c0.1,0,0.1,0,0.2,0.1c0.1,0.1,0.2,0.3,0.2,0.4h91.3c-0.2-1.6-0.2-3.3-0.2-5.2c0-0.8,0.1-3.2,0.2-7.1
+		C-489.4,504.8-489.4,502.5-489.5,335.6z M-753.9,162.3c2.6-0.6,4.5-2.2,5.7-4.6c1.2-2.3,1.4-4.7,0.7-7.4l-0.6-1.5
+		c-0.3-0.5-0.7-0.9-1.1-1.4c-0.9-1-1.7-1.7-2.3-2.1c-0.9-0.7-1.8-1.2-2.7-1.4c-0.4-0.1-1.1-0.2-2-0.2c-2,0-3.4,0.2-4.3,0.6
+		c-0.3,0.2-0.9,0.5-1.8,1.1l-1.8,1.5c-1.7,1.7-2.6,3.7-2.7,6c0,2.5,0.9,4.6,2.6,6.6c1.4,1.5,2.9,2.5,4.6,2.8l2.1,0.2
+		C-755.9,162.6-754.7,162.5-753.9,162.3z M-591.2,516.4c-2.1-2.3-3.6-5-4.6-8.1c-0.9-3.2-1.1-6.3-0.6-9.4c0.4-2,1-3.9,2-5.8
+		c1.5-2.7,4-5.7,7.5-8.9c0.1-0.1,0.1-0.1,0.2-0.2l-13.9-0.1h-1.6c-0.4,0-0.8,0-1.1,0c-1,0.1-2.1,0.1-3.1,0.2l-37.8,3.4
+		c-0.4,0-0.9,0.1-1.3,0.2c-0.5,0.1-1,0.2-1.5,0.2l-37.4,7.1c-0.6,0.2-1.2,0.3-1.7,0.5c-0.2,0.1-0.4,0.1-0.7,0.2
+		c-0.8,0.2-1.6,0.4-2.3,0.6c-0.1,0-0.2,0.1-0.3,0.1c-0.8,0.7-1.6,1.3-2.3,1.8c-1.5,1.1-2.5,1.8-2.8,2.3c-0.4,0.6-0.7,0.9-0.8,1
+		c-0.2,0.2-0.4,0.3-0.5,0.4c-1.2,1.6-2.1,3.4-3,5.3c-1.3,3-2.1,6.1-2.4,9.2c0,0,0,0.1-0.1,0.1c0,0.1-0.1,0.2-0.1,0.2v0.2
+		c0,0.1-0.1,0.2-0.1,0.2v2.4c0,0.1,0.1,0.2,0.1,0.2h115C-588.1,519.3-589.7,518.1-591.2,516.4z M-465.6,333.8l-1.8-2.1
+		c-0.9-1.2-1.7-2.1-2.1-2.8c-0.4-0.7-0.8-1.3-1.2-2c-0.2,2.2-0.6,4.3-1.3,6.3c-1.2,3.6-3.1,6.7-5.8,9.4c-2,2-4.1,3.5-6.5,4.5
+		c0,0.1-0.1,0.1-0.2,0.2c0.2,0.1,0.7,0.5,1.2,0.9c1.2,0.7,2.1,1.3,2.7,1.8c1.9,1.3,3.5,3.1,4.5,5.2c1.1,1.7,2.1,3.7,3,6
+		c0,0,0,0.1,0.1,0.1c4.1-6.8,8.6-14.5,13.7-23.1c-0.1,0-0.2-0.1-0.3-0.1C-461.9,337.1-463.9,335.6-465.6,333.8z M313,433.9v-0.2
+		h37.8v-0.2c0-0.6,0.1-1.4,0.2-2.5l0.8-3.1c0.4-1.4,0.9-2.5,1.5-3.3c-0.3-0.3-0.6-0.6-0.8-0.9H352c-0.7-1.4-1.1-3.3-1.1-5.8
+		c-13.2,0.1-26.4,0.1-39.7,0.2h-0.2v4.3c0.1,0,0.2,0,0.3,0.1v11.4H313z M-698.4,336.2c2.5,4.4,5.9,7.4,10.3,8.8
+		c0.3,0.1,0.6,0.2,0.8,0.4c10.2-2.8,21.3-5.2,33.5-7c10.6-1.6,23.8-3,39.6-4.3c7-0.6,12.6-0.8,16.8-0.7l6.5-0.4
+		c6.8-0.3,12.3-0.2,16.6,0.4c3.6,0,8.1,0.3,13.4,0.7c15.8,1.3,29,2.7,39.6,4.3c12.2,1.8,23.4,4.1,33.5,7c0.2-0.1,0.5-0.2,0.8-0.4
+		c4.4-1.4,7.8-4.4,10.3-8.8c2.2-3.9,3.2-8.3,3-13.4c-0.2-3.9-1-7.6-2.6-11.2c-1.1-2.5-2.4-4.7-4-6.7c0,0-0.1-0.1-0.1-0.1l-1.2-0.8
+		c-0.7-0.6-1.6-1.1-2.8-1.8c-0.7-0.4-1.7-0.9-3-1.5c-0.3-0.2-0.6-0.4-0.8-0.5c-0.1,0-0.1-0.1-0.2-0.1c-0.2,0-0.5-0.1-0.7-0.2
+		c-0.4-0.1-0.8-0.2-1.1-0.3l-39.8-7.5c-0.4,0-0.7-0.1-1.1-0.1c-11.3-1.4-25-2.6-41.1-3.7c-0.3,0.1-0.8,0.2-1.4,0.2l-27.3-0.1h-1.6
+		c-0.4,0-0.8,0-1.1,0c-1,0.1-2.1,0.1-3.1,0.2l-37.8,3.4c-0.4,0-0.9,0.1-1.3,0.2c-0.5,0.1-1,0.2-1.5,0.2l-37.4,7.1
+		c-0.6,0.2-1.2,0.3-1.7,0.5c-0.2,0.1-0.4,0.1-0.7,0.2c-0.8,0.2-1.6,0.4-2.3,0.6c-0.1,0-0.2,0.1-0.3,0.1c-0.8,0.7-1.6,1.3-2.3,1.8
+		c-1.5,1.1-2.5,1.8-2.8,2.3c-0.4,0.6-0.7,0.9-0.8,1c-0.2,0.2-0.4,0.3-0.5,0.4c-1.2,1.6-2.1,3.4-3,5.3c-1.5,3.6-2.4,7.3-2.6,11.2
+		C-701.7,327.9-700.7,332.3-698.4,336.2z M-457.8,270.3c-0.7-6.2-1.5-10.8-2.3-14.1c-1.3-5.9-3.3-10.3-5.9-13.3
+		c-0.8-0.9-1.9-1.9-3.3-3.2c-1.6-1.3-2.7-2.2-3.3-2.8c-1.2,2.9-2.9,5.5-5.2,7.8c-2,2-4.1,3.5-6.5,4.5c-0.1,0.1-0.2,0.2-0.2,0.2
+		c0.3,0.2,0.6,0.4,0.9,0.7l2.2,1.7c1.1,0.9,1.7,1.5,2,1.8c0.1,0.1,0.1,0.1,0.1,0.2c0.1,0,0.1,0,0.2,0c0.9,0.8,1.8,1.8,2.6,2.8
+		c1.4,1.9,2.6,4.1,3.6,6.9c2.9,7.8,3.3,15,1.1,21.8c-1.2,3.6-3.1,6.7-5.8,9.4c-0.9,0.9-1.9,1.8-2.9,2.5h-0.2c-0.2,0-0.3,0.1-0.5,0.2
+		c-0.2,0-0.4,0.1-0.6,0.1c-0.2,0-0.3,0.1-0.5,0.2c-0.1,0-0.2,0.1-0.3,0.2c-0.1,0.1-0.2,0.2-0.2,0.2c0,0.1-0.1,0.2-0.1,0.2
+		c-0.1,0-0.3,0.1-0.4,0.1c0,0-0.1,0.1-0.2,0.1c0,0-0.1,0.1-0.2,0.1c-0.1,0.1-0.2,0.2-0.2,0.2c-0.1,0-0.1,0.1-0.2,0.1
+		c1,0.5,1.7,0.9,2.3,1.1c0.9,0.4,1.6,0.9,2.2,1.3c0,0,0.1-0.1,0.1-0.1c1.2,0.9,2.3,2.1,3.2,3.3c1.4,1.9,2.6,4.1,3.6,6.9
+		c1.2,3.1,1.9,6,2.3,9c0.4,0.3,0.7,0.7,0.9,1.4l1.3,3c0.6,1,1.4,2.3,2.6,3.8c1.2,1.5,2,2.6,2.6,3.1c1,1.1,2.1,2,3.1,2.5
+		c0.8,0.4,1.4,0.8,1.7,1.1c0.2,0.2,0.5,0.3,0.7,0.5c4.8-8.2,10.1-17.2,15.8-27c-0.1,0-0.1-0.1-0.2-0.1c-6.6-4.9-11.1-13-13.5-24.3
+		C-456.4,281.4-457.1,276.7-457.8,270.3z M-486.5,251.7c-0.8-0.4-1.3-0.7-1.4-0.8c-0.3-0.2-0.6-0.5-0.7-0.8c-0.1,0-0.2-0.1-0.2-0.1
+		c-12.7-3.3-26.7-6-41.9-7.9c-12.2-1.5-27.2-2.8-45-3.9c-0.4,0-0.7,0-1.2-0.1c-3.6-0.2-9.8-0.1-18.6,0.1l-6.6,0.2
+		c-0.5,0.1-0.9,0.1-1.2,0c-16,1-29.6,2.2-40.8,3.6c-15.3,1.9-29.2,4.6-41.9,7.9c0,0-0.1,0-0.2,0.1c0,0.2-0.1,0.4-0.3,0.7
+		c-0.2,0.3-0.8,0.7-1.7,1.2c-2.7,1.5-5,3.5-6.8,6c-0.4,0.6-0.7,0.9-1,1.1c-0.2,0.2-0.4,0.3-0.7,0.3c-0.8,1.3-1.5,2.7-2.1,4.1
+		c-1.5,3.6-2.4,7.3-2.6,11.2c-0.2,5.1,0.8,9.5,3,13.4c2.5,4.4,5.9,7.4,10.3,8.8c0.3,0.1,0.6,0.2,0.8,0.4c10.2-2.8,21.3-5.2,33.5-7
+		c10.6-1.6,23.8-3,39.6-4.3c0.3,0,0.6-0.1,0.9-0.1c6.6-0.5,11.9-0.7,15.9-0.7l6.5-0.4c6.8-0.3,12.3-0.2,16.6,0.4h1.1l12.3,0.7
+		c15.8,1.3,29,2.7,39.6,4.3l29.7,5.9c1.3,0.3,2.6,0.7,3.9,1.1c0.2-0.1,0.5-0.2,0.8-0.4c4.4-1.4,7.8-4.4,10.3-8.8
+		c2.2-3.9,3.2-8.3,3-13.4c-0.2-3.9-1-7.6-2.6-11.2c-1.1-2.4-2.4-4.7-4-6.7c-0.3,0-0.6-0.2-0.9-0.5c-0.2-0.2-0.6-0.5-0.9-1l-3.1-2.6
+		C-485.7,252.2-486.2,251.9-486.5,251.7z M-438,278.7c-0.2,0-0.7,0.1-1.4,0.3c-1.5,0.3-2.8,0.9-4,1.8c-1.2,0.9-2.2,2-3,3.3
+		c-1,1.9-1.6,4.5-1.7,7.8c-0.1,2.2-0.2,3.9-0.2,5.3c0.4,0.8,0.9,1.6,1.5,2.3c1.8,2.8,3.8,5.1,6.1,6.9c0.8-1.3,1.6-2.7,2.4-4
+		c2.1-3.7,4-6.6,5.5-8.7c3.6-5,7.9-9.3,12.9-13c-0.3-0.2-0.8-0.5-1.4-0.9c-0.4-0.3-1.1-0.7-2.1-1c-1-0.4-1.7-0.7-2.1-1
+		c-0.5-0.3-0.7-0.6-0.8-0.9c0,0-0.1,0-0.1,0.1c-0.4-0.5-0.6-0.9-0.7-1.4c-0.1-0.4-0.1-0.9,0.1-1.5c0-0.3,0.1-0.8,0.2-1.5
+		c0.1-1.5-0.2-2.7-1.1-3.8c-0.2-0.2-0.5-0.6-0.9-1c-0.4-0.4-0.6-0.8-0.7-1.2c-0.1-0.5-0.1-1,0.2-1.7c0.2-0.4,0.4-0.9,0.7-1.7
+		c0.4-1,0.6-2,0.5-3.1c-0.1-1.1-0.5-2.1-1.2-2.8c-0.9-0.9-2-1.4-3.5-1.5c-1,0-1.9,0.3-2.5,0.8c-0.6,0.5-1,1.3-1.2,2.4
+		c-0.3,1.5-0.2,2.9,0.4,4.3c0.3,0.6,0.5,1.1,0.6,1.5c0.2,0.6,0.3,1.1,0.3,1.5c0,0.4-0.2,0.9-0.5,1.4c-0.4,0.6-0.6,1.1-0.8,1.4
+		c-1.2,1.9-1.4,4-0.7,6.2c0.2,0.6,0.3,1,0.4,1.4c0.1,0.5,0.1,0.9-0.1,1.3C-437.1,278.2-437.4,278.5-438,278.7z M-418.3,228.4
+		c2.4,1.2,5.6,1.6,9.7,1.3c1.7-0.1,3-0.4,3.9-0.9c0.6-0.4,0.9-0.7,1-1.1c0.1-0.1,0.2-0.5,0.2-1.2c0-0.6,0-0.9-0.1-1.2l-1.1-1.4
+		c-1.5,0-2.9,0-4.4,0.1h-8.9c-0.2,0.1-0.3,0.3-0.5,0.4c-0.6,0.4-0.9,0.9-1.1,1.3c-0.2,0.6-0.2,1.1,0.1,1.7
+		C-419.4,227.7-419,228-418.3,228.4z M-426.1,235.4c-1.2,0.6-2,1.3-2.5,2c-0.6,1-0.6,1.8-0.1,2.5c0.4,0.4,1,0.7,2.1,0.9
+		c1.6,0.2,4.1,0.3,7.3,0.3l20.5-0.1c1,0,1.8-0.1,2.3-0.2c0.8-0.3,1.4-0.7,1.7-1.4c0.4-0.9,0.2-1.9-0.7-2.8c-0.6-0.5-1.5-1-2.7-1.4
+		l-3.9-1.2c-1-0.2-1.8-0.6-2.2-0.9c-0.2-0.2-0.4-0.6-0.5-0.9c-1,0.3-2.2,0.5-3.6,0.5c-3.2,0.2-5.9-0.1-8.2-0.7
+		c-0.1,0-0.3,0.1-0.4,0.2c-0.4,0.2-1.4,0.4-2.9,0.8C-422.3,233.7-424.3,234.5-426.1,235.4z M-363.6,382.8
+		c-2.9-6.4-7.4-12.2-13.3-17.4c-5.4-4.7-11.7-8.7-18.9-12c-9.9-4.5-20.4-7.1-31.5-8.1s-21.9,0-32.4,2.8c-1,0.2-1.7,0.3-2.1,0.2
+		c-0.3,0.5-0.6,1-0.9,1.5c-10.5,17.8-19.6,32.9-27.3,45.4c1.5,1.2,3.1,2.3,4.8,3.5c2.4-2,4.4-4.1,6.2-6.3c1.5-1.8,2.6-2.9,3.4-3.3
+		c0.6-0.4,1.4-0.6,2.4-0.7c0.3,0,1.1-0.1,2.5-0.2c2.2-0.1,5.4-0.5,9.6-1.2c4.4-0.7,7.5-1.1,9.6-1.2c0.4,0,0.8,0,1.1,0.1
+		c0.3-3.2,1.3-6.3,2.9-9.3c1.7-3.3,4.1-6.2,7-8.5c2.8-2.3,6-4.1,9.6-5.4c3.4-1.2,7.1-1.9,10.9-2.1c4.7-0.2,9.1,0.3,13.3,1.7
+		c4.5,1.5,8.3,3.7,11.4,6.7c2.8,2.7,5,6,6.8,10.1c1.6,3.6,2.6,7.2,2.9,10.8c0.3,3.7-0.1,7.1-1.2,10.3l26.8,12.2l1.9-3.9
+		c-0.1-0.2-0.1-0.5-0.1-0.9C-358.8,397.6-360.6,389.4-363.6,382.8z M-698.4,386c2.5,4.4,5.9,7.4,10.3,8.8c0.3,0.1,0.6,0.2,0.8,0.4
+		c10.2-2.8,21.3-5.2,33.5-7c10.6-1.6,23.8-3,39.6-4.3c0.3,0,0.6-0.1,0.9-0.1c6.6-0.5,11.9-0.7,15.9-0.7l6.5-0.4
+		c6.8-0.3,12.3-0.2,16.6,0.4h1.1l12.3,0.7c15.8,1.3,29,2.7,39.6,4.3l11.2,2.2l5.9-1.2c2.6-0.6,4.5-0.6,5.8-0.2
+		c1.2,0.4,2.7,1.4,4.6,3.1c0.5,0.4,0.9,0.8,1.4,1.2l10.5-17.2c2.1-3.5,4.4-7.3,6.9-11.6c-0.3-1-0.7-2.1-1.1-3.1
+		c-0.6-1.4-1.3-2.8-2.1-4l-0.2-0.4l-0.1-0.2c-0.6-0.9-1.3-1.9-2-2.7c0.1,0,0.2,0,0.2-0.1l-0.9-1c-0.3-0.3-0.9-0.7-1.7-1.1
+		c-0.8-0.4-1.4-0.8-1.7-1.2l-0.7-0.7c0,0-0.5-0.3-1.5-0.8c-0.6-0.3-1-0.7-1.2-1.1c-0.3,0-0.5-0.1-0.7-0.2c-12.7-3.3-26.7-6-41.9-7.9
+		c-12.2-1.5-27.2-2.8-45-3.9c-0.4,0-0.7,0-1.2-0.1c-3.6-0.2-9.8-0.1-18.6,0.1l-6.6,0.2c-0.5,0.1-0.9,0.1-1.2,0
+		c-16,1-29.6,2.2-40.8,3.6c-15.3,1.9-29.2,4.6-41.9,7.9c-0.2,0.1-0.4,0.2-0.6,0.2c-0.2,0.2-0.5,0.5-0.9,0.7
+		c-0.7,0.4-1.3,0.7-1.8,0.9c-0.6,0.4-1.3,1-2.3,1.9c-0.5,0.4-1.2,0.9-2.2,1.6c-0.8,0.6-1.4,1.2-1.8,1.8l-0.8,1.4
+		c-0.2,0.4-0.5,0.8-0.9,1.3c0.2,0,0.4,0,0.6-0.1c-0.7,1.2-1.4,2.4-2,3.7c-1.5,3.6-2.4,7.3-2.6,11.2
+		C-701.7,377.7-700.7,382.1-698.4,386z M-376.9,136.6c-5.4-1-10.9-1.6-16.4-1.8c-0.1,0-0.2,0.1-0.2,0.1c-0.2,0-0.9,0.1-2.1,0.1
+		c-15.2-0.3-25.5-0.3-31-0.1c-0.4,0-0.7,0-0.9-0.1c-5.5,0.2-10.9,0.8-16.3,1.8c-2.1,0.4-3.6,1-4.4,1.7c-1.1,0.9-1.5,2.2-1.4,3.6
+		c0.1,1.5,0.8,2.6,2,3.4c0.6,0.3,0.9,0.6,1.2,0.9c0.2-0.2,0.6-0.4,1.1-0.5c1.4-0.4,3.6-0.6,6.6-0.8c7.3-0.4,14.3-0.5,21-0.5
+		c1.7,0,3.2,0.1,4.4,0.2h0.2c1.6,0,2.8,0,3.6-0.1c0.9,0,1.8,0,2.5,0.1c1.1-0.2,2.5-0.2,4-0.2c6.7,0,13.7,0.1,21,0.5
+		c3,0.2,5.2,0.4,6.6,0.8c0.5,0.2,0.9,0.3,1.1,0.5c0.2-0.3,0.6-0.6,1.2-0.9c1.2-0.8,1.9-2,2-3.4c0.1-1.5-0.4-2.7-1.4-3.6
+		C-373.3,137.6-374.8,137-376.9,136.6z M-443.4,157.8l0.7,0.1c1.1,0.3,2.5,1,4.1,2.3c1,0.8,1.9,1.7,2.7,2.6c0.9,1.1,1.9,2.7,3.1,5
+		l2.6,5.7c0.2,0.6,0.5,1.1,0.7,1.6c2.8,2,5.5,3.3,8.1,4.1c2.3,0.7,5,1.1,8.2,1.1c0.9,0.1,1.4,0.2,1.6,0.3c0.1,0,0.2,0.1,0.2,0.2h2.1
+		c0.1-0.1,0.2-0.1,0.2-0.2c0.2-0.1,0.7-0.2,1.6-0.3c3.2,0,6-0.4,8.2-1.1c3.8-1.1,8-3.6,12.5-7.6c2.2-2,3.9-3.8,5-5.5
+		c0.6-0.9,1.5-2.3,2.5-4.3c2.2-4.1,3.3-7.5,3.4-10.3v-2c0-0.4,0-0.7,0.1-1.1c-0.3,0-0.7,0-1.1-0.1c-6.4-0.5-15.9-0.9-28.5-1.1
+		c-0.3,0.3-0.9,0.4-1.8,0.4l-7.5-0.3c-0.8,0-1.3,0-1.5-0.1c-12.3,0.3-21.5,0.7-27.8,1.1c-0.4,0-0.7,0.1-1.1,0.1
+		c0.1,0.3,0.1,0.7,0.1,1.1v2C-444.8,153.3-444.3,155.4-443.4,157.8z M-698.4,434c2.5,4.4,5.9,7.4,10.3,8.8c0.3,0.1,0.6,0.2,0.8,0.4
+		c10.2-2.8,21.3-5.2,33.5-7c10.6-1.6,23.8-3,39.6-4.3c7-0.6,12.6-0.8,16.8-0.7l6.5-0.4c4.4-0.2,8.3-0.2,11.6-0.1l1.5-6.3
+		c0.5-2.1,1.2-3.6,2-4.4c0.8-0.7,2.4-1.4,4.9-1.9c1.9-0.4,5.4-1.3,10.4-2.7c4.4-1.3,7.8-2.1,10.4-2.4c2.2-0.3,3.7-0.6,4.5-0.9
+		c0.9-0.4,2-1.1,3.3-2.3c4.8-4,9.4-8.3,13.8-12.7c1.4-1.5,2.6-2.5,3.5-3c1-0.6,2.6-1.1,4.9-1.6l1.6-0.4l-11.4-2.1
+		c-0.4,0-0.7-0.1-1.1-0.1c-11.3-1.4-25-2.6-41.1-3.7c-0.3,0.1-0.8,0.2-1.4,0.2l-27.3-0.1h-1.6c-0.4,0-0.8,0-1.1,0
+		c-1,0.1-2.1,0.1-3.1,0.2l-37.8,3.4c-0.4,0-0.9,0.1-1.3,0.2c-0.5,0.1-1,0.2-1.5,0.2l-37.4,7.1c-0.6,0.2-1.2,0.3-1.7,0.5
+		c-0.2,0.1-0.4,0.1-0.7,0.2c-0.8,0.2-1.6,0.4-2.3,0.6c-0.1,0-0.2,0.1-0.3,0.1c-0.8,0.7-1.6,1.3-2.3,1.8c-1.5,1.1-2.5,1.8-2.8,2.3
+		c-0.4,0.6-0.7,0.9-0.8,1c-0.2,0.2-0.4,0.3-0.5,0.4c-1.2,1.6-2.1,3.4-3,5.3c-1.5,3.6-2.4,7.3-2.6,11.2
+		C-701.7,425.7-700.7,430.2-698.4,434z M-401.8,399.7c-0.7,1.9-1.2,3.2-1.7,4c-0.4,0.7-1,1.2-1.5,1.7c0.6,0.4,1.1,0.6,1.4,0.7
+		c0.7,0,1.3-0.3,2-1c2.1-1.8,3.4-2.9,4.2-3.3c1.2-0.8,1.9-1.3,2.1-1.5l0.8-1.1c0.3-0.4,0.6-0.7,0.9-0.8c0.4-0.2,0.9-0.1,1.3,0.3
+		c0.1,0.1,0.2,0.2,0.2,0.2c0.2-0.1,0.4-0.2,0.7-0.2c0.5-0.1,1.2,0.1,2.2,0.5c0.1-0.8,0.2-1.9,0.5-3.1c0.4-1.9,0.6-3.3,0.6-4.2
+		c0-1.8-0.6-4.3-1.7-7.5c-0.9-2.5-1.6-4.4-2.3-5.8c-1-2.1-2-3.8-3.3-5.2c-1.1-1.2-2.9-2.8-5.4-4.6c-2.2-1.5-3.9-2.6-5-3.1
+		c-1.9-0.9-4.2-1.5-7.2-1.8c-8.9-1-16.5,0.6-22.9,4.6c-3.4,2.2-6.2,5-8.4,8.4c-2,3.2-3.1,6.5-3.5,9.9c0.3,0.2,0.5,0.5,0.8,0.9
+		c0.8,1.2,1.7,2.8,2.7,4.9l3.9,7.9c2.1-0.9,3.4-1.5,4-1.7l1-0.3c0-0.1,0-0.2-0.1-0.3l-0.5-2.4c-0.5-3-0.1-6,1.2-9
+		c1.3-3,3.2-5.4,5.7-7.2c2.5-1.8,5.3-3,8.5-3.4c3.1-0.5,6.2-0.3,9.3,0.6c1.9,0.6,3.4,1.3,4.5,2.2c1.2,0.9,2,1.9,2.4,3.1
+		c0.7,0.7,1.3,1.4,1.7,2.1c1.1,1.7,1.7,4.2,2,7.4c0.2,2,0.1,3.6-0.1,4.7C-401,397.1-401.3,398.3-401.8,399.7z M-695.1,116.3
+		c-1.3,3.8-2.3,7.6-3.1,11.6c-0.3,1.5-0.5,3-0.7,4.3c0.3,0.1,0.7,0.4,1.1,0.8c0.7,0.7,1.8,2.1,3.1,4c1.3,1.8,2.4,3.1,3.3,3.9
+		c0.7,0.6,1.3,1,1.6,1.4c0.4,0.4,0.9,0.9,1.5,1.7c0.8,0.9,2.1,1.9,3.9,3.1c1.8,1.2,3,2,3.7,2.6c5-1.2,10.3-2.4,15.8-3.4
+		c0,0-0.1-0.1-0.1-0.2c-0.2,0-0.5,0-0.7,0.1l-15.8-14.6c-4.6-4.5-8.9-9.3-12.8-14.4L-695.1,116.3z M-698.4,190.4
+		c2.5,4.4,5.9,7.4,10.3,8.8c0.3,0.1,0.6,0.2,0.8,0.3c10.2-2.8,21.3-5.1,33.5-6.9c10.6-1.6,23.8-3,39.6-4.3c0.3,0,0.6,0,0.9-0.1
+		c6.6-0.5,11.9-0.7,15.9-0.7l6.5-0.4c6.8-0.3,12.3-0.2,16.6,0.4c0.3,0,0.7,0,1,0.1l12.4,0.7c15.8,1.3,29,2.7,39.6,4.3l29.7,5.9
+		c1.3,0.3,2.6,0.7,3.9,1c0.2-0.1,0.5-0.2,0.8-0.3c4.4-1.4,7.8-4.4,10.3-8.8c2.2-3.9,3.2-8.3,3-13.4c-0.2-3.9-1-7.6-2.6-11.2
+		c-1.2-2.7-2.7-5.2-4.5-7.4c-0.6-0.7-1.3-1.4-2-2.1c-0.2-0.2-0.4-0.4-0.5-0.6c-0.2,0-0.3-0.1-0.5-0.2c-0.7-0.2-1.4-0.4-2.2-0.6
+		c-6.6-1.8-13.6-3.5-20.9-4.9c-0.1,0.6-0.7,1.1-1.6,1.7c-1.9,1-3.4,2.2-4.5,3.4c-1.4,1.6-2,3.4-1.8,5.2c0.1,0.6,0.3,1.3,0.6,2.1
+		c0.4,1.1,0.7,1.8,0.8,2.1c0.4,1.4,0.4,2.9,0,4.4c-0.4,1.5-1.2,2.8-2.2,4c-0.9,1.1-1.9,1.9-3.1,2.4c-1.2,0.5-2.4,0.7-3.7,0.5
+		c-1.3-0.2-2.4-0.6-3.4-1.3c-1-0.7-1.8-1.7-2.3-2.8c-0.6-1.2-0.8-2.4-0.7-3.6c0.1-1.2,0.7-2.9,1.8-5c1.1-2.3,1.8-3.9,2-5
+		c0.2-1.5,0.1-2.9-0.4-4.2c-0.4-1-1-2.1-1.9-3.1c-0.4-0.5-1.3-1.4-2.6-2.7c-0.7-0.7-1-1.4-1.1-1.9c-9-1.1-19.7-2.2-31.9-3.1
+		c0,0.1,0,0.1,0,0.2c-0.2,0.4-0.7,0.7-1.5,0.9c-1.1,0.3-2.1,0.8-2.8,1.4c-0.9,0.7-1.5,1.6-1.7,2.5c-0.1,0.5-0.1,1.1,0.1,1.8
+		c0.2,0.8,0.3,1.4,0.3,1.7c0.4,2.3,0,4.2-0.9,5.6c-1,1.5-2.6,2.4-4.8,2.7c-2,0.3-3.8,0.1-5.2-0.8c-0.8-0.4-1.4-1-2-1.7
+		c-0.6-0.8-0.9-1.6-0.9-2.5c0-0.2,0-0.6-0.1-1.2c0-0.5-0.1-0.9-0.3-1.1c-0.5-0.7-1.3-1-2.5-0.9c-0.8,0-1.6,0.3-2.3,0.7
+		c-0.7,0.5-1.2,1.1-1.2,1.8c-0.1,0.6,0.3,1.6,1.2,2.8c1.2,1.8,1.8,3.5,1.8,5c0,2.3-1,4.4-3.3,6.2c-2.3,1.7-4.8,2.5-7.5,2.4
+		c-2.8-0.2-5.3-1.3-7.3-3.2c-1.1-1.2-1.7-2.3-2-3.3c-0.3-1.2-0.1-2.7,0.7-4.5c0.7-1.9,1.7-3.6,2.7-5.2c0.9-1.3,1.5-2.2,1.7-2.8
+		c0.5-1.1,0.5-2.4,0.1-3.7c-0.4-1.3-1.1-2.3-2.1-3c-0.6-0.4-1.4-0.8-2.3-1.1c-0.6-0.2-1.4-0.4-2.6-0.7c-0.4-0.1-0.7-0.3-0.8-0.4
+		c-13.9,0.9-25.9,2.1-35.9,3.3c-4.8,0.6-9.5,1.3-14.1,2c-0.5,0.5-1.5,1-2.9,1.5c-0.2,0.2-0.5,0.4-1,0.7c-0.3,0.1-0.5,0.2-0.8,0.2
+		c0,0-0.1,0.1-0.2,0.1c-0.5,0.2-1.2,0.6-2.1,1c-1.7,1-3,2.8-4,5.3c-0.6,1.5-0.9,2.8-0.8,4.1c0,0.9,0.3,1.9,0.8,3.1
+		c0.7,1.9,1.2,2.9,1.2,3.1c0.5,1.7,0.6,3.4,0.2,5.2c-0.4,1.8-1.1,3.3-2.1,4.7c-0.8,1-1.8,1.9-2.8,2.7c-0.8,0.7-1.7,1.2-2.5,1.5
+		c-1.2,0.5-2.5,0.6-4.2,0.4c-1.6-0.2-2.8-0.5-3.8-1.1c-0.9-0.6-1.6-1.4-2.2-2.6c-0.5-1-0.8-2.1-0.8-3.3c0-2.1,0.6-4.3,2-6.4
+		c1.2-1.9,1.9-2.9,2-3.1c1-1.9,1.2-3.7,0.6-5.5c-0.3-0.9-0.7-1.7-1.4-2.4c-0.7-0.7-1.5-1.2-2.4-1.4c-0.7-0.2-1.5-0.2-2.5-0.1
+		c-0.6,0.1-1.4,0.3-2.5,0.5c-1,0.3-1.7,0.2-2.1-0.1c-0.1,0.1-0.1,0.1-0.2,0.2c-1.5,1.6-2.9,3.4-4.1,5.4c-0.7,1.2-1.3,2.4-1.9,3.7
+		c-1.5,3.6-2.4,7.3-2.6,11.2C-701.7,182-700.7,186.5-698.4,190.4z M232.6,207.9c-0.2,1.1-0.2,2.3-0.2,3.6c0,1,0,2.6,0.1,4.6
+		c-0.1,4.6-0.7,9-2,13.2c-0.6,1.8-1.2,3.5-2,5c-2,3.8-4.9,6.9-8.8,9.1c-3.9,2.3-8,3.4-12.3,3.3c-1.1,0-1.8,0.1-2.1,0.2
+		c-0.4-0.2-1.1-0.2-2.1-0.2c-4.3,0.1-8.4-1-12.3-3.3c-3.9-2.3-6.9-5.3-8.8-9.1c-0.8-1.6-1.5-3.3-2-5c-1.3-4.2-1.9-8.6-2-13.2
+		c0-2.1,0.1-3.6,0.1-4.6c0-1.3-0.1-2.5-0.2-3.6c0,0,0,0.1-0.1,0.1v-1.5l-0.1-0.2V206c0-0.1,0-0.2-0.1-0.2c0-0.1,0-0.2-0.1-0.2
+		c0-0.1-0.1-0.1-0.1-0.2c0-0.5-0.4-0.8-1.1-0.9c-0.4-0.1-0.9,0-1.6,0.2c-0.2,0.1-2.2,0.9-6,2.4c-2.4,1-4.5,1.6-6.2,1.6
+		c-1.5,0.1-2.8-0.1-4.2-0.6c-1.3-0.5-2.5-1.2-3.6-2c-2.3-1.6-3.9-3.7-4.8-6.1c-1-2.7-1.1-5.3-0.1-7.7c0.5-1.4,1.4-2.8,2.7-4.1
+		c0.8-0.9,2.1-2.1,3.7-3.4l5.8-4.8c0.8-0.7,1.2-1.3,1.1-1.8v-0.2c0.1-0.6-0.3-1.2-1.1-1.8l-5.8-4.8c-1.7-1.3-2.9-2.5-3.7-3.4
+		c-1.3-1.3-2.2-2.7-2.7-4.1c-0.9-2.5-0.9-5,0.1-7.7c0.9-2.5,2.6-4.5,4.8-6.1c1.1-0.9,2.3-1.5,3.6-2c1.3-0.5,2.7-0.7,4.2-0.6
+		c1.7,0,3.8,0.6,6.2,1.6c3.8,1.5,5.8,2.3,6,2.4c0.7,0.2,1.2,0.3,1.6,0.2c0.7-0.2,1-0.5,1.1-0.9c0,0,0.1-0.1,0.1-0.2
+		c0-0.1,0.1-0.2,0.1-0.2c0-0.1,0.1-0.2,0.1-0.2v-0.2c0-0.1,0.1-0.2,0.1-0.2v-1.5c0,0,0.1,0,0.1,0.1c0.2-1.1,0.2-2.3,0.2-3.6
+		c0-1,0-2.6-0.1-4.6c0.1-4.6,0.7-9,2-13.2c0.6-1.8,1.2-3.5,2-5c2-3.8,4.9-6.9,8.8-9.1c3.9-2.3,8-3.4,12.3-3.3c1.1,0,1.8-0.1,2.1-0.2
+		c0.4,0.2,1.1,0.2,2.1,0.2c4.3-0.1,8.4,1,12.3,3.3c3.9,2.3,6.9,5.3,8.8,9.1c0.8,1.6,1.5,3.3,2,5c1.3,4.2,1.9,8.6,2,13.2
+		c0,2.1-0.1,3.6-0.1,4.6c0,1.3,0.1,2.5,0.2,3.6c0,0,0-0.1,0.1-0.1v1.5c0,0.1,0.1,0.2,0.1,0.2v0.2c0,0.1,0,0.2,0.1,0.2
+		c0,0.1,0,0.2,0.1,0.2c0,0.1,0.1,0.1,0.1,0.2c0,0.5,0.4,0.8,1.1,0.9c0.4,0.1,0.9,0,1.6-0.2c0.2-0.1,2.2-0.9,6-2.4
+		c2.4-1,4.5-1.6,6.2-1.6c1.5-0.1,2.8,0.1,4.2,0.6c1.3,0.5,2.5,1.2,3.6,2c2.3,1.6,3.9,3.7,4.8,6.1c1,2.7,1.1,5.3,0.1,7.7
+		c-0.5,1.4-1.4,2.8-2.7,4.1c-0.8,0.9-2.1,2.1-3.7,3.4l-5.8,4.8c-0.8,0.7-1.2,1.3-1.1,1.8v0.2c-0.1,0.6,0.3,1.2,1.1,1.8l5.8,4.8
+		c1.7,1.3,2.9,2.5,3.7,3.4c1.3,1.3,2.2,2.7,2.7,4.1c1,2.5,0.9,5-0.1,7.7c-0.9,2.5-2.6,4.5-4.8,6.1c-1.1,0.9-2.3,1.5-3.6,2
+		c-1.3,0.5-2.7,0.7-4.2,0.6c-1.7,0-3.8-0.6-6.2-1.6c-3.8-1.5-5.8-2.3-6-2.4c-0.7-0.2-1.2-0.3-1.6-0.2c-0.7,0.2-1,0.5-1.1,0.9
+		c0,0-0.1,0.1-0.1,0.2c0,0.1-0.1,0.2-0.1,0.2c0,0.1-0.1,0.2-0.1,0.2v0.2l-0.1,0.2L232.6,207.9C232.7,207.9,232.6,207.9,232.6,207.9z
+		 M241.6,160.7c0,1,0.3,2,0.8,2.8c0.5,0.9,1.2,1.5,2,2c1.6,0.9,3.4,1,5.4,0.3c1.1-0.4,1.8-0.9,2.3-1.5c0.6-0.8,0.8-2,0.7-3.6
+		c-0.1-0.9-0.2-1.7-0.5-2.3c-0.4-0.7-1.1-1.4-2.1-2.1c-1.7-1.1-3.1-1.6-4.2-1.4c-0.6,0.1-1.2,0.4-1.8,0.8
+		C242.5,157,241.6,158.6,241.6,160.7z M241.6,195.1c0,2.1,0.9,3.7,2.7,5c0.6,0.4,1.2,0.7,1.8,0.8c1.1,0.2,2.5-0.3,4.2-1.4
+		c1-0.7,1.7-1.4,2.1-2.1c0.2-0.6,0.4-1.3,0.5-2.3c0.1-1.6-0.2-2.8-0.7-3.6c-0.5-0.7-1.2-1.2-2.3-1.5c-2-0.7-3.8-0.6-5.4,0.3
+		c-0.9,0.5-1.5,1.2-2,2C241.9,193.1,241.6,194.1,241.6,195.1z M168.7,195.1c0-1-0.3-2-0.8-2.8c-0.5-0.9-1.2-1.5-2-2
+		c-1.6-0.9-3.4-1-5.4-0.3c-1.1,0.4-1.8,0.9-2.3,1.5c-0.6,0.8-0.8,2-0.7,3.6c0.1,0.9,0.2,1.7,0.5,2.3c0.4,0.7,1.1,1.4,2.1,2.1
+		c1.7,1.1,3.1,1.6,4.2,1.4c0.6-0.1,1.2-0.4,1.8-0.8C167.8,198.8,168.7,197.2,168.7,195.1z M168.7,160.7c0-2.1-0.9-3.7-2.7-5
+		c-0.6-0.4-1.2-0.7-1.8-0.8c-1.1-0.2-2.5,0.3-4.2,1.4c-1,0.7-1.7,1.4-2.1,2.1c-0.2,0.6-0.4,1.3-0.5,2.3c-0.1,1.6,0.2,2.8,0.7,3.6
+		c0.5,0.7,1.2,1.2,2.3,1.5c2,0.7,3.8,0.6,5.4-0.3c0.9-0.5,1.5-1.1,2-2C168.4,162.7,168.7,161.7,168.7,160.7z M222.5,144v-0.4
+		c0.1-0.2,0.2-0.5,0.2-0.9c0.3-2.5,0.2-5.4-0.5-8.8c-0.2-1.2-0.5-2.1-0.7-2.6c-0.6-1.6-1.8-3.6-3.7-5.9c-1.2-1.4-2.2-2.4-2.9-2.8
+		c-1-0.7-2.5-1.2-4.3-1.5c-3.2-0.6-6.3-0.5-9.3,0.1c-3.2,0.7-6,2-8.2,3.9c-0.8,0.7-1.6,1.5-2.3,2.4c-0.7,0.9-1.3,1.9-1.7,3
+		c-0.4,1-0.7,2.6-0.9,4.9c-0.1,2.2-0.2,4.1-0.2,5.9c0,0.1-0.1,0.2-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2c0,0.1-0.1,0.2-0.1,0.2
+		c0,0.1,0,0.2-0.1,0.2c0,0.1-0.1,0.2-0.1,0.2c0,0.1-0.1,0.1-0.1,0.2v0.9c0,0.1-0.1,0.2-0.1,0.2v2c0,0.1,0,0.2-0.1,0.2v6.5
+		c0,0.1-0.1,0.1-0.1,0.2v57.3c0,0.1,0,0.1,0.1,0.2v2.7c0,0.1,0.1,0.2,0.1,0.2v0.7c0,0.1,0.1,0.2,0.1,0.2v0.6
+		c-0.3,1.9-0.3,4.3,0.1,7.2c0.3,2.2,0.7,3.9,1.2,5c0.6,1.3,1.5,2.6,2.7,3.9c1.1,1.4,2.2,2.5,3.3,3.2c1.5,1,3.8,1.8,6.6,2.3
+		c5.3,0.9,9.6,0.6,12.8-1.1c3.4-1.7,5.8-4.7,7.2-8.9c0.9-2.5,1.2-5.1,1.1-7.9c0-0.1,0-0.3-0.1-0.4v-0.3c0-0.1,0-0.2,0.1-0.2v-3.1
+		c0,0,0.1-0.1,0.1-0.2v-51.5c0-0.1,0-0.2-0.1-0.2v-14.6c0-0.1-0.1-0.2-0.1-0.2v-3.1C222.6,144.1,222.5,144.1,222.5,144z
+		 M-699.1,141.2c0.7,5.1,2.8,8.9,6.1,11.6c0,0,0,0,0.1,0.1c0.1,0.1,0.1,0.2,0.2,0.2c0.1,0,0.2-0.1,0.3-0.1c0.6-0.2,1.2-0.4,1.7-0.5
+		c2-0.6,4.1-1.2,6.1-1.7c0,0-0.1-0.1-0.2-0.1c-2.2-1.5-4.1-3-5.7-4.6c-0.6-0.5-1.1-1-1.4-1.5l-2.8-2.9c-1.2-1.3-2.7-3.3-4.5-6.1
+		C-699.4,137.6-699.3,139.5-699.1,141.2z M345.7,452.1c2.8-3.5,6.1-6.4,9.8-8.8c-0.2-0.2-0.4-0.4-0.7-0.6c-0.7-0.7-1.4-1.4-2-2.2
+		c-0.4-0.6-0.6-1.1-0.8-1.5l-0.8-1.8c-0.1-0.1-0.2-0.4-0.2-0.7H313c-0.7-0.1-1.4-0.1-2.1-0.2v17.8c0.1,0,0.2,0,0.2,0h8.5v-0.2h24.7
+		C344.8,453.2,345.3,452.6,345.7,452.1z M-655.5,68.3c0.1,0.1,0.2,0.2,0.3,0.3c4.3,3.7,7.5,6.5,9.7,8.4c3.8,3.3,6.9,6.2,9.4,8.6
+		c0.4,0.4,0.8,0.8,1.2,1.2c1.1,1.1,2.2,2.2,3.4,3.3c0,0,0.1,0.1,0.1,0.1c0.1,0.1,0.2,0.2,0.4,0.4c-6.8,8.1-12.6,15.8-17.4,23
+		c-6.7,10.1-12.1,20-16,29.9c-5.2-4.6-10.5-9.6-15.9-14.9c-2.3-2.2-3.9-3.8-5-5c-1.7-1.9-3.7-4.3-5.9-7.2l-2.6-3.2c0,0,0,0-0.1-0.1
+		c2.8-7.2,6.5-14,11.2-20.5C-675.2,82.3-666.1,74.2-655.5,68.3z M-669.2,84.3c0.1,0.2,0.3,0.5,0.6,0.8c0.6,0.4,1.2,0.6,2,0.5
+		c0.7,0,1.4-0.3,1.9-0.8c0.7-0.8,0.9-1.7,0.7-2.7c-0.2-0.5-0.4-0.9-0.8-1.2c-0.4-0.3-0.8-0.5-1.3-0.5c-1.2,0.2-2.1,0.8-2.8,2
+		C-669.4,83-669.5,83.7-669.2,84.3z M-672.6,105.2c0,0.5,0.3,1,0.8,1.4c0.7,0.6,1.4,0.8,2.1,0.7c0.3,0,0.9-0.2,1.8-0.5
+		c0.7-0.4,1.2-0.8,1.4-1.1c0.4-0.6,0.4-1.3,0.2-2.1c0-0.4-0.2-0.7-0.5-1.1c-0.7-0.8-1.5-1-2.6-0.8c-0.7,0.2-1.5,0.6-2.3,1.4
+		C-672.3,103.8-672.6,104.5-672.6,105.2z M-442.4,184.6c-0.4,0.4-0.9,0.4-1.4,0.1l-0.1-0.1c-0.1,0-0.2,0-0.3,0.1
+		c-0.2,0-0.4,0-0.6,0.1c-0.2,0-0.4,0-0.5,0.1h-6.5c-1.9,0-3.8-0.1-5.7-0.1c-0.1,0-0.2,0-0.4-0.1c-0.2,0-0.5,0.1-0.8,0.1h-12
+		c-0.2,0-0.4,0-0.6-0.1c-0.2,0.9-0.4,1.8-0.7,2.7c-1.2,3.6-3.1,6.7-5.8,9.4c-0.9,1-1.9,1.8-3,2.5c0,0-0.1,0-0.2,0.1
+		c-0.2,0-0.3,0.1-0.5,0.2c-0.2,0-0.4,0.1-0.6,0.1c-0.2,0-0.3,0.1-0.5,0.2c-0.1,0-0.2,0.1-0.3,0.2l-0.2,0.2c0,0.1-0.1,0.2-0.1,0.2
+		c-0.1,0-0.3,0.1-0.4,0.1c0,0-0.1,0.1-0.2,0.1c0,0-0.1,0.1-0.2,0.1c-0.1,0.1-0.2,0.2-0.2,0.2c-0.1,0-0.1,0-0.2,0.1
+		c1,0.5,1.8,0.9,2.3,1.2c0.9,0.4,1.6,0.8,2.1,1.2c0.1,0,0.1,0,0.2-0.1c1.2,1,2.3,2.1,3.2,3.3c1.4,1.9,2.6,4.2,3.6,6.9
+		c1,2.7,1.7,5.3,2.1,7.8h0.8c0,0,0-0.1,0-0.1h8.6c0.1-0.1,0.2-0.1,0.3-0.2c0.2,0,0.4,0,0.6-0.1V221h51.6c2.6,0,5.2,0.1,7.8,0.1
+		c0.4,0,0.8,0.1,1.2,0.1c0.3,0,0.6,0.1,0.8,0.1c0.2,0,0.3,0,0.5,0.1h0.1l0.8-0.2c0.7-0.2,1.3-0.5,1.9-0.9c0.6-0.5,1-1.1,1.1-1.8
+		c0.2-0.7,0.1-1.4-0.2-2.1c-0.3-0.7-0.8-1.3-1.4-1.5l-1.5-0.6c-0.2-0.1-0.4-0.2-0.5-0.3h-3.8c-2.7,0-5.5-0.1-8.2-0.1
+		c-0.6,0-1.1-0.1-1.7-0.1c-0.2,0-0.5,0-0.7-0.1c-0.1,0-0.2-0.1-0.4-0.1c-0.2,0-0.3-0.1-0.4-0.1c-0.2-0.1-0.3-0.1-0.5-0.2
+		c-0.2-0.1-0.3-0.2-0.4-0.2l-0.2-0.2c-0.1-0.1-0.1-0.2-0.2-0.2c0-0.1-0.1-0.2-0.1-0.2c0-0.1,0-0.2,0.1-0.2v-0.2
+		c0.1-0.1,0.2-0.2,0.2-0.2l0.2-0.2c0.1,0,0.2-0.1,0.3-0.1c0,0,0.1-0.1,0.1-0.1c0.1,0,0.2,0,0.4-0.1c0.1,0,0.3-0.1,0.4-0.1
+		c0.1,0,0.2-0.1,0.4-0.1c0.2,0,0.5,0,0.7-0.1c0.6,0,1.2,0,1.7-0.1h8.2V211h4.7c0.1-0.3,0.3-0.6,0.8-0.9c0.2-0.2,0.6-0.4,1.1-0.7
+		c0.6-0.4,0.9-0.9,0.9-1.7c0.1-0.7,0-1.3-0.5-1.8c-0.2-0.3-0.5-0.5-0.9-0.8c-0.2-0.2-0.6-0.4-1.1-0.7c-0.2-0.1-0.4-0.3-0.5-0.4h-7.1
+		c-1.9,0-3.7,0-5.5-0.1c-1,0-2-0.1-3-0.1c-0.3,0-0.6-0.1-0.8-0.1c-0.1,0-0.3-0.1-0.4-0.1c-0.1,0-0.2,0-0.4-0.1
+		c-0.2,0-0.3-0.1-0.5-0.1c-0.1-0.1-0.2-0.2-0.2-0.2l-0.2-0.2c0-0.1,0-0.2-0.1-0.2c0-0.1,0-0.1-0.1-0.2c0-0.1,0.1-0.2,0.1-0.2
+		c0-0.1,0.1-0.2,0.1-0.2c0.1-0.1,0.2-0.2,0.2-0.2c0.1-0.1,0.2-0.1,0.2-0.2c0.2-0.1,0.3-0.1,0.5-0.2c0.1,0,0.2-0.1,0.4-0.1
+		c0.2,0,0.3-0.1,0.4-0.1c0.3,0,0.6-0.1,0.8-0.1c1,0,2,0,3-0.1h5.5v-0.1h7.5c0.2,0,0.3,0,0.5,0.1c0.2,0,0.3,0.1,0.5,0.2
+		c0.1,0,0.1,0,0.2,0.1c0,0,0.1,0,0.1-0.1c0.2-0.2,0.6-0.4,1.1-0.6c0.6-0.3,1-0.8,1.2-1.4c0.3-0.6,0.4-1.2,0.3-1.9
+		c-0.2-1.4-1-2.3-2.4-2.8l-1.6-0.5c-0.3-0.1-0.5-0.3-0.6-0.4h-15c-0.2,0-0.5-0.1-0.7-0.1c-0.1,0-0.2,0-0.4-0.1
+		c-0.1,0-0.2-0.1-0.3-0.1c-0.2,0-0.3-0.1-0.5-0.2c-0.1-0.1-0.2-0.1-0.3-0.2c0-0.1-0.1-0.2-0.1-0.2c0-0.1-0.1-0.2-0.1-0.2
+		c0-0.1,0-0.2-0.1-0.2c0-0.1,0.1-0.1,0.1-0.2c0-0.1,0-0.2,0-0.2c0-0.1,0.1-0.2,0.1-0.2c0-0.1,0.1-0.2,0.2-0.2c0.1,0,0.2-0.1,0.2-0.1
+		c0,0,0.1-0.1,0.2-0.1c0.1,0,0.2-0.1,0.3-0.1c0.1,0,0.2,0,0.3-0.1c0.1,0,0.2-0.1,0.4-0.1h0.7v-0.1h15.1c0.1,0,0.2,0.1,0.4,0.1
+		c0.2,0,0.4,0.1,0.5,0.1l0.5,0.2l0.1,0.1c0.1-0.1,0.2-0.2,0.3-0.3l1.5-0.8c0.4-0.2,0.7-0.4,0.9-0.8c0.6-0.7,0.8-1.6,0.8-2.6
+		c0-1-0.3-1.8-0.9-2.5c-0.2-0.3-0.5-0.7-0.9-1.1c0,0,0-0.1-0.1-0.1h-0.2c-0.3,0-0.6,0.1-0.9,0.1c-0.4,0-0.8,0-1.2,0.1h-13
+		c0,0-0.1,0.1-0.1,0.1c-0.4,0.1-0.7,0.2-1.1,0.2l-1.9-0.1c-0.3,0-0.5-0.1-0.7-0.2h-10.3c-1.1,0-2.1-0.1-3.1-0.1
+		c-0.3,0-0.6-0.1-0.9-0.1c-0.2,0-0.3,0-0.4-0.1c-0.1,0-0.3-0.1-0.4-0.1c0,0-0.1-0.1-0.1-0.1c-0.2-0.1-0.3-0.1-0.5-0.2
+		c0,0,0-0.1-0.1-0.1c-0.1-0.1-0.2-0.2-0.4-0.4c-0.1-0.1-0.1-0.2-0.2-0.3c-0.2-0.5-0.4-0.8-0.4-1.1l0.1-0.5c-0.1-0.2-0.2-0.4-0.3-0.6
+		c-0.3-0.7-0.6-1.7-0.9-3c-0.2-0.1-0.4-0.2-0.5-0.4v-0.2c0-0.1-0.1-0.2-0.1-0.2c-0.1-0.1-0.1-0.2-0.2-0.2v-0.2c0-0.1,0-0.2-0.1-0.2
+		v-0.2c0-0.1-0.1-0.2-0.1-0.2l-0.2-0.2c0-0.1,0-0.2-0.1-0.2c0-0.1-0.1-0.2-0.1-0.2c-0.1-0.1-0.1-0.2-0.2-0.2c0-0.1,0-0.2-0.1-0.2
+		v-0.2c0-0.1-0.1-0.2-0.1-0.2c-0.1-0.1-0.1-0.2-0.2-0.2c0-0.1,0-0.2-0.1-0.2c0,0-0.1-0.1-0.1-0.2c0-0.1-0.1-0.2-0.1-0.2
+		c0-0.1,0-0.2-0.1-0.2c0-0.1-0.1-0.2-0.1-0.2c-0.1,0-0.1-0.1-0.2-0.2c0-0.1,0-0.2-0.1-0.2c0-0.1-0.1-0.2-0.1-0.2
+		c0-0.1-0.1-0.2-0.1-0.2c0,0,0-0.1-0.1-0.2c0,0-0.1-0.1-0.1-0.2c0,0,0.1,0.1,0.1,0.1c-0.1-0.1-0.1-0.2-0.2-0.3v-0.1
+		c0-0.1-0.1-0.2-0.1-0.2c0,0-0.1-0.1-0.1-0.2c-0.5-0.9-1-1.9-1.5-2.9c-0.5-1-0.9-1.7-1.2-2.1c-0.2-0.2-0.4-0.3-0.6-0.5
+		c-1.9-1.8-3.5-2.8-4.8-3.1c-0.6-0.1-1-0.2-1.3-0.4c0,0-0.1,0-0.1-0.1h-0.2v0.1c-0.2,0-0.4,0.1-0.5,0.1v0.1
+		c-0.1-0.2-0.2-0.4-0.3-0.6c-0.2,0-0.5,0.1-0.7,0.2c-0.8,0.3-1.5,0.7-2.1,1.4c-0.6,0.7-0.8,1.5-0.7,2.3c0,0.6,0.3,1.3,0.9,2.1
+		l3.3,5.5c1.4,2.4,2.3,4.1,2.7,5.2c0.7,2.2,0.8,4.1,0.3,5.8C-441.8,183.9-442.1,184.4-442.4,184.6z M206.1,151.4
+		c0.8-0.2,1.5-0.5,2.3-1.1c0.8-0.6,1.4-1.4,2-2.4c0.3-0.6,0.5-1.1,0.5-1.5c0-0.5,0-1.1-0.2-1.8l-0.2-0.8l-1.5-2.2
+		c-0.6-0.7-1.2-1.3-1.8-1.5c-0.5-0.2-1.3-0.4-2.5-0.4c-1.1,0-1.9,0.1-2.5,0.4c-1,0.5-1.8,1.4-2.3,2.7c-0.2,0.7-0.4,1.3-0.4,1.5v1.7
+		c0,0.9,0,1.4,0.1,1.5l0.8,1.8c0.6,1.1,1.6,1.8,3,2.1c0.4,0.1,0.9,0.1,1.7,0.1C205.4,151.5,205.8,151.5,206.1,151.4z M210.6,189.8
+		c-0.7-0.4-1.3-0.5-1.8-0.2c-0.5,0.2-0.9,0.5-1.2,1.1c-0.7,1.1-0.8,2.3-0.2,3.3c0.2,0.4,0.5,0.6,0.8,0.8c-0.2,0.7-0.2,1.2-0.2,1.6
+		c0,0.4,0.1,0.8,0.2,1.1c0.2,0.3,0.4,0.5,0.8,0.7c0.7,0.3,1.3,0.3,1.7,0.1c0.3-0.2,0.5-0.7,0.7-1.4c-0.2-0.3-0.2-0.9-0.2-1.8
+		c0-0.1,0-0.2-0.1-0.2c0.2-0.2,0.5-0.4,0.7-0.6c0.4-0.4,0.6-0.6,0.7-0.8c0.2-0.6,0.1-1.3-0.5-2.2
+		C211.6,190.6,211.1,190.2,210.6,189.8z M-369.7,254.6c0.9,0.1,2.7,0,5.3-0.1c4.6-0.3,9,0.3,13.3,1.6c4.5,1.4,8.3,3.6,11.4,6.6
+		c1.3,1.2,3.1,3.3,5.4,6.2c0.9,1.1,1.6,2.1,2,3c0,0.2-0.1,0.3-0.1,0.5c-0.1,0.5,0.1,1.2,0.8,2.2c0.9,1.5,1.5,3.2,1.7,5
+		c0.2,1.8,0,3.6-0.6,5.2c-0.6,1.7-1.5,3.1-2.8,4.4c-1.3,1.3-2.8,2.2-4.4,2.8c-0.9,0.4-1.5,0.7-1.7,0.8c-0.6,0.4-0.8,0.9-0.7,1.4
+		c-0.1,0.5,0.2,1.2,1,2c4.4,4.5,7.7,9.8,10,15.9c2.2,6.1,3.2,12.3,2.8,18.7c-0.3,6.1-1.7,12.8-4.4,20c-1.7,4.5-4.5,10.8-8.5,18.9
+		l-6.1,12.3c-0.6,0.2-0.8,0.5-0.8,1c0,0.2,0,0.3,0.1,0.5l-9.7,19.8c-0.6-10.3-3.4-19.5-8.4-27.5c-3.9-6.4-9.3-12-16.1-16.9
+		c-6.1-4.4-13-8-20.9-10.8c-9.9-3.6-20-5.7-30.1-6.2c-10.1-0.5-19.7,0.6-28.8,3.4c5.8-10,13.8-23.7,24-41.1c2-3.4,3.7-6.1,5.1-8.2
+		c6-8.4,13.6-14.7,23-19c7.9-3.6,15.6-5.1,23.1-4.4c0.4,0,0.8,0,1.1-0.1c0.4,0.3,0.8,0.2,1.2-0.1c0.3-0.2,0.4-0.7,0.4-1.6
+		c-0.2-2.4,0.2-4.8,1.1-7.1c0.9-2.3,2.2-4.4,4-6.1c2-1.9,4.1-3,6.2-3.1c0.2,0,0.3,0,0.5-0.1C-370.2,254.5-369.9,254.6-369.7,254.6z
+		 M-359.5,355.7c0.4,1.9,1.1,3.5,2.3,4.8c1.3,1.5,3.2,2.5,5.5,3.1c2,0.5,3.9,0.5,5.8-0.1c2-0.6,3.6-1.6,4.7-3.1
+		c0.8-1.1,1.4-2.5,1.7-4.1c0.3-1.9,0.3-3.5-0.1-5c-0.4-1.7-1.3-3.1-2.6-4.1l-2-1.3c-0.3-0.2-0.7-0.5-1.3-1c-0.5-0.4-0.9-0.7-1.3-0.9
+		c-0.7-0.3-1.6-0.4-2.9-0.4c-1.5,0-2.8,0.2-3.7,0.6c-0.9,0.4-2,1.2-3.4,2.6c-0.8,0.8-1.4,1.5-1.7,2l-0.7,1.6
+		C-359.7,352.2-359.8,353.9-359.5,355.7z M-368.4,292.1c-0.4-2.5-1.7-4.8-4-6.9c-1.9-1.6-4.3-2.8-7.3-3.6c-4.7-1.3-9.7-1.4-14.9-0.3
+		c-4.9,1-9.5,3-13.9,5.9c-7.6,5.1-14,12.7-19.4,22.9c-2.2,4-3,7.4-2.4,10c0.4,2.1,1.6,3.8,3.5,5.2c1.9,1.3,3.9,2,6.1,2.1
+		c2.1,0,4.2-0.4,6.2-1.5c1.9-1,3.7-2.3,5.2-4c1.1-1.2,3-4.1,5.9-8.7c2.3-3.7,4.6-6.3,6.8-7.8c2.6-1.8,5.5-2.7,8.8-2.6
+		c0.8,0,2.2,0.2,4,0.5c1.7,0.3,3.1,0.4,4,0.4c3.4,0,6.1-1.1,8.4-3.3c1.1-1.1,1.9-2.3,2.5-3.8C-368.4,295.1-368.2,293.6-368.4,292.1z
+		 M-355.2,417.9v0.8c0,1,0.3,2.3,0.8,3.7c0.6,1.7,0.9,2.9,1.1,3.7l2.1,13.2c-0.9-0.4-1.8-0.8-2.8-1.2c-5.4-2.1-12.8-3.9-22.1-5.3
+		c-31-4.8-62.1-6.7-93.6-5.6c-29.6-1-59,0.5-88.2,4.7c0.2-1,0.4-1.9,0.4-2.7c-0.1-1.2-0.4-2.2-0.9-2.9c-0.1-0.1-0.4-0.5-0.9-1.1
+		l-1-0.9c-0.7-0.5-1.6-0.7-2.7-0.6c-0.6,0-1.5,0.2-2.7,0.5c-0.7,0.2-1.4,0.4-1.8,0.8c-0.7,0.4-1.4,1.1-1.8,2.1
+		c-0.3,0.6-0.6,1.5-1,2.7l-0.4,1.4c-0.2,1-0.3,1.6-0.3,1.7c0,0,0,0.5,0.1,1.3c-2.3,0.5-4.5,1-6.6,1.5c1.1-3.4,2.1-7,2.8-10.6
+		c0.3-1.2,0.6-2,0.9-2.4c0.5-0.5,1.2-0.8,2.2-1.1c9.6-2.8,16.8-4.5,21.7-5.3c1.9-0.3,2.9-0.5,3.2-0.5c1.2-0.3,2.2-0.6,3-1.1
+		c0.9-0.4,2.2-1.3,3.7-2.7c4.6-3.9,7.9-7,10-9.2c2.5-2.6,4.2-4.2,5-4.8c2.2-1.5,5.8-2.7,10.7-3.7l10.7-2.1c1.8-0.4,3.2-0.4,4.2-0.1
+		c0.7,0.2,1.7,0.8,2.9,1.8l8.4,7c0.9,0.8,1.7,1.2,2.4,1.2c0.6,0,1.3-0.4,2.2-1.1c2.1-1.7,4-3.7,5.8-5.9c1.3-1.6,2.3-2.6,3.1-3
+		c0.7-0.4,1.8-0.6,3.3-0.8c6.8-0.6,13.5-1.5,20.1-2.8c0.2,0,0.4-0.1,0.6-0.2c0,0.4,0.1,0.7,0.3,0.9c0.2,0.3,0.5,0.5,0.8,0.6
+		c0.1,0,0.2,0.1,0.4,0.1l5.3,10.7c0.7,1.6,1.6,2.5,2.5,2.8c0.6,0.2,1.2,0.2,2-0.1c0.1,0,0.7-0.3,1.9-0.9c1-0.5,2.6-1,4.9-1.7
+		c4.8-1.4,8.5-2.4,10.9-3c0.7-0.2,1.2-0.4,1.5-0.5c0,0,0.1,0.1,0.1,0.1c0.1,0.1,0.5,0.4,1.2,0.9c1.6,1,3.1,2.3,4.4,3.7
+		c0.7,0.7,1.2,1.1,1.3,1.2c0.4,0.3,1,0.7,1.8,1.2c1.2,0.8,2.2,1.5,2.9,2.2c0.8,0.7,1.4,1.2,1.8,1.5c0.7,0.6,1.5,0.9,2.1,1
+		c1.2,0.2,2.6-0.3,4-1.4c0.9-0.9,1.7-1.6,2.3-2.2l1.6-1.1c1-0.6,1.7-1,2.2-1.4c0.1-0.1,0.2-0.2,0.4-0.4l2-1.4
+		c0.2,0.1,0.4,0.2,0.6,0.2c0.9,0.4,2,0.9,3.3,1.5c2.4,1.2,7.5,3.7,15.4,7.3l16.6,7.5C-355.6,417.7-355.4,417.8-355.2,417.9z
+		 M-499.1,400.6c-0.1-0.3-0.3-0.5-0.5-0.8c-0.2-0.3-0.5-0.6-0.8-0.8c-0.2-0.2-0.5-0.3-0.9-0.4c-0.7-0.2-1.5-0.4-2.4-0.4
+		c-0.7,0-2.1,0.2-4.2,0.7l-1.7,0.4c-4.8,0.8-8.3,1.4-10.4,1.8c-2.1,0.5-3.5,1-4.3,1.6c-0.9,0.6-1.8,1.6-2.9,3
+		c-1.3,1.8-2.5,3.5-3.6,5.2c-0.7,1.1-1.3,2.1-1.9,2.9c-0.5,0.7-1.2,1.7-2.3,3c-0.9,1.3-1.3,2.5-1.2,3.6c0.1,1.7,0.9,3,2.5,3.9
+		c1.3,0.8,2.8,1.2,4.6,1.1c1.4-0.1,2.6-0.4,3.6-0.8c1.2-0.6,2.3-1.5,3.2-2.8c0.7-0.9,1.4-2.1,2.3-3.7l2.4-4.5
+		c0.4-0.8,0.8-1.3,1.1-1.5c0.4-0.4,1.2-0.7,2.4-0.9l9.3-2c2.1-0.5,3.5-1.1,4.3-1.8c1.1-1,1.7-2.4,1.8-4.1
+		C-498.6,402.2-498.7,401.3-499.1,400.6z M-461.3,401.1c0-1.1-0.4-2.2-1.1-3.1c-0.5-0.7-1.1-1.2-1.9-1.6c-0.7-0.3-1.5-0.5-2.6-0.5
+		c-1.9-0.1-3.4,0.3-4.6,1.2c-0.7,0.4-1.5,1.3-2.4,2.7c-2.1,2.9-4.6,5.7-7.4,8.2c-1.2,1.1-2,1.8-2.4,2.2l-1.5,2
+		c-0.7,1-1.2,1.8-1.4,2.4c-0.5,1.4-0.3,2.8,0.5,4.1c0.6,0.8,1.4,1.5,2.7,2.1c1.3,0.6,2.8,0.7,4.2,0.6c1.5-0.2,2.8-0.6,4-1.4
+		c0.9-0.6,2.2-2,3.9-4.1l2.7-3.7c0.7-0.9,1.2-1.6,1.6-2l2.1-2.1l2-2.7C-461.9,403.4-461.3,402-461.3,401.1z M-407.9,414.9
+		c-0.3-0.7-1-1.7-2.2-3l-2.9-3c-2.4-2.4-4.5-3.9-6.4-4.6c-2.7-0.9-5.9-0.6-9.4,0.8c-0.9,0.4-2.4,1-4.4,1.9c-1.9,0.9-3.4,1.5-4.5,1.9
+		c-1.4,0.4-2.4,0.8-3,1.1c-0.9,0.5-1.6,1.1-2.3,1.8c-0.9,0.8-1.5,1.6-1.8,2.4c-0.6,1.3-0.5,2.6,0.1,4c0.6,1.4,1.5,2.4,2.7,3.1
+		c1.5,0.9,3.2,1.2,5.2,0.9c1.6-0.2,3.3-0.8,5.1-1.7c1.1-0.6,2.3-1.2,3.6-2.1c1.2-0.9,2.2-1.4,3-1.5c0.7,0.8,1.7,1.7,2.8,2.6
+		c2.1,1.8,4,3,5.8,3.5c2.5,0.7,4.7,0.5,6.5-0.8c1.2-0.8,1.9-1.9,2.3-3.3C-407.3,417.5-407.4,416.2-407.9,414.9z M-371.6,418.3
+		c-0.2-0.9-0.7-1.7-1.7-2.4c-0.8-0.7-2.1-1.6-3.8-2.7l-1.6-1.1c-2-1.2-3.5-2-4.6-2.5l-2.3-0.8c-1.1-0.4-2-0.6-2.6-0.6
+		c-0.9,0-1.8,0.2-2.7,0.6c-0.9,0.4-1.7,1-2.4,1.8c-0.7,0.8-1.2,1.7-1.5,2.7c-0.2,1-0.2,2.1,0,3.1c0.3,1,0.8,1.9,1.5,2.6
+		c0.5,0.5,1.2,0.9,2.1,1.4c1,0.5,1.7,0.8,2.2,1.1c1.7,1.1,3.1,1.8,4,2.3l2.1,0.9c1.4,0.5,2.2,0.8,2.5,0.8c1.9,0.4,3.7,0.2,5.4-0.6
+		c0.8-0.4,1.4-0.9,1.8-1.5c0.6-0.7,1-1.8,1.3-3.1C-371.6,419.4-371.5,418.8-371.6,418.3z M215.6,178.5c0.3,1.1,0.4,2,0.4,2.8
+		c-0.1,1-0.3,1.8-0.5,2.4c-0.2,0.4-0.5,0.9-0.9,1.3c-0.6,0.7-1.5,1.3-2.6,1.6c-0.3,0.1-0.8,0.2-1.4,0.3c-1.3,0.2-2.5,0.1-3.4-0.2
+		c-1.2-0.3-2.1-0.9-2.8-1.8c-0.9-1.2-1.3-2.9-1.1-4.9c0.1-0.8,0.2-1.4,0.4-1.8c0.4-1,1.3-2,2.7-3c0.6-0.4,1-0.6,1.2-0.7
+		c0.5-0.2,1-0.3,1.6-0.3c0.8-0.1,1.6,0,2.3,0.2c0.3,0.1,0.8,0.3,1.4,0.6l1.1,0.7c0.5,0.4,0.8,0.7,0.9,0.8
+		C215.2,177,215.5,177.6,215.6,178.5z M213.2,179.4c-0.2-0.6-0.4-0.9-0.5-1.1c-0.1-0.1-0.3-0.2-0.7-0.4l-1.2-0.5
+		c-0.9-0.4-1.6-0.5-2-0.4c-0.3,0-0.7,0.3-1.4,0.7c-0.7,0.7-1.1,1.1-1.2,1.3c-0.3,0.6-0.4,1.3-0.2,2.3c0.1,0.8,0.3,1.4,0.6,1.7
+		c0.6,0.7,1.6,1.1,3.2,1.1c1.6-0.1,2.6-0.5,3.1-1.2C213.5,182.1,213.6,180.9,213.2,179.4z M-337,197c1-1.6,1.6-3.3,1.7-5.2
+		c0-0.3,0-1.5-0.1-3.7c-0.1-1.5,0-2.6,0.3-3.6c0.6-1.9,2.2-3.7,4.7-5.5c0.7-0.4,1.8-1.1,3.1-2c1.2-0.8,2.1-1.6,2.7-2.4
+		c1.7-2,2.6-4.3,2.6-6.9c0-0.5-0.1-1.2-0.2-2c0.2,0,0.4,0,0.7-0.1c5.1-0.9,9.1-1.2,11.8-0.7c2.6,0.4,5.2,1.5,7.8,3.2
+		c2.1,1.3,3.7,2.7,5,4.3c1.5,1.8,2.3,3.8,2.7,5.9c0.2,1.2,0.3,1.8,0.4,2c0,0,0,0.1,0.1,0.1c-0.9,1.2-1.6,2.6-2.1,4.3
+		c-0.6,2.2-0.6,4.4-0.1,6.6c1,2.8,1.6,5,1.7,6.5c0.2,1.5-0.1,2.9-0.7,4.3c-0.6,1.4-1.4,2.5-2.6,3.4c-0.7,0.6-1.8,1.3-3.3,2
+		c-1.6,0.8-2.7,1.4-3.3,1.8c-2.2,1.6-3.6,3.8-4.1,6.6c-0.4,2-0.1,4.5,0.8,7.5c1.3,4.5,1.9,7,2,7.5c0.4,2.4,0.3,4.8-0.3,7.2
+		c-0.6,2.4-1.5,4.6-3,6.5c-1.5,1.9-3.3,3.5-5.4,4.7c-2.2,1.2-4.5,1.9-6.9,2c-0.6,0-1,0.1-1.4,0.2c-0.5-0.8-1.2-1.7-1.9-2.7
+		c-2.9-3.9-6-7.1-9.3-9.6l-3.7-2.5c-3.5-2-7.1-3.4-10.9-4.1c-3.7-0.7-7.3-0.7-10.7,0c0-0.3-0.1-0.6-0.2-0.9
+		c-1.7-6-1.6-11.6,0.3-16.7c0.9-2.7,2.4-5.1,4.4-7.2c2-2.2,4.2-3.8,6.8-4.9c0.4-0.2,1.5-0.5,3.4-1.1c1.4-0.4,2.5-0.9,3.3-1.4
+		C-339.3,199.8-338,198.5-337,197z M-329.6,188.7l0.2,0.8c0.2,0.9,0.5,1.6,0.8,2c0.7,1.2,1.9,2,3.6,2.4c1.3,0.2,2.8,0.1,4.4-0.5
+		c0.6-0.2,1.1-0.4,1.4-0.6c0.9-0.5,1.8-1.4,2.7-2.9l0.7-1.2c0.1-0.4,0.2-0.9,0.2-1.7c0-0.9-0.1-1.6-0.4-2.2
+		c-0.2-0.6-0.7-1.3-1.5-2.1c-1.2-1.2-2.2-1.9-3.2-2.4c-1.4-0.6-2.7-0.7-3.9-0.4l-1.2,0.5c-1,0.5-1.8,1-2.3,1.6
+		c-0.8,0.9-1.3,2.4-1.5,4.5C-329.7,187.4-329.7,188.1-329.6,188.7z M-336.7,207.3c-0.8-0.7-1.8-1.1-3-1.2c-1.1-0.1-2.2,0-3.3,0.4
+		c-0.5,0.2-1.2,0.5-2.1,1c-0.9,0.5-1.6,0.9-2.1,1.4c-0.6,0.6-1.1,1.1-1.5,1.4c-0.7,0.6-1.1,1-1.4,1.3c-0.7,0.7-1.3,1.5-1.8,2.5
+		c-1.7,3-2.2,6.1-1.7,9.1c0.3,1.9,1,3.2,2.1,3.9c0.7,0.4,1.5,0.6,2.6,0.7c1.7,0.1,3.2-0.3,4.4-1.1c1.4-0.8,2.4-2,2.8-3.4
+		c0.1-0.3,0.3-0.9,0.4-1.8c0.2-0.7,0.3-1.3,0.5-1.8c0.4-0.8,1.1-1.7,2.3-2.6c1.3-1.1,2.2-1.9,2.6-2.4c0.6-0.9,0.9-2,0.9-3.2
+		C-335.1,209.7-335.6,208.3-336.7,207.3z M-368,241.8c-1.4,2.8-1.6,5.8-0.6,8.7c0.2,0.6,0.3,1.1,0.4,1.4c5.9-1,11.6-0.7,17.2,1.1
+		c6.4,1.9,11.7,5.3,16,10.3l2.6,3.3c1.2,1.6,2.1,2.8,2.6,3.8c0.1,0.1,0.1,0.2,0.2,0.4l0.8-0.2c1-0.3,2.1-0.9,3.1-1.9
+		c2-1.9,3.3-3.8,3.9-5.8c0.6-2.1,0.5-4-0.2-5.8c-0.2-0.2-0.3-0.5-0.5-0.7c-2.7-4.2-5.1-7.4-7.1-9.7c-2.8-3-5.9-5.5-9.3-7.5
+		c-3.7-2.1-7.4-3.3-11.3-3.7c-1.2-0.2-2.6-0.2-4.3-0.2c-1,0-2.4-0.1-4.3-0.1c-0.3,0-0.6-0.1-0.8-0.1c-0.3,0.3-0.8,0.7-1.6,0.9
+		C-364.3,237.1-366.5,239-368,241.8z M-485.2,28c0.1,0,0.2,0,0.2,0c1.2,0,2.4,0,3.6-0.1h13.4v-0.1h12.5V9.7c0,0,0.1-0.1,0.1-0.2V4
+		c0-0.1,0.1-0.2,0.1-0.2V2.6c-0.4,0.2-0.9,0.5-1.4,0.8l-19,12.4c-2.9,1.9-5.1,3.3-6.6,4.1l-3.4,1.8c0,0-0.1,0-0.1,0.1
+		c-0.2,0.1-0.3,0.2-0.5,0.2c0.5,1.1,0.7,2.2,0.9,3.3C-485.2,26.3-485.2,27.2-485.2,28z M-564.1-40.8c0.4,0.7,0.9,1.5,1.5,2.4
+		l0.9,1.1c0.6,0.6,1.3,1.1,2.1,1.5c0.4,0.2,0.7,0.3,0.9,0.5c0-0.3,0.1-0.7,0.2-1.1c0-0.4,0.1-1.1,0.1-2c0.2-0.4,0.2-0.7,0.2-0.9
+		v-1.1c0-0.5,0.3-1.2,0.7-2.1l0.1-1.1l0.5-2.1c-3.2-0.5-6.3-1.2-9.4-2.1c0.4,1.2,0.7,2.2,0.9,3.1C-564.8-42.8-564.4-41.5-564.1-40.8
+		z M-593.9-44.4c2.1,2,5,3.8,8.7,5.3c5.9,2.5,12.1,3.9,18.6,4.4c1.6,0,3,0.1,4.1,0.2c-0.5-0.4-0.9-0.8-1.4-1.2
+		c-0.5-0.5-0.9-1-1.2-1.5c-1-1.3-1.7-2.5-2.1-3.7l-1.4-5.5c-0.2-0.6-0.2-1.1-0.2-1.4c0-0.3,0-0.5,0.1-0.7c-2.9-0.8-6.8-2-11.7-3.6
+		c-5.1-1.4-9.6-2-13.5-1.8c-1.5,0.1-3,0.2-4.6,0.5c0,0.1,0,0.2,0.1,0.3C-598.2-50-596.6-47.1-593.9-44.4z M-496.1,15.9
+		c-6.1-3-13.3-4.7-21.5-5.2c-2.5-0.1-5.3-0.2-8.4-0.1c0,0.1-0.1,0.1-0.1,0.2h-6.3v0.1c-0.2,0-0.3,0.1-0.5,0.1
+		c-0.7,0-1.5,0.1-2.2,0.1c-0.2,0-0.3,0.1-0.5,0.2c-0.2,0-0.5,0.1-0.7,0.1c-0.1,0-0.2,0.1-0.4,0.1c0,0-0.1,0.1-0.2,0.1
+		c0,0-0.1,0.1-0.2,0.1c-0.1,0.1-0.1,0.1-0.2,0.2h-0.1c-4.5,0.2-8.8,1.4-12.8,3.6c-3.2,1.7-5.4,3.8-6.3,6.2c-0.5,1.3-0.8,2.9-0.8,4.8
+		c0,1,0,2,0.2,3c0.3,1.8,1,3.5,2.1,5.1c1,1.5,2.2,2.7,3.7,3.6c0.2,0,0.5-0.1,0.7-0.2c0,0.1,0,0.1,0,0.2c5.8-2,12.5-3.2,20-3.4
+		c5.9-0.2,13.1,0.2,21.6,1.2c5.5,0.6,9.6,1.4,12.5,2.4c0.1,0,0.2,0.1,0.4,0.1c0.4-0.2,0.8-0.4,1.3-0.5c1.2-0.3,1.8-0.5,2.1-0.7
+		c0.5-0.3,1-0.9,1.5-1.9l1.7-3c0.5-0.9,0.8-1.8,1-2.5c0.5-1.9,0.4-3.8-0.2-5.8c-0.6-1.9-1.6-3.6-3-5c-1-0.9-2.1-1.7-3.1-2.4
+		C-495.5,16.5-495.9,16.2-496.1,15.9z M-601.9-12.6c7.4,4.4,15.4,7.5,23.9,9.5c8.5,2,17,2.8,25.6,2.2c0.9,0,1.6,0.1,1.9,0.2
+		c0.1,0,0.2,0.1,0.2,0.1l0.2,0.1c0.2,0.1,0.3,0.3,0.5,0.6l0.1,0.8l-0.1,0.5c0,0.1,0.1,0.2,0.1,0.4c0,0.4,0,0.9-0.2,1.7
+		c-0.4,1.7-0.7,3-0.8,3.9c-0.2,1.5-0.1,2.8,0.3,3.9c0.1,0.3,0.2,0.5,0.2,0.7c2-0.9,4.3-1.7,6.8-2.3c1-0.2,2.1-0.4,3.3-0.6
+		c1.2-0.2,2.5-0.4,4-0.6c8.5-0.9,15.8-1.1,22-0.5c7,0.7,13.2,2.5,18.6,5.2c0.1-0.5,0.2-1,0.4-1.6c3.6-9.5,3.7-20.5,0.2-32.8
+		c-0.8-3-1.7-5.4-2.7-7.3c-2.9-5.7-7.5-10.1-13.9-13.2c-5.7-2.6-12-3.8-18.9-3.4c-1.6,0.1-2.7,0.2-3.4,0.2c-7,0.5-14,0.3-20.8-0.7
+		c-0.1,0.5-0.1,0.8-0.1,1c-0.2,0.3-0.2,0.7-0.2,1.3c0,0.7,0,1.2-0.1,1.4c-0.3,0.9-0.4,1.5-0.5,2l-0.1,1.3l-0.2,0.8l-0.1,1
+		c0,0.4-0.1,1.3-0.3,2.8c-0.2,0.8-0.3,1.3-0.4,1.4c-0.3,0.5-0.7,0.8-1.1,0.9c-0.2,0-0.5,0-0.9-0.1c-0.3-0.1-0.7-0.1-1.2-0.2
+		c-0.4,0.2-0.9,0.3-1.6,0.3c-9.1,0.2-17.5-1.3-25.2-4.7c-7.2-3.2-11.8-7.3-13.9-12.3c-0.6-1.7-0.9-3.1-0.8-4.4
+		c-0.9,0.3-1.9,0.6-2.8,0.9c-3.7,1.4-6.5,3.1-8.2,5c-2.1,2.4-3.5,5.9-4.1,10.5c-0.4,4-0.1,7.5,0.9,10.4
+		C-613.4-21.3-609-16.8-601.9-12.6z M-485.5,36.5l1.5,0.8c0.5,0.3,0.8,0.6,1,0.9l0.8,0.4c1.5,0.9,3.7,2.3,6.6,4.1l19,12.4
+		c0.5,0.3,1,0.6,1.4,0.8v-3.6c0-0.1-0.1-0.2-0.1-0.2v-6.9c0-0.1-0.1-0.2-0.1-0.2v-9.6c0-0.1,0-0.1-0.1-0.2v-4.5H-468
+		c-4.5,0-8.9,0-13.4-0.1c-1.2,0-2.4,0-3.6-0.1c-0.2,0-0.4,0-0.6-0.1c-0.2,0.7-0.4,1.5-0.7,2.2c-0.2,0.6-0.6,1.4-1.1,2.3
+		c0,0.1-0.1,0.1-0.1,0.2c0,0,0,0,0.1,0.1C-486.7,35.8-486,36.2-485.5,36.5z M-845.9,64c0.1,0.2,0.2,0.4,0.2,0.6
+		c0.1,0,0.2,0.1,0.4,0.2c0.5,0.4,0.8,1.1,0.9,2c0,1.3-0.4,2.5-1.4,3.7c-0.9,1.1-2,1.9-3.4,2.3c-2.4,0.7-5.1,0.5-8.1-0.7
+		c-0.6-0.3-1.1-0.4-1.5-0.4c-0.3,0-0.7,0.2-1.2,0.5c-2.2,1.3-4.7,1.8-7.3,1.7c-2.7-0.2-5.1-1-7.2-2.5c-2.3,1.8-5,2.8-8.1,3
+		c-3.1,0.2-5.9-0.6-8.4-2.1c-2.4,1.8-5.1,2.6-8.3,2.6c-3.2,0-5.9-1-8.2-2.8c-1.9,1.4-4,2.2-6.5,2.4c-2.5,0.2-4.7-0.4-6.6-1.5
+		c-0.9-0.6-1.7-0.9-2.3-0.9c-0.3,0-0.9,0.3-1.7,0.7c-2.2,1.2-4.3,1.6-6.3,1.4c-1.1-0.1-2.1-0.5-3.1-1c-0.2-0.1-0.3-0.2-0.4-0.2
+		c0,0.2-0.1,0.4-0.2,0.6c-0.2,0.7-0.6,1.5-1.2,2.4c-1.1,1.7-2.4,3.1-4,4.2c0.5,0.1,1,0.5,1.7,1.1c1.4,1.2,3,2,5,2.3
+		c1.9,0.2,3.7,0,5.4-0.8c0.8-0.4,1.5-0.7,1.9-0.9c0.7-0.3,1.4-0.4,2-0.2c0.5,0.1,1.2,0.5,2.1,1.1c1.6,1,3.4,1.6,5.4,1.6
+		c2,0,3.8-0.4,5.3-1.4c1-0.6,1.7-0.9,2.1-0.9c0.4,0,1.1,0.4,2.2,1.1c1,0.7,2.3,1.2,3.9,1.4c1,0.2,2.5,0.2,4.4,0.2c2.4,0,4-0.4,5-1.2
+		c0.4-0.4,0.6-0.6,0.8-0.8c0.4-0.3,0.7-0.5,0.9-0.6c0.5-0.2,1-0.2,1.6,0.1c0.4,0.1,0.9,0.4,1.6,0.8c2.3,1.3,4.6,1.9,6.8,1.8
+		c2.6-0.1,4.7-1.1,6.2-2.9c0.6-0.6,0.9-1,1-1.1c0.4-0.4,0.8-0.5,1.2-0.5c0.5,0,1.2,0.4,2,1.1c1.6,1.3,3.5,2,5.6,2
+		c2.2,0.1,4.1-0.5,5.8-1.7c0.5-0.4,0.8-0.6,1.1-0.7c0.4-0.3,0.8-0.4,1.2-0.4c0.5,0,0.9,0.2,1.4,0.5c2.8-2,5.4-4.1,8-6.5
+		c0.4-0.4,0.9-0.7,1.4-0.9c0.8-1,1.6-1.5,2.4-1.4c0.4,0,1.1,0.3,2.2,0.9c1.9,1.1,4.4,1.6,7.4,1.6c3,0,5.1-0.5,6.6-1.5
+		c1-0.6,1.8-1.5,2.3-2.6c0.5-1.2,0.5-2.2,0.1-3.3c-0.4-0.9-1-1.6-2-2.1c-0.8-0.5-1.8-0.7-2.9-0.8c-0.9,0-1.9,0-3,0.2
+		c-0.7,0.1-1.7,0.3-3,0.7c-0.7,0.2-1.3,0.1-1.7-0.1c-0.7-0.4-0.9-1.4-0.8-3c0.4-3.1,0-6.7-1.1-10.8c-0.3-1.3-0.9-2.2-1.6-2.5
+		c-0.6-0.3-1.3-0.2-2,0.2c-0.5,0.3-1,0.8-1.5,1.5c-1.9,2.3-3.5,4.7-4.9,7.1c-0.2,0.3-0.3,0.6-0.5,0.8
+		C-848.6,60.5-846.9,62.3-845.9,64z M-854.8,428.9c1,0.6,2.8,1.5,5.4,2.7c2.3,1.1,4.1,2.1,5.4,2.9c4.1,2.6,8.2,6.8,12.1,12.6
+		c9.5,0,19,0,28.5,0.1V445c-0.1-0.2-0.1-0.3-0.2-0.5v-23h-58.8C-860.9,424.2-858.4,426.7-854.8,428.9z M-803.5,390.3h-40.7
+		c-1.8,3.2-3.9,6.1-6.5,8.7c-0.1,0.6-0.6,1.1-1.5,1.7c-0.3,0.2-0.6,0.3-0.9,0.5c-0.6,0.5-1.2,0.9-1.8,1.4c-0.6,0.5-1.2,0.8-1.7,1.1
+		c-1.8,1.5-3.3,3.2-4.4,5c-1.1,1.8-1.8,3.6-2.2,5.6c-0.3,1.5-0.3,3-0.1,4.3h59.7V390.3z M-443.3,50.1c0.8-0.5,1.6-0.9,2.1-1.2
+		c-0.1-0.1-0.1-0.2-0.2-0.3l-8.2-10.4c-0.6-0.8-1-1.3-1.2-1.7c-0.2-0.4-0.5-1-0.9-1.9c-0.2-0.3-0.5-0.6-1-1.1v1.7
+		c0,0.1-0.1,0.2-0.1,0.2v9.6c0,0,0,0.1-0.1,0.2V52c0,0.1,0,0.2-0.1,0.2V56c0.4-0.2,0.8-0.4,1.3-0.8L-443.3,50.1z M-829.7,191.3
+		c-0.1,0-0.2,0-0.2,0c-2.2,0-4.1,0.6-5.6,1.8c-0.8,0.6-1.4,1.4-1.8,2.4c-0.4,0.9-0.6,1.9-0.5,2.9c0.1,0.6,0.3,1.4,0.7,2.4
+		c0.5,1.2,0.8,2,1,2.3c0.5,1.7,0.5,3.5-0.1,5.2c-0.2,0.7-0.9,2-1.8,3.7c-0.9,1.5-1.4,2.8-1.6,3.7c-0.3,1.6,0.1,3.7,1.1,6.2
+		c1.3,3.1,2,5.2,2.1,6.2c0.2,1.9-0.3,4.7-1.5,8.3c-1.3,3.7-1.9,6.5-1.8,8.3c0.1,1,0.3,2.2,0.8,3.6c0,0.2,0.5,1.3,1.2,3.4
+		c1.2,3.4,1.7,6.2,1.4,8.3c-0.2,1.8-1.2,4.4-3.1,7.7c-1.8,3.3-2.8,5.9-2.9,7.8c-0.1,1.4,0.1,3.2,0.7,5.4c0.7,3,1.1,4.8,1.2,5.4
+		c0.3,2.6,0,5.1-1,7.5c-1,2.5-2.6,4.4-4.7,5.7c-0.8,0.5-1.9,1-3.4,1.6c-1.7,0.6-2.8,1.1-3.5,1.5c-2.5,1.3-4.5,3.3-6.1,5.9
+		c-1.5,2.5-2.4,5.2-2.8,8.1c0,0,0,0-0.1,0.1c2.4,2.4,4,5.2,4.6,8.4c0.4,2.1,0.4,4.2-0.2,6.2c-0.2,0.8-0.5,1.6-0.9,2.3
+		c-0.2,0.9-0.4,1.8-0.6,2.7c1.7,0.5,3.4,1.2,4.9,2.1c2.1,1.1,3.9,2.6,5.6,4.5c1.1,1.1,2.3,2.8,3.7,4.9c1.9,2.8,3.2,5,4,6.8
+		c0.9,2.3,1.7,5,2.1,8c1.1,7.6,0.2,15-2.7,22.2c-0.3,0.9-0.7,1.7-1.1,2.5h39.2v-83.1c-0.8-0.7-1.7-1.3-2.6-1.8
+		c-0.7-0.4-1.8-0.9-3.5-1.5c-1.5-0.6-2.6-1.1-3.4-1.6c-2.1-1.3-3.7-3.2-4.7-5.7c-1-2.4-1.3-4.9-1-7.5c0.1-0.6,0.5-2.4,1.2-5.4
+		c0.6-2.2,0.8-4,0.7-5.4c-0.2-1.9-1.1-4.5-2.9-7.8c-1.9-3.3-2.9-5.9-3.1-7.7c-0.3-2.1,0.2-4.9,1.4-8.3c0.8-2.1,1.2-3.2,1.2-3.4
+		c0.4-1.3,0.7-2.5,0.8-3.6c0.1-1.8-0.5-4.6-1.8-8.3c-1.3-3.6-1.8-6.4-1.5-8.3c0.1-1.1,0.8-3.1,2.1-6.2c1-2.5,1.4-4.6,1.1-6.2
+		c-0.2-0.9-0.7-2.2-1.6-3.7c-1-1.7-1.6-2.9-1.8-3.7c-0.6-1.7-0.6-3.4-0.1-5.2c0.1-0.4,0.4-1.1,0.9-2.3c0.4-0.9,0.6-1.7,0.7-2.4
+		c0.1-1-0.1-2-0.5-2.9c-0.4-0.9-1-1.7-1.8-2.4c-1.6-1.2-3.5-1.8-5.6-1.8C-829.6,191.3-829.6,191.3-829.7,191.3z M-779.7,1.6
+		c2-0.6,4.1-1.2,6.2-1.7c-0.1-1.5-0.1-3.5,0.1-6c0.2-1.9,0.4-3.1,0.7-3.8c0.6-1.5,1.9-3.1,4.1-4.9c0.6-0.6,1.2-0.9,1.5-1.1
+		c0.6-0.4,1.4-0.6,2.3-0.8c1.7-0.5,3.3-0.7,4.8-0.5c2,0.2,3.8,0.9,5.5,2.1c1.7,1.2,2.8,2.8,3.6,4.6c0.6,1.4,0.9,3.5,1.2,6.2v0.6
+		c2-0.1,4.1-0.3,6.2-0.4c0-2.4,0-3.9,0-4.4c-0.2-4.6-1.5-8.1-3.7-10.4c-0.4-0.4-1.9-1.6-4.7-3.7c-1.9-1.4-3.1-2.9-3.6-4.3
+		c-0.3-1-0.3-2.2-0.1-3.6c0.1-0.7,0.5-1.9,1.1-3.7c1-3.2,1-5.6,0-7.2c-0.3-0.5-0.7-1-1.4-1.6c-0.8-0.7-1.4-1.3-1.6-1.5
+		c-0.8-0.9-1.3-2.1-1.5-3.4c-0.2-1.3,0-2.6,0.5-3.7c0,0,0.3-0.6,0.9-1.7c0.4-0.7,0.6-1.3,0.6-1.8c0.1-1.1-0.3-2-1.2-2.9
+		c-0.9-0.8-1.9-1.2-3.1-1.3h-1.4c-1.2,0.1-2.2,0.5-3.1,1.3c-0.9,0.9-1.3,1.8-1.2,2.9c0,0.5,0.2,1.1,0.6,1.8c0.6,1.1,0.9,1.6,0.9,1.7
+		c0.6,1.2,0.7,2.4,0.5,3.7c-0.2,1.3-0.7,2.4-1.5,3.4c-0.2,0.3-0.8,0.8-1.6,1.5c-0.7,0.6-1.2,1.1-1.4,1.6c-1,1.6-1,4,0,7.2
+		c0.6,1.8,0.9,3,1.1,3.7c0.3,1.4,0.3,2.6-0.1,3.6c-0.4,1.5-1.6,2.9-3.6,4.3c-2.8,2.1-4.4,3.3-4.7,3.7c-2.2,2.3-3.4,5.8-3.7,10.4
+		c0,0.6,0,2.5,0,5.7c0,1.9-0.1,3.4-0.2,4.7C-780.4,1.8-780,1.7-779.7,1.6z M-732.4-8.9c0.6-2.4,1.5-4.6,2.8-6.8
+		c1.2-2,2.9-4.2,5.2-6.8c1.3-1.4,3.2-3.5,5.7-6.3c1.7-2.1,2.8-3.8,3.3-5.2c0.7-1.8,0.9-4.1,0.8-6.7c-0.1-2.9-0.7-5.5-1.6-7.7
+		c-0.6-1.4-1.8-3.2-3.4-5.5c-1.7-2.5-2.9-4.2-3.5-5.4c-1.3-2.5-2.1-5.2-2.3-8.1c-0.2-2.9,0.1-5.7,0.9-8.5c1.7-5.5,5-10,10-13.5
+		c0.4-0.3,1.2-0.7,1.2-0.7c6.4-3.8,18.5-6.4,32.4-6.4c13.9,0,26.4,2.7,32.7,6.6c0,0,0,0,0,0c0,0,0.1,0.1,0.1,0.1
+		c0.9,0.5,1.6,1.1,2.2,1.7c4.1,3.3,6.9,7.3,8.3,12.2c0.8,2.8,1.1,5.6,0.9,8.5c-0.1,0.7-0.2,1.4-0.3,2.1c-0.1,0-0.2,0-0.2-0.1
+		c-1.6-0.6-3.3-0.7-5.1-0.4c-1.7,0.3-3.3,0.9-4.8,1.9c-2.4,1.6-4.8,4.1-7.1,7.5c-2.6,4-4.3,7.7-5,11c-1,4.4-0.6,8.4,1.2,11.9
+		c0.5,0.9,0.8,1.5,1.1,2c0.4,0.8,0.7,1.5,0.9,2.1c0.3,1.3,0.1,3-0.8,5c-1.2,3-1.9,4.7-2,5c-0.4,1.7-0.3,3.5,0.4,5.2
+		c0.7,1.8,1.8,3.1,3.3,3.9c1.9,1,3.9,1.2,6.1,0.7c2-0.5,3.8-1.5,5.3-3.1c1.9-1.8,3.2-3.9,4-6.5c0.5-1.5,0.7-3,0.8-4.5
+		c0.4,0.5,0.8,0.9,1.1,1.3c2.3,2.5,4,4.8,5.2,6.8c1.6,2.8,2.7,5.7,3.1,8.8c0.3,1.8,0.4,3.6,0.4,5.5c-0.2,5.3-1.7,9.9-4.5,14.1
+		c-0.9,1.4-2.5,3.2-4.6,5.5c-2.2,2.5-3.8,4.3-4.6,5.5c-1.9,2.6-3.2,5.4-4.2,8.4c-0.1,0.2-0.1,0.4-0.2,0.6c-0.2,0-0.4,0-0.7,0.1
+		c-4.3,0.6-9.4,0.7-15.5,0.2l-5.4-0.4c-0.6,0-1,0-1.4,0.1V20.8c0.1,0.2,0.3,0.3,0.5,0.4c0.4,0.2,1.1,0.4,2,0.5
+		c2.1,0.1,3.9-0.1,5.4-0.5c1.9-0.5,3.4-1.4,4.5-2.7c1.3-1.4,2-3,2-4.9c0-0.3-0.1-1.1-0.3-2.5l-2.3-11c-0.4-2.1-0.8-3.7-1.4-4.9
+		c-0.5-0.9-1-1.5-1.7-2c-1.4-1.2-3-1.4-4.7-0.8c-0.6,0.3-1.1,0.6-1.4,0.9c-0.5,0.4-1.2,1.3-1.9,2.7l-2.6,4.8
+		c-1.7,3.2-3.1,5.4-4.2,6.8c-0.1,0.1-0.2,0.3-0.4,0.4c-8.5-4.5-18.1-7.8-28.9-9.9c-8.2-1.6-17.3-2.4-27.2-2.5v-0.1
+		C-732.3-5.4-732.4-6.9-732.4-8.9L-732.4-8.9z M-686.5-26.8c-0.3,0.7-0.7,1.6-1.4,2.6c-1,1.6-1.6,2.4-1.6,2.5
+		c-1.6,2.8-2,5.3-1.2,7.6c0.6,1.7,1.8,2.9,3.5,3.9c1.7,0.9,3.4,1.2,5.3,0.9c3.3-0.4,6.3-2.3,8.9-5.7c2.2-2.8,3.7-5.9,4.3-9.5
+		c0.7-3.6,0.4-7.1-0.8-10.3c-0.4-1-1.1-2.6-2.1-4.7c-0.7-1.9-1.1-3.5-1-4.9c0.1-2.2,1.5-4.7,4.2-7.7c1.4-1.5,2.3-2.7,2.8-3.4
+		c1-1.4,1.6-2.7,1.9-4c0.4-1.7,0.2-3.4-0.5-5.1c-0.7-1.7-1.9-3-3.4-3.9c-1.5-0.9-3.1-1.3-5-1.2c-1.8,0.1-3.5,0.6-5.1,1.4
+		c-2.6,1.5-5.1,3.9-7.4,7.5c-2.5,3.9-4.1,7.7-4.8,11.5c-0.8,4.6-0.3,8.7,1.4,12.3l1.2,2.5c0.5,1,0.9,1.8,1.1,2.5
+		C-685.8-30.2-685.9-28.5-686.5-26.8z M-752.5-3.5v-0.1c-0.2-1.9-0.3-3-0.4-3.5c-0.2-1.3-0.6-2.4-1.1-3.3c-0.6-1.1-1.3-2-2.4-2.7
+		c-1-0.7-2.1-1.1-3.3-1.2c-0.7-0.1-1.5-0.1-2.5,0.1c-1,0.1-1.9,0.2-2.6,0.5c-0.7,0.3-1.7,0.9-2.8,1.9c-0.9,0.7-1.5,1.3-1.9,1.9
+		c-0.2,0.4-0.5,1-0.7,1.8c-0.2,1.1-0.4,2.4-0.5,4.1l-0.3,3.3c1.3-0.3,2.7-0.6,4.1-0.9c0-0.2-0.1-0.4-0.1-0.7c0-2.3,0.4-4.1,1.3-5.2
+		c0.7-0.9,1.9-1.5,3.5-1.8c1.2-0.2,2.2-0.2,2.9,0c1.5,0.5,2.6,1.7,3.1,3.7c0.3,1,0.3,1.8-0.1,2.4C-755-3.3-753.8-3.4-752.5-3.5z
+		 M-446.4,21.2c-0.2,0.2-0.3,0.4-0.5,0.5c-0.4,0.5-0.8,1.2-1.3,2.1c-0.6,1.2-1.2,2-1.6,2.5c-1,0.9-1.7,1.7-2,2.3
+		c-0.2,0.4-0.4,0.7-0.5,0.9c0,0,0.1,0.1,0.1,0.1l1.7,2c0.7,0.8,1.2,1.5,1.5,2.1l1.3,2.2c0,0,0.6,0.7,1.5,1.9
+		c0.8,0.9,1.6,1.9,2.6,3.2l3.5,4.6v-0.8c0-0.1,0-0.2-0.1-0.2V14.2L-446.4,21.2z M-308.5,426.7c-0.2-0.1-0.3-0.2-0.5-0.3
+		c-0.3-0.3-0.5-0.9-0.8-1.8c-1.8-7-5.1-13.6-9.8-19.8c-4.5-5.8-10-10.9-16.5-15.1l-7.4-4.5c-3.1,6.3-6.1,12.3-9,18
+		c-0.6,1.3-1.2,2.4-1.8,3.6c0.3,0.1,0.6,0.3,0.9,0.6l4.1,2.5c4.7,2.7,9.3,6.5,13.9,11.3c1.7,1.9,2.7,3.1,3,3.4
+		c4,4.9,6.8,10.5,8.4,16.7C-319.1,436.1-314,431.3-308.5,426.7z M-284.7,158.8c-2.7-4.9-7.6-8.4-14.5-10.4c-4.3-1.3-8.2-1.6-11.7-1
+		c-0.1,0.1-0.1,0.1-0.2,0.2c-0.3,0.1-0.5,0.2-0.8,0.1c-0.8,0.2-1.6,0.4-2.4,0.8c-2.5,1-4.5,2.6-6.2,4.7c-1.7,2.3-2.5,4.6-2.5,7.1
+		c0,0.7,0.2,1.8,0.4,3.1c1.4-0.6,3.6-1,6.5-1.2c3.3-0.3,5.8-0.3,7.7,0.1c0.9,0.2,2.2,0.6,3.7,1.2c3.9,1.6,7,3.6,9.3,6.2
+		c0.7,0.8,1.2,1.4,1.5,1.8c1.5,2.1,2.4,4.5,2.7,7.1c0.5-0.3,1-0.7,1.7-1.1c1.3-0.8,2.2-1.5,2.8-2c2.3-1.9,3.6-4.5,3.9-7.8
+		C-282.6,164.5-283.2,161.5-284.7,158.8z M-340.2,462.1c4.4-6.7,9.3-13,14.6-19c-0.2-0.2-0.4-0.6-0.7-1.2c-2.6-7-5.6-12.4-9-16.4
+		l-3-3.1c-3.3-3.4-6.1-5.8-8.2-7.4c-1-0.7-2.4-1.6-4.3-2.8c-2.1-1.3-3.5-2.2-4.4-2.8c-0.1-0.1-0.3-0.2-0.4-0.2
+		c-0.8,1.5-1.7,2.8-2.5,4l2.9,1.3c0.9,0.5,1.6,0.9,1.8,1.3c0.1,0.2,0.2,0.4,0.3,0.7c0.3,0.2,0.5,0.5,0.6,1c0,0.2,0.1,0.8,0.1,1.8
+		c0,1.2,0.1,2.6,0.5,4.1c0.3,1.2,1,3.2,2.1,5.9l1,2.6c0.9,2.1,1.4,3.8,1.7,5.1c0.3,1.8,0.2,3.4-0.2,4.7c1.1,0.8,2,1.6,2.8,2.4
+		c1.4,1.4,2.4,3,3.1,4.7c0.8,1.9,1.1,3.8,0.8,5.6c-0.3,2.4-1.4,4.5-3.3,6.4c-0.2,0.2-0.4,0.4-0.6,0.5c1.1,1.3,1.9,2.5,2.4,3.6
+		C-341.4,463.9-340.8,463-340.2,462.1z M-306.9,425.4c2.2-1.8,4.5-3.5,6.9-5.2c5.1-3.7,10.3-7.1,15.7-10.3c-0.4-0.9-1.1-2.8-2.3-5.6
+		c-4.1-10.2-9.9-18.8-17.3-26c-7.8-7.6-16.7-12.9-26.8-15.8c-0.7-0.2-1.2-0.4-1.6-0.6c-1,2.1-2.1,4.5-3.4,7.1
+		c-2.3,4.7-4.5,9.3-6.7,13.8c0.4,0.2,0.8,0.4,1.3,0.7c10.2,5.6,18.4,12.5,24.4,20.6c5,6.7,8.2,13.7,9.6,20.9
+		C-306.9,425.1-306.9,425.3-306.9,425.4z M-452.8,3.9c0,0,0.1,0.1,0.1,0.2v5.3c0,0.1,0.1,0.2,0.1,0.2v15.2c0.3-0.3,0.8-0.8,1.4-1.4
+		c0.4-0.4,0.8-1.1,1.3-2.1c0.2-0.3,0.6-0.8,1.1-1.4l8.4-9.8c0.1-0.1,0.1-0.1,0.1-0.2c-0.7-0.3-1.7-0.9-2.9-1.6l-8.3-5.2
+		c-0.5-0.3-0.9-0.6-1.3-0.8v0.1c0,0.1,0.1,0.2,0.1,0.2V3.9z M-554.2,453.7c6.8-0.9,15.7-1.8,26.8-2.8l18.4-1.5
+		c9.6-0.7,17-1.2,22.2-1.4c6.1-0.2,11.8-0.3,17.1-0.1c5.3-0.2,11-0.1,17.1,0.1c5.2,0.2,12.6,0.7,22.2,1.4l18.4,1.5
+		c11.1,0.9,20.1,1.9,26.8,2.8c9.8,1.3,18.7,2.9,26.5,4.9c3.2,0.9,5.5,1.6,7.1,2.2c0.3,0.1,0.5,0.3,0.8,0.5c0,0,0.1-0.1,0.1-0.1
+		c1.9-0.6,3.5-1.4,4.8-2.5c1.5-1.3,2.4-2.8,2.7-4.4c0.2-1.5,0-3-0.7-4.6c-0.6-1.4-1.5-2.7-2.7-3.9c-2.2-2-5.3-3.8-9.3-5.3
+		c-4.9-1.9-11.7-3.5-20.5-4.8c-27.9-4.4-55.9-6.3-84.1-5.8h-0.2c-1.9,0.2-4.9,0.3-9.1,0.2c-4.2,0.1-7.3,0-9.1-0.2h-0.1
+		c-28.2-0.5-56.2,1.5-84.1,5.8c-8.7,1.3-15.6,2.9-20.5,4.8c-4,1.5-7.1,3.3-9.3,5.3c-1.2,1.2-2.1,2.5-2.7,3.9
+		c-0.7,1.6-0.9,3.1-0.7,4.6c0.3,1.7,1.2,3.1,2.7,4.4c1.3,1.1,2.9,2,4.8,2.5c0,0,0.1,0,0.1,0.1c0.2-0.2,0.5-0.4,0.8-0.5
+		c1.5-0.6,3.9-1.3,7.1-2.2C-572.9,456.7-564,455-554.2,453.7z M-688.1,492.6c0.3,0.1,0.6,0.2,0.8,0.4c10.2-2.8,21.3-5.2,33.5-7
+		c10.6-1.6,23.8-3,39.6-4.3c0.3,0,0.6-0.1,0.9-0.1c6.6-0.5,11.9-0.7,15.9-0.7l6.5-0.4c2.8-0.1,5.4-0.2,7.8-0.2
+		c0.9-1.1,1.4-2.2,1.7-3.3c0.4-2.1-0.1-4.2-1.5-6.4c-1-1.5-2.6-3-4.7-4.7c-0.7-0.5-1.2-1-1.4-1.5c-0.1-0.2-0.1-0.4-0.2-0.6
+		c-2.5-0.4-4.6-1.4-6.5-3.2c-1.9-1.9-3-4-3.3-6.4c-0.2-1.8,0-3.7,0.8-5.6c0.5-1.1,1.1-2.2,1.8-3.2c2-1.8,4.1-3.5,6.1-5.2
+		c1.4-0.8,3-1.6,4.9-2.3c1.5-0.6,3.1-1.1,4.9-1.7c0-0.2,0.1-0.4,0.2-0.7l0.5-2c-3.7,0-8.9,0.1-15.7,0.2l-6.6,0.2
+		c-0.5,0.1-0.9,0.1-1.2,0c-16,1-29.6,2.2-40.8,3.6c-15.3,1.9-29.2,4.6-41.9,7.9c0,0-0.1,0.1-0.2,0.1c0,0.2-0.1,0.4-0.3,0.6
+		c-0.2,0.3-0.8,0.7-1.7,1.2c-2.7,1.5-5,3.5-6.8,6c-0.4,0.6-0.7,0.9-1,1.1c-0.2,0.2-0.4,0.3-0.6,0.4c-0.8,1.3-1.6,2.6-2.2,4.1
+		c-1.5,3.6-2.4,7.3-2.6,11.2c-0.2,5.1,0.8,9.5,3,13.4C-695.9,488.3-692.5,491.2-688.1,492.6z M-375.1,33.7c0.4,0,0.9,0.2,1.5,0.6
+		c0.7,0.2,1.5,0.4,2.4,0.5h1.7c0.7,0.2,1.2,0.5,1.4,0.9c0.1,0.3,0.1,0.7,0.1,1.2c-0.1,0.6-0.2,0.9-0.3,1.2v0.4
+		c0.1,0.2,0.2,0.5,0.1,0.8c0,0.2,0,0.5-0.1,0.8v0.1c0,0.5,0,0.9-0.1,1.3c0,1.1,0.4,2.2,1.2,3.3c0.9,1.2,2,2.1,3.4,2.5
+		c2.5,0.8,5.1,0.6,8.1-0.8c1.5-0.7,2.5-0.8,3.1-0.4c0.2,0.1,0.4,0.4,0.6,0.8c0.2,0.3,0.3,0.7,0.5,1.3c0.1,0.4,0.2,0.9,0.5,1.2
+		c0.4,0.8,1,1.5,1.8,2.1c1.1,0.9,2.3,1.5,3.7,1.7c1.4,0.2,2.8,0,4.2-0.5c1.3-0.5,2.4-1.3,3.3-2.4c0.2-0.2,0.4-0.4,0.5-0.5
+		c-0.1-0.1-0.2-0.3-0.2-0.4c0.2-0.4,0.4-0.8,0.5-1.2c0.2-0.6,0.3-1,0.5-1.3c0.2-0.4,0.3-0.7,0.5-0.8c0.6-0.5,1.6-0.4,3.1,0.4
+		c2.9,1.4,5.6,1.7,8.1,0.8c1.3-0.4,2.5-1.3,3.3-2.5c0.8-1.1,1.2-2.2,1.2-3.3c-0.1-0.4-0.1-0.8-0.1-1.3v-0.1c0-0.3-0.1-0.6-0.1-0.8
+		c-0.1-0.3-0.1-0.6,0.1-0.8v-0.4c0-0.2-0.1-0.6-0.3-1.2c-0.1-0.5-0.1-0.9,0.1-1.2c0.2-0.4,0.7-0.7,1.4-0.9h1.7
+		c0.9-0.1,1.7-0.2,2.4-0.5c0.6-0.4,1.1-0.6,1.5-0.6c1.6-0.6,2.9-1.6,4-3.1c1.1-1.6,1.4-3.2,1.1-4.9c-0.2-0.9-0.6-1.8-1.2-2.8
+		c-0.8-1.4-1.7-2.5-2.7-3.1c-1.3-1-2.6-1.3-3.9-1.1c-0.9,0.2-1.5,0.4-2,0.4c-0.6,0-1,0-1.4-0.1c-0.2-0.1-0.3-0.2-0.4-0.3
+		c-0.4-0.3-0.5-0.8-0.4-1.5c0-0.4,0.1-0.9,0.2-1.7c0.2-1.3-0.2-2.6-1.2-3.9c-0.9-1.2-2-2-3.3-2.4c-2.5-0.8-5.2-0.6-8.1,0.8
+		c-1.5,0.7-2.5,0.8-3.1,0.4c-0.2-0.1-0.4-0.4-0.5-0.8c-0.2-0.3-0.4-0.7-0.5-1.3V8.4c0.2-0.4,0.3-0.7,0.4-1.1c-0.3-0.2-0.7-0.5-1.2-1
+		c-0.9-1.1-2-1.9-3.3-2.4c-1.3-0.6-2.7-0.7-4.2-0.5c-1.4,0.2-2.6,0.8-3.7,1.7c-1.2,0.9-1.9,2-2.3,3.3v0.1c-0.2,0.6-0.3,1-0.5,1.3
+		c-0.2,0.4-0.4,0.7-0.6,0.8c-0.6,0.5-1.6,0.4-3.1-0.4c-2.9-1.4-5.6-1.7-8.1-0.8c-1.4,0.4-2.5,1.2-3.4,2.4c-0.9,1.2-1.3,2.5-1.2,3.9
+		c0.2,0.7,0.2,1.3,0.2,1.7c0,0.7-0.1,1.2-0.5,1.5c-0.1,0.1-0.2,0.2-0.3,0.3c-0.4,0.1-0.9,0.2-1.4,0.1c-0.4,0-1.1-0.2-2-0.4
+		c-1.3-0.3-2.6,0.1-3.9,1.1c-0.9,0.6-1.8,1.7-2.7,3.1c-0.6,0.9-1,1.9-1.2,2.8c-0.3,1.7,0.1,3.3,1.1,4.9
+		C-378,32.2-376.7,33.2-375.1,33.7z M-446,126.9c-0.9,0.9-1.4,2.1-1.6,3.4c-0.2,1.3,0,2.6,0.7,3.7c0,0.1,0.1,0.1,0.1,0.2
+		c0.7-0.2,1.5-0.4,2.4-0.6c7.2-1.4,14.4-2,21.7-1.8c5.5-0.3,12.9-0.3,22.2-0.1c0.7,0,1.3,0,2,0.1c7.5-0.2,15,0.4,22.4,1.8
+		c0.9,0.2,1.7,0.4,2.4,0.6c0,0,0.1-0.1,0.1-0.2c0.6-1.1,0.9-2.4,0.7-3.7c-0.2-1.4-0.7-2.5-1.6-3.4c-0.9-1-2.5-1.8-4.6-2.4
+		c-0.4-0.1-0.7-0.2-1.1-0.3c-0.5,0.1-1,0-1.6-0.2c-3.2-0.6-7.6-1-13.3-1.2c-13.4-0.5-26.9-0.2-40.6,0.8c-0.4,0-0.7,0-1.1,0
+		c-1.9,0.2-3.4,0.5-4.5,0.9C-443.5,125.1-445.1,125.9-446,126.9z M-700.1,226.4c1.5,1.1,3.1,1.7,5,2c1.9,0.2,3.6,0,5.3-0.6
+		c1.3-0.5,2.8-1.3,4.3-2.4c1.7-1.4,3-2.5,3.9-3.2c2.5-1.9,5-3.3,7.6-4.1c3-0.9,5.8-1,8.4-0.4c0.8,0.2,1.9,0.6,3.3,1.2
+		c1.5,0.6,2.6,1,3.3,1.2c3.6,1,7,0.7,10.2-0.9c0.9-0.5,2.2-1.3,3.7-2.4c1.7-1.2,2.9-2,3.7-2.4c2.1-1.1,4.3-1.8,6.7-2
+		c2.4-0.2,4.7,0.2,6.8,1.1c0.7,0.3,1.7,0.9,3,1.6c1.3,0.8,2.3,1.3,3,1.7c3.6,1.7,7.4,1.9,11.2,0.7c1.6-0.5,3.5-1.4,5.9-2.9
+		c2.8-1.7,4.7-2.8,5.7-3.3c2.6-1.3,5.4-1.9,8.3-2c3,0,5.8,0.6,8.2,2c0.7,0.4,1.8,1.1,3.1,2.1c1.4,1,2.4,1.7,3.1,2.1
+		c2.2,1.2,4.5,1.8,7.1,2c2.6,0.1,5-0.3,7.2-1.3c0.5-0.2,1.7-0.9,3.6-1.8c1.5-0.8,2.7-1.3,3.7-1.7c1.9-0.6,4.4-0.6,7.6-0.2
+		c2.5,0.4,4.3,0.9,5.5,1.7c0.8,0.5,1.7,1.4,2.8,2.6c1.3,1.4,2.2,2.3,2.7,2.8c1.9,1.7,4.4,2.7,7.2,3c2.7,0.3,5.3-0.1,7.9-1.1
+		c1-0.4,2.5-1.1,4.6-2.1c1.9-1,3.4-1.7,4.6-2.1c3.1-1,6.3-1,9.6-0.1c3.3,0.9,6,2.5,8.1,4.9c1.2,1.6,2.2,2.7,2.9,3.4
+		c1.2,1.2,2.7,2.2,4.4,2.8c1.7,0.6,3.4,0.8,5.1,0.7c3.3-0.3,6.1-1.6,8.3-4.1c-0.2-3.8-1-7.5-2.6-11c-1.1-2.4-2.4-4.7-4-6.7
+		c0,0-0.1,0-0.1-0.1l-1.2-0.8c-0.7-0.6-1.6-1.1-2.8-1.8c-0.7-0.4-1.7-0.9-3-1.5c-0.3-0.2-0.6-0.4-0.8-0.6c0,0-0.1,0-0.1,0
+		c-0.2,0-0.5-0.1-0.7-0.2c-0.4-0.1-0.8-0.2-1.2-0.3l-39.8-7.5c-0.3,0-0.7-0.1-1-0.1c-11.3-1.4-25-2.6-41.1-3.7
+		c-0.3,0.1-0.8,0.2-1.4,0.2l-27.3-0.1c-0.4,0-0.8,0-1.1-0.1l-0.5,0.1c-0.4,0-0.8,0-1.1,0c-1,0.1-2.1,0.1-3.1,0.2l-37.7,3.4
+		c-0.4,0.1-0.9,0.1-1.3,0.2c-0.5,0.1-1,0.1-1.5,0.2l-37.5,7.1c-0.6,0.1-1.1,0.3-1.7,0.4c-0.2,0.1-0.4,0.2-0.7,0.2
+		c-0.7,0.2-1.5,0.4-2.3,0.7c-0.1,0-0.2,0-0.4,0.1c-0.8,0.7-1.6,1.3-2.3,1.8c-1.5,1.1-2.5,1.8-2.8,2.3c-0.4,0.6-0.7,0.9-0.8,1
+		c-0.2,0.2-0.4,0.3-0.6,0.4c-1.1,1.6-2.1,3.4-2.9,5.3c-1.5,3.6-2.4,7.3-2.6,11.2c0,0.3,0,0.6-0.1,0.9
+		C-701.1,225.8-700.7,226-700.1,226.4z M-292.1,129.3c4.3,0.8,8.4,2.7,12.3,5.7c0.2-0.6,0.4-1.1,0.6-1.5c0.6-1.2,1.5-2.3,2.7-3.4
+		c0.3-0.3,1.4-1.3,3.4-2.9c3-2.5,4.7-4.8,5.2-7c0.3-1.3,0.3-2.8-0.1-4.4c-0.9-3.6-2.9-6.5-6-8.6c-3.2-2.1-6.6-2.8-10.3-2.1
+		c-2.2,0.4-4.2,1.3-5.9,2.7c-1.9,1.5-3,3.3-3.5,5.4c-0.2,1-0.3,2.2-0.2,3.7c0.1,1.7,0.2,3,0.2,3.8c0.1,3.2-0.6,6-2.1,8.3
+		C-294.6,129-293.3,129.1-292.1,129.3z M-280.4,145c0.4-0.3,0.9-0.5,1.4-0.7l2.1-1c-0.2-0.6-0.5-1.2-0.7-1.6
+		c-0.6-1.1-1.6-2.2-2.8-3.2c-0.4-0.3-0.8-0.7-1.2-1c-0.2,0.3-0.4,0.7-0.8,0.9c-0.4,0.3-1.1,0.7-2.1,1.3c-0.9,0.5-1.6,0.9-2.1,1.3
+		l-1.1,1l-3,2c-1.6,0.9-2.7,1.7-3.4,2.4c-0.1,0.1-0.2,0.2-0.3,0.2c2.3,1.1,4.4,2.4,6.2,3.9c0.2-0.1,0.5-0.3,0.8-0.5l2.6-1.6
+		c0.2-0.1,0.6-0.5,1.2-1.2l2.2-1.7L-280.4,145z M-310.9,141.8c0,0.5,0,1.3,0.2,2.4c0.7-0.1,1.3-0.2,2-0.2c0.1-0.2,0.3-0.5,0.7-0.9
+		c0.8-0.9,1.7-1.8,2.8-2.7l6.2-4.9c1.7-1.2,3.4-2.3,5.2-3.3c-3.9-0.4-7.5,0.1-10.8,1.7c-1.7,0.8-3.2,1.9-4.3,3.1
+		C-310.3,138.5-310.9,140.1-310.9,141.8z M166.2-54.2c0.3,0.4,0.5,0.7,0.5,0.9c2.2-1.8,4.6-3.3,7.3-4.6c6.3-3.1,13.9-4.8,22.9-5.1
+		c0.1,0,0.2,0,0.2,0c0.3,0,0.7,0,1,0h2c0.3,0,0.7,0,1,0c0.1,0,0.2,0,0.2,0c9,0.3,16.6,2,22.9,5.1c2.6,1.3,5.1,2.9,7.2,4.7
+		c0.1-0.3,0.3-0.6,0.6-1c0.8-1.1,1.2-2.3,1.3-3.7c0.1-1.4-0.2-2.7-0.8-3.9c-0.2-0.4-0.9-1.3-2.1-2.7l-2.6-2.7
+		c-1.2-1.2-2-2.3-2.3-3.3c-0.7-1.9-0.3-4.2,1.3-7c0.4-0.7,1.1-1.8,2-3.1c0.8-1.2,1.3-2.3,1.7-3.3c0.7-2.3,0.6-4.7-0.4-7.2
+		c0,0,0,0,0,0c-0.9-2.2-3.1-3.7-5.4-4.1l-16.9-2.9c-5.8-1-11.7-1-17.4,0l-16.9,2.9c-2.4,0.4-4.5,1.9-5.4,4.1c0,0,0,0,0,0
+		c-1,2.5-1.1,4.9-0.4,7.2c0.3,0.9,0.9,2,1.7,3.3c0.9,1.4,1.6,2.4,2,3.1c1.6,2.8,2.1,5.1,1.3,7c-0.3,0.9-1.1,2-2.3,3.3l-2.6,2.7
+		c-1.2,1.4-1.9,2.3-2.1,2.7c-0.7,1.2-0.9,2.5-0.8,3.9C165-56.6,165.4-55.3,166.2-54.2z"/>
+</g>
+<linearGradient id="SVGID_00000041261679772444084380000016484410559686694817_" gradientUnits="userSpaceOnUse" x1="250" y1="173.1362" x2="250" y2="524.9227">
+	<stop  offset="0" style="stop-color:#002E22;stop-opacity:0"/>
+	<stop  offset="1" style="stop-color:#002E22"/>
+</linearGradient>
+<rect y="171.2" style="fill:url(#SVGID_00000041261679772444084380000016484410559686694817_);" width="335" height="353.3"/>
+<rect class="st3" width="335" height="540"/>
+<linearGradient id="SVGID_00000182509312424644786480000014944950517101021588_" gradientUnits="userSpaceOnUse" x1="250" y1="55.8162" x2="250" y2="525.0638">
+	<stop  offset="0" style="stop-color:#002E22;stop-opacity:0"/>
+	<stop  offset="1" style="stop-color:#002E22"/>
+</linearGradient>
+<rect y="53.2" style="fill:url(#SVGID_00000182509312424644786480000014944950517101021588_);" width="335" height="471.3"/>
+</svg>
diff --git a/assets/images/new-expensify-adhoc.svg b/assets/images/new-expensify-adhoc.svg
index 26f18c8cc088..d3a926a097ec 100644
--- a/assets/images/new-expensify-adhoc.svg
+++ b/assets/images/new-expensify-adhoc.svg
@@ -1,6 +1,6 @@
 <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" id="Layer_1" width="80" height="80" x="0" y="0" style="enable-background:new 0 0 80 80" version="1.1">
   <style>
-    .st2{fill:#002e22}
+    .st2{fill:#03D47C}
   </style>
   <defs>
     <path id="SVGID_1_" d="M0 0h80v80H0z"/>
diff --git a/assets/images/new-expensify-dark.svg b/assets/images/new-expensify-dark.svg
index bcdb3c87f164..ad34f1d9dfce 100644
--- a/assets/images/new-expensify-dark.svg
+++ b/assets/images/new-expensify-dark.svg
@@ -1,29 +1,10 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 26.5.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-     viewBox="0 0 80 80" style="enable-background:new 0 0 80 80;" xml:space="preserve">
-<style type="text/css">
-	.st0{clip-path:url(#SVGID_00000139978272494792967570000017408633430176651448_);}
-	.st1{fill:#002E22;}
-</style>
-    <g>
-	<defs>
-		<rect id="SVGID_1_" x="0.8" width="80" height="80"/>
-	</defs>
-        <clipPath id="SVGID_00000144338341264450383030000002729908262559559608_">
-		<use xlink:href="#SVGID_1_"  style="overflow:visible;"/>
-	</clipPath>
-        <g style="clip-path:url(#SVGID_00000144338341264450383030000002729908262559559608_);">
-		<path class="st1" d="M54.9,28.2v-8.3H26.6v40.3h28.2v-8.3H37v-7.7h14.4v-8.5H37v-7.3H54.9z"/>
-            <path class="st1" d="M40.8,6.5C40.8,6.5,40.8,6.5,40.8,6.5c7.1,0,13.7,2.2,19.2,6c1.4,1,3.3,0.9,4.5-0.3l0,0
-			c1.3-1.3,1.3-3.5-0.3-4.7C57.5,2.8,49.5,0,40.8,0c-22.1,0-40,17.9-40,40c0,8.7,2.8,16.8,7.5,23.3c1.1,1.5,3.3,1.6,4.7,0.3l0,0
-			c1.2-1.2,1.3-3.1,0.3-4.5c-3.8-5.4-6-12-6-19.2C7.3,21.5,22.2,6.5,40.8,6.5C40.7,6.5,40.8,6.5,40.8,6.5L40.8,6.5z"/>
-            <path class="st1" d="M73.7,17.4c-1.1-1.6-3.4-1.7-4.7-0.3l0,0c-1.2,1.2-1.3,3-0.4,4.4c3.5,5.3,5.6,11.7,5.6,18.5
-			c0,6.8-2.1,13.4-5.8,18.8c-0.9,1.4-0.9,3.3,0.3,4.5l0,0c1.4,1.4,3.6,1.3,4.7-0.3c4.6-6.5,7.3-14.4,7.3-23
-			C80.8,31.5,78.2,23.8,73.7,17.4z"/>
-            <path class="st1" d="M40.8,73.5c-6.8,0-13.2-2.1-18.5-5.6c-1.4-0.9-3.3-0.8-4.4,0.4l0,0c-1.4,1.4-1.3,3.6,0.3,4.7
-			c6.4,4.4,14.2,7,22.6,7c8.4,0,16.4-2.7,23-7.3c1.6-1.1,1.7-3.3,0.3-4.7l0,0c-1.2-1.2-3.1-1.3-4.5-0.3
-			C54.2,71.3,47.7,73.5,40.8,73.5z"/>
-	</g>
-</g>
+<svg
+    xmlns="http://www.w3.org/2000/svg"
+    fill="none"
+    viewBox="0 0 80 80"
+>
+    <path
+        d="M59.267 12.504a33.692 33.692 0 0 0-19.223-6 33.49 33.49 0 0 0-23.706 9.748 33.38 33.38 0 0 0-9.839 23.644c0 7.2 2.211 13.808 6.008 19.2a3.477 3.477 0 0 1-.297 4.504c-1.402 1.304-3.604 1.2-4.71-.304a39.951 39.951 0 0 1-3.079-41.573A40.01 40.01 0 0 1 19.176 5.86 40.077 40.077 0 0 1 40.044 0c8.714.008 16.724 2.808 23.428 7.504 1.602 1.2 1.602 3.408.304 4.704a3.486 3.486 0 0 1-4.51.304v-.008Zm-5.11 7.392V28.4H36.239v7.304h14.417V44.2H36.24v7.704h17.822V60.2H25.825V19.896h28.339-.008ZM72.979 17.4a3.025 3.025 0 0 0-3.6-1.063c-.42.168-.796.427-1.101.759a3.477 3.477 0 0 0-.4 4.4C71.384 26.8 73.483 33.2 73.483 40c0 6.8-2.107 13.4-5.807 18.8-.905 1.4-.905 3.304.304 4.504 1.402 1.4 3.605 1.296 4.702-.304a39.567 39.567 0 0 0 7.313-23c.122-8.085-2.332-16-7.009-22.6h-.008ZM21.525 67.904c5.31 3.496 11.718 5.6 18.527 5.6 6.912 0 13.416-2.2 18.822-5.8a3.487 3.487 0 0 1 4.51.296c1.401 1.4 1.297 3.6-.305 4.704A40.379 40.379 0 0 1 40.044 80a39.883 39.883 0 0 1-22.628-7c-1.601-1.104-1.706-3.304-.304-4.704 1.105-1.2 3.004-1.296 4.405-.4l.008.008Z"
+        fill="#002E22"
+    />
 </svg>
diff --git a/assets/images/simple-illustrations/simple-illustration__handearth.svg b/assets/images/simple-illustrations/simple-illustration__handearth.svg
new file mode 100644
index 000000000000..f79e3f73293b
--- /dev/null
+++ b/assets/images/simple-illustrations/simple-illustration__handearth.svg
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 27.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 68 68" style="enable-background:new 0 0 68 68;" xml:space="preserve">
+<style type="text/css">
+	.st0{fill:#906630;}
+	.st1{fill:none;stroke:#002140;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;}
+	.st2{fill:#0180FF;}
+	.st3{fill:#5CDBA3;}
+	.st4{fill:none;stroke:#002140;stroke-width:0.9999;stroke-linecap:round;stroke-linejoin:round;}
+</style>
+<path class="st0" d="M5.3,60.4c0,0-0.9,2.1,1.1,2.1h14.5c0,0,0.5,0,1-0.6c0.5-0.6,5.7-8.4,5.7-8.4s0.8-0.6,1.4-0.6h15.7
+	c0,0,1.5-1.1,1.3-2.3h2.5c0,0,1.5-1,1.1-2.4l1.4-0.4c0,0,1.3-0.8,1.1-1.5c-0.1-0.8-1.3-1.8-1.8-1.8h-2.3c0,0,0.4-2.5-2.1-2.6
+	c-2.5-0.1-24.9,0-24.9,0l3.1-7.6c0,0-0.5-1.6-1.6-1.5c-1.1,0.1-1.9,1.1-1.9,1.1L5.3,60.4z"/>
+<path class="st1" d="M28.6,52.8h15.6c0.9,0,1.7-0.8,1.7-1.7c0-0.9-0.8-1.7-1.7-1.7H32.2"/>
+<path class="st1" d="M46,50.5h2c0.9,0,1.7-0.8,1.7-1.7s-0.8-1.7-1.7-1.7H36.1"/>
+<path class="st1" d="M49.7,47.9h0.7c0.9,0,1.7-0.8,1.7-1.7c0-0.9-0.8-1.7-1.7-1.7H38.5"/>
+<path class="st1" d="M47.9,44.4c0.1-0.3,0.2-0.5,0.2-0.9c0-0.9-0.8-1.7-1.7-1.7H21"/>
+<path class="st1" d="M20.3,43l3.4-7.4c0,0,0.9-2-0.4-2.6c-1.4-0.7-2.1,0.2-2.5,0.9C18.1,38.3,8.4,54.5,5.2,60.7
+	c-0.5,0.9,0.2,2,1.2,2h14.5c0.5,0,0.9-0.2,1.2-0.6l5.4-8.6c0.2-0.4,0.7-0.6,1.2-0.6"/>
+<path class="st2" d="M41.8,37.1c8.1,0,14.7-6.6,14.7-14.7S49.9,7.6,41.8,7.6C33.6,7.6,27,14.2,27,22.4S33.6,37.1,41.8,37.1z"/>
+<path class="st3" d="M33.5,34.9c0,0,3.4-2.1,4-3c0.6-0.9,0.8-5,3.2-5.5s9.2,1.4,10.1-1.9c1-3.3-2.2-5.5-2.2-5.5s-2.5-2.4-2.1-3.3
+	c0.5-1,1.9-5.4,1-6.2c-1-0.8-5.7-1.7-5.7-1.7s-9.7-1.4-14.3,8.1C22.9,25.2,30.4,33.6,33.5,34.9z"/>
+<path class="st3" d="M48.4,30c0,0-5.2,2.1-5.7,3.3c-0.5,1.3-1,3.8-1,3.8s7.6-1.4,9-3c1.4-1.6,4.1-6.7,4.1-6.7S50.8,27.3,48.4,30
+	L48.4,30z"/>
+<path class="st4" d="M41.1,37.2c8.3,0,15.1-6.8,15.1-15.1S49.4,7,41.1,7C32.8,7,26,13.8,26,22.1S32.8,37.2,41.1,37.2z"/>
+<path class="st4" d="M45.5,7.7c1.2,0.6,2.5,1.4,2.8,2.7c0.6,2.3-2.4,4.6-1.5,6.8c0.5,1.3,2,1.7,3,2.7c1.1,1,1.4,2.7,0.9,4.1
+	c-0.5,1.4-1.9,2.4-3.4,2.5c-1.4,0.1-2.8-0.7-4.2-0.7c-1.8-0.1-3.6,1.1-4.3,2.8c-0.3,0.7-0.4,1.6-0.7,2.3c-0.7,2-2.6,3.6-4.7,3.9"/>
+<path class="st4" d="M41.9,36.6c0.1-2.8,2.3-5.4,5-6c0.5-0.1,1.1-0.2,1.5-0.4c0.5-0.3,0.9-0.7,1.3-1.1c1.4-1.4,3.5-2,5.4-1.8"/>
+</svg>
diff --git a/contributingGuides/REGRESSION_TEST_BEST_PRACTICES.md b/contributingGuides/REGRESSION_TEST_BEST_PRACTICES.md
index 842fa711ba15..f4f591d10e8e 100644
--- a/contributingGuides/REGRESSION_TEST_BEST_PRACTICES.md
+++ b/contributingGuides/REGRESSION_TEST_BEST_PRACTICES.md
@@ -43,7 +43,7 @@ Example:
 For the test case steps we're asking to be created by the contributor whose PR solved the bug, it'll fall into a category known as bug fix verification. As such, the steps that should be proposed should contain the action element `Verify` and should be tied to the expected behavior in question. 
 The steps should be broken out by individual actions taking place with the written style of communicating exact steps someone will replicate. As such, simplicity and succinctness is key. 
 
-Here are some below examples to illustrate the writing style that covers this:
+Below are some examples to illustrate the writing style that covers this:
 - Bug: White space appears under compose box when scrolling up in any conversation
 - Proposed Test Steps:
   - Go to URL https://staging.new.expensify.com/
diff --git a/desktop/ELECTRON_EVENTS.js b/desktop/ELECTRON_EVENTS.js
index 6a808bdb99aa..ee8c0521892e 100644
--- a/desktop/ELECTRON_EVENTS.js
+++ b/desktop/ELECTRON_EVENTS.js
@@ -6,7 +6,7 @@ const ELECTRON_EVENTS = {
     REQUEST_FOCUS_APP: 'requestFocusApp',
     REQUEST_UPDATE_BADGE_COUNT: 'requestUpdateBadgeCount',
     REQUEST_VISIBILITY: 'requestVisibility',
-    SHOW_KEYBOARD_SHORTCUTS_MODAL: 'show-keyboard-shortcuts-modal',
+    KEYBOARD_SHORTCUTS_PAGE: 'keyboard-shortcuts-page',
     START_UPDATE: 'start-update',
     UPDATE_DOWNLOADED: 'update-downloaded',
 };
diff --git a/desktop/contextBridge.js b/desktop/contextBridge.js
index 3f2748ef05b5..a8b89cdc0b64 100644
--- a/desktop/contextBridge.js
+++ b/desktop/contextBridge.js
@@ -11,7 +11,7 @@ const WHITELIST_CHANNELS_RENDERER_TO_MAIN = [
     ELECTRON_EVENTS.LOCALE_UPDATED,
 ];
 
-const WHITELIST_CHANNELS_MAIN_TO_RENDERER = [ELECTRON_EVENTS.SHOW_KEYBOARD_SHORTCUTS_MODAL, ELECTRON_EVENTS.UPDATE_DOWNLOADED, ELECTRON_EVENTS.FOCUS, ELECTRON_EVENTS.BLUR];
+const WHITELIST_CHANNELS_MAIN_TO_RENDERER = [ELECTRON_EVENTS.KEYBOARD_SHORTCUTS_PAGE, ELECTRON_EVENTS.UPDATE_DOWNLOADED, ELECTRON_EVENTS.FOCUS, ELECTRON_EVENTS.BLUR];
 
 const getErrorMessage = (channel) => `Electron context bridge cannot be used with channel '${channel}'`;
 
diff --git a/desktop/main.js b/desktop/main.js
index 36b70b37afc5..f2c11e73e513 100644
--- a/desktop/main.js
+++ b/desktop/main.js
@@ -174,11 +174,11 @@ const manuallyCheckForUpdates = (menuItem, browserWindow) => {
  * Trigger event to show keyboard shortcuts
  * @param {BrowserWindow} browserWindow
  */
-const showKeyboardShortcutsModal = (browserWindow) => {
+const showKeyboardShortcutsPage = (browserWindow) => {
     if (!browserWindow.isVisible()) {
         return;
     }
-    browserWindow.webContents.send(ELECTRON_EVENTS.SHOW_KEYBOARD_SHORTCUTS_MODAL);
+    browserWindow.webContents.send(ELECTRON_EVENTS.KEYBOARD_SHORTCUTS_PAGE);
 };
 
 // Actual auto-update listeners
@@ -330,9 +330,9 @@ const mainWindow = () => {
                             {
                                 id: 'viewShortcuts',
                                 label: Localize.translate(preferredLocale, `desktopApplicationMenu.viewShortcuts`),
-                                accelerator: 'CmdOrCtrl+I',
+                                accelerator: 'CmdOrCtrl+J',
                                 click: () => {
-                                    showKeyboardShortcutsModal(browserWindow);
+                                    showKeyboardShortcutsPage(browserWindow);
                                 },
                             },
                             {type: 'separator'},
diff --git a/docs/articles/expensify-classic/account-settings/Merge-Accounts.md b/docs/articles/expensify-classic/account-settings/Merge-Accounts.md
index 073c74346d75..7fc355b30bd9 100644
--- a/docs/articles/expensify-classic/account-settings/Merge-Accounts.md
+++ b/docs/articles/expensify-classic/account-settings/Merge-Accounts.md
@@ -1,5 +1,33 @@
 ---
 title: Merge Accounts
-description: Merge Accounts
+description: How to merge two Expensify accounts and why this is useful.
 ---
-## Resource Coming Soon!
+
+# Overview
+
+Merging accounts allows you to combine two accounts. When you combine two accounts, all receipts, expenses, expense reports, invoices, bills, imported cards, secondary logins, co-pilots, and group policy settings will be combined into one account. 
+This can be useful if you start off with an account of your own but your organization creates a separate account for you. You can then track both personal and business expenses via one account. 
+
+# How to merge accounts
+Merging two accounts together is fairly straightforward. Let’s go over how to do that below:
+1. Navigate to [expensify.com](https://www.expensify.com)
+2. Log into the account you want to set as the Primary account
+3. Navigate to Settings > Account > Account Details
+4. Scroll down to the Merge Accounts section and fill in the fields. Once you click Merge, a magic code link will be sent to you via email and you'll be prompted to enter the magic code
+5. Copy the magic code, switch back to the expensify.com page, and paste the code into the required field
+6. Click Merge Accounts
+If you have any questions about this process, feel free to reach out to Concierge for some assistance!
+
+# FAQ
+## Can you merge accounts from the mobile app?
+No, accounts can only be merged from the full website at expensify.com.
+## Can I administratively merge two accounts together?
+No, only the account holder (user) can perform account merging.
+## Is merging accounts reversible?
+No, merging accounts is not reversible. It is a permanent action that cannot be undone.
+## Are there any restrictions on account merging?
+Yes! Please see below:
+* If your email address belongs to a verified domain (verified in Expensify), you must start the process from the email account under the verified domain. You cannot merge a verified company email account into a personal account.
+* If you have two accounts with two different verified domains, you cannot merge them together.
+## What happens to my “personal” Individual policy when merging accounts?
+The old “personal” Individual policy will be deleted. If you plan to submit reports under a different policy in the future, ensure that any reports on the Individual policy in the old account are marked as Open before merging the accounts. You can typically do this by selecting “Undo Submit” on any submitted reports. 
diff --git a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/business-bank-accounts/Add-a-Business-Bank-Account-(AUD).md b/docs/articles/expensify-classic/bank-accounts-and-credit-cards/business-bank-accounts/Add-a-Business-Bank-Account-(AUD).md
index 6f0c738693ca..1fa5734293ac 100644
--- a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/business-bank-accounts/Add-a-Business-Bank-Account-(AUD).md
+++ b/docs/articles/expensify-classic/bank-accounts-and-credit-cards/business-bank-accounts/Add-a-Business-Bank-Account-(AUD).md
@@ -7,16 +7,17 @@ description: This article provides insight on setting up and using an Australian
 A withdrawal account is the business bank account that you want to use to pay your employee reimbursements. 
 
 _Your policy currency must be set to AUD and reimbursement setting set to Indirect to continue. If your main policy is used for something other than AUD, then you will need to create a new one and set that policy to AUD._ 
+
 To set this up, you’ll run through the following steps:
 
-1. Go to *Settings > Your Account > Payments* and click *Add Verified Bank Account*
+1. Go to **Settings > Your Account > Payments** and click **Add Verified Bank Account**
 ![Click the Verified Bank Account button in the bottom right-hand corner of the screen](https://help.expensify.com/assets/images/add-vba-australian-account.png){:width="100%"}
 
 2. Enter the required information to connect to your business bank account. If you don't know your Bank User ID/Direct Entry ID/APCA Number, please contact your bank and they will be able to provide this.
 ![Enter your information in each of the required fields](https://help.expensify.com/assets/images/add-vba-australian-account-modal.png){:width="100%"}
 
-3. Link the withdrawal account to your policy by heading to *Settings > Policies > Group > [Policy name] > Reimbursement*
-4. Click *Direct* reimbursement
+3. Link the withdrawal account to your policy by heading to **Settings > Policies > Group > [Policy name] > Reimbursement**
+4. Click **Direct reimbursement**
 5. Set the default withdrawal account for processing reimbursements 
 6. Tell your employees to add their deposit accounts and start reimbursing. 
 
@@ -24,7 +25,7 @@ To set this up, you’ll run through the following steps:
 If you’re no longer using a bank account you previously connected to Expensify, you can delete it by doing the following:
 
 1. Navigate to Settings > Accounts > Payments 
-2. Click *Delete* 
+2. Click **Delete** 
 ![Click the Delete button](https://help.expensify.com/assets/images/delete-australian-bank-account.png){:width="100%"}
 
 You can complete this process either via the web app (on a computer), or via the mobile app.
@@ -34,14 +35,14 @@ You can complete this process either via the web app (on a computer), or via the
 
 If you are new to using Batch Payments in Australia, to reimburse your staff or process payroll, you may want to check out these bank-specific instructions for how to upload your .aba file:
 
-ANZ Bank - [Import a file for payroll payments](https://www.anz.com.au/support/internet-banking/pay-transfer-business/payroll/import-file/)
-CommBank - [Importing and using
 Direct Entry (EFT) files](https://www.commbank.com.au/business/pds/003-279-importing-a-de-file.pdf)
-Westpac - [Importing Payment Files](https://www.westpac.com.au/business-banking/online-banking/support-faqs/import-files/)
-NAB - [Quick Reference Guide - Upload a payment file](https://www.nab.com.au/business/online-banking/nab-connect/help)
-Bendigo Bank - [Bulk payments user guide](https://www.bendigobank.com.au/globalassets/documents/business/bulk-payments-user-guide.pdf)
-Bank of Queensland - [Payments file upload facility FAQ](https://www.boq.com.au/help-and-support/online-banking/ob-faqs-and-support/faq-pfuf)
+- ANZ Bank - [Import a file for payroll payments](https://www.anz.com.au/support/internet-banking/pay-transfer-business/payroll/import-file/)
+- CommBank - [Importing and using
 Direct Entry (EFT) files](https://www.commbank.com.au/business/pds/003-279-importing-a-de-file.pdf)
+- Westpac - [Importing Payment Files](https://www.westpac.com.au/business-banking/online-banking/support-faqs/import-files/)
+- NAB - [Quick Reference Guide - Upload a payment file](https://www.nab.com.au/business/online-banking/nab-connect/help)
+- Bendigo Bank - [Bulk payments user guide](https://www.bendigobank.com.au/globalassets/documents/business/bulk-payments-user-guide.pdf)
+- Bank of Queensland - [Payments file upload facility FAQ](https://www.boq.com.au/help-and-support/online-banking/ob-faqs-and-support/faq-pfuf)
 
-*Note:* Some financial institutions require an ABA file to include a *self-balancing transaction*. If you are unsure, please check with your bank to ensure whether to tick this option or not, as selecting an incorrect option will result in the ABA file not working with your bank's internet banking platform.
+**Note:** Some financial institutions require an ABA file to include a *self-balancing transaction*. If you are unsure, please check with your bank to ensure whether to tick this option or not, as selecting an incorrect option will result in the ABA file not working with your bank's internet banking platform.
 
 ## Enable Global Reimbursement
 
diff --git a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Commercial-Card-Feeds.md b/docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Commercial-Card-Feeds.md
index 25d11561755d..741def35581e 100644
--- a/docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Commercial-Card-Feeds.md
+++ b/docs/articles/expensify-classic/bank-accounts-and-credit-cards/company-cards/Commercial-Card-Feeds.md
@@ -2,4 +2,117 @@
 title: Commercial Card Feeds
 description: Commercial Card Feeds
 ---
-## Resource Coming Soon!
+# Overview
+A Commercial Card Feed is a connection that’s established directly between Expensify and your bank. This type of connection is considered the most reliable way to import company card expenses. Commercial Card Feeds cannot be interrupted by common changes on the bank’s side such as updating login credentials or a change in the bank’s UI.
+
+The easiest way to confirm if your company card program is eligible for a commercial bank feed is to ask your bank directly. If your company uses a commercial card program that isn’t with one of our Approved! Banking Partners (which supports connecting the feed via login credentials), the best way to import your company cards is by setting up a direct Commercial Card Feed between Expensify and your bank.
+
+# How to set up a Commercial Card Feed 
+Before setting up a Commercial Card Feed, you’ll want to set up your domain in Expensify. You can do this by going to Settings > Domains > New Domain.
+
+After the domain is set up in Expensify, you can follow the instructions that correspond with your company’s card program.
+
+# How to set up a MasterCard Commercial Feed 
+Your bank will need to access MasterCard's SmartData portal to complete the process. Expensify is a registered vendor in the portal, so neither you, your bank, nor Expensify need to complete any MasterCard forms. (Your bank may have its own form between you and the bank, though.)
+
+These are the steps you'll need to follow for a MasterCard feed:
+- Contact your banking relationship manager and request that your CDF (Common Data File) feed be sent directly to Expensify in the MasterCard SmartData Portal (file type: CDF version 3 Release 11.01). Please also specify the date of the earliest transactions you require in the feed. 
+- The bank will initiate feed delivery by finding Expensify in MasterCard's online portal. Once this is done, the bank will email you the distribution ID.
+- While you're waiting for your bank, make sure to set up a domain in Expensify -- it's required for us to be able to add the card feed to your account!
+- Once you have the distribution ID, send it to us using the submission form here.
+- We will connect the feed once we receive the file details and notify you when the feed is enabled. 
+
+# How to set up a Visa Commercial Feed
+These are the steps you'll need to follow for a Visa feed:
+- Contact your banking relationship manager and request that your VCF (Variant Call Format) feed be sent directly to Expensify. Feel free to share this information with them: "There is a check box in your bank's Visa Subscription Management portal that they, or their BPS team, can select to enable the feed. This means there is no need for a test file because Visa already has agreements with 3rd parties who receive the files."
+- Ask your bank to send you the "feed filename" OR the raw file information. You'll need the Processor, Financial Institution (Bank), and Company IDs; these are available in Visa Subscription Management if your relationship manager is still looking for them.
+- Once you have the file information, send it to us using the submission form here.
+- While you're waiting for your bank, make sure to set up a domain -- it's required for us to be able to add the feed to your account!
+- We will connect the feed once we receive these details and notify you when the feed is enabled. 
+
+# How to set up an American Express corporate feed 
+To begin the process, you'll need to fill out Amex's required forms and send them to Amex so they can start processing your feed. You can download the forms here. 
+
+Below are instructions for filling out each page of the Amex form:
+- PAGE 1
+  - Corporation Name = the legal name of your company on file with American Express
+  - Corporation Address = the legal address of your company
+  - Requested Feed Start Date = the date you want transactional data to start feeding into Expensify. If you'd like historical data, be sure to date back as far as you'd prefer. You must put this date in an international date format (i.e., DD/MM/YY or spelled out January 1, 1900) to ensure the correct date.
+  - Requestor Contact = the name of the individual party completing the request
+  - Email address = the email address of the individual party completing the request
+  - Control Account Number = the master or basic control account number corresponding to the cards you'd like to be on the feed. Please note this will not be a credit card number. If you need help with the correct control account number, please contact Amex.
+- PAGE 2
+  - No information required
+- PAGE 3
+  - Client Registered Name = the legal name of your company on file with American Express
+  - Master Control Account or Basic Control Account = same as from page 1; the master or basic control account number corresponding to the cards you'd like to be on the feed. Please note this will not be a credit card number. If you need help with the correct control account number, please contact Amex.
+- PAGE 4
+  - Country List = the name of the country in which the account for which you're requesting a feed originates
+  - Client Authorization = please complete your full first and last name, job title, and date (note, put this date in an international date format--i.e., DD/MM/YY). Sign in the area provided.
+
+Once you've completed the forms, send them to electronictransmissionsteam@aexp.com and indicate you want to set up a Commercial Card feed for your company. You should receive a confirmation message from them within a day or two with contact and tracking information. 
+
+While you're waiting for Amex, make sure to set up a domain -- it's required for us to be able to add the feed to your account.
+
+Once the feed is complete, Amex will send you a Production Letter. This will have the feed information in it, which will look something like this:
+R123456_B123456789_GL1025_001_$DATE$$TIME$_$SEQ$
+
+Once you have the filename, send it to us using the submission form here.
+
+# How to assign company cards
+After connecting your company cards with Expensify, you can assign each card to its respective cardholder. 
+To assign cards go to Settings > Domains > [Your domain] > Company Cards.
+If you have more than one card feed, select the correct feed in the drop-down list in the Company Card section. 
+Once you’ve selected the appropriate feed, click the `Assign New Cards` button to populate the emails and last four digits of the cardholder. 
+Select the cardholder
+You can search the populated list for all employees' email addresses. Please note that the employee will need to have an email address under this Domain in order to assign a card to them.
+Select the card
+You can search the list using the last 4 digits of the card number. If no transactions have posted on the card then the card number will not appear in the list. You can instead assign the card by typing in the full card number in the field.
+Note: if you're assigning a card by typing in the full PAN (the full card number), press the ENTER key on your keyboard after. The field may clear itself after pressing ENTER, but click Assign anyway and then verify that the assignment shows up in the cardholder table.
+
+## Set the transaction start date (optional)
+Any transactions that were posted prior to this date will not be imported into Expensify. If you do not make a selection, it will default to the earliest available transactions from the card. Note: We can only import data for the time period the bank is releasing to us. It's not possible to override the start date the bank has provided via this tool.
+
+Click the Assign button
+Once assigned, you will see each cardholder associated with their card as well as the start date listed.
+
+If you're using a connected accounting system such as NetSuite, Xero, Intacct, Quickbooks Desktop, or QuickBooks Online, you can also connect the card to export to a specific credit card GL account.
+
+Go to Settings > Domains > [Domain name] > Company Cards
+Click Edit Exports on the right-hand side of the card table and select the GL account you want to export expenses to.
+You're all done. After the account is set, exported expenses will be mapped to the specific account selected when exported by a Domain Admin.
+
+# How to unassign company cards
+Before you begin the unassigning process, please note that unassigning a company card will delete any unsubmitted (Open or Unreported) expenses in the cardholder's account.
+
+If you need to unassign a certain card, click the Actions button associated with the card in question and then click "Unassign."
+
+To completely remove the card connection, unassign every card from the list and then refresh the page.
+
+Note: If expenses are Processing and then rejected, they will also be deleted when they're returned to an Open state as the card they're linked to no longer exists.
+
+# FAQ
+
+## My Commercial Card feed is set up. Why is a specific card not coming up when I try to assign it to an employee?
+Cards will appear in the drop-down when activated and have at least one posted transaction. If the card is activated and has been used for a while and you're still not seeing it, please reach out to your Account Manager or message concierge@expensify.com for further assistance.
+
+## Is there a fee for utilizing Commercial Card Feeds? 
+Nope! Commercial Card Feed setup comes at no extra cost and is a part of the Corporate Workspace pricing.
+
+## What is the difference between Commercial Card feeds and your direct bank connections? 
+The direct bank connection is a connection set up with your login credentials for that account, while the Commercial Card feed is set up by your bank requesting that Visa/MasterCard/Amex send a daily transaction feed to Expensify. The former can be done without the assistance of your bank or Expensify, but the latter requires effort from your bank and Expensify to get set up.
+
+## I have a Small Business Amex account. Am I eligible to set up a Commercial Card feed? 
+If you have a Small Business or Triumph account, you may not be eligible for a Commercial Card feed and will need to use the direct bank connection for American Express Business.
+
+## What if my bank uses a Commercial Card program that isn't with one of Expensify's Approved! Banking partners?
+If your company uses a Commercial Card program that isn’t with one of our Approved! Banking Partners (which supports connecting the feed via login credentials), the best way to import your company cards is by setting up a direct Commercial Card feed between Expensify and your bank. Note the Approved! Banking Partners include: 
+- Bank of America
+- Citibank
+- Capital One
+- Chase
+- Wells Fargo 
+- Amex
+- Stripe
+- Brex
+
diff --git a/docs/articles/expensify-classic/billing-and-subscriptions/Annual-Subscription.md b/docs/articles/expensify-classic/billing-and-subscriptions/Annual-Subscription.md
index 8e2aa7d4a377..67a96610633d 100644
--- a/docs/articles/expensify-classic/billing-and-subscriptions/Annual-Subscription.md
+++ b/docs/articles/expensify-classic/billing-and-subscriptions/Annual-Subscription.md
@@ -1,5 +1,45 @@
 ---
 title: Annual Subscription
-description: Annual Subscription
+description: Learn more about managing your Annual Subscription.
 ---
-## Resource Coming Soon!
+# Overview
+An Annual Subscription offers a 50% cost savings on active user pricing while allowing your company to manage multiple Workspaces across your organization and maintain predictable cost for your Expensify activity. 
+
+_For pricing details, see [expensify.com/pricing](http://www.expensify.com/pricing), and find more ways to save with the Expensify Card here._ 
+
+# How to set subscription size
+When you first create a subscription, the best practice is to set your subscription size by entering the average number of active users you expect to have each month for the next year. For example, if you expect to have an average of 10 users each month, even if they are not always the same users, set your subscription size to 10. No need to provision and deprovision access to your team, so you still enjoy flexible usage across the entire company!
+
+If your Workspaces have more than 10 active users in a month, you will pay the unbundled Pay-per-use rate for the additional users. If you’d like to avoid this, you can enable Auto Increase so your subscription size increases based on Workspace user activity.
+
+An ‘Active User’ is anyone who chats, creates, submits, approves, reimburses, or exports a report in Expensify. This includes actions taken by Copilots and any automated settings.
+
+To set your subscription size, go to **Settings > Workspaces > Groups > Subscription**. 
+
+If you do not set a specific subscription size, this will be automatically updated based on your past activity: 
+
+* If you’ve never had activity in Expensify, your subscription size will be set after your first month. Work with your Setup Specialist or Account Manager to determine the best subscription size for your team!
+
+* For existing Workspaces switching to an Annual Subscription, the subscription size is set to the number of active users on your last month’s billing history. 
+
+* If Auto Increase is not selected, and you have more active users than you’ve input as the subscription size, you will be billed for those at the Pay-per-use rate.
+
+# How to adjust subscription size
+You can add users to your subscription at any time. However, note that when your subscription size is increased, you will start a new 12-month subscription at that new subscription size.
+
+You can increase your subscription size manually or automatically. 
+
+* To manually increase the size, just update the number in your subscription settings (**Settings > Workspaces > Groups > Subscription**).
+
+* To automatically increase your subscription size, enable **Auto Increase**. This feature manages your subscription by automatically increasing the count whenever there is activity that exceeds your subscription size.  (**Settings > Workspaces > Groups > Subscription**)
+
+Note: After increasing your subscription size, you won't be able to decrease it for the next 12 months. If your active user numbers tend to fluctuate, you might want to keep this feature disabled. This way, you'll only pay for additional active users in the months they are active. Keep in mind that increasing the subscription size will reset your 12-month subscription period.
+
+# How to disable Auto Renew
+By default, your subscription is set to automatically renew after a year. To disable this, click the toggle from your subscription settings before the current subscription ends. (**Settings > Workspaces > Groups > Subscription**)
+
+If Auto Renew is disabled, then the last bill at the annual rate will be issued on the date listed under the Auto Renew settings. For example, if your subscription expires on March 1, 2021, then February 2021 will be the last month billed at the annual rate. If you do not set a new subscription, March activity will be billed at the Pay-per-use rate.
+
+We recommend that you review your user count annually on a proactive basis. Set a reminder to review your active user numbers a month before your subscription expires! If you’d like assistance determining your subscription number, please contact your Account Manager or concierge@expensify.com. 
+
+If you need to decrease your subscription size, you can do this in the first billing month before you are billed. Using the example above, this would be during March 2021.
diff --git a/docs/articles/expensify-classic/billing-and-subscriptions/Change-Plan-Or-Subscription.md b/docs/articles/expensify-classic/billing-and-subscriptions/Change-Plan-Or-Subscription.md
index 8ce4283dd17d..f01bb963bacf 100644
--- a/docs/articles/expensify-classic/billing-and-subscriptions/Change-Plan-Or-Subscription.md
+++ b/docs/articles/expensify-classic/billing-and-subscriptions/Change-Plan-Or-Subscription.md
@@ -1,5 +1,84 @@
 ---
-title: Change Plan or Subscription
-description: Change Plan or Subscription
+title: Changing your workspace plan
+description: How to change your plan or subscription
 ---
-## Resource Coming Soon!
+# Overview
+Expensify offers various plans depending on your needs: Track, Submit, Collect, Control, and Free. Your choice of plan depends on whether you want to manage your expenses individually or for a group or company. You may need to upgrade from an individual plan to a group plan if you recently hired additional employees that need should be added to a Group Workspace, or you need access to Expensify's features that are only available on a paid plan.
+
+# How to change a subscription on an Individual Plan
+## Change Individual Plan
+### Web
+1. Go to **Settings > Workspaces > Individual > [Your Individual Workspace]**
+1. Click on **Plan** and select **Switch** under the plan you want to switch to
+### Mobile
+Open the Expensify app and:
+1. Tap the hamburger icon (three lines) on the top left
+1. Tap **Settings**
+1. Tap **View All** under your Workspace
+1. Select the Workspace you want to change under the "Individual" tab
+1. Tap **Current Plan** under **Plan**
+1. Find the **Switch** option under the plan you're not currently using
+## Upgrade to a Group Plan
+To upgrade to a group plan, you will need to create a Group Workspace by heading to **Settings > Workspaces > Group** and choosing a Collect or Control plan.
+
+# How to change a subscription on a Group Plan
+## Change Group Plan
+## Web
+1. Go to **Settings > Workspaces > Group > [Your Group Workspace]**
+1. Click on **Plan** and select **Switch** under the plan you want to switch to.
+
+## Mobile
+1. In the Expensify mobile app, navigate to **Settings > Workspaces > [Your Workspace] > Current Plan > Switch**.
+
+## Adjust subscription size
+When you first create a subscription, you can manually set your size by entering a number in the Subscription Size field of your subscription settings by heading to **Settings > Workspaces > Group > Subscription**.
+
+If you choose not to set a size yourself, it will be calculated automatically for your first bill based on your depending on which scenario below fits your use case: 
+- If you’ve never had activity in Expensify, your subscription size is set automatically to match the number of active users you had your first month of using Expensify on your Annual Subscription. This means you’ll see the number update automatically after your first billing.
+- For existing Workspaces switching to an annual subscription, the subscription size is set to the number of active users on your last month’s billing history. 
+
+## Auto increase subscription size
+This feature manages your subscription by automatically increasing the count whenever there is activity that exceeds your subscription size. Whenever your subscription size is increased, you will start a new 12-month commitment for the new subscription size in full.
+
+To enable automatically increasing your subscription size, head to **Settings > Workspaces > Group > Subscription** and toggle this feature on.
+
+## Auto renew
+By default, your subscription is set to automatically renew after a year. To disable this, head to **Settings > Workspaces > Subscription** and use the toggle to turn this feature off before your current subscription ends.
+
+If Auto Renew is disabled then the last bill at the annual rate will be issued on the date listed under the Auto Renew settings.
+
+# How to downgrade to a free account from an Individual Plan
+## Web
+1. Log in to your account through a web browser.
+1. Go to **Settings > Policies > Individual > Subscription**.
+1. Click "Cancel Subscription" to end your Monthly Subscription.
+
+Note: Your subscription is a pre-purchase for 30 days of unlimited SmartScanning. This means that when you cancel, you do not get a refund and instead get to use the remainder of the month of unlimited SmartScanning you purchased.
+
+## App Store
+If you subscribed via iOS, you must cancel your monthly subscription through the App Store by heading to App Store > click on your ID > Subscriptions. You can't cancel it directly in Expensify.
+
+# How to downgrade to a free account from a Group Plan
+## Pay-per-use
+If you have a Group Workspace and use Pay-Per-Use billing, you can downgrade by going to **Settings > Workspaces > Group** and clicking the cog button next to your Workspace name, then choosing **Delete**.
+
+Note: Deleting a Workspace removes its configurations and Workspace members but not their Expensify accounts.
+
+When deleting your final paid Workspace, if any Workspace members have been active that month (this means anybody who created, edited, submitted, approved, exported, or deleted a report) you will be billed for their activity as part of the downgrade flow.
+
+## Annual subscription
+If you recently started an annual subscription, you can downgrade for a full refund before the second bill. If you meet the criteria below, you can request a refund by going to **Settings > Your Account > Billing** in the web app:
+- Own Collect or Control Group Workspaces
+- Have only been billed for a single month 
+- Have not cleared a balance in the past
+
+Note: Refunds apply to Collect or Control Group Workspaces with one month of billing and no previous balance.
+
+Once you’ve successfully downgraded to a free Expensify account, your Workspace will be deleted and you will see a refund line item added to your Billing History.
+
+# FAQ
+## Will I be charged for a monthly subscription even if I don't use SmartScans?
+Yes, the Monthly Subscription is prepaid and not based on activity, so you'll be charged regardless of usage.
+
+## I'm on a group policy; do I need the monthly subscription too?
+Probably not. Group policy members already have unlimited SmartScans, so there's usually no need to buy the subscription. However, you can use it for personal use if you leave your company's Workspace.
diff --git a/docs/articles/expensify-classic/billing-and-subscriptions/Individual-Subscription.md b/docs/articles/expensify-classic/billing-and-subscriptions/Individual-Subscription.md
index 1ace758978aa..aa08340dd7a6 100644
--- a/docs/articles/expensify-classic/billing-and-subscriptions/Individual-Subscription.md
+++ b/docs/articles/expensify-classic/billing-and-subscriptions/Individual-Subscription.md
@@ -1,5 +1,67 @@
 ---
 title: Individual Subscription
-description: Individual Subscription
+description: Learn more about managing an Individual Subscription.
 ---
-## Resource Coming Soon!
+# Overview
+An Individual Subscription is a great option for solo entrepreneurs or anyone who needs to track their own expenses or get paid by someone outside their own organization. 
+A free Individual Subscription includes:
+- Up to 25 SmartScans/month
+- Expense tracking 
+- Mileage tracking 
+- Invoicing
+- Bill splitting 
+- Receive & send money
+
+To get unlimited SmartScans, you can upgrade your Individual Subscription for $4.99 (USD per month.
+
+
+# How to sign up for an Individual Subscription
+## Website
+To activate an Individual Subscription from the web:
+1. Log into your Expensify account
+2. Navigate to **Settings > Workspaces > Individual**
+3. Click **Activate Subscription** under **Monthly** 
+4. If you don't already have a billing card associated with your account, you will be prompted to add one
+
+Once payment is complete, you’re all set!
+
+## Mobile App: 
+1. Tap **Settings**
+2. Under the Workspaces section, select **Free Trial**
+3. Select **Upgrade**
+4.Tap **Subscription** to upgrade your account
+
+
+# How to manage the subscription
+## Web and Android:
+When you buy a subscription on the web or through an Android device, you'll be asked to enter your billing information immediately. After the purchase, you can easily view or cancel your subscription anytime by going to **Settings > Workspaces > Individual > Subscription > Show Details**.
+
+## iOS: 
+If you purchase a monthly subscription on an iOS device, it will be managed, including cancellations, through the App Store rather than within the Expensify app. You can learn how to manage App Store Subscriptions here.  
+
+After purchasing the subscription from the App Store, remember to sync your app by:
+1. Log into the Expensify mobile app
+2. Click the three bars in the upper left corner
+3. Scroll to **Settings**
+4. Select **Sync Account**
+
+The subscription renewal date is the same as the purchase date. For instance, if you sign up for the subscription on September 7th, it will renew automatically on October 7th. You can cancel your subscription anytime during the month if you no longer need unlimited SmartScans. If you do cancel, keep in mind that your subscription (and your ability to SmartScan) will continue until the last day of the billing cycle.
+
+
+# FAQ
+## Can I use an Individual Subscription while on a Collect or Control Plan? 
+You can! If you want to track expenses separately from your organization’s Workspace, you can sign up for an Individual Subscription. However, only Submit and Track Workspace plans are available when on an Individual Subscription. Collect and Control Workspace plans require an annual or pay-per-use subscription. For more information, visit expensify.com/pricing.
+
+## Can I cancel an Individual Subscription anytime? 
+Yep! You can cancel an Individual Subscription anytime. 
+
+## How do I cancel my subscription?
+Follow the steps below to cancel a Monthly Subscription started via the website or Android app:
+1. Log into your account using your preferred web browser (ex: Firefox, Chrome, Safari)
+2. Navigate to **Settings > Workspace > Individual > Subscriptions**
+3. Click the **Cancel Subscription** button to cancel your Monthly Subscription
+   
+Your subscription is a pre-purchase for 30 days of unlimited SmartScanning. This means when you cancel you do not get a refund and instead get to use the remainder of the month of unlimited SmartScanning you purchased.
+
+## How can I cancel my subscription from the iOS app? 
+If you signed up for the Monthly Subscription via iOS and your iTunes account, you will need to log into iTunes and locate the subscription there in order to cancel it. The ability to cancel an Expensify subscription started via iOS is strictly limited to your iTunes account.
diff --git a/docs/articles/expensify-classic/billing-and-subscriptions/Pay-Per-Use-Subscription.md b/docs/articles/expensify-classic/billing-and-subscriptions/Pay-Per-Use-Subscription.md
index 77aca2a01678..1d689f5b0355 100644
--- a/docs/articles/expensify-classic/billing-and-subscriptions/Pay-Per-Use-Subscription.md
+++ b/docs/articles/expensify-classic/billing-and-subscriptions/Pay-Per-Use-Subscription.md
@@ -1,5 +1,29 @@
 ---
 title: Pay-per-use Subscription
-description: Pay-per-use Subscription
+description: Learn more about your pay-per-use subscription. 
 ---
-## Resource Coming Soon!
+# Overview
+Pay-per-use is a billing option for people who prefer to use Expensify month to month or on an as-needed basis. On a pay-per-use subscription, you will only pay for active users in that given month. 
+
+**We recommend this billing setup for companies that use Expensify a few months out of the year**. If you have expenses to manage for more than 6 out of 12 months, an [**Annual Subscription**](https://help.expensify.com/articles/expensify-classic/billing-and-subscriptions/Annual-Subscription#gsc.tab=0)  may better suit your needs. 
+
+# How to start a pay-per-use subscription 
+1. Create a Group Workspace if you haven’t already by going to **Settings > Workspaces > Group > New Workspace** 
+2. Once you’ve created your Workspace, under the “Subscription” section on the Group Workspace page, select “Pay-per-use”.
+
+# FAQ
+
+## What is considered an active user? 
+An active user is anyone who chats, creates, modifies, submits, approves, reimburses, or exports a report in Expensify. This includes actions taken by a Copilot and Workspace automation (such as Scheduled Submit and automated reimbursement). If no one on your Group Workspace uses Expensify in a given month, you will not be billed for that month.
+
+You can review the number of Active Users by selecting “View Activity” next to your billing receipt (**Settings > Account > Payments > Billing History**).
+
+## Why do I have pay-per-use users in addition to my Annual Subscription on my Expensify bill?
+If you have an Annual Subscription, but go above your set user count, we will charge at the pay-per-use rate for these ad-hoc users.
+
+If you expect to have an increased number of users for more than 3 out of 12 months, the most cost-effective approach is to increase your Annual Subscription size.
+
+## Will billing only be in USD currency?
+While USD is the default billing currency, we also have GBP, AUD, and NZD billing currencies. You can see the rates on our [pricing](https://www.expensify.com/pricing)  page. 
+
+
diff --git a/docs/articles/expensify-classic/expense-and-report-features/Expense-Types.md b/docs/articles/expensify-classic/expense-and-report-features/Expense-Types.md
index 3f2e49952c4a..795a895e81f0 100644
--- a/docs/articles/expensify-classic/expense-and-report-features/Expense-Types.md
+++ b/docs/articles/expensify-classic/expense-and-report-features/Expense-Types.md
@@ -1,5 +1,42 @@
 ---
 title: Expense Types
-description: Expense Types
+description: Details of the different Expense filters and Expense Types
 ---
-## Resource Coming Soon!
+
+# Overview
+Expense types help categorize different expenses for better financial management. While reimbursable and non-reimbursable expenses are common, Expensify offers various other options to suit your needs. Let's explore the available expense types.
+
+# How To
+## Filtering a Report by Expense Type
+Organizing a report by expense type can make it easier to review expenses on a report. 
+- Open the report you're interested in.
+- Click the **Details** icon in the upper right corner of the report,
+- Change the “View” to **Detailed** and “Split by” **Reimbursable** or **Billable**.
+- You’ll also see the option to **Group by Category** or **Tags**. 
+
+
+# Deep Dive
+Each report will show the total amount for all expenses in the upper right. Under that total, there will be a breakdown of amounts that are reimbursable, billable, and non-reimbursable (depending on which of those expense types exist on the report). 
+
+## Expense Types
+- **Reimbursable Expenses:** Employees pay for these expenses out of their pockets on behalf of the business and are usually reimbursed. They often come from cash, debit cards, or personal credit card purchases.
+- **Non-reimbursable Expenses:** The business directly covers these expenses, so there's no need to reimburse the employee. Typically, these expenses are company card expenses.
+- **Billable Expenses:** Business or employee expenses must be billed to a specific client or vendor. Choose this option if you need to track expenses for invoicing to customers, clients, or other departments.
+- **Per Diem Expenses:** These expenses involve a daily or partial daily rate you can configure in your expense Workspace.
+- **Time Expenses:** Employees or jobs are billed based on an hourly rate that you can set within Expensify.
+- **Distance Expenses:** These expenses are related to travel for work.
+
+# FAQ
+
+## What’s the difference between a receipt, an expense, and a report attachment?
+
+- **Expense:** Created when you SmartScan or manually upload a receipt from a purchase.
+- **Receipt:** Automatically attached to the expense during the SmartScan process.
+- **Report Attachments:** Additional documents that need to be submitted to your approver (e.g., supplemental documents to the purchase) can be added to a report anytime by clicking the paperclip icon in the Reports Comments. 
+
+## How are credits or refunds displayed in Expensify?
+In Expensify, a credit is displayed as an expense with a minus (ex. -$1.00) in front of it. That’s because Expensify defaults all expenses as something that needs to be paid by the company. So a credit that is returned to the company is displayed as a negative expense. 
+
+If a report includes a credit or a refund expense, it will offset the total amount on the report. 
+For example, the report has two reimbursable expenses, $400 and $500. The total Reimbursable is $900. 
+Conversely, a -$400 and $500 will be a total Reimbursable amount of $500
diff --git a/docs/articles/expensify-classic/expense-and-report-features/Report-Audit-Log-and-Comments.md b/docs/articles/expensify-classic/expense-and-report-features/Report-Audit-Log-and-Comments.md
new file mode 100644
index 000000000000..229ca4ec1fe4
--- /dev/null
+++ b/docs/articles/expensify-classic/expense-and-report-features/Report-Audit-Log-and-Comments.md
@@ -0,0 +1,60 @@
+---
+title: Report Audit Log and Comments
+description: Details on the expense report audit log and how to leave comments on reports
+---
+
+# Overview
+
+At the bottom of each expense report, there’s a section that acts as an audit log for the report. This section details report actions, such as submitting, approving, or exporting. The audit log records the user who completed the action as well as the timestamp for the action.
+
+This section also doubles as the space where submitters, approvers, and admins can converse with each other by leaving comments. Comments trigger notifications to everyone connected to the report and help facilitate communication inside of Expensify.
+
+# How to use the audit log
+
+All report actions are recorded in the audit log. Anytime you need to identify who touched a report or track its progress through the approval process, simply scroll down to the bottom of the report and review the log.
+
+Each recorded action is timestamped - tap or mouse over the timestamp to see the exact date and time the action occurred.
+
+# How to use report comments
+
+There’s a freeform field just under the audit log where you can leave a comment on the report. Type in your comment and click or tap the green arrow to send. The comment will be visible to anyone with visibility on the report, and also automatically sent to anyone who has actioned the report.
+
+# Deep Dive
+
+## Audit log
+
+Here’s a list of actions recorded by the audit log:
+
+- Report creation
+- Report submission
+- Report approval
+- Report reimbursement
+- Exports to accounting or to CSV/Excel files
+- Report and expense rejections
+- Changes made to expenses by approvers/admins
+- Changes made to report fields by approvers/admins
+- Automated actions taken by Concierge
+  
+Both manual and automated actions are recorded. If a report action is completed by Concierge, that generally indicates an automation feature triggered the action. For example, an entry that shows a report submitted by Concierge indicates that the **Scheduled Submit** feature is enabled.
+
+Note that timestamps for actions recorded in the log reflect your own timezone. You can either set a static time zone manually, or we can trace your location data to set a time zone automatically for you.
+
+To set your time zone manually, head to **Settings > Account > Preferences > Time Zone** and check **Automatically Set my Time Zone**, or uncheck the box and manually choose your time zone from the searchable list of locations.
+
+## Comments
+
+Anyone with visibility on a report can leave a comment. Comments are interspersed with audit log entries.
+
+Report comments initially trigger a mobile app notification to report participants. If you don't read the notification within a certain amount of time, you'll receive an email notification with the report comment instead. The email will include a link to the report, allowing you to view and add additional comments directly on the report. You can also reply directly to the email, which will record your response as a comment.
+
+Comments can be formatted with bold, italics, or strikethrough using basic Markdown formatting. You can also add receipts and supporting documents to a report by clicking the paperclip icon on the right side of the comment field.
+
+# FAQ
+
+## Why don’t some timestamps in Expensify match up with what’s shown in the report audit log?
+
+While the audit log is localized to your own timezone, some other features in Expensify (like times shown on the reports page) are not. Those use UTC as a baseline, so it’s possible that some times may look mismatched at first glance. In reality, it’s just a timezone discrepancy.
+
+## Is commenting on a report a billable action?
+
+Yes. If you comment on a report, you become a billable actor for the current month. 
diff --git a/docs/articles/expensify-classic/expense-and-report-features/Report-Comments.md b/docs/articles/expensify-classic/expense-and-report-features/Report-Comments.md
deleted file mode 100644
index b7ed120fb28b..000000000000
--- a/docs/articles/expensify-classic/expense-and-report-features/Report-Comments.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Report Comments
-description: Report Comments
----
-## Resource Coming Soon!
diff --git a/docs/articles/expensify-classic/expense-and-report-features/The-Reports-Page.md b/docs/articles/expensify-classic/expense-and-report-features/The-Reports-Page.md
index e72abfcad51a..ff9e2105ffac 100644
--- a/docs/articles/expensify-classic/expense-and-report-features/The-Reports-Page.md
+++ b/docs/articles/expensify-classic/expense-and-report-features/The-Reports-Page.md
@@ -1,5 +1,43 @@
 ---
 title: The Reports Page
-description: The Reports Page
+description: Details about the Reports Page filters and CSV export options
 ---
-## Resource Coming Soon!
+
+## How to use the Reports Page
+The Reports page is your central hub for a high-level view of a Reports' status. You can see the Reports page on a web browser when you sign into your Expensify account. 
+Here, you can quickly see which reports need submission (referred to as **Open**), which are currently awaiting approval (referred to as **Processing**), and which reports have successfully been **Approved** or **Reimbursed**.
+To streamline your experience, we've incorporated user-friendly filters on the Reports page. These filters allow you to refine your report search by specific criteria, such as dates, submitters, or their association with a workspace. 
+
+## Report filters
+- **Reset Filters/Show Filters:** You can reset or display your filters at the top of the Reports page.
+- **From & To:** Use these fields to refine your search to a specific date range.
+- **Report ID, Name, or Email:** Narrow your search by entering a Report ID, Report Name, or the submitter's email.
+- **Report Types:** If you're specifically looking for Bills or Invoices, you can select this option.
+- **Submitters:** Choose between "All Submitters" or enter a specific employee's email to view their reports.
+- **Policies:** Select "All Policies" or specify a particular policy associated with the reports you're interested in.
+
+## Report status
+- **Open icon:** These reports are still "In Progress" and must be submitted by the creator. If they contain company card expenses, a domain admin can submit them. If labeled as “Rejected," an Approver has rejected it, typically requiring some adjustments. Click into the report and review the History for any comments from your Approver.
+- **Processing icon:** These reports have been submitted for Approval but have not received the final approval.
+- **Approved icon:** Reports in this category have been Approved but have yet to be Reimbursed. For non-reimbursable reports, this is the final status.
+- **Reimbursed icon:** These reports have been successfully Reimbursed. If you see "Withdrawing," it means the ACH (Automated Clearing House) process is initiated. "Confirmed" indicates the ACH process is in progress or complete. No additional status means your Admin is handling reimbursement outside of Expensify.
+- **Closed icon:** This status represents an officially closed report.
+
+
+## How to Export a report to a CSV
+To export a report to a CSV file, follow these steps on the Reports page:
+
+1. Click the checkbox on the far left of the report row you want to export.
+2. Navigate to the upper right corner of the page and click the "Export to" button.
+3. From the drop-down options that appear, select your preferred export format.
+
+# FAQ
+## What does it mean if the integration icon for a report is grayed out? 
+If the integration icon for a report appears grayed out, the report has yet to be fully exported. 
+To address this, consider these options:
+- Go to **Settings > Policies > Group > Connections** within the workspace associated with the report to check for any errors with the accounting integration (i.e., The connection to NetSuite, QuickBooks Online, Xero, Sage Intacct shows an error).
+- Alternatively, click the “Sync Now" button on the Connections page to see if any error prevents the export.
+
+## How can I  see a specific expense on a report? 
+To locate a specific expense within a report, click on the Report from the Reports page and then click on an expense to view the expense details.  
+
diff --git a/docs/articles/expensify-classic/expensify-card/Set-Up-the-Card-for-Your-Company.md b/docs/articles/expensify-classic/expensify-card/Set-Up-the-Card-for-Your-Company.md
new file mode 100644
index 000000000000..8f87b36ef3d9
--- /dev/null
+++ b/docs/articles/expensify-classic/expensify-card/Set-Up-the-Card-for-Your-Company.md
@@ -0,0 +1,67 @@
+---
+title: Set Up the Card for your Company
+description: Details on setting up the Expensify Card for your company as an admin
+---
+# Overview
+
+If you’re an admin interested in rolling out the Expensify Card for your organization, you’re in the right place. This article will cover how to qualify and apply for the Expensify Card program and begin issuing cards to your employees. 
+
+# How to qualify for the Expensify Card program
+
+There are three prerequisites to consider before applying for the Expensify Card:
+
+1. The email address associated with your account must be on a private domain
+2. You must claim your private domain in Expensify
+3. You must add and verify a US business bank account to your Expensify account
+   
+To claim a domain, you must be a workspace admin with a company email address matching the domain you want to claim. After you create an account and set up a workspace, head to **Settings > Domains** to claim your domain.
+
+You can add a business bank account by navigating to **Settings > Account > Payments** and clicking Add Verified Bank Account. Follow the setup steps and complete the verification process as required.
+
+# How to apply for the Expensify Card
+
+Once you’ve claimed your domain and added a verified US business bank account, you can apply for the Expensify Card. There are multiple ways to apply for the card from the web:
+
+## From the home page
+
+1. Log into your Expensify account using your preferred web browser
+2. Head to your account’s home page
+3. On the task that says “Introducing the Expensify Card,” click **Enable my Expensify Cards** to get started
+
+## From the Company Cards page
+
+1. Log into your Expensify account using your preferred web browser
+2. Head to **Settings > Domains > _Domain Name_ > Company Cards**
+3. Click **Get the Card**
+
+After we receive your application, we’ll review it ASAP and send you a confirmation email with the next steps once we have them.
+
+# How to issue cards
+
+After you’ve been approved, it’s time to set limits for your employees. Setting a limit triggers an email and task on the home page requesting the employee’s shipping address. Once they enter their details, a card will be shipped to them. We’ll also create a virtual card for the employee that can be used immediately.
+
+To set a limit, head over to the Company Cards UI via **Settings > Domains > _Domain Name_ > Company Cards**. Click the **Edit Limit** button next to members who need a card assigned, and set a non-$0 to issue them a card.
+
+If you have a validated domain, you can set a limit for multiple members by setting a limit for an entire domain group via **Settings > Domains > _Domain Name_ > Groups**. Keep in mind that custom limits that are set on an individual basis will override the group limit.
+
+The Company Cards page will act as a hub to view all employees who have been issued a card and where you can view and edit the individual card limits. You’ll also be able to see anyone who has requested a card but doesn’t have one yet.
+
+# FAQ
+
+## Are there foreign transaction fees?
+
+There are no foreign transaction fees when using your Expensify Card for international purchases.
+
+## How does the Expensify Card affect my or my company's credit score?
+
+Applying for or using the Expensify Card will never have any positive or negative effect on your personal credit score or your business's credit score. We do not consider your or your business' credit score when determining approval and your card limit.
+
+## How much does the Expensify Card cost?
+
+The Expensify Card is a free corporate card, and no fees are associated with it. In addition, if you use the Expensify Card, you can save money on your Expensify subscription.
+
+## If I have staff outside the US, can they use the Expensify Card?
+
+As long as the verified bank account used to apply for the Expensify Card is a US bank account, your cardholders can be anywhere in the world.
+
+Otherwise, the Expensify Card is not available for customers using non-US banks. With that said, launching international support is a top priority for us. Let us know if you’re interested in contacting support, and we’ll reach out as soon as the Expensify Card is available outside the United States.
diff --git a/docs/articles/expensify-classic/get-paid-back/Distance-Tracking.md b/docs/articles/expensify-classic/get-paid-back/Distance-Tracking.md
new file mode 100644
index 000000000000..c0d8956f71ac
--- /dev/null
+++ b/docs/articles/expensify-classic/get-paid-back/Distance-Tracking.md
@@ -0,0 +1,81 @@
+---
+title: Distance Tracking in Expensify
+description: Learn how distance tracking works in Expensify!
+---
+
+# Overview
+
+Expensify provides a convenient feature for tracking your mileage-related expenses. You'll find all the essential information to begin logging your trips below.
+
+# How to Use Distance Tracking
+## Mobile App
+
+First, you’ll want to click the **+** in the top right corner.
+
+If you select **Manually Create**, you’ll be prompted to enter your mileage, select a rate, and code the expense before clicking **Save**. 
+
+  ![Click manually create or odometer to create a distance request.](https://help.expensify.com/assets/images/ExpensifyHelp_CreateExpense_Mobile.png){:width="100%"}
+
+If you select **Manually Create**:
+   - Enter your mileage.
+   - Select a rate.
+   - Code the expense.
+   - Click **Save**.
+   
+![Enter your mileage, rate, code the expense, and click save.](https://help.expensify.com/assets/images/ExpensifyHelp_ManualDistance_Mobile.png){:width="100%"}
+
+If you select **Odometer**:
+   - Enter your vehicle’s mileage reading before and after your trip.
+   - Select your rate.
+   - Code the expense.
+   - Click **Save**.
+   
+![Etner your mileage readings, your rate, code the expense, and click save.](https://help.expensify.com/assets/images/ExpensifyHelp_Odometer_Mobile.png){:width="100%"}
+
+The **Start GPS** option also exists on the mobile app. However, we’ve learned that most customers prefer to track their mileage after their trips (thus not needing to hit that start button!) 
+
+We’ve temporarily paused the development of GPS mileage tracking in the mobile app, and we recommend you use one of the above options instead! 
+
+
+## Web
+
+Navigate to the **Expenses** page, click **New Expense**, and review the two **Distance** options. 
+
+![Select manually create or create from map to create a new distance request.](https://help.expensify.com/assets/images/ExpensifyHelp_CreateExpense.png){:width="100%"}
+
+If you select **Manually Create**:
+   - Enter the number of miles for your trip.
+   - Mileage rate is automatically selected based on your history, or manually select it if it's your first time.
+   - Complete any other applicable coding fields.
+   - Click **Save**.
+   
+![Enter the number of miles, select your rate, code the expense, and click save.](https://help.expensify.com/assets/images/ExpensifyHelp_ManualDistance.png){:width="100%"}
+
+For **Create from Map** expenses:
+   - Add your start and end location, and the distance will be calculated.
+   - You can also click **Add Destination** for multiple stops.
+   - Leave **Create Receipt** selected if you want a map receipt generated.
+   - Click **Save**.
+   
+![Enter your start and end locations, and click save.](https://help.expensify.com/assets/images/ExpensifyHelp_ManualDistanceMap.png){:width="100%"}
+
+Once you click **Save**, review the details from your map selection.
+   - Select your rate.
+   - Enter any other applicable coding.
+   - Click **Save**.
+
+![Select your rate, code the expense, and click save.](https://help.expensify.com/assets/images/ExpensifyHelp_ManualDistanceConfirm.png){:width="100%"}
+
+# Mileage Tracking FAQs
+## **How can I change the rate of my mileage expenses?**
+You can change the rate by going to Settings > Workspaces > [Your Workspace] > Expenses > Distance > Add a Mileage Rate.
+If you submit mileage expenses on a group workspace, only workspace admins can do this. 
+
+## **Do you plan to add the "Create from Map" option to the mobile app or "Odometer" option to web?**
+Not now, but if that changes, you'll be the first to know!
+
+## **Will you restart maintenance on the mobile app's GPS option anytime soon?**
+Not now, but if that changes, you'll be the first to know!
+
+## **Does Expensify automatically update IRS Mileage rates?**
+  We never automatically update mileage rates in Expensify because different companies want the new rates to become effective on different dates.
diff --git a/docs/articles/expensify-classic/get-paid-back/Mileage.md b/docs/articles/expensify-classic/get-paid-back/Mileage.md
deleted file mode 100644
index 248e80e1c115..000000000000
--- a/docs/articles/expensify-classic/get-paid-back/Mileage.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Mileage
-description: Mileage
----
-## Resource Coming Soon!
diff --git a/docs/articles/expensify-classic/getting-started/Invite-Employees.md b/docs/articles/expensify-classic/getting-started/Invite-Employees.md
deleted file mode 100644
index 73dc7b8274f0..000000000000
--- a/docs/articles/expensify-classic/getting-started/Invite-Employees.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Invite Employees
-description: Invite Employees
----
-## Resource Coming Soon!
diff --git a/docs/articles/expensify-classic/getting-started/Invite-Members.md b/docs/articles/expensify-classic/getting-started/Invite-Members.md
new file mode 100644
index 000000000000..5b3c17c2e8fb
--- /dev/null
+++ b/docs/articles/expensify-classic/getting-started/Invite-Members.md
@@ -0,0 +1,62 @@
+---
+title: Invite Members
+description: Learn how add your employees to submit expenses in Expensify
+---
+# Overview
+
+To invite your employees to Expensify, simply add them as members to your Workspace.
+
+# How to Invite members to Expensify
+
+## Inviting Members Manually
+
+Navigate to **Settings > Workspace > Group > *Workspace Name* > People** - then click **Invite** and enter the invitee's email address.
+
+Indicate whether you want them to be an Employee, Admin, or Auditor on the Workspace.
+
+If you are utilizing the Advanced Approval feature and the invitee is an approver, you can use the "Approves to" field to specify to whom they approve and forward reports for additional approval.
+
+## Inviting Members to a Workspace in Bulk 
+
+Navigate to **Settings > Workspaces > Group > *Workspace Name* > People** - then click Invite and enter all of the email addresses separated by comma. Indicate whether you want them to be an Employee, Admin, or Auditor on the Workspace.
+
+If you are utilizing the Advanced Approval feature, you can specify who each member should submit their expense reports to and who an approver should send approved reports to for the next step in the approval process. If someone is the final approver, you can leave this field blank.
+
+Another convenient method is to employ the spreadsheet bulk upload option for inviting members to a Workspace. This proves particularly helpful when initially configuring your system or when dealing with numerous member updates. Simply click the "Import from Spreadsheet" button and upload a file in formats such as .csv, .txt, .xls, or .xlsx to streamline the process.
+
+After uploading the spreadsheet, we'll display a window where you can choose which columns to import and what they correspond to. These are the fields: 
+- Email
+- Role
+- Custom Field 1
+- Custom Field 2
+- Submits To
+- Approves To
+- Approval Limit
+- Over Limit Forward To
+  
+Click the **Import** button and you're done. We will import the new members with the optional settings and update any already existing ones.
+
+## Inviting Members with a Shareable Workspace Joining Link
+
+You have the ability to invite your colleagues to join your Expensify Workspace by sharing a unique Workspace Joining Link. You can use this link as many times as necessary to invite multiple members through various communication methods such as internal emails, chats, text messages, and more.
+
+To find your unique link, simply go to **Settings > Workspace > Group > *Workspace Name* > People**. 
+
+## Allowing Members to Automatically Join Your Workspace
+
+You can streamline the process of inviting colleagues to your Workspace by enabling the Pre-approve switch located below your Workspace Joining Link. This allows teammates to automatically become part of your Workspace as soon as they create an Expensify account using their work email address.
+
+Here's how it works: If a colleague signs up with a work email address that matches the email domain of a company Workspace owner (e.g., if the Workspace owner's email is admin@expensify.com and the colleague signs up with employee@expensify.com), they will be able to join your Workspace seamlessly without requiring a manual invitation. When new members join the Workspace, they will be set up to submit their expense reports to the Workspace owner by default.
+
+To enable this feature, go to **Settings > Workspace > Group > *Workspace Name* > People**.
+
+
+# FAQ
+## Who can invite members to Expensify
+Any Workspace Admin can add members to a Group Workspace using any of the above methods.
+
+## How can I customize an invite message? 
+Under **Settings > Workspace > Group > *Workspace Name* > People > Invite** you can enter a custom message you'd like members to receive in their invitation email.
+
+## How can I invite members via the API? 
+If you would like to integrate an open API HR software, you can use our [Advanced Employee Updater API](https://integrations.expensify.com/Integration-Server/doc/employeeUpdater/) to invite members to your Workspace. 
diff --git a/docs/articles/expensify-classic/getting-started/tips-and-tricks/Enable-Location-Access-On-Web.md b/docs/articles/expensify-classic/getting-started/tips-and-tricks/Enable-Location-Access-On-Web.md
deleted file mode 100644
index 507d24503af8..000000000000
--- a/docs/articles/expensify-classic/getting-started/tips-and-tricks/Enable-Location-Access-On-Web.md
+++ /dev/null
@@ -1,56 +0,0 @@
----
-title: Enable Location Access on Web
-description: How to enable location access for Expensify websites on your browser
-redirect_from: articles/other/Enable-Location-Access-on-Web/
----
-<!-- The lines above are required by Jekyll to process the .md file -->
-
-# About
-<!--
-This short blurb provides all the context the user might need to know what the feature is and why they'd use it. If there are particular best practices embedded in the design, we'd explain why they're best practices here.
-
-What advantages does this feature provide in general?
-What is unique about this feature in terms of our specific implementation of it in Expensify?
--->
-If you'd like to use features that rely on your current location you will need to enable location permissions for Expensify. You can find instructions for how to enable location settings on the three most common web browsers below. If your browser is not in the list then please do a web search for your browser and "enable location settings".
-
-# How-to
-<!--
-This section covers the most essential information a user needs to operate a feature i.e. what to click on. We’ll go over any action the user might take when configuring or using the feature, starting from configuration and moving to usage.
-
-What options does a user have when configuring this feature?
-What options does a user have then interacting with this feature?
-What elements of this feature are pay-walled vs. free?
--->
-
-### Chrome
-1. Open Chrome
-2. At the top right, click the three-dot Menu > Settings
-3. Click "Privacy and Security" and then "Site Settings"
-4. Click Location
-5. Check the "Not allowed to see your location" list to make sure expensify.com and new.expensify.com are not listed. If they are, click the delete icon next to them to allow location access
-
-[Chrome help page](https://support.google.com/chrome/answer/142065)
-
-### Firefox
-
-1. Open Firefox
-2. In the URL bar enter "about:preferences"
-3. On the left hand side select "Privacy & Security"
-4. Scroll down to Permissions 
-5. Click on Settings next to Location
-6. If location access is blocked for expensify.com or new.expensify.com, you can update it here to allow access
-
-[Firefox help page](https://support.mozilla.org/en-US/kb/permissions-manager-give-ability-store-passwords-set-cookies-more)
-
-### Safari
-1. In the top menu bar click Safari
-2. Then select Settings > Websites
-3. Click Location on the left hand side
-4. If expensify.com or new.expensify.com have "Deny" set as their access, update it to "Ask" or "Allow"
-
-Ask: The site must ask if it can use your location.
-Deny: The site can’t use your location.
-Allow: The site can always use your location.
-
-[Safari help page](https://support.apple.com/guide/safari/websites-ibrwe2159f50/mac)
\ No newline at end of file
diff --git a/docs/articles/expensify-classic/integrations/HR-integrations/ADP.md b/docs/articles/expensify-classic/integrations/HR-integrations/ADP.md
index 3ee1c8656b4b..65b276796c2a 100644
--- a/docs/articles/expensify-classic/integrations/HR-integrations/ADP.md
+++ b/docs/articles/expensify-classic/integrations/HR-integrations/ADP.md
@@ -1,5 +1,81 @@
 ---
-title: Coming Soon
-description: Coming Soon
+title: How to use the ADP integration
+description: Expensify’s ADP integration lets you pay out expense reports outside of the Expensify platform. Expensify creates a Custom Export Format that can be uploaded to ADP directly. 
 ---
-## Resource Coming Soon!
+# Overview
+Expensify’s ADP integration lets you pay out expense reports outside of the Expensify platform. Expensify creates a Custom Export Format that can be uploaded to ADP directly. 
+
+You’ll need to be on the Control Plan to create a Custom Export Format.
+
+Your employee list in ADP can also be imported into Expensify via Expensify’s People table in CSV format, which will speed up the process of importing the correct values to sync up your employee’s reports with ADP. This feature is available on all plans. 
+
+# How to use the ADP integration
+
+## Step 1: Set up the ADP import file
+
+A basic setup for an ADP import file includes five columns. In order (from left to right), these columns are: 
+
+- **Company Code** - See “Edit Company” page in ADP
+- **Batch ID** - Found in “Edit Company”
+- **File #** - Employee number in ADP
+- **Earnings 3 Code** - See “Edit Profit Center Group” page
+- **Earnings 3 Amount** - Found in “Edit Profit Center Group”
+
+There is a **File #** for each employee that you’re tracking in **Expensify** located under “**RUN Powered by ADP**” - navigate to **Reports tab > Tax Reports > Wage > Tax Register**.
+
+In **Expensify**, the **File #** is entered in the **Custom Field 1 or 2** column in the **Members table**. 
+The **Earnings 3 Code** is the ADP code that corresponds to a payroll account you’re tracking in **Expensify**. The **Earnings 3 Amount** is the total of a given expense you’re sending to payroll.
+
+In **Expensify**, you can enter the **Earnings 3 Code** at **Settings > Workspaces > [Group Workspace Name] > Categories > Categories [Category Name] > Edit Rules > Add under Payroll Code**.
+
+## Step 2:Create your ADP Export Format
+
+For a basic setup, visit **Settings > Workspaces > [Group Workspace Name] > Export Formats** and add these column headings and corresponding formulas: 
+
+- **Name:** Company Code
+  - **Formula:** [From Step 1.]
+  
+- **Name:** BatchID
+  - **Formula:** [From Step 1.]
+  
+- **Name:** File #
+  - **Formula:** {report:submit.from:customfield1}
+  
+- **Name:** Earnings 3 Code
+  - **Formula:** {expense:category:payrollcode}
+  
+- **Name:** Earnings 3 Amount
+  - **Formula:** {expense:amount}
+
+The Company Code column is hardcoded with your company’s code in ADP. Similarly, the Batch ID is hard coded with whatever Batch ID your company is using in ADP.
+
+## Step 3.:Export to CSV or XLS
+
+To export the file, do the following:
+
+1. Go to your "Reports" page in Expensify
+2. Select the reports you want to export
+3. Click "Export to..." and choose your custom ADP format
+4. Your download will begin automatically and be delivered in CSV or XLS format
+
+## Step 4: Upload to ADP
+
+You should be able to upload your ADP file directly to ADP without any changes.
+
+# Deep Dive
+
+## Using the ADP integration
+
+You can set Custom Fields and Payroll Codes in bulk using a CSV upload in Expensify’s settings pages. 
+
+If you have additional requirements for your ADP upload, for example, additional headings or datasets, reach out to your Expensify Account Manager who will assist you in customizing your ADP export. Expensify Account Managers are trained to accommodate your data requests and help you retrieve them from the system.
+
+# FAQ 
+
+- Do I need to convert my employee list into new column headings so I can upload it to Expensify?
+
+Yes, you’ll need to convert your ADP employee data to the same headings as the spreadsheet that can be downloaded from the Members table in Expensify. 
+
+- Can I add special fields/items to my ADP Payroll Custom Export Format?
+
+Yes! You can ask your Expensify Account Manager to help you prepare your ADP Payroll export so that it meets your specific requirements. Just reach out to them via the Chat option in Expensify and they’ll help you get set up.
diff --git a/docs/articles/expensify-classic/integrations/accounting-integrations/Accelo.md b/docs/articles/expensify-classic/integrations/accounting-integrations/Accelo.md
new file mode 100644
index 000000000000..fffe0abb43aa
--- /dev/null
+++ b/docs/articles/expensify-classic/integrations/accounting-integrations/Accelo.md
@@ -0,0 +1,74 @@
+---
+title: Accelo
+description: Help doc for Accelo integration
+---
+<!-- The lines above are required by Jekyll to process the .md file -->
+
+# Overview
+Accelo is a cloud-based business management software platform tailored for professional service companies, offering streamlined operations. It enables seamless integration with Expensify, allowing users to effortlessly import expense details from Expensify into Accelo, associating them with the corresponding project, ticket, or retainer within the system. 
+
+# How to Connect Expensify to Accelo
+To connect Expensify to Accelo, follow these clear steps:
+
+## Prerequisites
+Ensure you have administrator access to Accelo.
+Have a Workspace Admin role in Expensify.
+
+## Connecting Expensify to Accelo
+1. Access the Expensify Integration Server:
+- Open the Expensify Integration Server.
+2. Retrieve Your Partner User ID and Partner User Secret:
+- Important: These credentials are distinct from your regular Expensify username and password.
+- If you haven't previously set up the integration server, click where it indicates "click here."
+3. Regenerating Partner User Secret (If Necessary):
+- Note: If you've previously configured the integration server, you must regenerate your Partner User Secret. Do this by clicking "click here" to regenerate your partnerUserSecret.
+- If you currently use the Integration Server/API for another integration, remember to update that integration to use the new Secret.
+4. Configure Accelo:
+- Return to your Accelo account.
+- Navigate to your Integrations page and select the Expensify tab.
+5. Enter Expensify Integration Server Credentials:
+- Provide your Expensify Integration Server's Partner User ID and Partner User Secret.
+- Click "Save" to complete the setup.
+6. Connection Established:
+- Congratulations! Your Expensify account is now successfully connected to Accelo.
+
+With this connection in place, all Expensify users can effortlessly synchronize their expenses with Accelo, streamlining their workflow and improving efficiency.
+
+## How to upload your Accelo Project Codes as Tags in Expensify
+Once you have connected Accelo to Expensify, the next step is to upload your Accelo Project Codes as Tags in Expensify. Simply go to Go to **Settings** > **Workspaces** > **Group** > _[Workspace Name]_ > **Tags** and upload your CSV.
+If you directly integrate with Xero or QuickBooks Online, you must upload your Project Codes by appending your tags. Go to **Settings** > **Workspaces** > **Group** > _[Workspace Name]_ > **Tags** and click on “Append a custom tag list from a CSV” to upload your Project Codes via a CSV.
+
+# Deep Dive
+## Information sync between Expensify and Accelo
+The Accelo integration does a one-way sync, which means it brings expenses from Expensify into Accelo. When this happens, it transfers specific information from Expensify expenses to Accelo:
+
+| Expensify           | Accelo                |
+|---------------------|-----------------------|
+| Comment             | Title                 |
+| Date                | Date Incurred         |
+| Category            | Type                  |
+| Tags                | Against (relevant Project, Ticket or Retainer) |
+| Distance (mileage)  | Quantity              |
+| Hours (time expenses) | Quantity            |
+| Amount              | Purchase Price and Sale Price |
+| Reimbursable?       | Reimbursable?         |
+| Billable?           | Billable?             |
+| Receipt             | Attachment            |
+| Tax Rate            | Tax Code              |
+| Attendees           | Submitted By          |
+
+## Expense Status
+The status of your expense report in Expensify is also synced in Accelo.
+
+| Expensify Report Status | Accelo Expense Status |
+|-------------------------|-----------------------|
+| Open                    | Submitted             |
+| Submitted               | Submitted             |
+| Approved                | Approved              |
+| Reimbursed              | Approved              |
+| Rejected                | Declined              |
+| Archived                | Approved              |
+| Closed                  | Approved              |
+
+## Importing expenses from Expensify to Accelo
+Accelo regularly checks Expensify for new expenses once every hour. It automatically brings in expenses that have been created or changed since the last sync.
diff --git a/docs/articles/expensify-classic/integrations/accounting-integrations/NetSuite.md b/docs/articles/expensify-classic/integrations/accounting-integrations/NetSuite.md
index 3ee1c8656b4b..8092ed9c6dd6 100644
--- a/docs/articles/expensify-classic/integrations/accounting-integrations/NetSuite.md
+++ b/docs/articles/expensify-classic/integrations/accounting-integrations/NetSuite.md
@@ -1,5 +1,575 @@
 ---
-title: Coming Soon
-description: Coming Soon
+title: NetSuite
+description: Connect and configure NetSuite directly to Expensify.
 ---
-## Resource Coming Soon!
+# Overview
+Expensify's seamless integration with NetSuite enables you to streamline your expense reporting process. This integration allows you to automate the export of reports, tailor your coding preferences, and tap into NetSuite's array of advanced features. By correctly configuring your NetSuite settings in Expensify, you can leverage the connection's settings to automate most of the tasks, making your workflow more efficient.
+
+Before getting started with connecting NetSuite to Expensify, there are a few things to note:
+- Token-based authentication works by ensuring that each request to NetSuite is accompanied by a signed token which is verified for authenticity
+- You must be able to login to NetSuite as an administrator to initiate the connection
+- You must have a Control Plan in Expensify to integrate with NetSuite
+- Employees don’t need NetSuite access or a NetSuite license to submit expense reports since the connection is managed by the Workspace Admin
+- Each NetSuite subsidiary will need its own Expensify Group Workspace
+- Ensure that your workspace's report output currency setting matches the NetSuite Subsidiary default currency
+- Make sure your page size is set to 1000 for importing your customers and vendors. Go to Setup > Integration > Web Services Preferences > 'Search Page Size'
+
+# How to Connect to NetSuite 
+
+## Step 1: Install the Expensify Bundle in NetSuite
+
+1. While logged into NetSuite as an administrator, go to Customization > SuiteBundler > Search & Install Bundles, then search for "Expensify"
+2. Click on the Expensify Connect bundle (Bundle ID 283395)
+3. Click Install
+4. If you already have the Expensify Connect bundle installed, head to _Customization > SuiteBundler > Search & Install Bundles > List_ and update it to the latest version
+5. Select **Show on Existing Custom Forms** for all available fields
+
+## Step 2: Enable Token-Based Authentication
+
+1. Head to _Setup > Company > Enable Features > SuiteCloud > Manage Authentication_
+2. Make sure “Token Based Authentication” is enabled
+3. Click **Save**
+
+## Step 3: Add Expensify Integration Role to a User
+
+The user you select must have access to at least the permissions included in the Expensify Integration Role, but they're not required to be an Admin.
+1. In NetSuite, head to Lists > Employees, and find the user you want to add the Expensify Integration role to
+2. Click _Edit > Access_, then find the Expensify Integration role in the dropdown and add it to the user
+3. Click **Save**
+
+Remember that Tokens are linked to a User and a Role, not solely to a User. It's important to note that you cannot establish a connection with tokens using one role and then switch to another role afterward. Once you've initiated a connection with tokens, you must continue using the same token/user/role combination for all subsequent sync or export actions.
+
+## Step 4: Create Access Tokens
+
+1. Using Global Search in NetSuite, enter “page: tokens”
+2. Click **New Access Token**
+3. Select Expensify as the application (this must be the original Expensify integration from the bundle)
+4. Select the role Expensify Integration
+5. Press **Save**
+6. Copy and Paste the token and token ID to a saved location on your computer (this is the only time you will see these details)
+
+## Step 5: Confirm Expense Reports are Enabled in NetSuite.
+
+Enabling Expense Reports is required as part of Expensify's integration with NetSuite:
+1. Logged into NetSuite as an administrator, go to Setup > Company > Enable Features > Employees
+2. Confirm the checkbox next to Expense Reports is checked
+3. If not, click the checkbox and then Save to enable Expense Reports
+
+## Step 6: Confirm Expense Categories are set up in NetSuite.
+
+Once Expense Reports are enabled, Expense Categories can be set up in NetSuite. Expense Categories are an alias for General Ledger accounts for coding expenses.
+
+1. Logged into NetSuite as an administrator, go to Setup > Accounting > Expense Categories (a list of Expense Categories should show)
+2. If no Expense Categories are visible, click **New** to create new ones
+
+## Step 7: Confirm Journal Entry Transaction Forms are Configured Properly
+
+1. Logged into NetSuite as an administrator, go to _Customization > Forms > Transaction Forms_
+2. Click **Customize** or **Edit** next to the Standard Journal Entry form
+3. Then, click Screen Fields > Main. Please verify the "Created From" label has "Show" checked and the Display Type is set to Normal
+4. Click the sub-header Lines and verify that the "Show" column for "Receipt URL" is checked
+5. Go to _Customization > Forms > Transaction Forms_ and ensure all other transaction forms with the journal type have this same configuration
+
+## Step 8: Confirm Expense Report Transaction Forms are Configured Properly
+
+1. Logged into NetSuite as an administrator, go to _Customization > Forms > Transaction Forms_
+2. Click **Customize** or **Edit** next to the Standard Expense Report form, then click **Screen Fields > Main**
+3. Verify the "Created From" label has "Show" checked and the Display Type is set to Normal
+4. Click the second sub-header, Expenses, and verify that the 'Show' column for 'Receipt URL' is checked
+5. Go to _Customization > Forms > Transaction Forms_ and ensure all other transaction forms with the expense report type have this same configuration
+
+## Step 9: Confirm Vendor Bill Transactions Forms are Configured Properly
+
+1. Logged into NetSuite as an administrator, go to _Customization > Forms > Transaction Forms_ 
+2. Click **Customize** or **Edit** next to your preferred Vendor Bill form
+3. Then, click _Screen Fields > Main_ and verify that the "Created From" label has "Show" checked and that Departments, Classes, and Locations have the "Show" label unchecked
+4. Under the Expenses sub-header (make sure to click the "Expenses" sub-header at the very bottom and not "Expenses & Items"), ensure "Show" is checked for Receipt URL, Department, Location, and Class
+5. Go to _Customization > Forms > Transaction Forms_ and provide all other transaction forms with the vendor bill type have this same configuration
+
+## Step 10: Confirm Vendor Credit Transactions Forms are Configured Properly
+
+1. While logged in as an administrator, go to _Customization > Forms > Transaction Forms_
+2. Click **Customize** or **Edit** next to your preferred Vendor Credit form, then click _Screen Fields > Main_ and verify that the "Created From" label has "Show" checked and that Departments, Classes, and Locations have the "Show" label unchecked
+3. Under the Expenses sub-header (make sure to click the "Expenses" sub-header at the very bottom and not "Expenses & Items"), ensure "Show" is checked for Receipt URL, Department, Location, and Class
+4. Go to _Customization > Forms > Transaction Forms_ and ensure all other transaction forms with the vendor credit type have this same configuration
+
+## Step 11: Set up Tax Groups (only applicable if tracking taxes)
+
+Expensify imports NetSuite Tax Groups (not Tax Codes), which you can find in NetSuite under _Setup > Accounting > Tax Groups_.
+
+Tax Groups are an alias for Tax Codes in NetSuite and can contain one or more Tax Codes (Please note: for UK and Ireland subsidiaries, please ensure your Tax Groups do not have more than one Tax Code). We recommend naming Tax Groups so your employees can easily understand them, as the name and rate will be displayed in Expensify.
+
+Before importing NetSuite Tax Groups into Expensify:
+1. Create your Tax Groups in NetSuite by going to _Setup > Accounting > Tax Groups_
+2. Click **New**
+3. Select the country for your Tax Group
+4. Enter the Tax Name (this is what employees will see in Expensify)
+5. Select the subsidiary for this Tax Group
+6. Select the Tax Code from the table you wish to include in this Tax Group
+7. Click **Add**
+8. Click **Save**
+9. Create one NetSuite Tax Group for each tax rate you want to show in Expensify
+
+Ensure Tax Groups can be applied to expenses by going to _Setup > Accounting > Set Up Taxes_ and setting the Tax Code Lists Include preference to "Tax Groups And Tax Codes" or "Tax Groups Only." 
+
+If this field does not display, it’s not needed for that specific country.
+
+## Step 12: Connect Expensify and NetSuite
+
+1. Log into Expensify as a Policy Admin and go to **Settings > Workspaces > _[Workspace Name]_ > Connections > NetSuite**
+2. Click **Connect to NetSuite**
+3. Enter your Account ID (Account ID can be found in NetSuite by going to _Setup > Integration > Web Services Preferences_)
+4. Then, enter the token and token secret 
+5. Click **Connect to NetSuite**
+
+From there, the NetSuite connection will sync, and the configuration dialogue box will appear.
+
+Please note that you must create the connection using a NetSuite account with the Expensify Integration role
+
+Once connected, all reports exported from Expensify will be generated in NetSuite using SOAP Web Services (the term NetSuite employs when records are created through the integration).
+
+# How to Configure Export Settings
+
+There are numerous options for exporting Expensify reports to NetSuite. Let's explore how to configure these settings to align with your business needs.
+To access these settings, head to **Settings > Workspace > Group > Connections** and select the **Configure** button. 
+
+## Export Options
+
+### Subsidiary
+
+The subsidiary selection will only appear if you use NetSuite OneWorld and have multiple subsidiaries active. If you add a new subsidiary to NetSuite, sync the workspace connection, and the new subsidiary should appear in the dropdown list under **Settings > Workspaces > _[Workspace Name]_ > Connections**.
+
+### Preferred Exporter
+
+This option allows any admin to export, but the preferred exporter will receive notifications in Expensify regarding the status of exports.
+
+### Date
+
+The three options for the date your report will export with are:
+- Date of last expense: This will use the date of the previous expense on the report
+- Submitted date: The date the employee submitted the report
+- Exported date: The date you export the report to NetSuite
+
+## Reimbursable Expenses
+
+### Expense Reports
+
+Expensify transactions will export reimbursable expenses as expense reports by default, which will be posted to the payables account designated in NetSuite. 
+
+### Vendor Bills
+
+Expensify transactions export as vendor bills in NetSuite and will be mapped to the subsidiary associated with the corresponding policy. Each report will be posted as payable to the vendor associated with the employee who submitted the report. 
+You can also set an approval level in NetSuite for vendor bills.
+
+### Journal Entries
+
+Expensify transactions that are set to export as journal entries in NetSuite will be mapped to the subsidiary associated with this policy. All the transactions will be posted to the payable account specified in the policy. 
+
+You can also set an approval level in NetSuite for the journal entries.
+
+**Important Notes:**
+- Journal entry forms by default do not contain a customer column, so it is not possible to export customers or projects with this export option
+- The credit line and header level classifications are pulled from the employee record
+
+## Non-Reimbursable Expenses
+
+### Vendor Bills
+
+Non-reimbursable expenses will be posted as a vendor bill payable to the default vendor specified in your policy's connection settings. If you centrally manage your company cards through Domains, you can export expenses from each card to a specific vendor in NetSuite. You can also set an approval level in NetSuite for the bills. 
+
+### Journal Entries
+
+Non-reimbursable expenses will be posted to the Journal Entries posting account selected in your policy's connection settings. If you centrally manage your company cards through Domains, you can export expenses from each card to a specific account in NetSuite.
+
+**Important Notes:**
+- Expensify Card expenses will always export as Journal Entries, even if you have Expense Reports or Vendor Bills configured for non-reimbursable expenses on the Export tab
+- Journal entry forms do not contain a customer column, so it is not possible to export customers or projects with this export option
+- The credit line and header level classifications are pulled from the employee record
+
+### Expense Reports
+
+To use the expense report option for your corporate card expenses, you will need to set up your default corporate cards in NetSuite. 
+
+To use a default corporate card for non-reimbursable expenses, you must select the correct card on the employee records (for individual accounts) or the subsidiary record (If you use a non-one world account, the default is found in your accounting preferences).
+
+Add the corporate card option and corporate card main field to your expense report transaction form in NetSuite by: 
+1. Heading to _Customization > Forms > Transaction Forms > Preferred expense report form > Screen Fields_
+2. Under the Main tab, check “Show” for Account for Corporate Card Expenses
+3. On the Expenses tab, check “Show” for Corporate Card
+
+You can select the default account on your employee record to use individual corporate cards for each employee. Make sure you add this field to your employee entity form in NetSuite.
+If you have multiple cards assigned to a single employee, you cannot export to each account. You can only have a single default per employee record. 
+
+### Export Invoices
+
+Select the Accounts Receivable account you want your Invoice Reports to export. In NetSuite, the Invoices are linked to the customer, corresponding to the email address where the Invoice was sent.
+
+### Default Vendor Bills
+
+The list of vendors will be available in the dropdown when selecting the option to export non-reimbursable expenses as vendor bills.
+
+# How to Configure Coding Settings 
+
+The Coding tab is where NetSuite information is configured in Expensify, which allows employees to code expenses and reports accurately. There are several coding options in NetSuite. Let’s go over each of those below. 
+
+## Expense Categories
+
+Expensify's integration with NetSuite automatically imports NetSuite Expense Categories as Categories in Expensify.
+
+Please note that each expense must have a Category selected to export to NetSuite. The category chosen must be imported from NetSuite and cannot be manually created in Expensify. 
+
+If you want to delete Categories, you must do this in NetSuite. Categories are added and modified on the integration’s side and then synced with Expensify.
+Once imported, you can turn specific Categories on or off under **Settings > Workspaces > _[Workspace Name]_ > Categories**. 
+
+## Tags
+
+The NetSuite integration allows you to configure Customers, Projects, Departments, Classes, and Locations as line-item expense classifications. These are called Tags in Expensify.
+
+Suppose a default Customer, Project, Department, Class, or Location ties to the employee record in NetSuite. In that case, Expensify will create a rule that automatically applies that tag to all expenses made by that employee (the Tag is still editable if necessary).
+
+If you want to delete Tags, you must do this in NetSuite. Tags are added and modified on the integration’s side and then synced with Expensify.
+
+Once imported, you can turn specific Tags on or off under **Settings > Workspaces > _[Workspace Name]_ > Tags**. 
+
+## Report Fields
+
+The NetSuite integration allows you to configure Customers, Projects, Departments, Classes, and Locations as report-level classifications. These are called Report Fields in Expensify.
+
+## NetSuite Employee Default
+
+The NetSuite integration allows you to set Departments, Classes, and Locations according to the NetSuite Employee Default for expenses exported as both Expense Reports and Journal Entries. 
+
+These fields must be set in NetSuite's employee(s) record(s) to be successfully applied to expenses upon export.
+
+You cannot use the employee default setting with a vendor bill export if you have both a vendor and an employee set up for the user under the same email address and subsidiary.
+
+## Tax
+
+The NetSuite integration allows users to apply a tax rate and amount to each expense. To do this, import Tax Groups from NetSuite: 
+1. In NetSuite, head to _Setup > Accounting > Tax Groups_
+2. Once imported, go to the NetSuite connection configuration page in Expensify (under **Settings > Workspaces > Group > _[Workspace Name]_ > Connection > NetSuite > Coding**), refresh the subsidiary list, and the Tax option will appear
+3. From there, enable Tax
+4. Click **Save**
+5. Sync the connection
+6. All Tax Groups for the connected NetSuite subsidiary will be imported to Expensify as taxes.
+7. After syncing, go to **Settings > Workspace > Group > _[Workspace Name]_ > Tax** to see the tax groups imported from NetSuite
+8. Use the turn on/off button to choose which taxes to make available to your employees
+9. Select a default tax to apply to the workspace (that tax rate will automatically apply to all new expenses)
+
+## Custom Segments
+
+To add a Custom Segment to your workspace, you’ll need to locate three fields in NetSuite:
+- Segment Name
+- Internal ID
+- Script/Field ID
+
+**To find the Segment Name:**
+1. Log in as an administrator in NetSuite
+2. Head to _Customization > Lists, Records, & Fields > Custom Segments_
+3. You’ll see the Segment Name on the Custom Segments page
+
+**To find the Internal ID:**
+1. Ensure you have internal IDs enabled in NetSuite under _Home > Set Preferences_
+2. Navigate back to the Custom Segment page
+3. Click the **Custom Record Type** hyperlink
+4. You’ll see the Internal ID on the Custom Record Type page
+
+**To find the Script/Field ID:**
+
+If configuring Custom Segments as Report Fields, use the Field ID on the Transactions tab (under _Custom Segments > Transactions_).
+
+If configuring Custom Segments as Tags, use the Field ID on the Transaction Columns tab (under _Custom Segments > Transaction Columns_). 
+
+Lastly, head over to Expensify and do the following:
+1. Navigate to **Settings > Workspace > Group > _[Workspace Name]_ > Connections > Configure > Coding tab**
+2. Choose how to import Custom Segments (Report Fields or Tags) 
+3. Fill out the three fields (Segment Name, Internal ID, Script ID)
+4. Click **Submit**
+
+From there, you should see the values for the Custom Segment under the Tag or Report Field settings in Expensify. 
+
+Don’t use the "Filtered by" feature available for Custom Segments. Expensify can’t make these dependent on other fields. If you do have a filter selected, we suggest switching that filter in NetSuite to "Subsidiary" and enabling all subsidiaries to ensure you don't receive any errors upon exporting reports. 
+
+### Custom Records
+
+Custom Records are added through the Custom Segments feature.
+
+To add a Custom Record to your workspace, you’ll need to locate three fields in NetSuite:
+- The name of the record
+- Internal ID
+- Transaction Column ID
+
+**To find the Internal ID:**
+1. Make sure you have Internal IDs enabled in NetSuite under Home > Set Preferences
+2. Navigate back to the Custom Segment page
+3. Click the Custom Record Type hyperlink
+4. You’ll see the Internal ID on the Custom Record Type page
+
+**To find the Transaction Column ID:**
+If configuring Custom Segments as Report Fields, use the Field ID on the Transactions tab (under _Custom Segments > Transactions_).
+
+If configuring Custom Segments as Tags, use the Field ID on the Transaction Columns tab (under _Custom Segments > Transaction Columns_). 
+
+Lastly, head over to Expensify and do the following:
+1. Navigate to **Settings > Workspace > Group > [Workspace Name]_ > Connections > Configure > Coding tab**
+2. Choose how to import Custom Records (Report Fields or Tags) 
+3. Fill out the three fields (the name or label of the record, Internal ID, Transaction Column ID)
+4. Click **Submit**
+
+From there, you should see the values for the Custom Records under the Tag or Report Field settings in Expensify. 
+
+### Custom Lists
+
+To add Custom Lists to your workspace, you’ll need to locate two fields in NetSuite:
+- The name of the record
+- The ID of the Transaction Line Field that holds the record
+
+**To find the record:**
+1. Log into Expensify
+2. Head to **Settings > Workspace > Group > _[Workspace Name]_ > Connections > Configure > Coding tab**
+3. The name of the record will be populated in a dropdown list
+
+The name of the record will populate in a dropdown list. If you don't see the one you are looking for, click **Refresh Custom List Options**.
+
+**To find the Transaction Line Field ID:**
+1. Log into NetSuite
+2. Search "Transaction Line Fields" in the global search
+3. Open the option that is holding the record to get the ID
+
+Lastly, head over to Expensify, and do the following:
+1. Navigate to **Settings > Workspaces > Group > _[Workspace Name]_ > Connections > Configure > Coding tab**
+2. Choose how to import Custom Lists (Report Fields or Tags)
+3. Enter the ID in Expensify in the configuration screen
+4. Click **Submit**
+
+From there, you should see the values for the Custom Lists under the Tag or Report Field settings in Expensify. 
+
+# How to Configure Advanced Settings
+
+The NetSuite integration’s advanced configuration settings are accessed under **Settings > Workspaces > Group > _[Workspace Name]_ > Connections > NetSuite > Configure > Advanced tab**.
+
+Let’s review the different advanced settings and how they interact with the integration.
+
+## Auto Sync
+
+Enabling Auto Sync ensures that the information in NetSuite and Expensify is always in sync through automating exports, tracking direct deposits, and communicating export errors.
+
+**Automatic Export:**
+- When you turn on the Auto Sync feature in Expensify, any final report you approve will automatically be sent to NetSuite.
+- This happens every day at approximately the same time.
+
+**Direct Deposit Alert:**
+- If you use Expensify's Direct Deposit ACH and have Auto Sync, getting reimbursed for an Expensify report will automatically create a Bill Payment in NetSuite.
+
+**Tracking Exports and Errors:**
+- In the comments section of an Expensify report, you can find extra details about the report.
+- The comments section will tell you when the report was sent to NetSuite, and if there were any problems during the export, it will show the error.
+
+## Newly Imported Categories
+
+With this enabled, all submitters can add any newly imported Categories to an Expense. 
+
+## Invite Employees & Set Approval Workflow
+
+### Invite Employees
+
+Use this option in Expensify to bring your employees from a specific NetSuite subsidiary into Expensify.
+Once imported, Expensify will send them an email letting them know they've been added to a workspace.
+
+### Set Approval Workflow
+
+Besides inviting employees, you can also establish an approval process in NetSuite.
+
+By doing this, the Approval Workflow in Expensify will automatically follow the same rules as NetSuite, typically starting with Manager Approval.
+
+- **Basic Approval:** A single level of approval, where all users submit directly to a Final Approver. The Final Approver defaults to the workspace owner but can be edited on the people page.
+- **Manager Approval (default):** Two levels of approval route reports first to an employee's NetSuite expense approver or supervisor, and second to a workspace-wide Final Approver. By NetSuite convention, Expensify will map to the supervisor if no expense approver exists. The Final Approver defaults to the workspace owner but can be edited on the people page. 
+- **Configure Manually:** Employees will be imported, but all levels of approval must be manually configured on the workspace's People settings page. If you enable this setting, it’s recommended you review the newly imported employees and managers on the **Settings > Workspaces > Group > _[Workspace Name]_ > People page**. You can set a user role for each new employee and enforce an approval workflow.
+
+## Automatically Create Employees/Vendors
+
+With this feature enabled, Expensify will automatically create a new employee or vendor (if one doesn’t already exist) from the email of the report submitter in NetSuite. 
+
+## Export Foreign Currency Amount
+
+Using this feature allows you to send the original amount of the expense rather than the converted total when exporting to NetSuite. This option is available if you are exporting reimbursable expenses as Expense Reports.
+
+## Cross-Subsidiary Customers/Projects 
+
+This allows you to import Customers and Projects across all subsidiaries to a single group workspace. For this functionality, you must enable "Intercompany Time and Expense" in NetSuite. 
+
+That feature is found in NetSuite under _Setup > Company > Setup Tasks: Enable Features > Advanced Features_.
+
+## Sync Reimbursed Reports
+
+If you're using Expensify's Direct Deposit ACH feature and you want to export reimbursable expenses as either Expense Reports or Vendor Bills in NetSuite, here's what to do:
+1. In Expensify, go to the Advanced Settings tab
+2. Look for a toggle or switch related to this feature
+3. Turn it on by clicking the toggle
+4. Select the correct account for the Bill Payment in NetSuite
+5. Ensure the account you choose matches the default account for Bill Payments in NetSuite
+
+That's it! When Expensify reimburses an expense report, it will automatically create a corresponding Bill Payment in NetSuite.
+
+Alternatively, if reimbursing outside of Expensify, this feature will automatically update the expense report status in Expensify from Approved to Reimbursed when the respective report is paid in NetSuite and the corresponding workspace syncs via Auto-Sync or when the integration connection is manually synced.
+
+## Setting Approval Levels
+
+With this setting enabled, you can set approval levels based on your export type. 
+
+- **Expense Reports:** These options correspond to the default preferences in NetSuite – “Supervisor approval only,” “Accounting approval only,” or “Supervisor and Accounting approved.”
+- **Vendor Bills or Journal Entries:** These options correspond to the default preferences in NetSuite –  “Pending Approval” or “Approved for Posting.”
+
+If you have Approval Routing selected in your accounting preference, this will override the selections in Expensify. 
+
+If you do not wish to use Approval Routing in NetSuite, go to _Setup > Accounting > Accounting Preferences > Approval Routing_ and ensure Vendor Bills and Journal Entries are not selected. 
+
+### Collection Account
+
+When exporting invoices, once marked as Paid, the payment is marked against the account selected after enabling the Collection Account setting.
+
+# Deep Dive
+
+## Categories
+
+You can use the Auto-Categorization feature so that expenses are automatically categorized. 
+
+To set Category Rules (e.g., receipt requirements or comments), go to the categories page in the workspace under **Settings > Workspaces > _[Workspace Name]_ > Categories**. 
+
+With this setting enabled, when an Expense Category updates in NetSuite, it will update in Expensify automatically. 
+
+## Company Cards
+
+NetSuite's company card feature simplifies exporting reimbursable and non-reimbursable transactions to your General Ledger (GL). This approach is recommended for several reasons:
+
+1. **Separate Employees from Vendors:** NetSuite allows you to maintain separate employee and vendor records. This feature proves especially valuable when integrating with Expensify. By utilizing employee defaults for classifications, your employees won't need to apply tags to all their expenses manually.
+2. **Default Accounts Payable (A/P) Account:** Expense reports enable you to set a default A/P account for export on your subsidiary record. Unlike vendor bills, where the A/P account defaults to the last selected account, the expense report export option allows you to establish a default A/P account.
+3. **Mix Reimbursable and Non-Reimbursable Expenses:** You can freely mix reimbursable and non-reimbursable expenses without categorizing them in NetSuite after export. NetSuite's corporate card feature automatically categorizes expenses into the correct GL accounts, ensuring a neat and organized GL impact.
+
+#### Let’s go over an example! 
+
+Consider an expense report with one reimbursable and one non-reimbursable expense. Each needs to be exported to different accounts and expense categories.
+
+In NetSuite, you can quickly identify the non-reimbursable expense marked as a corporate card expense. Reviewing the GL impact, you'll notice that the reimbursable expense is posted to the default A/P account set on the subsidiary record. On the other hand, the company card expense is assigned to the Credit Card account, which can either be set as a default on the subsidiary record (for a single account) or the employee record (for individual credit card accounts in NetSuite).
+
+Furthermore, each expense is categorized according to your selected expense category.
+
+You'll need to set up default corporate cards in NetSuite to use the expense report option for your corporate card expenses.
+
+For non-reimbursable expenses, choose the appropriate card on the subsidiary record. You can find the default in your accounting preferences if you're not using a OneWorld account.
+
+Add the corporate card option and the corporate card main field to configure your expense report transaction form in NetSuite:
+1. Go to _Customization > Forms > Transaction Forms > Preferred expense report form > Screen Fields_
+2. Under the Main tab, check "Show for Account for Corporate Card Expenses"
+3. On the Expenses tab, check "Show for Corporate Card"
+
+If you prefer individual corporate cards for each employee, you can select the default account on the employee record. Add this field to your employee entity form in NetSuite (under _Customize > Customize Form_ from any employee record). Note that each employee can have only one corporate card account default.
+
+### Exporting Company Cards to GL Accounts in NetSuite
+
+If you need to export company card transactions to individual GL accounts, you can set that up at the domain level. 
+
+Let’s go over how to do that: 
+1. Go to **Settings > Domain > _[Domain name]_ > Company Cards**
+2. Click the Export Settings cog on the right-hand side of the card and select the GL account where you want the expenses to export
+
+After setting the account, exported expenses will be mapped to that designated account.
+
+## Tax 
+
+You’ll want to set up Tax Groups in Expensify if you're keeping track of taxes.
+
+Expensify can import "NetSuite Tax Groups" (not Tax Codes) from NetSuite. Tax Groups can contain one or more Tax Codes. If you have subsidiaries in the UK or Ireland, ensure your Tax Groups have only one Tax Code.
+
+You can locate these in NetSuite by setting up> Accounting > Tax Groups.
+
+You’ll want to name Tax Groups something that makes sense to your employees since both the name and the tax rate will appear in Expensify.
+
+To bring NetSuite Tax Groups into Expensify, here's what you need to do:
+1. Create your Tax Groups in NetSuite by going to _Setup > Accounting > Tax Groups_
+2. Click **New**
+3. Pick the country for your Tax Group
+4. Enter the Tax Name (this will be visible to your employees in Expensify)
+5. Next, select the subsidiary for this Tax Group 
+6. Finally, from the table, choose the Tax Code you want to include in this Tax Group
+7. Click **Add**, then click **Save**
+
+Repeat those steps for each tax rate you want to use in Expensify. 
+
+Next, ensure that Tax Groups can be applied to expenses: 
+1. In NetSuite, head to _Setup > Accounting > Set Up Taxes_
+2. Set the preference for "Tax Code Lists Include" to either "Tax Groups And Tax Codes" or "Tax Groups Only." If you don't see this field, don't worry; it means you don't need to set it for that specific country
+
+NetSuite has a pre-made list of tax groups for specific locations, but you can also create your own. We'll import both your custom tax groups and the default ones. It's important not to deactivate the default NetSuite tax groups because we rely on them for exporting specific types of expenses.
+
+For example, there's a default Canadian tax group called CA-Zero, which we use when exporting mileage and per diem expenses that don't have any taxes applied in 
+
+Expensify. If you deactivate this group in NetSuite, it will lead to export errors.
+
+Additionally, some tax nexuses in NetSuite have specific settings that need to be configured in a certain way to work seamlessly with the Expensify integration:
+- ​​In the Tax Code Lists Include field, choose "Tax Groups" or "Tax Groups and Tax Codes." This setting determines how tax information is handled.
+- In the Tax Rounding Method field, select "Round Off." Although it won't cause connection errors, not using this setting can result in exported amounts differing from what NetSuite expects.
+
+If your tax groups are importing into Expensify but not exporting to NetSuite, check that each tax group has the right subsidiaries enabled. That is crucial for proper data exchange.
+
+## Multi-Currency
+
+When using multi-currency features with NetSuite, remember these points:
+
+**Matching Currencies:** The currency set for a vendor or employee record must match the currency chosen for the subsidiary in your Expensify configuration. This alignment is crucial for proper handling.
+
+**Foreign Currency Conversion:** If you create expenses in one currency and then convert them to another currency within Expensify before exporting, you can include both the original and converted amounts in the exported expense reports. This option, called "Export foreign currency amount," can be found in the Advanced tab of your configuration. Note that Expensify sends only the amounts; the actual currency conversion is performed in NetSuite.
+
+**Bank Account Currency:** When synchronizing bill payments, make sure your bank account's currency matches the subsidiary's currency. Failure to do so will result in an "Invalid Account" error. This alignment is necessary to prevent issues during payment processing.
+
+## Exporting Invoices
+
+When you mark an invoice as paid in Expensify, the paid status syncs with NetSuite and vice versa!
+
+Let's dive right in:
+1. Access Configuration Settings: Go to **Settings > Workspace > Group > _[Workspace Name]_ > Connections > Configuration**
+2. Choose Your Accounts Receivable Account: Scroll down to "Export Expenses to" and select the appropriate Accounts Receivable account from the dropdown list. If you don't see any options, try syncing your NetSuite connection by returning to the Connections page and clicking **Sync Now**
+
+### Exporting an Invoice to NetSuite
+
+Invoices will be automatically sent to NetSuite when they are in the "Processing" or "Paid" status. This ensures you always have an up-to-date record of unpaid and paid invoices.
+
+If you have Auto Sync disabled, you'll need to export your invoices, along with your expense reports, manually. Follow these three simple steps:
+1. Filter Invoices: From your Reports page, use filters to find the invoices you want to export.
+2. Select Invoices: Pick the invoices ready for export.
+3. Export to NetSuite: Click **Export to NetSuite** in the top right-hand corner.
+
+When exporting to NetSuite, we match the recipient's email address on the invoice to a customer record in NetSuite, meaning each customer in NetSuite must have an email address in their profile. If we can't find a match, we'll create a new customer in NetSuite.
+
+Once exported, the invoice will appear in the Accounts Receivable account you selected during your NetSuite Export configuration.
+
+### Updating an Invoice to paid
+
+When you mark an invoice as "Paid" in Expensify, this status will automatically update in NetSuite. Similarly, if the invoice is marked as "Paid" in NetSuite, it will sync with Expensify. The payment will be reflected in the Collection account specified in your Advanced Settings Configuration.
+
+## Download NetSuite Logs
+
+Sometimes, we might need more details from you to troubleshoot issues with your NetSuite connection. Providing the NetSuite web services usage logs is incredibly useful. 
+
+Here's how you can send them to us:
+1. **Generate the Logs:** Start by trying to export a report from your system. This action will create the most recent logs that we require.
+2. **Access Web Services Usage Logs:** You can locate these logs in your NetSuite account. Just use the global search bar at the top of the page and type in "Web Services Usage Log."
+3. **Identify the Logs:** Look for the most recent log entry. It should have "FAILED" under the STATUS column. Click on the two blue "view" links under the REQUEST and RESPONSE columns. These are the two .xml files we need to examine.
+
+Send these two files to your Account Manager or Concierge so we can continue troubleshooting! 
+
+# FAQ
+
+## What type of Expensify plan is required for connecting to NetSuite?
+
+You need a group workspace on a Control Plan to integrate with NetSuite. 
+
+## How does Auto Sync work with reimbursed reports? 
+
+If a report is reimbursed via ACH or marked as reimbursed in Expensify and then exported to NetSuite, the report is automatically marked as paid in NetSuite during the next sync.
+
+If a report is exported to NetSuite and then marked as paid in NetSuite, the report is automatically marked as reimbursed in Expensify during the next sync. 
+
+## If I enable Auto Sync, what happens to existing approved and reimbursed reports? 
+
+If you previously had Auto Sync disabled but want to allow that feature to be used going forward, you can safely turn on Auto Sync without affecting existing reports. Auto Sync will only take effect for reports created after enabling that feature.
diff --git a/docs/articles/expensify-classic/integrations/other-integrations/Google-Apps-SSO.md b/docs/articles/expensify-classic/integrations/other-integrations/Google-Apps-SSO.md
index 3ee1c8656b4b..9fd745838caf 100644
--- a/docs/articles/expensify-classic/integrations/other-integrations/Google-Apps-SSO.md
+++ b/docs/articles/expensify-classic/integrations/other-integrations/Google-Apps-SSO.md
@@ -1,5 +1,34 @@
 ---
-title: Coming Soon
-description: Coming Soon
+title: Google Apps SSO
+description: Expensify integrates with Google Apps SSO to easily invite users to your workspace.  
 ---
-## Resource Coming Soon!
+Google Apps SSO Integration
+# Overview
+Expensify offers a Single Sign-on (SSO) integration with [Google Apps](https://cloud.google.com/architecture/identity/single-sign-on) for one-click Workspace invites. 
+
+To set this up for users, you must:
+
+- Be an admin for a **Group Workspace** using a Collect or Control Workspace.
+- Have Administrator access to the Google Apps Admin console.
+
+Google Apps SSO differs from using Google as your Identity Provider for SAML SSO, which limits domain access. To complete the Google SAML setup, follow the Google guide to [Set up SSO via SAML for Expensify](https://support.google.com/a/answer/7371682). You can enable both at the same time.
+# How to Enable the Expensify App on Google Apps
+To enable Expensify for your Google Apps domain and add an “Expenses” link to your universal navigation bar, please run through the following:
+1. Sign in to your Google Apps Admin console as an administrator.
+2. Navigate to the [Expensify App Listing on Google Apps](https://workspace.google.com/marketplace/app/expensify/452047858523).
+3. Click **Admin Install** to start installing the app.
+4. Click **Continue**.
+5. Ensure the correct domain is selected if you have access to multiple.
+6. Click **Finish**. You can configure access for specific Organizational Units later if needed.
+7. All account holders on your domain can now access Expensify from the Google Apps directory by clicking **More** and choosing **Expensify**.
+8. Now, follow the steps below to sync your users with Expensify automatically.
+# How to Sync Users from Google Apps to Expensify
+To sync your Google Apps users to your Expensify Workspace, follow these steps:
+1. Follow the above steps to install Expensify in your Google Apps directory.
+2. Log in to [Expensify](https://www.expensify.com/).
+3. Click [Settings>Workspaces>Group](https://www.expensify.com/admin_policies?param={"section":"group"}).
+4. Select the Workspace you wish to invite users to.
+5. Select **People** from the admin menu.
+6. Click **Sync G Suite Now** to identify anyone on your domain not yet on the Workspace and add them to it. 
+
+The connection does not automatically refresh, you will need to click **Sync G Suite Now** whenever you’re ready to add new users.
diff --git a/docs/articles/expensify-classic/integrations/travel-integrations/Additional-Travel-Integrations.md b/docs/articles/expensify-classic/integrations/travel-integrations/Additional-Travel-Integrations.md
new file mode 100644
index 000000000000..ac37a01b3e6b
--- /dev/null
+++ b/docs/articles/expensify-classic/integrations/travel-integrations/Additional-Travel-Integrations.md
@@ -0,0 +1,71 @@
+---
+title: Importing Receipts from Various Platforms to Expensify
+description: Detailed guide on how to import receipts from multiple travel platforms into Expensify.
+---
+
+# Overview
+You can automatically import receipts from many travel platforms into Expensify, to make tracking expenses while traveling for business a breeze. Read on to learn how to import receipts from Bolt Work, Spot Hero, Trainline, Grab, HotelTonight, and Kayak for Business.
+
+## How to Connect to Bolt Work
+
+### Set Up Bolt Work Profile
+- Open the Bolt app, go to the side navigation menu, and select Payment.
+- At the bottom, select Set up work profile and follow the instructions, entering your work email for verification.
+
+### Link to Expensify
+- In the Bolt app, go to Work Rides.
+- Select Add expense provider, choose Expensify, and enter the associated email to receive a verification link.
+- Ensure you select your work ride profile as the payment method before booking.
+
+## How to Connect to SpotHero
+
+### Set up a Business Profile
+- Open the SpotHero app, click the hamburger icon, and go to Account Settings.
+- Click Set up Business Profile.
+- Specify the email connected to Expensify and set up your payment method.
+- Upon checkout, choose between Business and Personal Profiles in the "Payment Details" section.
+- If you want, you can set a weekly or monthly cadence for consolidated SpotHero expense reports in your Business Profile settings. This will batch all of your SpotHero expenses to import into Expensify at that cadence.
+
+## How to Connect to Trainline
+- To send a ticket receipt to Expensify:
+  - In the Trainline app, navigate to the My Tickets tab.
+  - Tap Manage my booking > Expense receipt > Send to Expensify.
+- That’s it!
+
+## How to Connect to Grab
+- In the Grab app, tap on your name, go to “Profiles”, and “Add a business profile”.
+- Follow instructions and enter your work email for verification.
+- In your profile, tap on Business > Expense Solution > Expensify > Save.
+- Before booking, select your Business profile and confirm.
+
+## How to Connect to HotelTonight
+- In HotelTonight, go to the Bookings tab and select your booking.
+- Select Receipt > Expensify, enter your Expensify email, and send.
+
+## How to Connect to Kayak for Business
+
+### Admin Setup
+- Admins should go to “Company Settings” and click on “Connect to Expensify”.
+- Bookings made by employees will automatically be sent to Expensify.
+
+### Traveler Setup
+- From your account settings, choose whether expenses should be sent to Expensify automatically or manually.
+- We recommend sending them automatically, so you can travel without even thinking about your expense reports.
+
+# FAQ
+
+**Q: What if I don’t have the option for Send to Expensify in Trainline?**
+
+A: This can happen if the native iOS Mail app is not installed on an Apple device. However, you can still use the native iOS share to Expensify function for Trainline receipts.
+
+**Q: Why should I choose automatic mode in Kayak for Business?**
+
+A: Automatic mode is less effort as it’s easier to delete an expense in Expensify than to remember to forward a forgotten receipt.
+
+**Q: Can I receive consolidated reports from SpotHero?**
+
+A: Yes, you can set a weekly or monthly cadence for SpotHero expenses to be emailed in a consolidated report.
+
+**Q: Do I need to select a specific profile before booking in Bolt Work and Grab?**
+
+A: Yes, ensure you have selected your work or business profile as the payment method before booking.
diff --git a/docs/articles/expensify-classic/integrations/travel-integrations/Egencia.md b/docs/articles/expensify-classic/integrations/travel-integrations/Egencia.md
index 3ee1c8656b4b..178621a62d90 100644
--- a/docs/articles/expensify-classic/integrations/travel-integrations/Egencia.md
+++ b/docs/articles/expensify-classic/integrations/travel-integrations/Egencia.md
@@ -1,5 +1,30 @@
 ---
-title: Coming Soon
-description: Coming Soon
+title: Egencia Integration
+description: Expensify-Egencia integration automatically adds Egencia booking receipts to Expensify.
 ---
-## Resource Coming Soon!
+# Overview
+[Egencia](https://www.egencia.com/en/) is a platform used to book and manage business travel. Integrating Expensify and Egencia ensures any bookings made using Egencia will automatically import as expenses to Expensify.
+## Requirements: 
+- You'll need to have a Control Workspace
+- A verified Domain
+
+# How to use Egencia with Expensify
+When an employee makes a booking in Egencia: 
+- The receipt itinerary will automatically be imported to the traveler's Expensify account along with the expense details without needing to submit the information manually.
+- When the traveler uses their company credit card to make a purchase via Egencia, the Egencia receipt will automatically merge with the credit card transaction. 
+
+The travel information will also be available in the Trips section of the mobile app of the recipient's Expensify account.
+# How to Enable the Egencia Feed
+A file feed is an automated transfer of data files from Egencia to Expensify.
+
+Egencia controls the feed, so to connect Expensify you will need to:
+1. Contact your Egencia account manager.
+2. Request that they enable your Expensify feed.
+
+# How to Connect to a Central Purchasing Account
+Once your Egencia account manager has established the feed, you can automatically forward all Egencia booking receipts to a single Expensify account. To do this: 
+1. Open a chat with Concierge. 
+2. Tell Concierge “Please enable Central Purchasing Account for our Egencia feed. The account email is: xxx@yourdomain.com”.
+
+The receipt the traveler receives is a "reservation expense." Reservation expenses are non-reimbursable and won’t be included in any integrated accounting system exports. The reservation sent to the traveler's account is added to their mobile app Trips feature so that the traveler can easily keep tabs on upcoming travel and receive trip notifications.
+
diff --git a/docs/articles/expensify-classic/manage-employees-and-report-approvals/Removing-Members.md b/docs/articles/expensify-classic/manage-employees-and-report-approvals/Removing-Members.md
new file mode 100644
index 000000000000..76ebba9ef76b
--- /dev/null
+++ b/docs/articles/expensify-classic/manage-employees-and-report-approvals/Removing-Members.md
@@ -0,0 +1,34 @@
+---
+title: Remove a Workspace Member
+description: How to remove a member from a Workspace in Expensify 
+---
+
+Removing a member from a workspace disables their ability to use the workspace. Please note that it does not delete their account or deactivate the Expensify Card.
+
+## How to Remove a Workspace Member
+1. Important: Make sure the employee has submitted all Draft reports and the reports have been approved, reimbursed, etc. 
+2. Go to Settings > Workspaces > Group > [Workspace Name] > Members > Workspace Members
+3. Select the member you'd like to remove and click the **Remove** button at the top of the Members table.
+4. If this member was an approver, make sure that reports are not routing to them in the workflow.
+
+# FAQ
+
+## Will reports from this member on this workspace still be available?
+Yes, as long as the reports have been submitted. You can navigate to the Reports page and enter the member's email in the search field to find them. However, Draft reports will be removed from the workspace, so these will no longer be visible to the Workspace Admin.  
+
+## Can members still access their reports on a workspace after they have been removed?
+Yes. Any report that has been approved will now show the workspace as “(not shared)” in their account. If it is a Draft Report  they will still be able to edit it and add it to a new workspace. If the report is Approved or Reimbursed they will not be able to edit it further. 
+
+## Who can remove members from a workspace?
+Only Workspace Admins. It is not possible for a member to add or remove themselves from a workspace. It is not possible for a Domain Admin who is not also a Workspace Admin to remove a member from a workspace. 
+
+## How do I remove a member from a workspace if I am seeing an error message?
+If a member is a **preferred exporter, billing owner, report approver** or has **processing reports**, to remove them the workspace you will first need to: 
+
+* **Preferred Exporter** - go to Settings > Workspaces > Group > [Workspace Name] > Connections > Configure and select a different Workspace Admin in the dropdown for **Preferred Exporter**. 
+* **Billing Owner** - take over billing on the Settings > Workspaces > Group > [Workspace Name] > Overview page. 
+* **Processing reports** - approve or reject the member’s reports on your Reports page. 
+* **Approval Workflow** - remove them as a workflow approver on your Settings > Workspaces > Group > [Workspace Name] > Members > Approval Mode > page by changing the "**Submit reports to**" field.  
+
+## How do I remove a user completely from a company account?   
+If you have a Control Workspace and have Domain Control enabled, you will need to remove them from the domain to delete members' accounts entirely and deactivate the Expensify Card.
diff --git a/docs/articles/expensify-classic/policy-and-domain-settings/Per-Diem.md b/docs/articles/expensify-classic/policy-and-domain-settings/Per-Diem.md
index 6b40a0f4adce..fcb1c8018613 100644
--- a/docs/articles/expensify-classic/policy-and-domain-settings/Per-Diem.md
+++ b/docs/articles/expensify-classic/policy-and-domain-settings/Per-Diem.md
@@ -6,7 +6,7 @@ description: Expensify Per Diems support simple, pre-determined, tax-free allowa
 
 Per Diems are a flat rate given based on a timed range traveled for business purposes regardless of actual expenses incurred. A Per Diem is only based on the time you travel for work: it starts when you leave your home and ends when you arrive home.
 
-Per Diems themselves are created to alleviate much of the heavy lifting that Expense Reporting is well known for. Per Diem claims generally remove the hassle of saving multiple receipts and allow you to claim back a simple, pre-determined, tax-free allowance set by your jurisdiction or company.
+Per Diems themselves are created to alleviate much of the heavy lifting that expense reporting is well known for. Per Diem claims generally remove the hassle of saving multiple receipts and allow you to claim back a simple, pre-determined, tax-free allowance set by your jurisdiction or company.
 
 # How to set up Per Diems in Expensify
 
@@ -75,11 +75,10 @@ Most companies will also set a Description Hint, which allows admins to take the
 
 **Cons:**
 
-- Sometimes, jurisdiction-set amounts can be deemed incorrect or too low. In these cases, it can be challenging to establish a fair and realistic per diem for different costs in different locations. Additionally, allowing more than a tax-free amount adds undue labor for admins teams to split out taxable and tax-free expense reimbursements.
+- Sometimes, jurisdiction-set amounts can be deemed incorrect or too low. In these cases, it can be challenging to establish a fair and realistic per diem for different costs in different locations. Additionally, allowing more than a tax-free amount adds undue labor for admin teams to split out taxable and tax-free expense reimbursements.
 - Set Per Diems might restrict employee choices that could have benefitted the company, i.e., a sales team member not picking up a full dinner tab or pushing split bill reclamation back onto employees after an individual picks up the tab and each user submits their own Per Diem claims.
 - It does not eliminate employee expense fraud, and reduced receipt requirements may make it easier.
-
-As a business, you can never be sure that your expenses bill matches what employees have had to spend. Because you're reimbursing pre-determined amounts, there may be substantial hidden savings you're not taking advantage of. 
+- As a business, you can never be sure that your expenses bill matches what employees have had to spend. Because you're reimbursing pre-determined amounts, there may be substantial hidden savings you're not taking advantage of. 
 
 ## How to manage existing rates and avoid duplicates
 
diff --git a/docs/articles/expensify-classic/policy-and-domain-settings/SAML-SSO.md b/docs/articles/expensify-classic/policy-and-domain-settings/SAML-SSO.md
new file mode 100644
index 000000000000..758cb70067e1
--- /dev/null
+++ b/docs/articles/expensify-classic/policy-and-domain-settings/SAML-SSO.md
@@ -0,0 +1,89 @@
+---
+title: Managing Single Sign-On (SSO) and User Authentication in Expensify
+description: Learn how to effectively manage Single Sign-On (SSO) and user authentication in Expensify alongside your preferred SSO provider. Our comprehensive guide covers SSO setup, domain verification, and specific instructions for popular providers like AWS, Okta, and Microsoft Azure. Streamline user access and enhance security with Expensify's SAML-based SSO integration.
+---
+# Overview
+This article provides a comprehensive guide on managing Single Sign-On (SSO) and user authentication in Expensify alongside your preferred SSO provider. Expensify uses SAML to enable and manage SSO between Expensify and your SSO provider. 
+
+# How to Use SSO in Expensify
+Before setting up Single Sign-On with Expensify you will need to make sure your domain has been verified. Once the domain is verified, you can access the SSO settings by navigating to Settings > Domains > [Domain Name] > SAML. 
+On this page, you can: 
+- Get Expensify's Service Provider MetaData. You will need to give this to your identity provider. 
+- Enter your Identity Provider MetaData. Please contact your SAML SSO provider if you are unsure how to get this. 
+- Choose whether you want to make SAML SSO required for login. If you choose this option, members will only be able to log in to Expensify via SAML SSO.
+Instructions for setting up Expensify for specific SSO providers can be found below. If you do not see your provider listed below, please contact them and request instructions.
+- [Amazon Web Services (AWS SSO)](https://static.global.sso.amazonaws.com/app-202a715cb67cddd9/instructions/index.htm)
+- [Bitium](https://support.bitium.com/administration/saml-expensify/)
+- [Google SAML](https://support.google.com/a/answer/7371682) (for GSuite, not Google SSO)
+- [Microsoft Azure Active Directory](https://azure.microsoft.com/en-us/documentation/articles/active-directory-saas-expensify-tutorial/)
+- [Okta](https://saml-doc.okta.com/SAML_Docs/How-to-Configure-SAML-2.0-for-Expensify.html)
+- [OneLogin](https://onelogin.service-now.com/support?id=kb_article&sys_id=e44c9e52db187410fe39dde7489619ba)
+- [Oracle Identity Cloud Service](https://docs.oracle.com/en/cloud/paas/identity-cloud/idcsc/expensify.html#Expensify)
+- [SAASPASS](https://saaspass.com/saaspass/expensify-two-factor-authentication-2fa-single-sign-on-sso-saml.html)
+- Microsoft Active Directory Federation Services (see instructions in the FAQ section below)
+
+When SSO is enabled, employees will be prompted to sign in through Single Sign-On when using their company email (private domain email) and also a public email (e.g. gmail.com) linked as a secondary login.
+
+## How can I update the Microsoft Azure SSO Certificate?
+Expensify's SAML configuration doesn't support multiple active certificates. This means that if you create the new certification ahead of time without first removing the old one, the respective IdP will include two unique x509 certificates instead of one and the connection will break. Should you need to access Expensify, switching back to the old certificate will continue to allow access while that certificate is still valid.
+
+To transfer from one Microsoft Azure certificate to another, please follow the below steps:
+1. In Azure Directory , create your new certificate.
+2. In Azure Director, remove the old, expiring certificate.
+3. In Azure Directory, activate the remaining certificate, and get a new IdP for Expensify from it.
+4. In Expensify, replace the previous IdP with the new IdP.
+5. Log in via SSO. If login continues to fails, write into Concierge for assistance.
+
+## How can I enable deactivating users with the Okta SSO integration?
+Companies using Okta can deactivate users in Expensify using the Okta SCIM API. This means that when a user is deactivated in Okta their access to Expensify will expire and they will be logged out of both the web and mobile apps. Deactivating a user through Okta will not close their account in Expensify, if you are offboarding this employee, you will still want to close the account. You will need have a verified domain and SAML fully setup before completing setting up the deactivation feature.
+
+To enable deactivating users in Okta, follow these steps:
+1. In Expensify, head to *Settings > Domains > _[Domain Name]_ > SAML*
+2. Ensure that the toggle is set to Enabled for *SAML Login* and *Required for login*
+3. In Okta, go to *Admin > Applications > Add Application*
+4. Search for Expensify and click on Add.
+5. On the next screen, enter your company domain (e.g. yourcompany.com).
+6. In the tab Sign-On Options, click *Next* (leaving default settings).
+7. In the tab Assign to People, click *Next* and then click Done.
+8. Next, in Okta, go to *Admin > Applications > Expensify > Sign On > View Setup Instructions* and follow the steps listed.
+9. Then, go to *Directory > Profile Editor > Okta user > Profile*
+10. Click the information bubble to the right of the *First name* and *Last name* attributes
+11. Uncheck *Yes* under *Attribute required* field and press *Save Attribute*.
+12. Email concierge@expensify.com providing your domain and request that Okta SCIM be enabled. You will receive a response when this step has been completed.
+13. In Expensify, go to *Domains > _[Domain Name]_ > SAML > Show Token* and copy the Okta SCIM Token you received.
+14. In Okta, go to *Admin > Applications > Expensify > Provisioning > API Integration >  Configure API Integration*
+15. Select Enable API Integration and paste the Okta SCIM Token in API Token field and then click Save.
+15. Go to To App, click Edit Provisioning Users, select Enable Deactivate Users and then Save. (You may also need to set up the Expensify Attribute Mappings if you have not previously in steps 9-11).
+
+Successful activation of this function will be indicated by the green Push User Deactivation icon being enabled at the top of the app page.
+
+## How can I set up SAML authentication with Microsoft ADFS?
+Before getting started, you will need to have a verified domain and Control plan in order to set up SSO with Microsoft ADFS.
+
+To enable SSO with Microsoft ADFS follow these steps:
+1. Open the ADFS management console, and click the *Add Relying Party Trust* link on the right.
+2. Check the option to *Import data about the relying party from a file*, then click the *Browse* button. You will input the XML file of Expensify’s metadata which can be found on the Expensify SAML setup page.
+3. The metadata file will provide the critical information that ADFS needs to set up the trust. In ADFS, give it a name, and click Next.
+4. Select the option to permit all users, then click Next.
+5. The next step will give you an overview of what is being configured. Click Next.
+6. The new trust is now created. Highlight the trust, then click *Edit claim rules* on the right.
+7. Click *Add a Rule*.
+8. The default option should be *Send LDAP Attributes as Claims*. Click Next. 
+9. Depending upon how your Active Directory is set up, you may or may not have a useful email address associated with each user, or you may have a policy to use the UPN as the user attribute for authentication. If so, using the UPN user attribute may be appropriate for you. If not, you can use the emailaddress attribute.
+10. Give the rule a name like *Get email address from AD*. Choose Active Directory as the attribute store from the dropdown list. Choose your source user attribute to pass to Expensify that has users’ email address info in it, usually either *E-Mail-Address* or *User-Principal-Name*. Select the outgoing claim type as “E-Mail Address”. Click OK. 
+11. Add another rule; this time, we want to *Transform an Incoming Claim*. Click Next. 
+12. Name the rule *Send email address*. The Incoming claim type should be *E-Mail Address*. The outgoing claim type should be *Name ID*, and the outgoing name ID format should be *Email*. Click OK.
+13. You should now have two claim rules.
+
+Assuming you’ve also set up Expensify SAML configuration with your metadata, SAML logins on Expensify.com should now work. For reference, ADFS’ default metadata path is: https://yourservicename.yourdomainname.com/FederationMetadata/2007-06/FederationMetadata.xml.
+
+# FAQ
+## What should I do if I’m getting an error when trying to set up SSO? 
+You can double check your configuration data for errors using samltool.com. If you’re still having issues, you can reach out to your Account Manager or contact Concierge for assistance.
+
+## What is the EntityID for Expensify? 
+The entityID for Expensify is https://expensify.com. Remember not to copy and paste any extra slashes or spaces. If you've enabled the Multi-Domain support (see below) then your entityID will be https://expensify.com/mydomainname.com.
+
+## Can you have multiple domains with only one entityID?
+Yes. Please send a message to Concierge or your account manager and we will enable the ability to use the same entityID with multiple domains.
+
diff --git a/docs/articles/expensify-classic/policy-and-domain-settings/SAML.md b/docs/articles/expensify-classic/policy-and-domain-settings/SAML.md
deleted file mode 100644
index 3ee1c8656b4b..000000000000
--- a/docs/articles/expensify-classic/policy-and-domain-settings/SAML.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-title: Coming Soon
-description: Coming Soon
----
-## Resource Coming Soon!
diff --git a/docs/articles/expensify-classic/send-payments/Reimbursing-Reports.md b/docs/articles/expensify-classic/send-payments/Reimbursing-Reports.md
index 834d0b159931..e55d99d70827 100644
--- a/docs/articles/expensify-classic/send-payments/Reimbursing-Reports.md
+++ b/docs/articles/expensify-classic/send-payments/Reimbursing-Reports.md
@@ -1,5 +1,75 @@
 ---
 title: Reimbursing Reports
-description: Reimbursing Reports
+description: How to reimburse employee expense reports
 ---
-## Resource Coming Soon!
+# Overview
+
+One essential aspect of the Expensify workflow is the ability to reimburse reports. This process allows for the reimbursement of expenses that have been submitted for review to the person who made the request. Detailed explanations of the various methods for reimbursing reports within Expensify are provided below.
+
+# How to reimburse reports 
+
+Reports can be reimbursed directly within Expensify by clicking the **Reimburse** button at the top of the report to reveal the available reimbursement options. 
+
+## Direct Deposit
+
+To reimburse directly in Expensify, the following needs to be already configured:
+- The employee that's receiving reimbursement needs to add a deposit bank account to their Expensify account (under **Settings > Account > Payments > Add a Deposit-only Bank Account**)
+- The reimburser needs to add a business bank account to Expensify (under **Settings > Account > Payments > Add a Verified Business Bank Account**)
+- The reimburser needs to ensure Expensify is whitelisted to withdraw funds from the bank account
+
+If all of those settings are in place, to reimburse a report, you will click **Reimburse** on the report and then select **Via Direct Deposit (ACH)**.
+
+## Indirect or Manual Reimbursement 
+
+If you don't have the option to utilize direct reimbursement, you can choose to mark a report as reimbursed by clicking the **Reimburse** button at the top of the report and then selecting **I’ll do it manually – just mark as reimbursed**. 
+
+This will effectively mark the report as reimbursed within Expensify, but you'll handle the payment elsewhere, outside of the platform. 
+
+# Best Practices 
+- Plan ahead! Consider sharing a business bank account with multiple workspace admins so they can reimburse employee reports if you're unavailable. We recommend having at least two workspace admins with reimbursement permissions. 
+
+- Understand there is a verification process when sharing a business bank account. The new reimburser will need access to the business bank account’s transaction history (or access to someone who has access to it) to verify the set of test transactions sent from Expensify. 
+
+- Get into the routine of having every new employee connect a deposit-only bank account to their Expensify account. This will ensure reimbursements happen in a timely manner.
+
+- Employees can see the expected date of their reimbursement at the top of and in the comments section of their report.
+  
+# How to cancel a reimbursement
+
+Reimbursed a report by mistake? No worries! Any workspace admin with access to the same Verified Bank Account can cancel the reimbursement from within the report until it is withdrawn from the payment account.
+
+**Steps to Cancel an ACH Reimbursement:**
+1. On your web account, navigate to the Reports page
+2. Open the report
+3. Click **Cancel Reimbursement**
+4. After the prompt, "Are you sure you want to cancel the reimbursement?" click **Cancel Reimbursement**. 
+
+It's important to note that there is a small window of time (roughly less than 24 hours) when a reimbursement can be canceled. If you don't see the **Cancel Reimbursement** button on a report, this means your bank has already begun withdrawing the funds from the reimbursement account and the withdrawal cannot be canceled. 
+
+In that case, you’ll want to contact your bank directly to see if they can cancel the reimbursement on their end - or manage the return of funds directly with your employee, outside of Expensify.
+
+If you cancel a reimbursement after the withdrawal has started, it will be automatically returned to your Verified Bank Account within 3-5 business days.
+
+# Deep Dive
+
+## Rapid Reimbursement
+If your company uses Expensify's ACH reimbursement, we'll first check to see if the report is eligible for Rapid Reimbursement (next business day). For a report to be eligible for Rapid Reimbursement, it must fall under two limits:
+- $100 per deposit only bank account per day for the individuals being reimbursed or businesses receiving payments for bills
+- $10,000 per verified bank account for the company paying bills and reimbursing
+
+If neither limit is met, you can expect to see funds deposited into your bank account on the next business day.
+
+If either limit has been reached, you can expect funds deposited within your bank account within the typical ACH time frame of four to five business days.
+
+Rapid Reimbursement is not available for non-US-based reimbursement. If you are receiving a reimbursement to a non-US-based deposit account, you should expect to see the funds deposited in your bank account within four business days.
+
+# FAQ
+
+## Who can reimburse reports? 
+Only a workspace admin who has added a verified business bank account to their Expensify account can reimburse employees.
+
+## Why can’t I trigger direct ACH reimbursements in bulk? 
+
+Instead of a bulk reimbursement option, you can set up automatic reimbursement. With this configured, reports below a certain threshold (defined by you) will be automatically reimbursed via ACH as soon as they're "final approved."
+
+To set your manual reimbursement threshold, head to **Settings > Workspace > Group > _[Workspace Name]_ > Reimbursement > Manual Reimbursement**.
diff --git a/docs/articles/expensify-classic/send-payments/Third-Party-Payments.md b/docs/articles/expensify-classic/send-payments/Third-Party-Payments.md
index f61f26d91059..14ade143a35b 100644
--- a/docs/articles/expensify-classic/send-payments/Third-Party-Payments.md
+++ b/docs/articles/expensify-classic/send-payments/Third-Party-Payments.md
@@ -1,8 +1,63 @@
 ---
 title: Third Party Payments
-description: Third Party Payments
+description: A help article that covers Third Party Payment options including PayPal, Venmo, Wise, and Paylocity.
 ---
-## Resource Coming Soon!
+# Expensify Third Party Payment Options
 
+Expensify offers convenient third party payment options that allow you to streamline the process of reimbursing expenses and managing your finances. With these options, you can pay your expenses and get reimbursed faster and more efficiently. In this guide, we'll walk you through the steps to set up and use Expensify's third party payment options.
 
- 
\ No newline at end of file
+## Overview
+
+Expensify offers integration with various third party payment providers, making it easy to reimburse employees and manage your expenses seamlessly. Some of the key benefits of using third-party payment options in Expensify include:
+
+- Faster Reimbursements: Expedite the reimbursement process and reduce the time it takes for employees to receive their funds.
+- Secure Transactions: Benefit from the security features and protocols provided by trusted payment providers.
+- Centralized Expense Management: Consolidate all your expenses and payments within Expensify for a more efficient financial workflow.
+
+## Setting Up Third Party Payments
+
+To get started with third party payments in Expensify, follow these steps:
+
+1. **Log in to Expensify**: Access your Expensify account using your credentials.
+
+2. **Navigate to Settings**: Click on the "Settings" option in the top-right corner of the Expensify dashboard.
+
+3. **Select Payments**: In the Settings menu, find and click on the "Payments" or "Payment Methods" section.
+
+4. **Choose Third Party Payment Provider**: Select your preferred third party payment provider from the available options. Expensify may support providers such as PayPal, Venmo, Wise, and Paylocity.
+
+5. **Link Your Account**: Follow the prompts to link your third party payment account with Expensify. You may need to enter your account details and grant necessary permissions.
+
+6. **Verify Your Account**: Confirm your linked account to ensure it's correctly integrated with Expensify.
+
+## Using Third Party Payments
+
+Once you've set up your third party payment option, you can start using it to reimburse expenses and manage payments:
+
+1. **Create an Expense Report**: Begin by creating an expense report in Expensify, adding all relevant expenses.
+
+2. **Submit for Approval**: After reviewing and verifying the expenses, submit the report for approval within Expensify.
+
+3. **Approval and Reimbursement**: Once the report is approved, the approved expenses can be reimbursed directly through your chosen third party payment provider. Expensify will automatically initiate the payment process.
+
+4. **Track Payment Status**: You can track the status of payments and view transaction details within your Expensify account.
+
+## FAQ’s
+
+### Q: Are there any fees associated with using third party payment options in Expensify?
+
+A: The fees associated with third party payments may vary depending on the payment provider you choose. Be sure to review the terms and conditions of your chosen provider for details on any applicable fees.
+
+### Q: Can I use multiple third party payment providers with Expensify?
+
+A: Expensify allows you to link multiple payment providers if needed. You can select the most suitable payment method for each expense report.
+
+### Q: Is there a limit on the amount I can reimburse using third party payments?
+
+A: The reimbursement limit may depend on the policies and settings configured within your Expensify account and the limits imposed by your chosen payment provider.
+
+With Expensify's third party payment options, you can simplify your expense management and reimbursement processes. By following the steps outlined in this guide, you can set up and use third party payments efficiently.
+
+
+
+ 
diff --git a/docs/articles/new-expensify/integrations/accounting-integrations/Xero b/docs/articles/new-expensify/integrations/accounting-integrations/Xero.md
similarity index 100%
rename from docs/articles/new-expensify/integrations/accounting-integrations/Xero
rename to docs/articles/new-expensify/integrations/accounting-integrations/Xero.md
diff --git a/docs/assets/Files/Hosting b/docs/assets/Files/Hosting
new file mode 100644
index 000000000000..ad2a361edc03
--- /dev/null
+++ b/docs/assets/Files/Hosting
@@ -0,0 +1 @@
+Holding tank for help.expensify.com support files
diff --git a/docs/assets/images/Auto-Reconciliation_Image2.png b/docs/assets/images/Auto-Reconciliation_Image2.png
new file mode 100644
index 000000000000..5c7ed2d6b7ea
Binary files /dev/null and b/docs/assets/images/Auto-Reconciliation_Image2.png differ
diff --git a/docs/assets/images/Auto-Reconciliaton_Image1.png b/docs/assets/images/Auto-Reconciliaton_Image1.png
new file mode 100644
index 000000000000..9fcb7e316aaf
Binary files /dev/null and b/docs/assets/images/Auto-Reconciliaton_Image1.png differ
diff --git a/docs/assets/images/ExpensifyHelp_AssignCardBtn.png b/docs/assets/images/ExpensifyHelp_AssignCardBtn.png
new file mode 100644
index 000000000000..d9c6e919abcd
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_AssignCardBtn.png differ
diff --git a/docs/assets/images/ExpensifyHelp_AssignCardForm.png b/docs/assets/images/ExpensifyHelp_AssignCardForm.png
new file mode 100644
index 000000000000..f8c3ab5a6346
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_AssignCardForm.png differ
diff --git a/docs/assets/images/ExpensifyHelp_AssignedCard.png b/docs/assets/images/ExpensifyHelp_AssignedCard.png
new file mode 100644
index 000000000000..26f96ca07748
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_AssignedCard.png differ
diff --git a/docs/assets/images/ExpensifyHelp_CreateExpense.png b/docs/assets/images/ExpensifyHelp_CreateExpense.png
new file mode 100644
index 000000000000..bed2d508dfd7
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_CreateExpense.png differ
diff --git a/docs/assets/images/ExpensifyHelp_CreateExpense_Mobile.png b/docs/assets/images/ExpensifyHelp_CreateExpense_Mobile.png
new file mode 100644
index 000000000000..aebee5d1a86e
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_CreateExpense_Mobile.png differ
diff --git a/docs/assets/images/ExpensifyHelp_DomainCards.png b/docs/assets/images/ExpensifyHelp_DomainCards.png
new file mode 100644
index 000000000000..f4c4cb0688d5
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_DomainCards.png differ
diff --git a/docs/assets/images/ExpensifyHelp_DomainCardsList.png b/docs/assets/images/ExpensifyHelp_DomainCardsList.png
new file mode 100644
index 000000000000..e1336bc20416
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_DomainCardsList.png differ
diff --git a/docs/assets/images/ExpensifyHelp_ExpenseRules_01.png b/docs/assets/images/ExpensifyHelp_ExpenseRules_01.png
new file mode 100644
index 000000000000..7a6c3c1b3a13
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_ExpenseRules_01.png differ
diff --git a/docs/assets/images/ExpensifyHelp_ExpenseRules_02.png b/docs/assets/images/ExpensifyHelp_ExpenseRules_02.png
new file mode 100644
index 000000000000..28c6a7689b77
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_ExpenseRules_02.png differ
diff --git a/docs/assets/images/ExpensifyHelp_ExpenseRules_03.png b/docs/assets/images/ExpensifyHelp_ExpenseRules_03.png
new file mode 100644
index 000000000000..90c9855c0c49
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_ExpenseRules_03.png differ
diff --git a/docs/assets/images/ExpensifyHelp_ManualDistance.png b/docs/assets/images/ExpensifyHelp_ManualDistance.png
new file mode 100644
index 000000000000..607025ed1765
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_ManualDistance.png differ
diff --git a/docs/assets/images/ExpensifyHelp_ManualDistanceConfirm.png b/docs/assets/images/ExpensifyHelp_ManualDistanceConfirm.png
new file mode 100644
index 000000000000..2bc61196531a
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_ManualDistanceConfirm.png differ
diff --git a/docs/assets/images/ExpensifyHelp_ManualDistanceMap.png b/docs/assets/images/ExpensifyHelp_ManualDistanceMap.png
new file mode 100644
index 000000000000..78f2a722a7ca
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_ManualDistanceMap.png differ
diff --git a/docs/assets/images/ExpensifyHelp_ManualDistance_Mobile.png b/docs/assets/images/ExpensifyHelp_ManualDistance_Mobile.png
new file mode 100644
index 000000000000..327f5de00129
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_ManualDistance_Mobile.png differ
diff --git a/docs/assets/images/ExpensifyHelp_Odometer_Mobile.png b/docs/assets/images/ExpensifyHelp_Odometer_Mobile.png
new file mode 100644
index 000000000000..519f541b85c9
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_Odometer_Mobile.png differ
diff --git a/docs/assets/images/ExpensifyHelp_UnassignCard-1.png b/docs/assets/images/ExpensifyHelp_UnassignCard-1.png
new file mode 100644
index 000000000000..5fa344fed9cb
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_UnassignCard-1.png differ
diff --git a/docs/assets/images/ExpensifyHelp_UnassignCard.png b/docs/assets/images/ExpensifyHelp_UnassignCard.png
new file mode 100644
index 000000000000..add6a4e3a057
Binary files /dev/null and b/docs/assets/images/ExpensifyHelp_UnassignCard.png differ
diff --git a/ios/NewExpensify/Info.plist b/ios/NewExpensify/Info.plist
index 9e6296400568..f30650acf703 100644
--- a/ios/NewExpensify/Info.plist
+++ b/ios/NewExpensify/Info.plist
@@ -19,7 +19,7 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>1.3.81</string>
+	<string>1.3.84</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleURLTypes</key>
@@ -40,7 +40,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>1.3.81.4</string>
+	<string>1.3.84.7</string>
 	<key>ITSAppUsesNonExemptEncryption</key>
 	<false/>
 	<key>LSApplicationQueriesSchemes</key>
diff --git a/ios/NewExpensifyTests/Info.plist b/ios/NewExpensifyTests/Info.plist
index 5dc727d452d5..7dc3d576f77a 100644
--- a/ios/NewExpensifyTests/Info.plist
+++ b/ios/NewExpensifyTests/Info.plist
@@ -15,10 +15,10 @@
 	<key>CFBundlePackageType</key>
 	<string>BNDL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>1.3.81</string>
+	<string>1.3.84</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>1.3.81.4</string>
+	<string>1.3.84.7</string>
 </dict>
 </plist>
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 1f08d51d24a8..cb120bca2b88 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -233,9 +233,9 @@ PODS:
   - libwebp/mux (1.2.4):
     - libwebp/demux
   - libwebp/webp (1.2.4)
-  - lottie-ios (3.4.4)
-  - lottie-react-native (5.1.6):
-    - lottie-ios (~> 3.4.0)
+  - lottie-ios (4.3.3)
+  - lottie-react-native (6.3.1):
+    - lottie-ios (~> 4.3.0)
     - React-Core
   - MapboxCommon (23.6.0)
   - MapboxCoreMaps (10.14.0):
@@ -251,9 +251,9 @@ PODS:
     - nanopb/encode (= 2.30908.0)
   - nanopb/decode (2.30908.0)
   - nanopb/encode (2.30908.0)
-  - Onfido (27.4.0)
-  - onfido-react-native-sdk (7.4.0):
-    - Onfido (= 27.4.0)
+  - Onfido (28.3.0)
+  - onfido-react-native-sdk (8.3.0):
+    - Onfido (~> 28.3.0)
     - React
   - OpenSSL-Universal (1.1.1100)
   - Plaid (4.1.0)
@@ -722,7 +722,7 @@ PODS:
     - React-Core
   - RNCAsyncStorage (1.17.11):
     - React-Core
-  - RNCClipboard (1.5.1):
+  - RNCClipboard (1.12.1):
     - React-Core
   - RNCPicker (2.4.4):
     - React-Core
@@ -809,7 +809,7 @@ PODS:
   - RNScreens (3.21.0):
     - React-Core
     - React-RCTImage
-  - RNSVG (13.13.0):
+  - RNSVG (13.14.0):
     - React-Core
   - SDWebImage (5.11.1):
     - SDWebImage/Core (= 5.11.1)
@@ -819,7 +819,7 @@ PODS:
     - SDWebImage/Core (~> 5.10)
   - SocketRocket (0.6.1)
   - Turf (2.6.1)
-  - VisionCamera (2.15.4):
+  - VisionCamera (2.16.2):
     - React
     - React-callinvoker
     - React-Core
@@ -915,7 +915,7 @@ DEPENDENCIES:
   - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
   - "RNAppleAuthentication (from `../node_modules/@invertase/react-native-apple-authentication`)"
   - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
-  - "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)"
+  - "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)"
   - "RNCPicker (from `../node_modules/@react-native-picker/picker`)"
   - "RNDateTimePicker (from `../node_modules/@react-native-community/datetimepicker`)"
   - RNDeviceInfo (from `../node_modules/react-native-device-info`)
@@ -1115,7 +1115,7 @@ EXTERNAL SOURCES:
   RNCAsyncStorage:
     :path: "../node_modules/@react-native-async-storage/async-storage"
   RNCClipboard:
-    :path: "../node_modules/@react-native-community/clipboard"
+    :path: "../node_modules/@react-native-clipboard/clipboard"
   RNCPicker:
     :path: "../node_modules/@react-native-picker/picker"
   RNDateTimePicker:
@@ -1197,15 +1197,15 @@ SPEC CHECKSUMS:
   hermes-engine: 81191603c4eaa01f5e4ae5737a9efcf64756c7b2
   libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
   libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef
-  lottie-ios: 8f97d3271e155c2d688875c29cd3c74908aef5f8
-  lottie-react-native: 8f9d4be452e23f6e5ca0fdc11669dc99ab52be81
+  lottie-ios: 25e7b2675dad5c3ddad369ac9baab03560c5bfdd
+  lottie-react-native: c9f1db4f4124dcce9f8159e65d8dc6e8bcb11fb4
   MapboxCommon: 4a0251dd470ee37e7fadda8e285c01921a5e1eb0
   MapboxCoreMaps: eb07203bbb0b1509395db5ab89cd3ad6c2e3c04c
   MapboxMaps: af50ec61a7eb3b032c3f7962c6bd671d93d2a209
   MapboxMobileEvents: de50b3a4de180dd129c326e09cd12c8adaaa46d6
   nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96
-  Onfido: e36f284b865adcf99d9c905590a64ac09d4a576b
-  onfido-react-native-sdk: 4ecde1a97435dcff9f00a878e3f8d1eb14fabbdc
+  Onfido: c7d010d9793790d44a07799d9be25aa8e3814ee7
+  onfido-react-native-sdk: b346a620af5669f9fecb6dc3052314a35a94ad9f
   OpenSSL-Universal: ebc357f1e6bc71fa463ccb2fe676756aff50e88c
   Plaid: 7d340abeadb46c7aa1a91f896c5b22395a31fcf2
   PromisesObjC: 09985d6d70fbe7878040aa746d78236e6946d2ef
@@ -1263,7 +1263,7 @@ SPEC CHECKSUMS:
   ReactCommon: 4b2bdcb50a3543e1c2b2849ad44533686610826d
   RNAppleAuthentication: 0571c08da8c327ae2afc0261b48b4a515b0286a6
   RNCAsyncStorage: 8616bd5a58af409453ea4e1b246521bb76578d60
-  RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
+  RNCClipboard: d77213bfa269013bf4b857b7a9ca37ee062d8ef1
   RNCPicker: 0b65be85fe7954fbb2062ef079e3d1cde252d888
   RNDateTimePicker: 7658208086d86d09e1627b5c34ba0cf237c60140
   RNDeviceInfo: 4701f0bf2a06b34654745053db0ce4cb0c53ada7
@@ -1282,12 +1282,12 @@ SPEC CHECKSUMS:
   RNReactNativeHapticFeedback: 1e3efeca9628ff9876ee7cdd9edec1b336913f8c
   RNReanimated: ab2e96c6d5591c3dfbb38a464f54c8d17fb34a87
   RNScreens: d037903436160a4b039d32606668350d2a808806
-  RNSVG: ed492aaf3af9ca01bc945f7a149d76d62e73ec82
+  RNSVG: d00c8f91c3cbf6d476451313a18f04d220d4f396
   SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d
   SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d
   SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
   Turf: 469ce2c3d22e5e8e4818d5a3b254699a5c89efa4
-  VisionCamera: d3ec8883417a6a4a0e3a6ba37d81d22db7611601
+  VisionCamera: 95f969b8950b411285579d633a1014782fe0e634
   Yoga: 3efc43e0d48686ce2e8c60f99d4e6bd349aff981
   YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
 
diff --git a/jest/setup.js b/jest/setup.js
index f03c53540359..4def7d1efad5 100644
--- a/jest/setup.js
+++ b/jest/setup.js
@@ -1,6 +1,7 @@
 import 'setimmediate';
 import 'react-native-gesture-handler/jestSetup';
 import * as reanimatedJestUtils from 'react-native-reanimated/src/reanimated2/jestUtils';
+import mockClipboard from '@react-native-clipboard/clipboard/jest/clipboard-mock';
 import setupMockImages from './setupMockImages';
 
 setupMockImages();
@@ -10,6 +11,10 @@ reanimatedJestUtils.setUpTests();
 // https://reactnavigation.org/docs/testing/#mocking-native-modules
 jest.mock('react-native/Libraries/Animated/NativeAnimatedHelper');
 
+// Clipboard requires mocking as NativeEmitter will be undefined with jest-runner.
+// https://github.com/react-native-clipboard/clipboard#mocking-clipboard
+jest.mock('@react-native-clipboard/clipboard', () => mockClipboard);
+
 // Mock react-native-onyx storage layer because the SQLite storage layer doesn't work in jest.
 // Mocking this file in __mocks__ does not work because jest doesn't support mocking files that are not directly used in the testing project,
 // and we only want to mock the storage layer, not the whole Onyx module.
diff --git a/package-lock.json b/package-lock.json
index 9a029b06ced4..5b2bab03b936 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "new.expensify",
-  "version": "1.3.81-4",
+  "version": "1.3.84-7",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "new.expensify",
-      "version": "1.3.81-4",
+      "version": "1.3.84-7",
       "hasInstallScript": true,
       "license": "MIT",
       "dependencies": {
@@ -22,10 +22,10 @@
         "@kie/act-js": "^2.0.1",
         "@kie/mock-github": "^1.0.0",
         "@oguzhnatly/react-native-image-manipulator": "github:Expensify/react-native-image-manipulator#5cdae3d4455b03a04c57f50be3863e2fe6c92c52",
-        "@onfido/react-native-sdk": "7.4.0",
+        "@onfido/react-native-sdk": "8.3.0",
         "@react-native-async-storage/async-storage": "^1.17.10",
         "@react-native-camera-roll/camera-roll": "5.4.0",
-        "@react-native-community/clipboard": "^1.5.1",
+        "@react-native-clipboard/clipboard": "^1.12.1",
         "@react-native-community/datetimepicker": "^3.5.2",
         "@react-native-community/geolocation": "^3.0.6",
         "@react-native-community/netinfo": "^9.3.10",
@@ -51,13 +51,13 @@
         "date-fns-tz": "^2.0.0",
         "dom-serializer": "^0.2.2",
         "domhandler": "^4.3.0",
-        "expensify-common": "git+ssh://git@github.com/Expensify/expensify-common.git#009c2ab79bf7ddeab0eea7a3a4c0d9cc4277c34b",
+        "expensify-common": "git+ssh://git@github.com/Expensify/expensify-common.git#bdbdf44825658500ba581d3e86237d7b8996cc2e",
         "fbjs": "^3.0.2",
         "htmlparser2": "^7.2.0",
         "idb-keyval": "^6.2.1",
         "jest-when": "^3.5.2",
         "lodash": "4.17.21",
-        "lottie-react-native": "^5.1.6",
+        "lottie-react-native": "^6.3.1",
         "mapbox-gl": "^2.15.0",
         "moment": "^2.29.4",
         "moment-timezone": "^0.5.31",
@@ -94,7 +94,7 @@
         "react-native-linear-gradient": "^2.8.1",
         "react-native-localize": "^2.2.6",
         "react-native-modal": "^13.0.0",
-        "react-native-onyx": "1.0.98",
+        "react-native-onyx": "1.0.100",
         "react-native-pager-view": "^6.2.0",
         "react-native-pdf": "^6.7.1",
         "react-native-performance": "^5.1.0",
@@ -111,13 +111,14 @@
         "react-native-tab-view": "^3.5.2",
         "react-native-url-polyfill": "^2.0.0",
         "react-native-view-shot": "^3.6.0",
-        "react-native-vision-camera": "^2.15.4",
+        "react-native-vision-camera": "^2.16.2",
         "react-native-web-linear-gradient": "^1.1.2",
         "react-native-web-lottie": "^1.4.4",
         "react-native-webview": "^11.17.2",
         "react-pdf": "^6.2.2",
         "react-plaid-link": "3.3.2",
         "react-web-config": "^1.0.0",
+        "react-webcam": "^7.1.1",
         "react-window": "^1.8.9",
         "save": "^2.4.0",
         "semver": "^7.5.2",
@@ -221,7 +222,7 @@
         "react-native-performance-flipper-reporter": "^2.0.0",
         "react-native-svg-transformer": "^1.0.0",
         "react-test-renderer": "18.2.0",
-        "reassure": "^0.9.0",
+        "reassure": "^0.10.1",
         "setimmediate": "^1.0.5",
         "shellcheck": "^1.1.0",
         "style-loader": "^2.0.0",
@@ -2538,16 +2539,21 @@
       "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA=="
     },
     "node_modules/@babel/runtime": {
-      "version": "7.22.3",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.3.tgz",
-      "integrity": "sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==",
+      "version": "7.23.2",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
+      "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
       "dependencies": {
-        "regenerator-runtime": "^0.13.11"
+        "regenerator-runtime": "^0.14.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
+    "node_modules/@babel/runtime/node_modules/regenerator-runtime": {
+      "version": "0.14.0",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
+      "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
+    },
     "node_modules/@babel/template": {
       "version": "7.22.5",
       "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz",
@@ -2622,13 +2628,13 @@
       "license": "Apache-2.0"
     },
     "node_modules/@callstack/reassure-cli": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/@callstack/reassure-cli/-/reassure-cli-0.9.0.tgz",
-      "integrity": "sha512-auoxqyilxkT5mDdEPJqRRY+ZGlrihJjFQpopcFd/15ng76OPVka3L48RMEY2wXkFXLaOOs6enNGb596jYPuEtQ==",
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/@callstack/reassure-cli/-/reassure-cli-0.10.0.tgz",
+      "integrity": "sha512-CYgOGOAWcFgA2GrJw6RJAvImCpHCpPbtPoYMDol7esjlRCX2QwIKG7/9byq47hML57w94fhFAa76KD84YlgMBg==",
       "dev": true,
       "dependencies": {
-        "@callstack/reassure-compare": "0.5.0",
-        "@callstack/reassure-logger": "0.3.0",
+        "@callstack/reassure-compare": "0.6.0",
+        "@callstack/reassure-logger": "0.3.1",
         "chalk": "4.1.2",
         "simple-git": "^3.16.0",
         "yargs": "^17.6.2"
@@ -2758,12 +2764,12 @@
       }
     },
     "node_modules/@callstack/reassure-compare": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/@callstack/reassure-compare/-/reassure-compare-0.5.0.tgz",
-      "integrity": "sha512-3sBeJ/+Hxjdb01KVb8LszO1kcJ8TXcrVnerUj+LYn2dkBOohAMqGYaOvCeoWsVEHJ+MIOzmvAGBJQRu69RoJdQ==",
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/@callstack/reassure-compare/-/reassure-compare-0.6.0.tgz",
+      "integrity": "sha512-P3nmv36CJrQSXg0+z6EuEV/0xAbvxWbAZ7diQHnkbvqk2z8PKRXpkcthrRUpe02wLewa0MLxBUJwLenFnhxIRg==",
       "dev": true,
       "dependencies": {
-        "@callstack/reassure-logger": "0.3.0",
+        "@callstack/reassure-logger": "0.3.1",
         "markdown-builder": "^0.9.0",
         "markdown-table": "^2.0.0",
         "zod": "^3.20.2"
@@ -2776,9 +2782,9 @@
       "dev": true
     },
     "node_modules/@callstack/reassure-logger": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/@callstack/reassure-logger/-/reassure-logger-0.3.0.tgz",
-      "integrity": "sha512-JX5o+8qkIbIRL+cQn9XlQYdv9p/3L6J70zZX6NYi9j0VrSS9PZIRfo8ujMdLSqUNV6HZN1ay59RzuncLjVu0aQ==",
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/@callstack/reassure-logger/-/reassure-logger-0.3.1.tgz",
+      "integrity": "sha512-IUsNrxVMdt0zgD2IN2snGVGUG8Yc6F3SWaPF8RXUn8qi7XZuYC6WevEL+mIKmlbTTa7qlX9brkn0pJoXAjfcPQ==",
       "dev": true,
       "dependencies": {
         "chalk": "4.1.2"
@@ -2855,12 +2861,12 @@
       }
     },
     "node_modules/@callstack/reassure-measure": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/@callstack/reassure-measure/-/reassure-measure-0.5.0.tgz",
-      "integrity": "sha512-KwlmNYcspBOp7FIw6XOz5O9mnKB4cWCCyM6vG4nFUPHSWQ6yVdRkawVvoPIV5qJ2hw7zCzdtqRrLWQSTF4eKlg==",
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/@callstack/reassure-measure/-/reassure-measure-0.6.0.tgz",
+      "integrity": "sha512-phXY5DAtKhnu8dA2pmnl+pqFOfrVEFFDJOi4AnObwIcpDSn3IUXgNSe7rSi+JP/mXNWMLoUS8rnH4iIFDyf7qQ==",
       "dev": true,
       "dependencies": {
-        "@callstack/reassure-logger": "0.3.0",
+        "@callstack/reassure-logger": "0.3.1",
         "mathjs": "^11.5.0"
       },
       "peerDependencies": {
@@ -6383,10 +6389,9 @@
       }
     },
     "node_modules/@onfido/react-native-sdk": {
-      "version": "7.4.0",
-      "resolved": "https://registry.npmjs.org/@onfido/react-native-sdk/-/react-native-sdk-7.4.0.tgz",
-      "integrity": "sha512-qeeaXLxVXz+J0lrqMwQGP52fXhCnTmEAC5K8jZe8YTqst2s1FZZGKkd1bxTloHG5hBBTa39SwWVUKmgPUm+Ssw==",
-      "license": "MIT",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@onfido/react-native-sdk/-/react-native-sdk-8.3.0.tgz",
+      "integrity": "sha512-nnhuvezd35v08WXUTQlX+gr4pbnNnwNV5KscC/jJrfjGikNUJnhnAHYxfnfJccTn44qUC6vRaKWq2GfpMUnqNA==",
       "peerDependencies": {
         "react": ">=17.0.0",
         "react-native": ">=0.68.2 <1.0.x"
@@ -7008,6 +7013,15 @@
         "react-native": ">=0.59"
       }
     },
+    "node_modules/@react-native-clipboard/clipboard": {
+      "version": "1.12.1",
+      "resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.12.1.tgz",
+      "integrity": "sha512-+PNk8kflpGte0W1Nz61/Dp8gHTxyuRjkVyRYBawymSIGTDHCC/zOJSbig6kGIkD8MeaGHC2vGYQJyUyCrgVPBQ==",
+      "peerDependencies": {
+        "react": ">=16.0",
+        "react-native": ">=0.57.0"
+      }
+    },
     "node_modules/@react-native-community/cli": {
       "version": "11.3.6",
       "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-11.3.6.tgz",
@@ -8624,16 +8638,6 @@
         "node": ">= 4.0.0"
       }
     },
-    "node_modules/@react-native-community/clipboard": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/@react-native-community/clipboard/-/clipboard-1.5.1.tgz",
-      "integrity": "sha512-AHAmrkLEH5UtPaDiRqoULERHh3oNv7Dgs0bTC0hO5Z2GdNokAMPT5w8ci8aMcRemcwbtdHjxChgtjbeA38GBdA==",
-      "license": "MIT",
-      "peerDependencies": {
-        "react": ">=16.0",
-        "react-native": ">=0.57.0"
-      }
-    },
     "node_modules/@react-native-community/datetimepicker": {
       "version": "3.5.2",
       "resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-3.5.2.tgz",
@@ -30219,8 +30223,8 @@
     },
     "node_modules/expensify-common": {
       "version": "1.0.0",
-      "resolved": "git+ssh://git@github.com/Expensify/expensify-common.git#009c2ab79bf7ddeab0eea7a3a4c0d9cc4277c34b",
-      "integrity": "sha512-mD9p6Qj8FfvLdb6JLXvF0UNqLN6ymssUU67Fm37zmK18hd1Abw+vR/pQkNpHR2iv+KRs8HdcyuZ0vaOec4VrFQ==",
+      "resolved": "git+ssh://git@github.com/Expensify/expensify-common.git#bdbdf44825658500ba581d3e86237d7b8996cc2e",
+      "integrity": "sha512-/kXD/18YQJY/iWB5MOSN0ixB1mpxUA+NXEYgKjac1tJd+DoY3K6+bDeu++Qfqg26LCNfvjTkjkDGZVdGsJQ7Hw==",
       "license": "MIT",
       "dependencies": {
         "classnames": "2.3.1",
@@ -31381,16 +31385,16 @@
       }
     },
     "node_modules/fraction.js": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
-      "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz",
+      "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==",
       "dev": true,
       "engines": {
         "node": "*"
       },
       "funding": {
         "type": "patreon",
-        "url": "https://www.patreon.com/infusion"
+        "url": "https://github.com/sponsors/rawify"
       }
     },
     "node_modules/fragment-cache": {
@@ -38014,22 +38018,11 @@
         "loose-envify": "cli.js"
       }
     },
-    "node_modules/lottie-ios": {
-      "version": "3.5.0",
-      "license": "Apache-2.0",
-      "peer": true
-    },
     "node_modules/lottie-react-native": {
-      "version": "5.1.6",
-      "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-5.1.6.tgz",
-      "integrity": "sha512-vhdeZstXMfuVKwnddYWjJgQ/1whGL58IJEJu/iSf0XQ5gAb4pp/+vy91mdYQLezlb8Aw4Vu3fKnqErJL2hwchg==",
-      "license": "Apache-2.0",
-      "dependencies": {
-        "invariant": "^2.2.2",
-        "react-native-safe-modules": "^1.0.3"
-      },
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-6.3.1.tgz",
+      "integrity": "sha512-M18nAVYeGMF//bhL27D2zuMcrFPH0jbD/deBvcWi0CCcfZf6LQfx45xt+cuDqwr5nh6dMm+ta8KfZJmkbNhtlg==",
       "peerDependencies": {
-        "lottie-ios": "^3.4.0",
         "react": "*",
         "react-native": ">=0.46",
         "react-native-windows": ">=0.63.x"
@@ -38040,24 +38033,6 @@
         }
       }
     },
-    "node_modules/lottie-react-native/node_modules/dedent": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz",
-      "integrity": "sha512-cSfRWjXJtZQeRuZGVvDrJroCR5V2UvBNUMHsPCdNYzuAG8b9V8aAy3KUcdQrGQPXs17Y+ojbPh1aOCplg9YR9g==",
-      "license": "MIT"
-    },
-    "node_modules/lottie-react-native/node_modules/react-native-safe-modules": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/react-native-safe-modules/-/react-native-safe-modules-1.0.3.tgz",
-      "integrity": "sha512-DUxti4Z+AgJ/ZsO5U7p3uSCUBko8JT8GvFlCeOXk9bMd+4qjpoDvMYpfbixXKgL88M+HwmU/KI1YFN6gsQZyBA==",
-      "license": "MIT",
-      "dependencies": {
-        "dedent": "^0.6.0"
-      },
-      "peerDependencies": {
-        "react-native": "*"
-      }
-    },
     "node_modules/lottie-web": {
       "version": "5.10.2",
       "license": "MIT"
@@ -38313,20 +38288,20 @@
       }
     },
     "node_modules/mathjs": {
-      "version": "11.8.0",
-      "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.8.0.tgz",
-      "integrity": "sha512-I7r8HCoqUGyEiHQdeOCF2m2k9N+tcOHO3cZQ3tyJkMMBQMFqMR7dMQEboBMJAiFW2Um3PEItGPwcOc4P6KRqwg==",
+      "version": "11.11.2",
+      "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.11.2.tgz",
+      "integrity": "sha512-SL4/0Fxm9X4sgovUpJTeyVeZ2Ifnk4tzLPTYWDyR3AIx9SabnXYqtCkyJtmoF3vZrDPKGkLvrhbIL4YN2YbXLQ==",
       "dev": true,
       "dependencies": {
-        "@babel/runtime": "^7.21.0",
+        "@babel/runtime": "^7.23.1",
         "complex.js": "^2.1.1",
         "decimal.js": "^10.4.3",
         "escape-latex": "^1.2.0",
-        "fraction.js": "^4.2.0",
+        "fraction.js": "4.3.4",
         "javascript-natural-sort": "^0.7.1",
         "seedrandom": "^3.0.5",
         "tiny-emitter": "^2.1.0",
-        "typed-function": "^4.1.0"
+        "typed-function": "^4.1.1"
       },
       "bin": {
         "mathjs": "bin/cli.js"
@@ -44721,9 +44696,9 @@
       }
     },
     "node_modules/react-native-onyx": {
-      "version": "1.0.98",
-      "resolved": "https://registry.npmjs.org/react-native-onyx/-/react-native-onyx-1.0.98.tgz",
-      "integrity": "sha512-2wJNmZVBJs2Y0p1G/es4tQZnplJR8rOyVbHv9KZaq/SXluLUnIovttf1MMhVXidDLT+gcE+u20Mck/Gpb8bY0w==",
+      "version": "1.0.100",
+      "resolved": "https://registry.npmjs.org/react-native-onyx/-/react-native-onyx-1.0.100.tgz",
+      "integrity": "sha512-m4bOF/uOtYpfL83fqoWhw7TYV4oKGXt0sfGoel/fhaT1HzXKheXc//ibt/G3VrTCf5nmRv7bXgsXkWjUYLH3UQ==",
       "dependencies": {
         "ascii-table": "0.0.9",
         "fast-equals": "^4.0.3",
@@ -45013,9 +44988,9 @@
       }
     },
     "node_modules/react-native-vision-camera": {
-      "version": "2.15.4",
-      "resolved": "https://registry.npmjs.org/react-native-vision-camera/-/react-native-vision-camera-2.15.4.tgz",
-      "integrity": "sha512-SJXSWH1pu4V3Kj4UuX/vSgOxc9d5wb5+nHqBHd+5iUtVyVLEp0F6Jbbaha7tDoU+kUBwonhlwr2o8oV6NZ7Ibg==",
+      "version": "2.16.2",
+      "resolved": "https://registry.npmjs.org/react-native-vision-camera/-/react-native-vision-camera-2.16.2.tgz",
+      "integrity": "sha512-QIpG33l3QB0AkTfX/ccRknwNRu1APNUkokVKF1lpRO2+tBnkXnGL0UapgXg5u9KIONZtrpupeDeO+J5B2TeQVw==",
       "peerDependencies": {
         "react": "*",
         "react-native": "*"
@@ -46219,14 +46194,14 @@
       "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg=="
     },
     "node_modules/reassure": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/reassure/-/reassure-0.9.0.tgz",
-      "integrity": "sha512-FIf0GPchyPGItsrW5Wwff/NWVrfOcCUuJJSs4Nur6iRdQt8yvmCpcba4UyemdZ1KaFTIW1gKbAV3u2tuA7zmtQ==",
+      "version": "0.10.1",
+      "resolved": "https://registry.npmjs.org/reassure/-/reassure-0.10.1.tgz",
+      "integrity": "sha512-+GANr5ojh32NZu1YGfa6W8vIJm3iOIZJUvXT5Gc9fQyre7okYsCzyBq9WsHbnAQDjNq1g9SsM/4bwcVET9OIqA==",
       "dev": true,
       "dependencies": {
-        "@callstack/reassure-cli": "0.9.0",
+        "@callstack/reassure-cli": "0.10.0",
         "@callstack/reassure-danger": "0.1.1",
-        "@callstack/reassure-measure": "0.5.0"
+        "@callstack/reassure-measure": "0.6.0"
       }
     },
     "node_modules/recast": {
@@ -49161,7 +49136,6 @@
       "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
       "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
       "dev": true,
-      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -50421,9 +50395,9 @@
       }
     },
     "node_modules/typed-function": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz",
-      "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.1.tgz",
+      "integrity": "sha512-Pq1DVubcvibmm8bYcMowjVnnMwPVMeh0DIdA8ad8NZY2sJgapANJmiigSUwlt+EgXxpfIv8MWrQXTIzkfYZLYQ==",
       "dev": true,
       "engines": {
         "node": ">= 14"
@@ -53296,9 +53270,9 @@
       }
     },
     "node_modules/zod": {
-      "version": "3.21.4",
-      "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz",
-      "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==",
+      "version": "3.22.4",
+      "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz",
+      "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==",
       "dev": true,
       "funding": {
         "url": "https://github.com/sponsors/colinhacks"
@@ -54833,11 +54807,18 @@
       "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA=="
     },
     "@babel/runtime": {
-      "version": "7.22.3",
-      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.3.tgz",
-      "integrity": "sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==",
+      "version": "7.23.2",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
+      "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
       "requires": {
-        "regenerator-runtime": "^0.13.11"
+        "regenerator-runtime": "^0.14.0"
+      },
+      "dependencies": {
+        "regenerator-runtime": {
+          "version": "0.14.0",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
+          "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA=="
+        }
       }
     },
     "@babel/template": {
@@ -54901,13 +54882,13 @@
       "dev": true
     },
     "@callstack/reassure-cli": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/@callstack/reassure-cli/-/reassure-cli-0.9.0.tgz",
-      "integrity": "sha512-auoxqyilxkT5mDdEPJqRRY+ZGlrihJjFQpopcFd/15ng76OPVka3L48RMEY2wXkFXLaOOs6enNGb596jYPuEtQ==",
+      "version": "0.10.0",
+      "resolved": "https://registry.npmjs.org/@callstack/reassure-cli/-/reassure-cli-0.10.0.tgz",
+      "integrity": "sha512-CYgOGOAWcFgA2GrJw6RJAvImCpHCpPbtPoYMDol7esjlRCX2QwIKG7/9byq47hML57w94fhFAa76KD84YlgMBg==",
       "dev": true,
       "requires": {
-        "@callstack/reassure-compare": "0.5.0",
-        "@callstack/reassure-logger": "0.3.0",
+        "@callstack/reassure-compare": "0.6.0",
+        "@callstack/reassure-logger": "0.3.1",
         "chalk": "4.1.2",
         "simple-git": "^3.16.0",
         "yargs": "^17.6.2"
@@ -55003,12 +54984,12 @@
       }
     },
     "@callstack/reassure-compare": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/@callstack/reassure-compare/-/reassure-compare-0.5.0.tgz",
-      "integrity": "sha512-3sBeJ/+Hxjdb01KVb8LszO1kcJ8TXcrVnerUj+LYn2dkBOohAMqGYaOvCeoWsVEHJ+MIOzmvAGBJQRu69RoJdQ==",
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/@callstack/reassure-compare/-/reassure-compare-0.6.0.tgz",
+      "integrity": "sha512-P3nmv36CJrQSXg0+z6EuEV/0xAbvxWbAZ7diQHnkbvqk2z8PKRXpkcthrRUpe02wLewa0MLxBUJwLenFnhxIRg==",
       "dev": true,
       "requires": {
-        "@callstack/reassure-logger": "0.3.0",
+        "@callstack/reassure-logger": "0.3.1",
         "markdown-builder": "^0.9.0",
         "markdown-table": "^2.0.0",
         "zod": "^3.20.2"
@@ -55021,9 +55002,9 @@
       "dev": true
     },
     "@callstack/reassure-logger": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/@callstack/reassure-logger/-/reassure-logger-0.3.0.tgz",
-      "integrity": "sha512-JX5o+8qkIbIRL+cQn9XlQYdv9p/3L6J70zZX6NYi9j0VrSS9PZIRfo8ujMdLSqUNV6HZN1ay59RzuncLjVu0aQ==",
+      "version": "0.3.1",
+      "resolved": "https://registry.npmjs.org/@callstack/reassure-logger/-/reassure-logger-0.3.1.tgz",
+      "integrity": "sha512-IUsNrxVMdt0zgD2IN2snGVGUG8Yc6F3SWaPF8RXUn8qi7XZuYC6WevEL+mIKmlbTTa7qlX9brkn0pJoXAjfcPQ==",
       "dev": true,
       "requires": {
         "chalk": "4.1.2"
@@ -55081,12 +55062,12 @@
       }
     },
     "@callstack/reassure-measure": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/@callstack/reassure-measure/-/reassure-measure-0.5.0.tgz",
-      "integrity": "sha512-KwlmNYcspBOp7FIw6XOz5O9mnKB4cWCCyM6vG4nFUPHSWQ6yVdRkawVvoPIV5qJ2hw7zCzdtqRrLWQSTF4eKlg==",
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/@callstack/reassure-measure/-/reassure-measure-0.6.0.tgz",
+      "integrity": "sha512-phXY5DAtKhnu8dA2pmnl+pqFOfrVEFFDJOi4AnObwIcpDSn3IUXgNSe7rSi+JP/mXNWMLoUS8rnH4iIFDyf7qQ==",
       "dev": true,
       "requires": {
-        "@callstack/reassure-logger": "0.3.0",
+        "@callstack/reassure-logger": "0.3.1",
         "mathjs": "^11.5.0"
       }
     },
@@ -57638,9 +57619,9 @@
       }
     },
     "@onfido/react-native-sdk": {
-      "version": "7.4.0",
-      "resolved": "https://registry.npmjs.org/@onfido/react-native-sdk/-/react-native-sdk-7.4.0.tgz",
-      "integrity": "sha512-qeeaXLxVXz+J0lrqMwQGP52fXhCnTmEAC5K8jZe8YTqst2s1FZZGKkd1bxTloHG5hBBTa39SwWVUKmgPUm+Ssw==",
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/@onfido/react-native-sdk/-/react-native-sdk-8.3.0.tgz",
+      "integrity": "sha512-nnhuvezd35v08WXUTQlX+gr4pbnNnwNV5KscC/jJrfjGikNUJnhnAHYxfnfJccTn44qUC6vRaKWq2GfpMUnqNA==",
       "requires": {}
     },
     "@pkgjs/parseargs": {
@@ -57971,6 +57952,12 @@
       "integrity": "sha512-SMEhc+2hQWubwzxR6Zac0CmrJ2rdoHHBo0ibG2iNMsxR0dnU5AdRGnYF/tyK9i20/i7ZNxn+qsEJ69shpkd6gg==",
       "requires": {}
     },
+    "@react-native-clipboard/clipboard": {
+      "version": "1.12.1",
+      "resolved": "https://registry.npmjs.org/@react-native-clipboard/clipboard/-/clipboard-1.12.1.tgz",
+      "integrity": "sha512-+PNk8kflpGte0W1Nz61/Dp8gHTxyuRjkVyRYBawymSIGTDHCC/zOJSbig6kGIkD8MeaGHC2vGYQJyUyCrgVPBQ==",
+      "requires": {}
+    },
     "@react-native-community/cli": {
       "version": "11.3.6",
       "resolved": "https://registry.npmjs.org/@react-native-community/cli/-/cli-11.3.6.tgz",
@@ -59191,12 +59178,6 @@
         "joi": "^17.2.1"
       }
     },
-    "@react-native-community/clipboard": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npmjs.org/@react-native-community/clipboard/-/clipboard-1.5.1.tgz",
-      "integrity": "sha512-AHAmrkLEH5UtPaDiRqoULERHh3oNv7Dgs0bTC0hO5Z2GdNokAMPT5w8ci8aMcRemcwbtdHjxChgtjbeA38GBdA==",
-      "requires": {}
-    },
     "@react-native-community/datetimepicker": {
       "version": "3.5.2",
       "resolved": "https://registry.npmjs.org/@react-native-community/datetimepicker/-/datetimepicker-3.5.2.tgz",
@@ -74899,9 +74880,9 @@
       }
     },
     "expensify-common": {
-      "version": "git+ssh://git@github.com/Expensify/expensify-common.git#009c2ab79bf7ddeab0eea7a3a4c0d9cc4277c34b",
-      "integrity": "sha512-mD9p6Qj8FfvLdb6JLXvF0UNqLN6ymssUU67Fm37zmK18hd1Abw+vR/pQkNpHR2iv+KRs8HdcyuZ0vaOec4VrFQ==",
-      "from": "expensify-common@git+ssh://git@github.com/Expensify/expensify-common.git#009c2ab79bf7ddeab0eea7a3a4c0d9cc4277c34b",
+      "version": "git+ssh://git@github.com/Expensify/expensify-common.git#bdbdf44825658500ba581d3e86237d7b8996cc2e",
+      "integrity": "sha512-/kXD/18YQJY/iWB5MOSN0ixB1mpxUA+NXEYgKjac1tJd+DoY3K6+bDeu++Qfqg26LCNfvjTkjkDGZVdGsJQ7Hw==",
+      "from": "expensify-common@git+ssh://git@github.com/Expensify/expensify-common.git#bdbdf44825658500ba581d3e86237d7b8996cc2e",
       "requires": {
         "classnames": "2.3.1",
         "clipboard": "2.0.4",
@@ -75738,9 +75719,9 @@
       "dev": true
     },
     "fraction.js": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
-      "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.4.tgz",
+      "integrity": "sha512-pwiTgt0Q7t+GHZA4yaLjObx4vXmmdcS0iSJ19o8d/goUGgItX9UZWKWNnLHehxviD8wU2IWRsnR8cD5+yOJP2Q==",
       "dev": true
     },
     "fragment-cache": {
@@ -80389,33 +80370,11 @@
         "js-tokens": "^3.0.0 || ^4.0.0"
       }
     },
-    "lottie-ios": {
-      "version": "3.5.0",
-      "peer": true
-    },
     "lottie-react-native": {
-      "version": "5.1.6",
-      "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-5.1.6.tgz",
-      "integrity": "sha512-vhdeZstXMfuVKwnddYWjJgQ/1whGL58IJEJu/iSf0XQ5gAb4pp/+vy91mdYQLezlb8Aw4Vu3fKnqErJL2hwchg==",
-      "requires": {
-        "invariant": "^2.2.2",
-        "react-native-safe-modules": "^1.0.3"
-      },
-      "dependencies": {
-        "dedent": {
-          "version": "0.6.0",
-          "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.6.0.tgz",
-          "integrity": "sha512-cSfRWjXJtZQeRuZGVvDrJroCR5V2UvBNUMHsPCdNYzuAG8b9V8aAy3KUcdQrGQPXs17Y+ojbPh1aOCplg9YR9g=="
-        },
-        "react-native-safe-modules": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npmjs.org/react-native-safe-modules/-/react-native-safe-modules-1.0.3.tgz",
-          "integrity": "sha512-DUxti4Z+AgJ/ZsO5U7p3uSCUBko8JT8GvFlCeOXk9bMd+4qjpoDvMYpfbixXKgL88M+HwmU/KI1YFN6gsQZyBA==",
-          "requires": {
-            "dedent": "^0.6.0"
-          }
-        }
-      }
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/lottie-react-native/-/lottie-react-native-6.3.1.tgz",
+      "integrity": "sha512-M18nAVYeGMF//bhL27D2zuMcrFPH0jbD/deBvcWi0CCcfZf6LQfx45xt+cuDqwr5nh6dMm+ta8KfZJmkbNhtlg==",
+      "requires": {}
     },
     "lottie-web": {
       "version": "5.10.2"
@@ -80606,20 +80565,20 @@
       }
     },
     "mathjs": {
-      "version": "11.8.0",
-      "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.8.0.tgz",
-      "integrity": "sha512-I7r8HCoqUGyEiHQdeOCF2m2k9N+tcOHO3cZQ3tyJkMMBQMFqMR7dMQEboBMJAiFW2Um3PEItGPwcOc4P6KRqwg==",
+      "version": "11.11.2",
+      "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-11.11.2.tgz",
+      "integrity": "sha512-SL4/0Fxm9X4sgovUpJTeyVeZ2Ifnk4tzLPTYWDyR3AIx9SabnXYqtCkyJtmoF3vZrDPKGkLvrhbIL4YN2YbXLQ==",
       "dev": true,
       "requires": {
-        "@babel/runtime": "^7.21.0",
+        "@babel/runtime": "^7.23.1",
         "complex.js": "^2.1.1",
         "decimal.js": "^10.4.3",
         "escape-latex": "^1.2.0",
-        "fraction.js": "^4.2.0",
+        "fraction.js": "4.3.4",
         "javascript-natural-sort": "^0.7.1",
         "seedrandom": "^3.0.5",
         "tiny-emitter": "^2.1.0",
-        "typed-function": "^4.1.0"
+        "typed-function": "^4.1.1"
       }
     },
     "md5.js": {
@@ -85305,9 +85264,9 @@
       }
     },
     "react-native-onyx": {
-      "version": "1.0.98",
-      "resolved": "https://registry.npmjs.org/react-native-onyx/-/react-native-onyx-1.0.98.tgz",
-      "integrity": "sha512-2wJNmZVBJs2Y0p1G/es4tQZnplJR8rOyVbHv9KZaq/SXluLUnIovttf1MMhVXidDLT+gcE+u20Mck/Gpb8bY0w==",
+      "version": "1.0.100",
+      "resolved": "https://registry.npmjs.org/react-native-onyx/-/react-native-onyx-1.0.100.tgz",
+      "integrity": "sha512-m4bOF/uOtYpfL83fqoWhw7TYV4oKGXt0sfGoel/fhaT1HzXKheXc//ibt/G3VrTCf5nmRv7bXgsXkWjUYLH3UQ==",
       "requires": {
         "ascii-table": "0.0.9",
         "fast-equals": "^4.0.3",
@@ -85483,9 +85442,9 @@
       "requires": {}
     },
     "react-native-vision-camera": {
-      "version": "2.15.4",
-      "resolved": "https://registry.npmjs.org/react-native-vision-camera/-/react-native-vision-camera-2.15.4.tgz",
-      "integrity": "sha512-SJXSWH1pu4V3Kj4UuX/vSgOxc9d5wb5+nHqBHd+5iUtVyVLEp0F6Jbbaha7tDoU+kUBwonhlwr2o8oV6NZ7Ibg==",
+      "version": "2.16.2",
+      "resolved": "https://registry.npmjs.org/react-native-vision-camera/-/react-native-vision-camera-2.16.2.tgz",
+      "integrity": "sha512-QIpG33l3QB0AkTfX/ccRknwNRu1APNUkokVKF1lpRO2+tBnkXnGL0UapgXg5u9KIONZtrpupeDeO+J5B2TeQVw==",
       "requires": {}
     },
     "react-native-web": {
@@ -86232,14 +86191,14 @@
       "integrity": "sha512-k2d6ACCkiNYz222Fs/iNze30rRJ1iIicW7JuX/7/cozvih6YCkFZH+J6mAFDVgv0dRBaAyr4jDqC95R2y4IADg=="
     },
     "reassure": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmjs.org/reassure/-/reassure-0.9.0.tgz",
-      "integrity": "sha512-FIf0GPchyPGItsrW5Wwff/NWVrfOcCUuJJSs4Nur6iRdQt8yvmCpcba4UyemdZ1KaFTIW1gKbAV3u2tuA7zmtQ==",
+      "version": "0.10.1",
+      "resolved": "https://registry.npmjs.org/reassure/-/reassure-0.10.1.tgz",
+      "integrity": "sha512-+GANr5ojh32NZu1YGfa6W8vIJm3iOIZJUvXT5Gc9fQyre7okYsCzyBq9WsHbnAQDjNq1g9SsM/4bwcVET9OIqA==",
       "dev": true,
       "requires": {
-        "@callstack/reassure-cli": "0.9.0",
+        "@callstack/reassure-cli": "0.10.0",
         "@callstack/reassure-danger": "0.1.1",
-        "@callstack/reassure-measure": "0.5.0"
+        "@callstack/reassure-measure": "0.6.0"
       }
     },
     "recast": {
@@ -89325,9 +89284,9 @@
       }
     },
     "typed-function": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.0.tgz",
-      "integrity": "sha512-DGwUl6cioBW5gw2L+6SMupGwH/kZOqivy17E4nsh1JI9fKF87orMmlQx3KISQPmg3sfnOUGlwVkroosvgddrlg==",
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.1.1.tgz",
+      "integrity": "sha512-Pq1DVubcvibmm8bYcMowjVnnMwPVMeh0DIdA8ad8NZY2sJgapANJmiigSUwlt+EgXxpfIv8MWrQXTIzkfYZLYQ==",
       "dev": true
     },
     "typedarray": {
@@ -91353,9 +91312,9 @@
       "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
     },
     "zod": {
-      "version": "3.21.4",
-      "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz",
-      "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==",
+      "version": "3.22.4",
+      "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz",
+      "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==",
       "dev": true
     },
     "zwitch": {
diff --git a/package.json b/package.json
index 4533fa30d502..ae9720003f71 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "new.expensify",
-  "version": "1.3.81-4",
+  "version": "1.3.84-7",
   "author": "Expensify, Inc.",
   "homepage": "https://new.expensify.com",
   "description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.",
@@ -8,9 +8,11 @@
   "private": true,
   "scripts": {
     "configure-mapbox": "scripts/setup-mapbox-sdk-walkthrough.sh",
+    "setupNewDotWebForEmulators": "scripts/setup-newdot-web-emulators.sh",
+    "startAndroidEmulator": "scripts/start-android.sh",
     "postinstall": "scripts/postInstall.sh",
     "clean": "npx react-native clean-project-auto",
-    "android": "scripts/set-pusher-suffix.sh && npx react-native run-android --variant=developmentDebug --appId=com.expensify.chat.dev",
+    "android": "scripts/set-pusher-suffix.sh && npx react-native run-android --mode=developmentDebug --appId=com.expensify.chat.dev",
     "ios": "scripts/set-pusher-suffix.sh && npx react-native run-ios --list-devices --configuration=\"DebugDevelopment\" --scheme=\"New Expensify Dev\"",
     "pod-install": "cd ios && bundle exec pod install",
     "ipad": "concurrently \"npx react-native run-ios --simulator=\\\"iPad Pro (12.9-inch) (6th generation)\\\" --configuration=\\\"DebugDevelopment\\\" --scheme=\\\"New Expensify Dev\\\"\"",
@@ -65,10 +67,10 @@
     "@kie/act-js": "^2.0.1",
     "@kie/mock-github": "^1.0.0",
     "@oguzhnatly/react-native-image-manipulator": "github:Expensify/react-native-image-manipulator#5cdae3d4455b03a04c57f50be3863e2fe6c92c52",
-    "@onfido/react-native-sdk": "7.4.0",
+    "@onfido/react-native-sdk": "8.3.0",
     "@react-native-async-storage/async-storage": "^1.17.10",
     "@react-native-camera-roll/camera-roll": "5.4.0",
-    "@react-native-community/clipboard": "^1.5.1",
+    "@react-native-clipboard/clipboard": "^1.12.1",
     "@react-native-community/datetimepicker": "^3.5.2",
     "@react-native-community/geolocation": "^3.0.6",
     "@react-native-community/netinfo": "^9.3.10",
@@ -94,13 +96,13 @@
     "date-fns-tz": "^2.0.0",
     "dom-serializer": "^0.2.2",
     "domhandler": "^4.3.0",
-    "expensify-common": "git+ssh://git@github.com/Expensify/expensify-common.git#009c2ab79bf7ddeab0eea7a3a4c0d9cc4277c34b",
+    "expensify-common": "git+ssh://git@github.com/Expensify/expensify-common.git#bdbdf44825658500ba581d3e86237d7b8996cc2e",
     "fbjs": "^3.0.2",
     "htmlparser2": "^7.2.0",
     "idb-keyval": "^6.2.1",
     "jest-when": "^3.5.2",
     "lodash": "4.17.21",
-    "lottie-react-native": "^5.1.6",
+    "lottie-react-native": "^6.3.1",
     "mapbox-gl": "^2.15.0",
     "moment": "^2.29.4",
     "moment-timezone": "^0.5.31",
@@ -137,7 +139,7 @@
     "react-native-linear-gradient": "^2.8.1",
     "react-native-localize": "^2.2.6",
     "react-native-modal": "^13.0.0",
-    "react-native-onyx": "1.0.98",
+    "react-native-onyx": "1.0.100",
     "react-native-pager-view": "^6.2.0",
     "react-native-pdf": "^6.7.1",
     "react-native-performance": "^5.1.0",
@@ -154,13 +156,14 @@
     "react-native-tab-view": "^3.5.2",
     "react-native-url-polyfill": "^2.0.0",
     "react-native-view-shot": "^3.6.0",
-    "react-native-vision-camera": "^2.15.4",
+    "react-native-vision-camera": "^2.16.2",
     "react-native-web-linear-gradient": "^1.1.2",
     "react-native-web-lottie": "^1.4.4",
     "react-native-webview": "^11.17.2",
     "react-pdf": "^6.2.2",
     "react-plaid-link": "3.3.2",
     "react-web-config": "^1.0.0",
+    "react-webcam": "^7.1.1",
     "react-window": "^1.8.9",
     "save": "^2.4.0",
     "semver": "^7.5.2",
@@ -264,7 +267,7 @@
     "react-native-performance-flipper-reporter": "^2.0.0",
     "react-native-svg-transformer": "^1.0.0",
     "react-test-renderer": "18.2.0",
-    "reassure": "^0.9.0",
+    "reassure": "^0.10.1",
     "setimmediate": "^1.0.5",
     "shellcheck": "^1.1.0",
     "style-loader": "^2.0.0",
diff --git a/patches/@onfido+react-native-sdk+7.4.0.patch b/patches/@onfido+react-native-sdk+8.3.0.patch
similarity index 90%
rename from patches/@onfido+react-native-sdk+7.4.0.patch
rename to patches/@onfido+react-native-sdk+8.3.0.patch
index b84225c0f667..12245cb58355 100644
--- a/patches/@onfido+react-native-sdk+7.4.0.patch
+++ b/patches/@onfido+react-native-sdk+8.3.0.patch
@@ -1,8 +1,8 @@
 diff --git a/node_modules/@onfido/react-native-sdk/android/build.gradle b/node_modules/@onfido/react-native-sdk/android/build.gradle
-index 781925b..9e16430 100644
+index b4c7106..d5083d3 100644
 --- a/node_modules/@onfido/react-native-sdk/android/build.gradle
 +++ b/node_modules/@onfido/react-native-sdk/android/build.gradle
-@@ -134,9 +134,9 @@ afterEvaluate { project ->
+@@ -135,9 +135,9 @@ afterEvaluate { project ->
          group = "Reporting"
          description = "Generate Jacoco coverage reports after running tests."
          reports {
diff --git a/patches/react-native+0.72.4+003+VerticalScrollBarPosition.patch b/patches/react-native+0.72.4+003+VerticalScrollBarPosition.patch
deleted file mode 100644
index e6ed0d4f79a3..000000000000
--- a/patches/react-native+0.72.4+003+VerticalScrollBarPosition.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-diff --git a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java
-index 33658e7..31c20c0 100644
---- a/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java
-+++ b/node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java
-@@ -381,6 +381,17 @@ public class ReactScrollViewManager extends ViewGroupManager<ReactScrollView>
-     view.setScrollEventThrottle(scrollEventThrottle);
-   }
- 
-+  @ReactProp(name = "verticalScrollbarPosition")
-+  public void setVerticalScrollbarPosition(ReactScrollView view, String position) {
-+    if ("right".equals(position)) {
-+      view.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_RIGHT);
-+    } else if ("left".equals(position)) {
-+      view.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_LEFT);
-+    } else {
-+      view.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_DEFAULT);
-+    }
-+  }
-+
-   @ReactProp(name = "isInvertedVirtualizedList")
-   public void setIsInvertedVirtualizedList(ReactScrollView view, boolean applyFix) {
-     // Usually when inverting the scroll view we are using scaleY: -1 on the list
diff --git a/patches/react-native-vision-camera+2.15.4.patch b/patches/react-native-vision-camera+2.15.4.patch
deleted file mode 100644
index 0c80d6a8ce55..000000000000
--- a/patches/react-native-vision-camera+2.15.4.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/node_modules/react-native-vision-camera/ios/Frame Processor/FrameProcessorRuntimeManager.mm b/node_modules/react-native-vision-camera/ios/Frame Processor/FrameProcessorRuntimeManager.mm
-index 3841b20..687ea94 100644
---- a/node_modules/react-native-vision-camera/ios/Frame Processor/FrameProcessorRuntimeManager.mm
-+++ b/node_modules/react-native-vision-camera/ios/Frame Processor/FrameProcessorRuntimeManager.mm
-@@ -19,6 +19,8 @@
- #import <React/RCTUIManager.h>
- #import <ReactCommon/RCTTurboModuleManager.h>
-
-+#define VISION_CAMERA_DISABLE_FRAME_PROCESSORS 1
-+
- #ifndef VISION_CAMERA_DISABLE_FRAME_PROCESSORS
-   #if __has_include(<RNReanimated/NativeReanimatedModule.h>)
-     #if __has_include(<RNReanimated/RuntimeManager.h>)
diff --git a/scripts/select-device.sh b/scripts/select-device.sh
new file mode 100755
index 000000000000..a53a6034d3da
--- /dev/null
+++ b/scripts/select-device.sh
@@ -0,0 +1,133 @@
+#!/bin/bash
+
+# Utility script for iOS and Android Emulators
+# ============================================
+#
+# Purpose:
+# --------
+# This script helps to start and kill iOS simulators and Android emulators instances.
+#
+# How this script helps:
+# ----------------------
+# This script streamlines the process of starting and killing on both android and ios
+# platforms.
+
+# Use functions and variables from the utils script
+source scripts/shellUtils.sh
+
+select_device_ios()
+{
+  # shellcheck disable=SC2124
+  IFS="$@" arr=$(xcrun xctrace list devices | grep -E "iPhone|iPad")
+
+  # Create arrays to store device names and identifiers
+  device_names=()
+  device_identifiers=()
+
+  # Parse the device list and populate the arrays
+  while IFS= read -r line; do
+    if [[ $line =~ ^(.*)\ \((.*)\)\ \((.*)\)$ ]]; then
+      device="${BASH_REMATCH[1]}"
+      version="${BASH_REMATCH[2]}"
+      identifier="${BASH_REMATCH[3]}"
+      device_identifiers+=("$identifier")
+      device_names+=("$device Version: $version")
+    else
+      info "Input does not match the expected pattern."
+      echo "$line"
+    fi
+  done <<< "$arr"
+  if [ ${#device_names[@]} -eq 0 ]; then
+    error "No devices detected, please create one."
+    exit 1
+  fi
+  if [ ${#device_names[@]} -eq 1 ]; then
+    device_identifier="${device_identifiers[0]}"
+    success "Single device detected, launching ${device_names[0]}"
+    open -a Simulator --args -CurrentDeviceUDID "$device_identifier"
+    return
+  fi
+  info "Multiple devices detected, please select one from the list."
+  PS3='Please enter your choice: '
+  select device_name in "${device_names[@]}"; do
+    if [ -n "$device_name" ]; then
+      selected_index=$((REPLY - 1))
+      device_name_for_display="${device_names[$selected_index]}"
+      device_identifier="${device_identifiers[$selected_index]}"
+      break
+    else
+      echo "Invalid selection. Please choose a device."
+  fi
+  done
+  success "Launching $device_name_for_display"
+  open -a Simulator --args -CurrentDeviceUDID "$device_identifier"
+}
+
+kill_all_emulators_ios() {
+  # kill all the emulators
+  killall Simulator
+}
+
+restart_adb_server() {
+  info "Restarting adb ..."
+  adb kill-server
+  sleep 2
+  adb start-server
+  sleep 2
+  info "Restarting adb done"
+}
+
+ensure_device_available() {
+  # Must turn off exit on error temporarily
+  set +e
+  if adb devices | grep -q offline; then
+    restart_adb_server
+    if adb devices | grep -q offline; then
+      error "Device remains 'offline'.  Please investigate!"
+      exit 1
+    fi
+  fi
+  set -e
+}
+
+select_device_android()
+{
+  # shellcheck disable=SC2124
+  IFS="$@" arr=$(emulator -list-avds)
+
+  # Create arrays to store device names
+  device_names=()
+
+  # Parse the device list and populate the arrays
+  while IFS= read -r line; do
+    device_names+=("$line")
+  done <<< "$arr"
+  if [ ${#device_names[@]} -eq 0 ]; then
+    error "No devices detected, please create one."
+    exit 1
+  fi
+  if [ ${#device_names[@]} -eq 1 ]; then
+    device_identifier="${device_names[0]}"
+    success "Single device detected, launching $device_identifier"
+    emulator -avd "$device_identifier" -writable-system > /dev/null 2>&1 &
+    return
+  fi
+  info "Multiple devices detected, please select one from the list."
+  PS3='Please enter your choice: '
+  select device_name in "${device_names[@]}"; do
+    if [ -n "$device_name" ]; then
+      selected_index=$((REPLY - 1))
+      device_identifier="${device_names[$selected_index]}"
+      break
+    else
+      echo "Invalid selection. Please choose a device."
+  fi
+  done
+  success "Launching $device_identifier"
+  emulator -avd "$device_identifier" -writable-system > /dev/null 2>&1 &
+}
+
+kill_all_emulators_android() {
+  # kill all the emulators
+  adb devices | grep emulator | cut -f1 | while read -r line; do adb -s "$line" emu kill; done
+}
diff --git a/scripts/setup-mapbox-sdk-walkthrough.sh b/scripts/setup-mapbox-sdk-walkthrough.sh
index 20b79641fc42..46b970f2d462 100755
--- a/scripts/setup-mapbox-sdk-walkthrough.sh
+++ b/scripts/setup-mapbox-sdk-walkthrough.sh
@@ -21,7 +21,7 @@
 # To configure Mapbox, invoke this script by running the following command from the project's root directory:
 # npm run configure-mapbox
 
-# Use functions and varaibles from the utils script
+# Use functions and variables from the utils script
 source scripts/shellUtils.sh
 
 # Intro message
diff --git a/scripts/setup-mapbox-sdk.sh b/scripts/setup-mapbox-sdk.sh
index 06fd75fba299..fa37cc2fbbad 100755
--- a/scripts/setup-mapbox-sdk.sh
+++ b/scripts/setup-mapbox-sdk.sh
@@ -36,7 +36,7 @@
 # To run this script, pass the secret Mapbox access token as a command-line argument:
 # ./scriptname.sh YOUR_MAPBOX_ACCESS_TOKEN
 
-# Use functions and varaibles from the utils script
+# Use functions and variables from the utils script
 source scripts/shellUtils.sh
 
 NETRC_PATH="$HOME/.netrc"
diff --git a/scripts/setup-newdot-web-emulators.sh b/scripts/setup-newdot-web-emulators.sh
new file mode 100755
index 000000000000..a0ed1422d2a9
--- /dev/null
+++ b/scripts/setup-newdot-web-emulators.sh
@@ -0,0 +1,113 @@
+#!/bin/bash
+
+# NewDot Web Configuration Script for iOS and Android Emulators
+# =============================================================
+#
+# Purpose:
+# --------
+# This script configures Configure iOS simulators and Android emulators to connect to
+# new.expensify.com.dev over https for local development.
+#
+# Background:
+# -----------
+# We plan to change the URL to serve the App on the development environment from
+# localhost:8082 to new.expensify.com.dev. This can be accomplished by adding a new entry
+# to the laptop's hosts file along with changes made in the PR.
+# However, we're not sure how we can access the App on Safari or Chrome on iOS or Android
+# simulators.
+#
+# How this script helps:
+# ----------------------
+# This script streamlines the process of adding the certificates to both android and
+# ios platforms.
+#
+# Usage:
+# ------
+# To run this script, pass the platform on which you want to run as a command-line
+# argument which can be the following:
+# 1. ios
+# 2. android
+# 3. all (default)
+# ./setup-newdot-web-emulators.sh platform
+
+# Use functions and variables from the utils script
+source scripts/shellUtils.sh
+
+# Use functions to select and open the emulator for iOS and Android
+source scripts/select-device.sh
+
+if [ $# -eq 0 ]; then
+  platform="all"
+else
+  platform=$1
+fi
+
+setup_ios()
+{
+  select_device_ios
+  sleep 30
+  info "Installing certificates on iOS simulator"
+  xcrun simctl keychain booted add-root-cert "$(mkcert -CAROOT)/rootCA.pem"
+  kill_all_emulators_ios
+}
+
+setup_android_path_1()
+{
+  adb root || {
+    error "Failed to restart adb as root"
+    info "You may want to check https://stackoverflow.com/a/45668555"
+    exit 1
+  }
+  sleep 2
+  adb remount
+  adb push /etc/hosts /system/etc/hosts
+  kill_all_emulators_android
+}
+
+setup_android_path_2()
+{
+  adb root || {
+    error "Failed to restart adb as root"
+    info "You may want to check https://stackoverflow.com/a/45668555"
+    exit 1
+  }
+  sleep 2
+  adb disable-verity
+  adb reboot
+  sleep 30
+  ensure_device_available
+  adb root
+  sleep 2
+  adb remount
+  adb push /etc/hosts /system/etc/hosts
+  kill_all_emulators_android
+}
+
+setup_android()
+{
+  select_device_android
+  sleep 30
+  ensure_device_available
+  info "Installing certificates on Android emulator"
+  setup_android_path_1 || {
+    info "Looks like the system partition is read-only"
+    info "Trying another method to install the certificates"
+    setup_android_path_2
+  }
+}
+
+if [ "$platform" = "ios" ] || [ "$platform" = "all" ]; then
+  setup_ios || { 
+    error "Failed to setup iOS simulator"
+    exit 1 
+  }
+fi
+
+if [ "$platform" = "android" ] || [ "$platform" = "all" ]; then
+  setup_android || { 
+    error "Failed to setup Android emulator"
+    exit 1 
+  }
+fi
+
+success "Done!"
diff --git a/scripts/shellUtils.sh b/scripts/shellUtils.sh
index 4c9e2febc34d..848e6d238254 100644
--- a/scripts/shellUtils.sh
+++ b/scripts/shellUtils.sh
@@ -1,10 +1,29 @@
 #!/bin/bash
 
-declare -r GREEN=$'\e[1;32m'
-declare -r RED=$'\e[1;31m'
-declare -r BLUE=$'\e[1;34m'
-declare -r TITLE=$'\e[1;4;34m'
-declare -r RESET=$'\e[0m'
+# Check if GREEN has already been defined
+if [ -z "${GREEN+x}" ]; then
+  declare -r GREEN=$'\e[1;32m'
+fi
+
+# Check if RED has already been defined
+if [ -z "${RED+x}" ]; then
+  declare -r RED=$'\e[1;31m'
+fi
+
+# Check if BLUE has already been defined
+if [ -z "${BLUE+x}" ]; then
+  declare -r BLUE=$'\e[1;34m'
+fi
+
+# Check if TITLE has already been defined
+if [ -z "${TITLE+x}" ]; then
+  declare -r TITLE=$'\e[1;4;34m'
+fi
+
+# Check if RESET has already been defined
+if [ -z "${RESET+x}" ]; then
+  declare -r RESET=$'\e[0m'
+fi
 
 function success {
   echo "🎉 $GREEN$1$RESET"
diff --git a/scripts/start-android.sh b/scripts/start-android.sh
new file mode 100644
index 000000000000..b9a4e08a07a2
--- /dev/null
+++ b/scripts/start-android.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# Script for starting android emulator correctly
+
+# Use functions to select and open the emulator for iOS and Android
+source scripts/select-device.sh
+
+select_device_android
+sleep 30
+ensure_device_available
+adb reverse tcp:8082 tcp:8082
\ No newline at end of file
diff --git a/src/CONFIG.ts b/src/CONFIG.ts
index c02ed8065836..8b1dab5b3d71 100644
--- a/src/CONFIG.ts
+++ b/src/CONFIG.ts
@@ -64,6 +64,7 @@ export default {
         CONCIERGE_URL_PATHNAME: 'concierge/',
         DEVPORTAL_URL_PATHNAME: '_devportal/',
         CONCIERGE_URL: `${expensifyURL}concierge/`,
+        SAML_URL: `${expensifyURL}authentication/saml/login`,
     },
     IS_IN_PRODUCTION: Platform.OS === 'web' ? process.env.NODE_ENV === 'production' : !__DEV__,
     IS_IN_STAGING: ENVIRONMENT === CONST.ENVIRONMENT.STAGING,
diff --git a/src/CONST.ts b/src/CONST.ts
index cbfe07ae5aab..b9e9181afd5b 100755
--- a/src/CONST.ts
+++ b/src/CONST.ts
@@ -141,6 +141,7 @@ const CONST = {
         MONTH_DAY_ABBR_FORMAT: 'MMM d',
         SHORT_DATE_FORMAT: 'MM-dd',
         MONTH_DAY_YEAR_ABBR_FORMAT: 'MMM d, yyyy',
+        MONTH_DAY_YEAR_FORMAT: 'MMMM d, yyyy',
         FNS_TIMEZONE_FORMAT_STRING: "yyyy-MM-dd'T'HH:mm:ssXXX",
         FNS_DB_FORMAT_STRING: 'yyyy-MM-dd HH:mm:ss.SSS',
         LONG_DATE_FORMAT_WITH_WEEKDAY: 'eeee, MMMM d, yyyy',
@@ -242,6 +243,7 @@ const CONST = {
         CUSTOM_STATUS: 'customStatus',
         NEW_DOT_CATEGORIES: 'newDotCategories',
         NEW_DOT_TAGS: 'newDotTags',
+        NEW_DOT_SAML: 'newDotSAML',
     },
     BUTTON_STATES: {
         DEFAULT: 'default',
@@ -304,7 +306,7 @@ const CONST = {
             },
             type: KEYBOARD_SHORTCUT_NAVIGATION_TYPE,
         },
-        SHORTCUT_MODAL: {
+        SHORTCUTS: {
             descriptionKey: 'openShortcutDialog',
             shortcutKey: 'J',
             modifiers: ['CTRL'],
@@ -471,6 +473,7 @@ const CONST = {
         HAND_ICON_HEIGHT: 152,
         HAND_ICON_WIDTH: 200,
         SHUTTER_SIZE: 90,
+        MAX_REPORT_PREVIEW_RECEIPTS: 3,
     },
     REPORT: {
         MAXIMUM_PARTICIPANTS: 8,
@@ -667,6 +670,7 @@ const CONST = {
         TOOLTIP_SENSE: 1000,
         TRIE_INITIALIZATION: 'trie_initialization',
         COMMENT_LENGTH_DEBOUNCE_TIME: 500,
+        SEARCH_FOR_REPORTS_DEBOUNCE_TIME: 300,
     },
     PRIORITY_MODE: {
         GSD: 'gsd',
@@ -903,6 +907,8 @@ const CONST = {
         HERE_TEXT: '@here',
     },
     COMPOSER_MAX_HEIGHT: 125,
+    CHAT_FOOTER_SECONDARY_ROW_HEIGHT: 15,
+    CHAT_FOOTER_SECONDARY_ROW_PADDING: 5,
     CHAT_FOOTER_MIN_HEIGHT: 65,
     CHAT_SKELETON_VIEW: {
         AVERAGE_ROW_HEIGHT: 80,
@@ -1239,6 +1245,7 @@ const CONST = {
             CLOSED: 6,
             STATE_SUSPENDED: 7,
         },
+        ACTIVE_STATES: [2, 3, 4, 7],
     },
     AVATAR_ROW_SIZE: {
         DEFAULT: 4,
@@ -1475,6 +1482,15 @@ const CONST = {
         MAKE_REQUEST_WITH_SIDE_EFFECTS: 'makeRequestWithSideEffects',
     },
 
+    ERECEIPT_COLORS: {
+        YELLOW: 'Yellow',
+        ICE: 'Ice',
+        BLUE: 'Blue',
+        GREEN: 'Green',
+        TANGERINE: 'Tangerine',
+        PINK: 'Pink',
+    },
+
     MAP_PADDING: 50,
     MAP_MARKER_SIZE: 20,
 
@@ -2648,8 +2664,8 @@ const CONST = {
         ATTACHMENT: 'common.attachment',
     },
     TEACHERS_UNITE: {
-        PUBLIC_ROOM_ID: '207591744844000',
-        POLICY_ID: 'ABD1345ED7293535',
+        PUBLIC_ROOM_ID: '7470147100835202',
+        POLICY_ID: 'B795B6319125BDF2',
         POLICY_NAME: 'Expensify.org / Teachers Unite!',
         PUBLIC_ROOM_NAME: '#teachers-unite',
     },
@@ -2704,6 +2720,7 @@ const CONST = {
     DEMO_PAGES: {
         SAASTR: 'SaaStrDemoSetup',
         SBE: 'SbeDemoSetup',
+        MONEY2020: 'Money2020DemoSetup',
     },
 
     MAPBOX: {
diff --git a/src/Expensify.js b/src/Expensify.js
index 9e6ae1ff27b4..6010824cf275 100644
--- a/src/Expensify.js
+++ b/src/Expensify.js
@@ -26,10 +26,10 @@ import Navigation from './libs/Navigation/Navigation';
 import PopoverReportActionContextMenu from './pages/home/report/ContextMenu/PopoverReportActionContextMenu';
 import * as ReportActionContextMenu from './pages/home/report/ContextMenu/ReportActionContextMenu';
 import SplashScreenHider from './components/SplashScreenHider';
-import KeyboardShortcutsModal from './components/KeyboardShortcutsModal';
 import AppleAuthWrapper from './components/SignInButtons/AppleAuthWrapper';
 import EmojiPicker from './components/EmojiPicker/EmojiPicker';
 import * as EmojiPickerAction from './libs/actions/EmojiPickerAction';
+import * as DemoActions from './libs/actions/DemoActions';
 import DeeplinkWrapper from './components/DeeplinkWrapper';
 
 // This lib needs to be imported, but it has nothing to export since all it contains is an Onyx connection
@@ -168,11 +168,13 @@ function Expensify(props) {
 
         // If the app is opened from a deep link, get the reportID (if exists) from the deep link and navigate to the chat report
         Linking.getInitialURL().then((url) => {
+            DemoActions.runDemoByURL(url);
             Report.openReportFromDeepLink(url, isAuthenticated);
         });
 
         // Open chat report from a deep link (only mobile native)
         Linking.addEventListener('url', (state) => {
+            DemoActions.runDemoByURL(state.url);
             Report.openReportFromDeepLink(state.url, isAuthenticated);
         });
 
@@ -194,7 +196,6 @@ function Expensify(props) {
         <DeeplinkWrapper isAuthenticated={isAuthenticated}>
             {shouldInit && (
                 <>
-                    <KeyboardShortcutsModal />
                     <GrowlNotification ref={Growl.growlRef} />
                     <PopoverReportActionContextMenu ref={ReportActionContextMenu.contextMenuRef} />
                     <EmojiPicker ref={EmojiPickerAction.emojiPickerRef} />
diff --git a/src/ONYXKEYS.ts b/src/ONYXKEYS.ts
index e01319cc2f66..d9ea3488f85f 100755
--- a/src/ONYXKEYS.ts
+++ b/src/ONYXKEYS.ts
@@ -26,6 +26,9 @@ const ONYXKEYS = {
     /** Boolean flag set whenever the sidebar has loaded */
     IS_SIDEBAR_LOADED: 'isSidebarLoaded',
 
+    /** Boolean flag set whenever we are searching for reports in the server */
+    IS_SEARCHING_FOR_REPORTS: 'isSearchingForReports',
+
     /** Note: These are Persisted Requests - not all requests in the main queue as the key name might lead one to believe */
     PERSISTED_REQUESTS: 'networkRequestQueue',
 
@@ -47,6 +50,9 @@ const ONYXKEYS = {
     // draft status
     CUSTOM_STATUS_DRAFT: 'customStatusDraft',
 
+    // keep edit message focus state
+    INPUT_FOCUSED: 'inputFocused',
+
     /** Contains all the personalDetails the user has access to, keyed by accountID */
     PERSONAL_DETAILS_LIST: 'personalDetailsList',
 
@@ -169,9 +175,6 @@ const ONYXKEYS = {
     /** Is report data loading? */
     IS_LOADING_APP: 'isLoadingApp',
 
-    /** Is Keyboard shortcuts modal open? */
-    IS_SHORTCUTS_MODAL_OPEN: 'isShortcutsModalOpen',
-
     /** Is the test tools modal open? */
     IS_TEST_TOOLS_MODAL_OPEN: 'isTestToolsModalOpen',
 
@@ -252,6 +255,7 @@ const ONYXKEYS = {
         REPORT_USER_IS_LEAVING_ROOM: 'reportUserIsLeavingRoom_',
         SECURITY_GROUP: 'securityGroup_',
         TRANSACTION: 'transactions_',
+        SPLIT_TRANSACTION_DRAFT: 'splitTransactionDraft_',
         PRIVATE_NOTES_DRAFT: 'privateNotesDraft_',
 
         // Manual request tab selector
@@ -314,6 +318,7 @@ type OnyxValues = {
     [ONYXKEYS.MODAL]: OnyxTypes.Modal;
     [ONYXKEYS.NETWORK]: OnyxTypes.Network;
     [ONYXKEYS.CUSTOM_STATUS_DRAFT]: OnyxTypes.CustomStatusDraft;
+    [ONYXKEYS.INPUT_FOCUSED]: boolean;
     [ONYXKEYS.PERSONAL_DETAILS_LIST]: Record<string, OnyxTypes.PersonalDetails>;
     [ONYXKEYS.PRIVATE_PERSONAL_DETAILS]: OnyxTypes.PrivatePersonalDetails;
     [ONYXKEYS.TASK]: OnyxTypes.Task;
@@ -353,7 +358,6 @@ type OnyxValues = {
     [ONYXKEYS.REIMBURSEMENT_ACCOUNT_WORKSPACE_ID]: string;
     [ONYXKEYS.IS_LOADING_PAYMENT_METHODS]: boolean;
     [ONYXKEYS.IS_LOADING_REPORT_DATA]: boolean;
-    [ONYXKEYS.IS_SHORTCUTS_MODAL_OPEN]: boolean;
     [ONYXKEYS.IS_TEST_TOOLS_MODAL_OPEN]: boolean;
     [ONYXKEYS.WALLET_TRANSFER]: OnyxTypes.WalletTransfer;
     [ONYXKEYS.LAST_ACCESSED_WORKSPACE_POLICY_ID]: string;
diff --git a/src/ROUTES.ts b/src/ROUTES.ts
index 2069f773075b..6219e545c8ca 100644
--- a/src/ROUTES.ts
+++ b/src/ROUTES.ts
@@ -36,6 +36,8 @@ export default {
     APPLE_SIGN_IN: 'sign-in-with-apple',
     GOOGLE_SIGN_IN: 'sign-in-with-google',
     DESKTOP_SIGN_IN_REDIRECT: 'desktop-signin-redirect',
+    SAML_SIGN_IN: 'sign-in-with-saml',
+
     // This is a special validation URL that will take the user to /workspace/new after validation. This is used
     // when linking users from e.com in order to share a session in this app.
     ENABLE_PAYMENTS: 'enable-payments',
@@ -112,6 +114,8 @@ export default {
     SETTINGS_STATUS: 'settings/profile/status',
     SETTINGS_STATUS_SET: 'settings/profile/status/set',
 
+    KEYBOARD_SHORTCUTS: 'keyboard-shortcuts',
+
     NEW: 'new',
     NEW_CHAT: 'new/chat',
     NEW_ROOM: 'new/room',
@@ -169,6 +173,14 @@ export default {
         route: 'r/:reportID/split/:reportActionID',
         getRoute: (reportID: string, reportActionID: string) => `r/${reportID}/split/${reportActionID}`,
     },
+    EDIT_SPLIT_BILL: {
+        route: `r/:reportID/split/:reportActionID/edit/:field`,
+        getRoute: (reportID: string, reportActionID: string, field: ValueOf<typeof CONST.EDIT_REQUEST_FIELD>) => `r/${reportID}/split/${reportActionID}/edit/${field}`,
+    },
+    EDIT_SPLIT_BILL_CURRENCY: {
+        route: 'r/:reportID/split/:reportActionID/edit/currency',
+        getRoute: (reportID: string, reportActionID: string, currency: string, backTo: string) => `r/${reportID}/split/${reportActionID}/edit/currency?currency=${currency}&backTo=${backTo}`,
+    },
     TASK_TITLE: {
         route: 'r/:reportID/title',
         getRoute: (reportID: string) => `r/${reportID}/title`,
@@ -294,6 +306,10 @@ export default {
         route: 'workspace/:policyID/settings',
         getRoute: (policyID: string) => `workspace/${policyID}/settings`,
     },
+    WORKSPACE_SETTINGS_CURRENCY: {
+        route: 'workspace/:policyID/settings/currency',
+        getRoute: (policyID: string) => `workspace/${policyID}/settings/currency`,
+    },
     WORKSPACE_CARD: {
         route: 'workspace/:policyID/card',
         getRoute: (policyID: string) => `workspace/${policyID}/card`,
@@ -323,9 +339,10 @@ export default {
         getRoute: (policyID: string) => `workspace/${policyID}/members`,
     },
 
-    // These are some on-off routes that will be removed once they're no longer needed (see GH issues for details)
+    // These are some one-off routes that will be removed once they're no longer needed (see GH issues for details)
     SAASTR: 'saastr',
     SBE: 'sbe',
+    MONEY2020: 'money2020',
 
     // Iframe screens from olddot
     HOME_OLDDOT: 'home',
diff --git a/src/SCREENS.ts b/src/SCREENS.ts
index 0346168f0407..99d5eb6277cd 100644
--- a/src/SCREENS.ts
+++ b/src/SCREENS.ts
@@ -2,28 +2,35 @@
  * This is a file containing constants for all of the screen names. In most cases, we should use the routes for
  * navigation. But there are situations where we may need to access screen names directly.
  */
-export default {
+const PROTECTED_SCREENS = {
     HOME: 'Home',
+    CONCIERGE: 'Concierge',
+    REPORT_ATTACHMENTS: 'ReportAttachments',
+} as const;
+
+export default {
+    ...PROTECTED_SCREENS,
     LOADING: 'Loading',
     REPORT: 'Report',
-    REPORT_ATTACHMENTS: 'ReportAttachments',
     NOT_FOUND: 'not-found',
-    TRANSITION_BETWEEN_APPS: 'TransitionBetweenApps',
-    VALIDATE_LOGIN: 'ValidateLogin',
-    CONCIERGE: 'Concierge',
     SETTINGS: {
         ROOT: 'Settings_Root',
         PREFERENCES: 'Settings_Preferences',
         WORKSPACES: 'Settings_Workspaces',
         SECURITY: 'Settings_Security',
         STATUS: 'Settings_Status',
+        WALLET: 'Settings_Wallet',
+        WALLET_DOMAIN_CARDS: 'Settings_Wallet_DomainCards',
     },
     SAVE_THE_WORLD: {
         ROOT: 'SaveTheWorld_Root',
     },
+    TRANSITION_BETWEEN_APPS: 'TransitionBetweenApps',
     SIGN_IN_WITH_APPLE_DESKTOP: 'AppleSignInDesktop',
     SIGN_IN_WITH_GOOGLE_DESKTOP: 'GoogleSignInDesktop',
     DESKTOP_SIGN_IN_REDIRECT: 'DesktopSignInRedirect',
+    SAML_SIGN_IN: 'SAMLSignIn',
+    VALIDATE_LOGIN: 'ValidateLogin',
 
     // Iframe screens from olddot
     HOME_OLDDOT: 'Home_OLDDOT',
@@ -38,3 +45,5 @@ export default {
     GROUPS_WORKSPACES_OLDDOT: 'GroupWorkspaces_OLDDOT',
     CARDS_AND_DOMAINS_OLDDOT: 'CardsAndDomains_OLDDOT',
 } as const;
+
+export {PROTECTED_SCREENS};
diff --git a/src/components/AnonymousReportFooter.js b/src/components/AnonymousReportFooter.js
index 034d14eb508b..dd1a0864b0cf 100644
--- a/src/components/AnonymousReportFooter.js
+++ b/src/components/AnonymousReportFooter.js
@@ -6,9 +6,9 @@ import AvatarWithDisplayName from './AvatarWithDisplayName';
 import ExpensifyWordmark from './ExpensifyWordmark';
 import withLocalize, {withLocalizePropTypes} from './withLocalize';
 import reportPropTypes from '../pages/reportPropTypes';
-import CONST from '../CONST';
 import styles from '../styles/styles';
 import * as Session from '../libs/actions/Session';
+import participantPropTypes from './participantPropTypes';
 
 const propTypes = {
     /** The report currently being looked at */
@@ -16,12 +16,16 @@ const propTypes = {
 
     isSmallSizeLayout: PropTypes.bool,
 
+    /** Personal details of all the users */
+    personalDetails: PropTypes.objectOf(participantPropTypes),
+
     ...withLocalizePropTypes,
 };
 
 const defaultProps = {
     report: {},
     isSmallSizeLayout: false,
+    personalDetails: {},
 };
 
 function AnonymousReportFooter(props) {
@@ -30,7 +34,7 @@ function AnonymousReportFooter(props) {
             <View style={[styles.flexRow, styles.flexShrink1]}>
                 <AvatarWithDisplayName
                     report={props.report}
-                    size={CONST.AVATAR_SIZE.MEDIUM}
+                    personalDetails={props.personalDetails}
                     isAnonymous
                 />
             </View>
diff --git a/src/components/AttachmentModal.js b/src/components/AttachmentModal.js
index 1cc12fca24ae..61b138747950 100755
--- a/src/components/AttachmentModal.js
+++ b/src/components/AttachmentModal.js
@@ -31,11 +31,14 @@ import useWindowDimensions from '../hooks/useWindowDimensions';
 import Navigation from '../libs/Navigation/Navigation';
 import ROUTES from '../ROUTES';
 import useNativeDriver from '../libs/useNativeDriver';
-import * as ReportUtils from '../libs/ReportUtils';
 import * as ReportActionsUtils from '../libs/ReportActionsUtils';
+import * as ReportUtils from '../libs/ReportUtils';
 import ONYXKEYS from '../ONYXKEYS';
 import * as Policy from '../libs/actions/Policy';
 import useNetwork from '../hooks/useNetwork';
+import * as IOU from '../libs/actions/IOU';
+import transactionPropTypes from './transactionPropTypes';
+import * as TransactionUtils from '../libs/TransactionUtils';
 
 /**
  * Modal render prop component that exposes modal launching triggers that can be used
@@ -79,6 +82,9 @@ const propTypes = {
     /** The report that has this attachment */
     report: reportPropTypes,
 
+    /** The transaction associated with the receipt attachment, if any */
+    transaction: transactionPropTypes,
+
     ...withLocalizePropTypes,
 
     ...windowDimensionsPropTypes,
@@ -97,6 +103,7 @@ const defaultProps = {
     allowDownload: false,
     headerTitle: null,
     report: {},
+    transaction: {},
     onModalShow: () => {},
     onModalHide: () => {},
     onCarouselAttachmentChange: () => {},
@@ -108,6 +115,7 @@ function AttachmentModal(props) {
     const [isModalOpen, setIsModalOpen] = useState(props.defaultOpen);
     const [shouldLoadAttachment, setShouldLoadAttachment] = useState(false);
     const [isAttachmentInvalid, setIsAttachmentInvalid] = useState(false);
+    const [isDeleteReceiptConfirmModalVisible, setIsDeleteReceiptConfirmModalVisible] = useState(false);
     const [isAuthTokenRequired, setIsAuthTokenRequired] = useState(props.isAuthTokenRequired);
     const [isAttachmentReceipt, setIsAttachmentReceipt] = useState(false);
     const [attachmentInvalidReasonTitle, setAttachmentInvalidReasonTitle] = useState('');
@@ -205,12 +213,22 @@ function AttachmentModal(props) {
     }, [isModalOpen, isConfirmButtonDisabled, props.onConfirm, file, source]);
 
     /**
-     * Close the confirm modal.
+     * Close the confirm modals.
      */
     const closeConfirmModal = useCallback(() => {
         setIsAttachmentInvalid(false);
+        setIsDeleteReceiptConfirmModalVisible(false);
     }, []);
 
+    /**
+     * Detach the receipt and close the modal.
+     */
+    const deleteAndCloseModal = useCallback(() => {
+        IOU.detachReceipt(props.transaction.transactionID, props.report.reportID);
+        setIsDeleteReceiptConfirmModalVisible(false);
+        Navigation.dismissModal(props.report.reportID);
+    }, [props.transaction, props.report]);
+
     /**
      * @param {Object} _file
      * @returns {Boolean}
@@ -358,9 +376,18 @@ function AttachmentModal(props) {
             text: props.translate('common.download'),
             onSelected: () => downloadAttachment(source),
         });
+        if (TransactionUtils.hasReceipt(props.transaction) && !TransactionUtils.isReceiptBeingScanned(props.transaction) && !isSettled) {
+            menuItems.push({
+                icon: Expensicons.Trashcan,
+                text: props.translate('receipt.deleteReceipt'),
+                onSelected: () => {
+                    setIsDeleteReceiptConfirmModalVisible(true);
+                },
+            });
+        }
         return menuItems;
         // eslint-disable-next-line react-hooks/exhaustive-deps
-    }, [isAttachmentReceipt, props.parentReport, props.parentReportActions, props.policy]);
+    }, [isAttachmentReceipt, props.parentReport, props.parentReportActions, props.policy, props.transaction]);
 
     return (
         <>
@@ -442,17 +469,30 @@ function AttachmentModal(props) {
                         )}
                     </SafeAreaConsumer>
                 )}
+                {isAttachmentReceipt && (
+                    <ConfirmModal
+                        title={translate('receipt.deleteReceipt')}
+                        isVisible={isDeleteReceiptConfirmModalVisible}
+                        onConfirm={deleteAndCloseModal}
+                        onCancel={closeConfirmModal}
+                        prompt={translate('receipt.deleteConfirmation')}
+                        confirmText={translate('common.delete')}
+                        cancelText={translate('common.cancel')}
+                        danger
+                    />
+                )}
             </Modal>
-
-            <ConfirmModal
-                title={attachmentInvalidReasonTitle ? translate(attachmentInvalidReasonTitle) : ''}
-                onConfirm={closeConfirmModal}
-                onCancel={closeConfirmModal}
-                isVisible={isAttachmentInvalid}
-                prompt={attachmentInvalidReason ? translate(attachmentInvalidReason) : ''}
-                confirmText={translate('common.close')}
-                shouldShowCancelButton={false}
-            />
+            {!isAttachmentReceipt && (
+                <ConfirmModal
+                    title={attachmentInvalidReasonTitle ? translate(attachmentInvalidReasonTitle) : ''}
+                    onConfirm={closeConfirmModal}
+                    onCancel={closeConfirmModal}
+                    isVisible={isAttachmentInvalid}
+                    prompt={attachmentInvalidReason ? translate(attachmentInvalidReason) : ''}
+                    confirmText={translate('common.close')}
+                    shouldShowCancelButton={false}
+                />
+            )}
 
             {props.children &&
                 props.children({
@@ -470,6 +510,16 @@ export default compose(
     withWindowDimensions,
     withLocalize,
     withOnyx({
+        transaction: {
+            key: ({report}) => {
+                if (!report) {
+                    return undefined;
+                }
+                const parentReportAction = ReportActionsUtils.getReportAction(report.parentReportID, report.parentReportActionID);
+                const transactionID = lodashGet(parentReportAction, ['originalMessage', 'IOUTransactionID'], 0);
+                return `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`;
+            },
+        },
         parentReport: {
             key: ({report}) => `${ONYXKEYS.COLLECTION.REPORT}${report ? report.parentReportID : '0'}`,
         },
diff --git a/src/components/AttachmentPicker/index.native.js b/src/components/AttachmentPicker/index.native.js
index 8b1bb54da920..063314a4268c 100644
--- a/src/components/AttachmentPicker/index.native.js
+++ b/src/components/AttachmentPicker/index.native.js
@@ -1,10 +1,12 @@
 import _ from 'underscore';
 import React, {useState, useRef, useCallback, useMemo} from 'react';
-import {View, Alert, Linking} from 'react-native';
+import PropTypes from 'prop-types';
+import {View, Alert} from 'react-native';
 import RNDocumentPicker from 'react-native-document-picker';
 import RNFetchBlob from 'react-native-blob-util';
+import lodashCompact from 'lodash/compact';
 import {launchImageLibrary} from 'react-native-image-picker';
-import {propTypes as basePropTypes, defaultProps} from './attachmentPickerPropTypes';
+import {propTypes as basePropTypes, defaultProps as baseDefaultProps} from './attachmentPickerPropTypes';
 import CONST from '../../CONST';
 import * as FileUtils from '../../libs/fileDownload/FileUtils';
 import * as Expensicons from '../Icon/Expensicons';
@@ -19,6 +21,14 @@ import useArrowKeyFocusManager from '../../hooks/useArrowKeyFocusManager';
 
 const propTypes = {
     ...basePropTypes,
+
+    /** If this value is true, then we exclude Camera option. */
+    shouldHideCameraOption: PropTypes.bool,
+};
+
+const defaultProps = {
+    ...baseDefaultProps,
+    shouldHideCameraOption: false,
 };
 
 /**
@@ -90,7 +100,7 @@ const getDataForUpload = (fileData) => {
  * @param {propTypes} props
  * @returns {JSX.Element}
  */
-function AttachmentPicker({type, children}) {
+function AttachmentPicker({type, children, shouldHideCameraOption}) {
     const [isVisible, setIsVisible] = useState(false);
 
     const completeAttachmentSelection = useRef();
@@ -100,27 +110,6 @@ function AttachmentPicker({type, children}) {
     const {translate} = useLocalize();
     const {isSmallScreenWidth} = useWindowDimensions();
 
-    /**
-     * Inform the users when they need to grant camera access and guide them to settings
-     */
-    const showPermissionsAlert = useCallback(() => {
-        Alert.alert(
-            translate('attachmentPicker.cameraPermissionRequired'),
-            translate('attachmentPicker.expensifyDoesntHaveAccessToCamera'),
-            [
-                {
-                    text: translate('common.cancel'),
-                    style: 'cancel',
-                },
-                {
-                    text: translate('common.settings'),
-                    onPress: () => Linking.openSettings(),
-                },
-            ],
-            {cancelable: false},
-        );
-    }, [translate]);
-
     /**
      * A generic handling when we don't know the exact reason for an error
      */
@@ -145,7 +134,7 @@ function AttachmentPicker({type, children}) {
                     if (response.errorCode) {
                         switch (response.errorCode) {
                             case 'permission':
-                                showPermissionsAlert();
+                                FileUtils.showCameraPermissionsAlert();
                                 return resolve();
                             default:
                                 showGeneralAlert();
@@ -158,7 +147,7 @@ function AttachmentPicker({type, children}) {
                     return resolve(response.assets);
                 });
             }),
-        [showGeneralAlert, showPermissionsAlert, type],
+        [showGeneralAlert, type],
     );
 
     /**
@@ -180,8 +169,8 @@ function AttachmentPicker({type, children}) {
     );
 
     const menuItemData = useMemo(() => {
-        const data = [
-            {
+        const data = lodashCompact([
+            !shouldHideCameraOption && {
                 icon: Expensicons.Camera,
                 textTranslationKey: 'attachmentPicker.takePhoto',
                 pickAttachment: () => showImagePicker(launchCamera),
@@ -191,18 +180,15 @@ function AttachmentPicker({type, children}) {
                 textTranslationKey: 'attachmentPicker.chooseFromGallery',
                 pickAttachment: () => showImagePicker(launchImageLibrary),
             },
-        ];
-
-        if (type !== CONST.ATTACHMENT_PICKER_TYPE.IMAGE) {
-            data.push({
+            type !== CONST.ATTACHMENT_PICKER_TYPE.IMAGE && {
                 icon: Expensicons.Paperclip,
                 textTranslationKey: 'attachmentPicker.chooseDocument',
                 pickAttachment: showDocumentPicker,
-            });
-        }
+            },
+        ]);
 
         return data;
-    }, [showDocumentPicker, showImagePicker, type]);
+    }, [showDocumentPicker, showImagePicker, type, shouldHideCameraOption]);
 
     const [focusedIndex, setFocusedIndex] = useArrowKeyFocusManager({initialFocusedIndex: -1, maxIndex: menuItemData.length - 1, isActive: isVisible});
 
diff --git a/src/components/Attachments/AttachmentCarousel/CarouselItem.js b/src/components/Attachments/AttachmentCarousel/CarouselItem.js
index 3aeef8482e2d..096b6d60d428 100644
--- a/src/components/Attachments/AttachmentCarousel/CarouselItem.js
+++ b/src/components/Attachments/AttachmentCarousel/CarouselItem.js
@@ -10,6 +10,7 @@ import Button from '../../Button';
 import AttachmentView from '../AttachmentView';
 import SafeAreaConsumer from '../../SafeAreaConsumer';
 import ReportAttachmentsContext from '../../../pages/home/report/ReportAttachmentsContext';
+import * as AttachmentsPropTypes from '../propTypes';
 
 const propTypes = {
     /** Attachment required information such as the source and file name */
@@ -20,8 +21,8 @@ const propTypes = {
         /** Whether source URL requires authentication */
         isAuthTokenRequired: PropTypes.bool,
 
-        /** The source (URL) of the attachment */
-        source: PropTypes.string,
+        /** URL to full-sized attachment or SVG function */
+        source: AttachmentsPropTypes.attachmentSourcePropType.isRequired,
 
         /** Additional information about the attachment file */
         file: PropTypes.shape({
@@ -31,6 +32,9 @@ const propTypes = {
 
         /** Whether the attachment has been flagged */
         hasBeenFlagged: PropTypes.bool,
+
+        /** The id of the transaction related to the attachment */
+        transactionID: PropTypes.string,
     }).isRequired,
 
     /** Whether the attachment is currently being viewed in the carousel */
@@ -97,6 +101,7 @@ function CarouselItem({item, isFocused, onPress}) {
                     isFocused={isFocused}
                     onPress={onPress}
                     isUsedInCarousel
+                    transactionID={item.transactionID}
                 />
             </View>
 
diff --git a/src/components/Attachments/AttachmentCarousel/index.native.js b/src/components/Attachments/AttachmentCarousel/index.native.js
index bd12020341be..bcea50698b3b 100644
--- a/src/components/Attachments/AttachmentCarousel/index.native.js
+++ b/src/components/Attachments/AttachmentCarousel/index.native.js
@@ -104,10 +104,10 @@ function AttachmentCarousel({report, reportActions, source, onNavigate, onClose,
      * @returns {JSX.Element}
      */
     const renderItem = useCallback(
-        ({item}) => (
+        ({item, isActive}) => (
             <CarouselItem
                 item={item}
-                isFocused={activeSource === item.source}
+                isFocused={isActive && activeSource === item.source}
                 onPress={() => setShouldShowArrows(!shouldShowArrows)}
             />
         ),
diff --git a/src/components/Attachments/AttachmentView/index.js b/src/components/Attachments/AttachmentView/index.js
index f4d3036ff802..a1b07fb99dd8 100755
--- a/src/components/Attachments/AttachmentView/index.js
+++ b/src/components/Attachments/AttachmentView/index.js
@@ -3,6 +3,7 @@ import {View, ActivityIndicator} from 'react-native';
 import _ from 'underscore';
 import PropTypes from 'prop-types';
 import Str from 'expensify-common/lib/str';
+import {withOnyx} from 'react-native-onyx';
 import styles from '../../../styles/styles';
 import Icon from '../../Icon';
 import * as Expensicons from '../../Icon/Expensicons';
@@ -17,7 +18,10 @@ import AttachmentViewPdf from './AttachmentViewPdf';
 import addEncryptedAuthTokenToURL from '../../../libs/addEncryptedAuthTokenToURL';
 import * as StyleUtils from '../../../styles/StyleUtils';
 import {attachmentViewPropTypes, attachmentViewDefaultProps} from './propTypes';
+import * as TransactionUtils from '../../../libs/TransactionUtils';
+import DistanceEReceipt from '../../DistanceEReceipt';
 import useNetwork from '../../../hooks/useNetwork';
+import ONYXKEYS from '../../../ONYXKEYS';
 
 const propTypes = {
     ...attachmentViewPropTypes,
@@ -38,6 +42,10 @@ const propTypes = {
 
     /** Denotes whether it is a workspace avatar or not */
     isWorkspaceAvatar: PropTypes.bool,
+
+    /** The id of the transaction related to the attachment */
+    // eslint-disable-next-line react/no-unused-prop-types
+    transactionID: PropTypes.string,
 };
 
 const defaultProps = {
@@ -47,6 +55,7 @@ const defaultProps = {
     onToggleKeyboard: () => {},
     containerStyles: [],
     isWorkspaceAvatar: false,
+    transactionID: '',
 };
 
 function AttachmentView({
@@ -64,9 +73,9 @@ function AttachmentView({
     isFocused,
     isWorkspaceAvatar,
     fallbackSource,
+    transaction,
 }) {
     const [loadComplete, setLoadComplete] = useState(false);
-
     const [imageError, setImageError] = useState(false);
 
     useNetwork({onReconnect: () => setImageError(false)});
@@ -113,6 +122,10 @@ function AttachmentView({
         );
     }
 
+    if (TransactionUtils.isDistanceRequest(transaction)) {
+        return <DistanceEReceipt transaction={transaction} />;
+    }
+
     // For this check we use both source and file.name since temporary file source is a blob
     // both PDFs and images will appear as images when pasted into the text field.
     // We also check for numeric source since this is how static images (used for preview) are represented in RN.
@@ -168,4 +181,12 @@ AttachmentView.propTypes = propTypes;
 AttachmentView.defaultProps = defaultProps;
 AttachmentView.displayName = 'AttachmentView';
 
-export default compose(memo, withLocalize)(AttachmentView);
+export default compose(
+    memo,
+    withLocalize,
+    withOnyx({
+        transaction: {
+            key: ({transactionID}) => `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`,
+        },
+    }),
+)(AttachmentView);
diff --git a/src/components/ConfirmationPage.js b/src/components/ConfirmationPage.js
index ffa3c780f154..4549d6ca6072 100644
--- a/src/components/ConfirmationPage.js
+++ b/src/components/ConfirmationPage.js
@@ -1,7 +1,7 @@
 import React from 'react';
 import {View} from 'react-native';
 import PropTypes from 'prop-types';
-import Lottie from 'lottie-react-native';
+import Lottie from './Lottie';
 import * as LottieAnimations from './LottieAnimations';
 import Text from './Text';
 import styles from '../styles/styles';
diff --git a/src/components/DistanceEReceipt.js b/src/components/DistanceEReceipt.js
new file mode 100644
index 000000000000..7c7837b8413d
--- /dev/null
+++ b/src/components/DistanceEReceipt.js
@@ -0,0 +1,121 @@
+import React, {useMemo} from 'react';
+import {View, ScrollView} from 'react-native';
+import lodashGet from 'lodash/get';
+import _ from 'underscore';
+import Text from './Text';
+import styles from '../styles/styles';
+import transactionPropTypes from './transactionPropTypes';
+import * as ReceiptUtils from '../libs/ReceiptUtils';
+import * as ReportUtils from '../libs/ReportUtils';
+import * as CurrencyUtils from '../libs/CurrencyUtils';
+import * as TransactionUtils from '../libs/TransactionUtils';
+import tryResolveUrlFromApiRoot from '../libs/tryResolveUrlFromApiRoot';
+import ThumbnailImage from './ThumbnailImage';
+import useLocalize from '../hooks/useLocalize';
+import Icon from './Icon';
+import themeColors from '../styles/themes/default';
+import * as Expensicons from './Icon/Expensicons';
+import EReceiptBackground from '../../assets/images/eReceipt_background.svg';
+import useNetwork from '../hooks/useNetwork';
+import PendingMapView from './MapView/PendingMapView';
+
+const propTypes = {
+    /** The transaction for the distance request */
+    transaction: transactionPropTypes,
+};
+
+const defaultProps = {
+    transaction: {},
+};
+
+function DistanceEReceipt({transaction}) {
+    const {translate} = useLocalize();
+    const {isOffline} = useNetwork();
+    const {thumbnail} = TransactionUtils.hasReceipt(transaction) ? ReceiptUtils.getThumbnailAndImageURIs(transaction.receipt.source, transaction.filename) : {};
+    const {amount: transactionAmount, currency: transactionCurrency, merchant: transactionMerchant, created: transactionDate} = ReportUtils.getTransactionDetails(transaction);
+    const formattedTransactionAmount = transactionAmount ? CurrencyUtils.convertToDisplayString(transactionAmount, transactionCurrency) : translate('common.tbd');
+    const thumbnailSource = tryResolveUrlFromApiRoot(thumbnail || '');
+    const waypoints = lodashGet(transaction, 'comment.waypoints', {});
+    const sortedWaypoints = useMemo(
+        () =>
+            // The waypoint keys are sometimes out of order
+            _.chain(waypoints)
+                .keys()
+                .sort((keyA, keyB) => TransactionUtils.getWaypointIndex(keyA) - TransactionUtils.getWaypointIndex(keyB))
+                .map((key) => ({[key]: waypoints[key]}))
+                .reduce((result, obj) => (obj ? _.assign(result, obj) : result), {})
+                .value(),
+        [waypoints],
+    );
+    return (
+        <View style={[styles.flex1, styles.alignItemsCenter]}>
+            <ScrollView
+                style={styles.w100}
+                contentContainerStyle={[styles.flexGrow1, styles.justifyContentCenter, styles.alignItemsCenter]}
+            >
+                <View style={styles.eReceiptPanel}>
+                    <EReceiptBackground
+                        style={styles.eReceiptBackground}
+                        pointerEvents="none"
+                    />
+                    <View style={[styles.moneyRequestViewImage, styles.mh0, styles.mt0, styles.mb5, styles.borderNone]}>
+                        {isOffline || !thumbnailSource ? (
+                            <PendingMapView />
+                        ) : (
+                            <ThumbnailImage
+                                previewSourceURL={thumbnailSource}
+                                style={[styles.w100, styles.h100]}
+                                isAuthTokenRequired
+                                shouldDynamicallyResize={false}
+                            />
+                        )}
+                    </View>
+                    <View style={[styles.mb10, styles.gap5, styles.ph2, styles.flexColumn, styles.alignItemsCenter]}>
+                        <Text style={styles.eReceiptAmount}>{formattedTransactionAmount}</Text>
+                        <Text style={styles.eReceiptMerchant}>{transactionMerchant}</Text>
+                    </View>
+                    <View style={[styles.mb10, styles.gap5, styles.ph2]}>
+                        {_.map(sortedWaypoints, (waypoint, key) => {
+                            const index = TransactionUtils.getWaypointIndex(key);
+                            let descriptionKey = 'distance.waypointDescription.';
+                            if (index === 0) {
+                                descriptionKey += 'start';
+                            } else if (index === _.size(waypoints) - 1) {
+                                descriptionKey += 'finish';
+                            } else {
+                                descriptionKey += 'stop';
+                            }
+                            return (
+                                <View
+                                    style={styles.gap1}
+                                    key={key}
+                                >
+                                    <Text style={styles.eReceiptWaypointTitle}>{translate(descriptionKey)}</Text>
+                                    <Text style={styles.eReceiptWaypointAddress}>{waypoint.address || ''}</Text>
+                                </View>
+                            );
+                        })}
+                        <View style={styles.gap1}>
+                            <Text style={styles.eReceiptWaypointTitle}>{translate('common.date')}</Text>
+                            <Text style={styles.eReceiptWaypointAddress}>{transactionDate}</Text>
+                        </View>
+                    </View>
+                    <View style={[styles.ph2, styles.flexRow, styles.justifyContentBetween, styles.alignItemsCenter]}>
+                        <Icon
+                            width={86}
+                            height={19.25}
+                            fill={themeColors.textBrand}
+                            src={Expensicons.ExpensifyWordmark}
+                        />
+                        <Text style={styles.eReceiptGuaranteed}>{translate('eReceipt.guaranteed')}</Text>
+                    </View>
+                </View>
+            </ScrollView>
+        </View>
+    );
+}
+
+export default DistanceEReceipt;
+DistanceEReceipt.displayName = 'DistanceEReceipt';
+DistanceEReceipt.propTypes = propTypes;
+DistanceEReceipt.defaultProps = defaultProps;
diff --git a/src/components/DistanceRequest/DistanceRequestFooter.js b/src/components/DistanceRequest/DistanceRequestFooter.js
index 574dda3d0dd6..c96adfee9ba0 100644
--- a/src/components/DistanceRequest/DistanceRequestFooter.js
+++ b/src/components/DistanceRequest/DistanceRequestFooter.js
@@ -10,8 +10,6 @@ import ONYXKEYS from '../../ONYXKEYS';
 import styles from '../../styles/styles';
 import useNetwork from '../../hooks/useNetwork';
 import useLocalize from '../../hooks/useLocalize';
-import DotIndicatorMessage from '../DotIndicatorMessage';
-import * as ErrorUtils from '../../libs/ErrorUtils';
 import theme from '../../styles/themes/default';
 import * as TransactionUtils from '../../libs/TransactionUtils';
 import Button from '../Button';
@@ -32,9 +30,6 @@ const propTypes = {
         }),
     ),
 
-    /** Whether there is an error with the route */
-    hasRouteError: PropTypes.bool,
-
     /** Function to call when the user wants to add a new waypoint */
     navigateToWaypointEditPage: PropTypes.func.isRequired,
 
@@ -53,13 +48,12 @@ const propTypes = {
 
 const defaultProps = {
     waypoints: {},
-    hasRouteError: false,
     mapboxAccessToken: {
         token: '',
     },
     transaction: {},
 };
-function DistanceRequestFooter({waypoints, transaction, mapboxAccessToken, hasRouteError, navigateToWaypointEditPage}) {
+function DistanceRequestFooter({waypoints, transaction, mapboxAccessToken, navigateToWaypointEditPage}) {
     const {isOffline} = useNetwork();
     const {translate} = useLocalize();
 
@@ -103,13 +97,6 @@ function DistanceRequestFooter({waypoints, transaction, mapboxAccessToken, hasRo
 
     return (
         <>
-            {hasRouteError && (
-                <DotIndicatorMessage
-                    style={[styles.mh5, styles.mv3]}
-                    messages={ErrorUtils.getLatestErrorField(transaction, 'route')}
-                    type="error"
-                />
-            )}
             <View style={[styles.flexRow, styles.justifyContentCenter, styles.pt1]}>
                 <Button
                     small
diff --git a/src/components/DistanceRequest/index.js b/src/components/DistanceRequest/index.js
index 822567182d4a..416fefc5af89 100644
--- a/src/components/DistanceRequest/index.js
+++ b/src/components/DistanceRequest/index.js
@@ -18,6 +18,7 @@ import usePrevious from '../../hooks/usePrevious';
 import * as Transaction from '../../libs/actions/Transaction';
 import * as TransactionUtils from '../../libs/TransactionUtils';
 import * as IOUUtils from '../../libs/IOUUtils';
+import * as ErrorUtils from '../../libs/ErrorUtils';
 import Button from '../Button';
 import DraggableList from '../DraggableList';
 import transactionPropTypes from '../transactionPropTypes';
@@ -26,6 +27,7 @@ import FullPageNotFoundView from '../BlockingViews/FullPageNotFoundView';
 import HeaderWithBackButton from '../HeaderWithBackButton';
 import DistanceRequestFooter from './DistanceRequestFooter';
 import DistanceRequestRenderItem from './DistanceRequestRenderItem';
+import DotIndicatorMessage from '../DotIndicatorMessage';
 
 const propTypes = {
     /** The transactionID of this request */
@@ -68,6 +70,7 @@ function DistanceRequest({transactionID, report, transaction, route, isEditingRe
     const {translate} = useLocalize();
 
     const [optimisticWaypoints, setOptimisticWaypoints] = useState(null);
+    const [hasError, setHasError] = useState(false);
     const isEditing = lodashGet(route, 'path', '').includes('address');
     const reportID = lodashGet(report, 'reportID', '');
     const waypoints = useMemo(() => optimisticWaypoints || lodashGet(transaction, 'comment.waypoints', {waypoint0: {}, waypoint1: {}}), [optimisticWaypoints, transaction]);
@@ -101,6 +104,10 @@ function DistanceRequest({transactionID, report, transaction, route, isEditingRe
 
         // Create the initial start and stop waypoints
         Transaction.createInitialWaypoints(transactionID);
+        return () => {
+            // Whenever we reset the transaction, we need to set errors as empty/false.
+            setHasError(false);
+        };
     }, [transaction, transactionID]);
 
     useEffect(() => {
@@ -118,6 +125,14 @@ function DistanceRequest({transactionID, report, transaction, route, isEditingRe
         scrollViewRef.current.scrollToEnd({animated: true});
     }, [numberOfPreviousWaypoints, numberOfWaypoints]);
 
+    useEffect(() => {
+        // Whenever we change waypoints we need to remove the error or it will keep showing the error.
+        if (_.isEqual(previousWaypoints, waypoints)) {
+            return;
+        }
+        setHasError(false);
+    }, [waypoints, previousWaypoints]);
+
     const navigateBack = () => {
         Navigation.goBack(isEditing ? ROUTES.MONEY_REQUEST_CONFIRMATION.getRoute(iouType, reportID) : ROUTES.HOME);
     };
@@ -130,6 +145,22 @@ function DistanceRequest({transactionID, report, transaction, route, isEditingRe
         Navigation.navigate(isEditingRequest ? ROUTES.MONEY_REQUEST_EDIT_WAYPOINT.getRoute(report.reportID, transactionID, index) : ROUTES.MONEY_REQUEST_WAYPOINT.getRoute('request', index));
     };
 
+    const getError = () => {
+        // Get route error if available else show the invalid number of waypoints error.
+        if (hasRouteError) {
+            return ErrorUtils.getLatestErrorField(transaction, 'route');
+        }
+
+        // Initially, both waypoints will be null, and if we give fallback value as empty string that will result in true condition, that's why different default values.
+        if (_.keys(waypoints).length === 2 && lodashGet(waypoints, 'waypoint0.address', 'address1') === lodashGet(waypoints, 'waypoint1.address', 'address2')) {
+            return {0: translate('iou.error.duplicateWaypointsErrorMessage')};
+        }
+
+        if (_.size(validatedWaypoints) < 2) {
+            return {0: translate('iou.error.emptyWaypointsErrorMessage')};
+        }
+    };
+
     const updateWaypoints = useCallback(
         ({data}) => {
             if (_.isEqual(waypointsList, data)) {
@@ -151,6 +182,15 @@ function DistanceRequest({transactionID, report, transaction, route, isEditingRe
         [transactionID, waypoints, waypointsList],
     );
 
+    const submitWaypoints = useCallback(() => {
+        // If there is any error or loading state, don't let user go to next page.
+        if (_.size(validatedWaypoints) < 2 || hasRouteError || isLoadingRoute || isLoading) {
+            setHasError(true);
+            return;
+        }
+        onSubmit(waypoints);
+    }, [onSubmit, setHasError, hasRouteError, isLoadingRoute, isLoading, validatedWaypoints, waypoints]);
+
     const content = (
         <>
             <View style={styles.flex1}>
@@ -183,13 +223,20 @@ function DistanceRequest({transactionID, report, transaction, route, isEditingRe
                 />
             </View>
             <View style={[styles.w100, styles.pt2]}>
+                {/* Show error message if there is route error or there are less than 2 routes and user has tried submitting, */}
+                {((hasError && _.size(validatedWaypoints) < 2) || hasRouteError) && (
+                    <DotIndicatorMessage
+                        style={[styles.mh4, styles.mv3]}
+                        messages={getError()}
+                        type="error"
+                    />
+                )}
                 <Button
                     success
                     allowBubble
                     pressOnEnter
                     style={[styles.w100, styles.mb4, styles.ph4, styles.flexShrink0]}
-                    onPress={() => onSubmit(waypoints)}
-                    isDisabled={_.size(validatedWaypoints) < 2 || (!isOffline && (hasRouteError || isLoadingRoute || isLoading))}
+                    onPress={submitWaypoints}
                     text={translate(isEditingRequest ? 'common.save' : 'common.next')}
                     isLoading={!isOffline && (isLoadingRoute || shouldFetchRoute || isLoading)}
                 />
diff --git a/src/components/EReceipt.js b/src/components/EReceipt.js
new file mode 100644
index 000000000000..e6b3a9809c7e
--- /dev/null
+++ b/src/components/EReceipt.js
@@ -0,0 +1,107 @@
+import React from 'react';
+import {View} from 'react-native';
+import {withOnyx} from 'react-native-onyx';
+import PropTypes from 'prop-types';
+import ONYXKEYS from '../ONYXKEYS';
+import * as StyleUtils from '../styles/StyleUtils';
+import transactionPropTypes from './transactionPropTypes';
+import styles from '../styles/styles';
+import * as Expensicons from './Icon/Expensicons';
+import Icon from './Icon';
+import Text from './Text';
+import * as ReportUtils from '../libs/ReportUtils';
+import * as CurrencyUtils from '../libs/CurrencyUtils';
+import * as CardUtils from '../libs/CardUtils';
+import variables from '../styles/variables';
+import useLocalize from '../hooks/useLocalize';
+import EReceiptThumbnail from './EReceiptThumbnail';
+import CONST from '../CONST';
+
+const propTypes = {
+    /* TransactionID of the transaction this EReceipt corresponds to */
+    transactionID: PropTypes.string.isRequired,
+
+    /* Onyx Props */
+    transaction: transactionPropTypes,
+};
+
+const defaultProps = {
+    transaction: {},
+};
+
+function EReceipt({transaction, transactionID}) {
+    const {translate} = useLocalize();
+
+    // Get receipt colorway, or default to Yellow.
+    const {backgroundColor: primaryColor, color: secondaryColor} = StyleUtils.getEReceiptColorStyles(StyleUtils.getEReceiptColorCode(transaction));
+
+    const {
+        amount: transactionAmount,
+        currency: transactionCurrency,
+        merchant: transactionMerchant,
+        created: transactionDate,
+        cardID: transactionCardID,
+    } = ReportUtils.getTransactionDetails(transaction, CONST.DATE.MONTH_DAY_YEAR_FORMAT);
+    const formattedAmount = CurrencyUtils.convertToDisplayString(transactionAmount, transactionCurrency);
+    const currency = CurrencyUtils.getCurrencySymbol(transactionCurrency);
+    const amount = formattedAmount.replace(currency, '');
+    const cardDescription = CardUtils.getCardDescription(transactionCardID);
+
+    const secondaryTextColorStyle = StyleUtils.getColorStyle(secondaryColor);
+
+    return (
+        <View style={[styles.eReceiptContainer, StyleUtils.getBackgroundColorStyle(primaryColor)]}>
+            <View style={styles.fullScreen}>
+                <EReceiptThumbnail transactionID={transactionID} />
+            </View>
+            <View style={[styles.alignItemsCenter, styles.ph8, styles.pb14, styles.pt8]}>
+                <View style={[StyleUtils.getWidthAndHeightStyle(variables.eReceiptIconWidth, variables.eReceiptIconHeight)]} />
+            </View>
+            <View style={[styles.flexColumn, styles.justifyContentBetween, styles.alignItemsCenter, styles.ph9, styles.flex1]}>
+                <View style={[styles.alignItemsCenter, styles.alignSelfCenter, styles.flexColumn, styles.gap2, styles.mb8]}>
+                    <View style={[styles.flexRow, styles.justifyContentCenter]}>
+                        <View style={[styles.flexColumn, styles.pt1]}>
+                            <Text style={[styles.eReceiptCurrency, secondaryTextColorStyle]}>{currency}</Text>
+                        </View>
+                        <Text
+                            adjustsFontSizeToFit
+                            style={[styles.eReceiptAmountLarge, secondaryTextColorStyle]}
+                        >
+                            {amount}
+                        </Text>
+                    </View>
+                    <Text style={[styles.eReceiptMerchant, styles.breakWord, styles.textAlignCenter]}>{transactionMerchant}</Text>
+                </View>
+                <View style={[styles.alignSelfStretch, styles.flexColumn, styles.mb8, styles.gap4]}>
+                    <View style={[styles.flexColumn, styles.gap1]}>
+                        <Text style={[styles.eReceiptWaypointTitle, secondaryTextColorStyle]}>{translate('eReceipt.transactionDate')}</Text>
+                        <Text style={[styles.eReceiptWaypointAddress]}>{transactionDate}</Text>
+                    </View>
+                    <View style={[styles.flexColumn, styles.gap1]}>
+                        <Text style={[styles.eReceiptWaypointTitle, secondaryTextColorStyle]}>{translate('common.card')}</Text>
+                        <Text style={[styles.eReceiptWaypointAddress]}>{cardDescription}</Text>
+                    </View>
+                </View>
+                <View style={[styles.justifyContentBetween, styles.alignItemsCenter, styles.alignSelfStretch, styles.flexRow, styles.mb8]}>
+                    <Icon
+                        width={variables.eReceiptWordmarkWidth}
+                        height={variables.eReceiptWordmarkHeight}
+                        fill={secondaryColor}
+                        src={Expensicons.ExpensifyWordmark}
+                    />
+                    <Text style={styles.eReceiptGuaranteed}>{translate('eReceipt.guaranteed')}</Text>
+                </View>
+            </View>
+        </View>
+    );
+}
+
+EReceipt.displayName = 'EReceipt';
+EReceipt.propTypes = propTypes;
+EReceipt.defaultProps = defaultProps;
+
+export default withOnyx({
+    transaction: {
+        key: ({transactionID}) => `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`,
+    },
+})(EReceipt);
diff --git a/src/components/EReceiptThumbnail.js b/src/components/EReceiptThumbnail.js
new file mode 100644
index 000000000000..f1bb5b025e2f
--- /dev/null
+++ b/src/components/EReceiptThumbnail.js
@@ -0,0 +1,124 @@
+import React, {useState} from 'react';
+import {View} from 'react-native';
+import {withOnyx} from 'react-native-onyx';
+import PropTypes from 'prop-types';
+import ONYXKEYS from '../ONYXKEYS';
+import * as StyleUtils from '../styles/StyleUtils';
+import transactionPropTypes from './transactionPropTypes';
+import styles from '../styles/styles';
+import * as Expensicons from './Icon/Expensicons';
+import * as MCCIcons from './Icon/MCCIcons';
+import Icon from './Icon';
+import * as ReportUtils from '../libs/ReportUtils';
+import variables from '../styles/variables';
+import * as eReceiptBGs from './Icon/EReceiptBGs';
+import Image from './Image';
+import CONST from '../CONST';
+
+const propTypes = {
+    /* TransactionID of the transaction this EReceipt corresponds to */
+    // eslint-disable-next-line react/no-unused-prop-types
+    transactionID: PropTypes.string.isRequired,
+
+    /* Onyx Props */
+    transaction: transactionPropTypes,
+};
+
+const defaultProps = {
+    transaction: {},
+};
+
+const backgroundImages = {
+    [CONST.ERECEIPT_COLORS.YELLOW]: eReceiptBGs.EReceiptBG_Yellow,
+    [CONST.ERECEIPT_COLORS.ICE]: eReceiptBGs.EReceiptBG_Ice,
+    [CONST.ERECEIPT_COLORS.BLUE]: eReceiptBGs.EReceiptBG_Blue,
+    [CONST.ERECEIPT_COLORS.GREEN]: eReceiptBGs.EReceiptBG_Green,
+    [CONST.ERECEIPT_COLORS.TANGERINE]: eReceiptBGs.EReceiptBG_Tangerine,
+    [CONST.ERECEIPT_COLORS.PINK]: eReceiptBGs.EReceiptBG_Pink,
+};
+
+function getBackgroundImage(transaction) {
+    return backgroundImages[StyleUtils.getEReceiptColorCode(transaction)];
+}
+
+function EReceiptThumbnail({transaction}) {
+    // Get receipt colorway, or default to Yellow.
+    const {backgroundColor: primaryColor, color: secondaryColor} = StyleUtils.getEReceiptColorStyles(StyleUtils.getEReceiptColorCode(transaction));
+
+    const [containerWidth, setContainerWidth] = useState(0);
+    const [containerHeight, setContainerHeight] = useState(0);
+
+    const onContainerLayout = (event) => {
+        const {width, height} = event.nativeEvent.layout;
+        setContainerWidth(width);
+        setContainerHeight(height);
+    };
+
+    const {mccGroup: transactionMCCGroup} = ReportUtils.getTransactionDetails(transaction);
+    const MCCIcon = MCCIcons[`${transactionMCCGroup}`];
+
+    const isSmall = containerWidth && containerWidth < variables.eReceiptThumbnailSmallBreakpoint;
+    const isMedium = containerWidth && containerWidth < variables.eReceiptThumbnailMediumBreakpoint;
+
+    let receiptIconWidth = variables.eReceiptIconWidth;
+    let receiptIconHeight = variables.eReceiptIconHeight;
+    let receiptMCCSize = variables.eReceiptMCCHeightWidth;
+
+    if (isSmall) {
+        receiptIconWidth = variables.eReceiptIconWidthSmall;
+        receiptIconHeight = variables.eReceiptIconHeightSmall;
+        receiptMCCSize = variables.eReceiptMCCHeightWidthSmall;
+    } else if (isMedium) {
+        receiptIconWidth = variables.eReceiptIconWidthMedium;
+        receiptIconHeight = variables.eReceiptIconHeightMedium;
+        receiptMCCSize = variables.eReceiptMCCHeightWidthMedium;
+    }
+
+    return (
+        <View
+            style={[
+                styles.flex1,
+                StyleUtils.getBackgroundColorStyle(primaryColor),
+                styles.overflowHidden,
+                styles.alignItemsCenter,
+                containerHeight && containerHeight < variables.eReceiptThumnailCenterReceiptBreakpoint ? styles.justifyContentCenter : {},
+            ]}
+            onLayout={onContainerLayout}
+        >
+            <Image
+                source={getBackgroundImage(transaction)}
+                style={styles.eReceiptBackgroundThumbnail}
+                resizeMode="cover"
+            />
+            <View style={[styles.alignItemsCenter, styles.ph8, styles.pt8, styles.pb8]}>
+                <View style={[StyleUtils.getWidthAndHeightStyle(receiptIconWidth, receiptIconHeight), styles.alignItemsCenter, styles.justifyContentCenter]}>
+                    <Icon
+                        src={Expensicons.EReceiptIcon}
+                        height={receiptIconHeight}
+                        width={receiptIconWidth}
+                        fill={secondaryColor}
+                        additionalStyles={[styles.fullScreen]}
+                    />
+                    {MCCIcon ? (
+                        <Icon
+                            src={MCCIcon}
+                            height={receiptMCCSize}
+                            width={receiptMCCSize}
+                            fill={primaryColor}
+                        />
+                    ) : null}
+                </View>
+            </View>
+        </View>
+    );
+}
+
+EReceiptThumbnail.displayName = 'EReceiptThumbnail';
+EReceiptThumbnail.propTypes = propTypes;
+EReceiptThumbnail.defaultProps = defaultProps;
+
+export default withOnyx({
+    transaction: {
+        key: ({transactionID}) => `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`,
+    },
+})(EReceiptThumbnail);
diff --git a/src/components/EmojiPicker/EmojiPickerMenu/index.js b/src/components/EmojiPicker/EmojiPickerMenu/index.js
index 3dfc5f59bb38..3a7551a872e9 100755
--- a/src/components/EmojiPicker/EmojiPickerMenu/index.js
+++ b/src/components/EmojiPicker/EmojiPickerMenu/index.js
@@ -457,12 +457,11 @@ class EmojiPickerMenu extends Component {
         return (
             <EmojiPickerMenuItem
                 onPress={(emoji) => this.props.onEmojiSelected(emoji, item)}
-                onHoverIn={() => this.setState({highlightedIndex: index, isUsingKeyboardMovement: false})}
-                onHoverOut={() => {
-                    if (this.state.arePointerEventsDisabled) {
+                onHoverIn={() => {
+                    if (!this.state.isUsingKeyboardMovement) {
                         return;
                     }
-                    this.setState({highlightedIndex: -1});
+                    this.setState({isUsingKeyboardMovement: false});
                 }}
                 emoji={emojiCode}
                 onFocus={() => this.setState({highlightedIndex: index})}
@@ -474,8 +473,6 @@ class EmojiPickerMenu extends Component {
                     }))
                 }
                 isFocused={isEmojiFocused}
-                isHighlighted={index === this.state.highlightedIndex}
-                isUsingKeyboardMovement={this.state.isUsingKeyboardMovement}
             />
         );
     }
diff --git a/src/components/EmojiPicker/EmojiPickerMenuItem/index.js b/src/components/EmojiPicker/EmojiPickerMenuItem/index.js
index b51a8b07537c..5c753120301a 100644
--- a/src/components/EmojiPicker/EmojiPickerMenuItem/index.js
+++ b/src/components/EmojiPicker/EmojiPickerMenuItem/index.js
@@ -27,14 +27,8 @@ const propTypes = {
     /** Handles what to do when the pressable is blurred */
     onBlur: PropTypes.func,
 
-    /** Whether this menu item is currently highlighted or not */
-    isHighlighted: PropTypes.bool,
-
     /** Whether this menu item is currently focused or not */
     isFocused: PropTypes.bool,
-
-    /** Whether the emoji is highlighted by the keyboard/mouse */
-    isUsingKeyboardMovement: PropTypes.bool,
 };
 
 class EmojiPickerMenuItem extends PureComponent {
@@ -43,6 +37,9 @@ class EmojiPickerMenuItem extends PureComponent {
 
         this.ref = null;
         this.focusAndScroll = this.focusAndScroll.bind(this);
+        this.state = {
+            isHovered: false,
+        };
     }
 
     componentDidMount() {
@@ -73,14 +70,26 @@ class EmojiPickerMenuItem extends PureComponent {
                 shouldUseAutoHitSlop={false}
                 onPress={() => this.props.onPress(this.props.emoji)}
                 onPressOut={Browser.isMobile() ? this.props.onHoverOut : undefined}
-                onHoverIn={this.props.onHoverIn}
-                onHoverOut={this.props.onHoverOut}
+                onHoverIn={() => {
+                    if (this.props.onHoverIn) {
+                        this.props.onHoverIn();
+                    }
+
+                    this.setState({isHovered: true});
+                }}
+                onHoverOut={() => {
+                    if (this.props.onHoverOut) {
+                        this.props.onHoverOut();
+                    }
+
+                    this.setState({isHovered: false});
+                }}
                 onFocus={this.props.onFocus}
                 onBlur={this.props.onBlur}
                 ref={(ref) => (this.ref = ref)}
                 style={({pressed}) => [
-                    this.props.isHighlighted && this.props.isUsingKeyboardMovement ? styles.emojiItemKeyboardHighlighted : {},
-                    this.props.isHighlighted && !this.props.isUsingKeyboardMovement ? styles.emojiItemHighlighted : {},
+                    this.props.isFocused ? styles.emojiItemKeyboardHighlighted : {},
+                    this.state.isHovered ? styles.emojiItemHighlighted : {},
                     Browser.isMobile() && StyleUtils.getButtonBackgroundColorStyle(getButtonState(false, pressed)),
                     styles.emojiItem,
                 ]}
@@ -95,9 +104,7 @@ class EmojiPickerMenuItem extends PureComponent {
 
 EmojiPickerMenuItem.propTypes = propTypes;
 EmojiPickerMenuItem.defaultProps = {
-    isHighlighted: false,
     isFocused: false,
-    isUsingKeyboardMovement: false,
     onHoverIn: () => {},
     onHoverOut: () => {},
     onFocus: () => {},
@@ -106,8 +113,4 @@ EmojiPickerMenuItem.defaultProps = {
 
 // Significantly speeds up re-renders of the EmojiPickerMenu's FlatList
 // by only re-rendering at most two EmojiPickerMenuItems that are highlighted/un-highlighted per user action.
-export default React.memo(
-    EmojiPickerMenuItem,
-    (prevProps, nextProps) =>
-        prevProps.isHighlighted === nextProps.isHighlighted && prevProps.emoji === nextProps.emoji && prevProps.isUsingKeyboardMovement === nextProps.isUsingKeyboardMovement,
-);
+export default React.memo(EmojiPickerMenuItem, (prevProps, nextProps) => prevProps.isFocused === nextProps.isFocused && prevProps.emoji === nextProps.emoji);
diff --git a/src/components/Form.js b/src/components/Form.js
index 9836bd818536..b4e639dcf964 100644
--- a/src/components/Form.js
+++ b/src/components/Form.js
@@ -76,6 +76,10 @@ const propTypes = {
     /** Container styles */
     style: stylePropTypes,
 
+    /** Submit button container styles */
+    // eslint-disable-next-line react/forbid-prop-types
+    submitButtonStyles: PropTypes.arrayOf(PropTypes.object),
+
     /** Custom content to display in the footer after submit button */
     footerContent: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),
 
@@ -98,6 +102,7 @@ const defaultProps = {
     shouldValidateOnBlur: true,
     footerContent: null,
     style: [],
+    submitButtonStyles: [],
     validate: () => ({}),
 };
 
@@ -447,7 +452,7 @@ function Form(props) {
                                 focusInput.focus();
                             }
                         }}
-                        containerStyles={[styles.mh0, styles.mt5, styles.flex1]}
+                        containerStyles={[styles.mh0, styles.mt5, styles.flex1, ...props.submitButtonStyles]}
                         enabledWhenOffline={props.enabledWhenOffline}
                         isSubmitActionDangerous={props.isSubmitActionDangerous}
                         disablePressOnEnter
@@ -472,6 +477,7 @@ function Form(props) {
             props.isSubmitActionDangerous,
             props.isSubmitButtonVisible,
             props.submitButtonText,
+            props.submitButtonStyles,
         ],
     );
 
diff --git a/src/components/Form/FormProvider.js b/src/components/Form/FormProvider.js
index 5261d1258ad0..ada40c24ed89 100644
--- a/src/components/Form/FormProvider.js
+++ b/src/components/Form/FormProvider.js
@@ -11,6 +11,7 @@ import compose from '../../libs/compose';
 import {withNetwork} from '../OnyxProvider';
 import stylePropTypes from '../../styles/stylePropTypes';
 import networkPropTypes from '../networkPropTypes';
+import CONST from '../../CONST';
 
 const propTypes = {
     /** A unique Onyx key identifying the form */
@@ -98,19 +99,75 @@ function getInitialValueByType(valueType) {
     }
 }
 
-function FormProvider({validate, shouldValidateOnBlur, shouldValidateOnChange, children, formState, network, enabledWhenOffline, onSubmit, ...rest}) {
+function FormProvider({validate, formID, shouldValidateOnBlur, shouldValidateOnChange, children, formState, network, enabledWhenOffline, onSubmit, ...rest}) {
     const inputRefs = useRef(null);
     const touchedInputs = useRef({});
     const [inputValues, setInputValues] = useState({});
     const [errors, setErrors] = useState({});
+    const hasServerError = useMemo(() => Boolean(formState) && !_.isEmpty(formState.errors), [formState]);
 
     const onValidate = useCallback(
-        (values) => {
-            const validateErrors = validate(values);
-            setErrors(validateErrors);
-            return validateErrors;
+        (values, shouldClearServerError = true) => {
+            const trimmedStringValues = {};
+            _.each(values, (inputValue, inputID) => {
+                if (_.isString(inputValue)) {
+                    trimmedStringValues[inputID] = inputValue.trim();
+                } else {
+                    trimmedStringValues[inputID] = inputValue;
+                }
+            });
+
+            if (shouldClearServerError) {
+                FormActions.setErrors(formID, null);
+            }
+            FormActions.setErrorFields(formID, null);
+
+            const validateErrors = validate(values) || {};
+
+            // Validate the input for html tags. It should supercede any other error
+            _.each(trimmedStringValues, (inputValue, inputID) => {
+                // If the input value is empty OR is non-string, we don't need to validate it for HTML tags
+                if (!inputValue || !_.isString(inputValue)) {
+                    return;
+                }
+                const foundHtmlTagIndex = inputValue.search(CONST.VALIDATE_FOR_HTML_TAG_REGEX);
+                const leadingSpaceIndex = inputValue.search(CONST.VALIDATE_FOR_LEADINGSPACES_HTML_TAG_REGEX);
+
+                // Return early if there are no HTML characters
+                if (leadingSpaceIndex === -1 && foundHtmlTagIndex === -1) {
+                    return;
+                }
+
+                const matchedHtmlTags = inputValue.match(CONST.VALIDATE_FOR_HTML_TAG_REGEX);
+                let isMatch = _.some(CONST.WHITELISTED_TAGS, (r) => r.test(inputValue));
+                // Check for any matches that the original regex (foundHtmlTagIndex) matched
+                if (matchedHtmlTags) {
+                    // Check if any matched inputs does not match in WHITELISTED_TAGS list and return early if needed.
+                    for (let i = 0; i < matchedHtmlTags.length; i++) {
+                        const htmlTag = matchedHtmlTags[i];
+                        isMatch = _.some(CONST.WHITELISTED_TAGS, (r) => r.test(htmlTag));
+                        if (!isMatch) {
+                            break;
+                        }
+                    }
+                }
+                // Add a validation error here because it is a string value that contains HTML characters
+                validateErrors[inputID] = 'common.error.invalidCharacter';
+            });
+
+            if (!_.isObject(validateErrors)) {
+                throw new Error('Validate callback must return an empty object or an object with shape {inputID: error}');
+            }
+
+            const touchedInputErrors = _.pick(validateErrors, (inputValue, inputID) => Boolean(touchedInputs.current[inputID]));
+
+            if (!_.isEqual(errors, touchedInputErrors)) {
+                setErrors(touchedInputErrors);
+            }
+
+            return touchedInputErrors;
         },
-        [validate],
+        [errors, formID, validate],
     );
 
     /**
@@ -186,6 +243,18 @@ function FormProvider({validate, shouldValidateOnBlur, shouldValidateOnChange, c
                         propsToParse.onTouched(event);
                     }
                 },
+                onPress: (event) => {
+                    setTouchedInput(inputID);
+                    if (_.isFunction(propsToParse.onPress)) {
+                        propsToParse.onPress(event);
+                    }
+                },
+                onPressIn: (event) => {
+                    setTouchedInput(inputID);
+                    if (_.isFunction(propsToParse.onPressIn)) {
+                        propsToParse.onPressIn(event);
+                    }
+                },
                 onBlur: (event) => {
                     // Only run validation when user proactively blurs the input.
                     if (Visibility.isVisible() && Visibility.hasFocus()) {
@@ -195,7 +264,7 @@ function FormProvider({validate, shouldValidateOnBlur, shouldValidateOnChange, c
                         setTimeout(() => {
                             setTouchedInput(inputID);
                             if (shouldValidateOnBlur) {
-                                onValidate(inputValues);
+                                onValidate(inputValues, !hasServerError);
                             }
                         }, 200);
                     }
@@ -228,7 +297,7 @@ function FormProvider({validate, shouldValidateOnBlur, shouldValidateOnChange, c
                 },
             };
         },
-        [errors, formState, inputValues, onValidate, setTouchedInput, shouldValidateOnBlur, shouldValidateOnChange],
+        [errors, formState, hasServerError, inputValues, onValidate, setTouchedInput, shouldValidateOnBlur, shouldValidateOnChange],
     );
     const value = useMemo(() => ({registerInput}), [registerInput]);
 
@@ -237,6 +306,7 @@ function FormProvider({validate, shouldValidateOnBlur, shouldValidateOnChange, c
             {/* eslint-disable react/jsx-props-no-spreading */}
             <FormWrapper
                 {...rest}
+                formID={formID}
                 onSubmit={submit}
                 inputRefs={inputRefs}
                 errors={errors}
diff --git a/src/components/Form/FormWrapper.js b/src/components/Form/FormWrapper.js
index 44bfee1a9e4a..3d9fd37d6f22 100644
--- a/src/components/Form/FormWrapper.js
+++ b/src/components/Form/FormWrapper.js
@@ -11,6 +11,7 @@ import SafeAreaConsumer from '../SafeAreaConsumer';
 import ScrollViewWithContext from '../ScrollViewWithContext';
 
 import stylePropTypes from '../../styles/stylePropTypes';
+import errorsPropType from './errorsPropType';
 
 const propTypes = {
     /** A unique Onyx key identifying the form */
@@ -36,7 +37,7 @@ const propTypes = {
         isLoading: PropTypes.bool,
 
         /** Server side errors keyed by microtime */
-        errors: PropTypes.objectOf(PropTypes.oneOf([PropTypes.string, PropTypes.arrayOf(PropTypes.string)])),
+        errors: errorsPropType,
 
         /** Field-specific server side errors keyed by microtime */
         errorFields: PropTypes.objectOf(PropTypes.objectOf(PropTypes.string)),
@@ -59,7 +60,7 @@ const propTypes = {
     /** Custom content to display in the footer after submit button */
     footerContent: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),
 
-    errors: PropTypes.objectOf(PropTypes.string).isRequired,
+    errors: errorsPropType.isRequired,
 
     inputRefs: PropTypes.objectOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object])).isRequired,
 };
diff --git a/src/components/Form/errorsPropType.js b/src/components/Form/errorsPropType.js
new file mode 100644
index 000000000000..3a02bb74e942
--- /dev/null
+++ b/src/components/Form/errorsPropType.js
@@ -0,0 +1,11 @@
+import PropTypes from 'prop-types';
+
+export default PropTypes.oneOfType([
+    PropTypes.string,
+    PropTypes.objectOf(
+        PropTypes.oneOfType([
+            PropTypes.string,
+            PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.objectOf(PropTypes.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.number]))])),
+        ]),
+    ),
+]);
diff --git a/src/components/Hoverable/hoverablePropTypes.js b/src/components/Hoverable/hoverablePropTypes.js
index d483a06d6aaf..a3aeaa597d7a 100644
--- a/src/components/Hoverable/hoverablePropTypes.js
+++ b/src/components/Hoverable/hoverablePropTypes.js
@@ -13,6 +13,12 @@ const propTypes = {
     /** Function that executes when the mouse leaves the children. */
     onHoverOut: PropTypes.func,
 
+    /** Direct pass-through of React's onMouseEnter event. */
+    onMouseEnter: PropTypes.func,
+
+    /** Direct pass-through of React's onMouseLeave event. */
+    onMouseLeave: PropTypes.func,
+
     /** Decides whether to handle the scroll behaviour to show hover once the scroll ends */
     shouldHandleScroll: PropTypes.bool,
 };
diff --git a/src/components/Hoverable/index.js b/src/components/Hoverable/index.js
index 38ea64952a2c..5cba52db5a7b 100644
--- a/src/components/Hoverable/index.js
+++ b/src/components/Hoverable/index.js
@@ -155,6 +155,10 @@ class Hoverable extends Component {
                 }
             },
             onMouseEnter: (el) => {
+                if (_.isFunction(this.props.onMouseEnter)) {
+                    this.props.onMouseEnter(el);
+                }
+
                 this.setIsHovered(true);
 
                 if (_.isFunction(child.props.onMouseEnter)) {
@@ -162,6 +166,10 @@ class Hoverable extends Component {
                 }
             },
             onMouseLeave: (el) => {
+                if (_.isFunction(this.props.onMouseLeave)) {
+                    this.props.onMouseLeave(el);
+                }
+
                 this.setIsHovered(false);
 
                 if (_.isFunction(child.props.onMouseLeave)) {
diff --git a/src/components/Icon/EReceiptBGs.js b/src/components/Icon/EReceiptBGs.js
new file mode 100644
index 000000000000..ff74c0fb83c2
--- /dev/null
+++ b/src/components/Icon/EReceiptBGs.js
@@ -0,0 +1,8 @@
+import EReceiptBG_Yellow from '../../../assets/images/eReceiptBGs/eReceiptBG_yellow.png';
+import EReceiptBG_Ice from '../../../assets/images/eReceiptBGs/eReceiptBG_navy.png';
+import EReceiptBG_Blue from '../../../assets/images/eReceiptBGs/eReceiptBG_blue.png';
+import EReceiptBG_Green from '../../../assets/images/eReceiptBGs/eReceiptBG_green.png';
+import EReceiptBG_Tangerine from '../../../assets/images/eReceiptBGs/eReceiptBG_tangerine.png';
+import EReceiptBG_Pink from '../../../assets/images/eReceiptBGs/eReceiptBG_pink.png';
+
+export {EReceiptBG_Yellow, EReceiptBG_Ice, EReceiptBG_Blue, EReceiptBG_Green, EReceiptBG_Tangerine, EReceiptBG_Pink};
diff --git a/src/components/Icon/Illustrations.js b/src/components/Icon/Illustrations.js
index 0cd4e80396c9..0e39872a3da6 100644
--- a/src/components/Icon/Illustrations.js
+++ b/src/components/Icon/Illustrations.js
@@ -45,6 +45,7 @@ import MoneyBadge from '../../../assets/images/simple-illustrations/simple-illus
 import TreasureChest from '../../../assets/images/simple-illustrations/simple-illustration__treasurechest.svg';
 import ThumbsUpStars from '../../../assets/images/simple-illustrations/simple-illustration__thumbsupstars.svg';
 import Hands from '../../../assets/images/product-illustrations/home-illustration-hands.svg';
+import HandEarth from '../../../assets/images/simple-illustrations/simple-illustration__handearth.svg';
 
 export {
     Abracadabra,
@@ -94,4 +95,5 @@ export {
     TreasureChest,
     ThumbsUpStars,
     Hands,
+    HandEarth,
 };
diff --git a/src/components/Icon/MCCIcons.js b/src/components/Icon/MCCIcons.js
index bd30e426ab31..a704f7d46bc6 100644
--- a/src/components/Icon/MCCIcons.js
+++ b/src/components/Icon/MCCIcons.js
@@ -1,15 +1,15 @@
-import Airlines from '../../../assets/images/mccGroupIcons/MCC-Airlines.svg';
-import Commuter from '../../../assets/images/mccGroupIcons/MCC-Commuter.svg';
-import Gas from '../../../assets/images/mccGroupIcons/MCC-Gas.svg';
-import Goods from '../../../assets/images/mccGroupIcons/MCC-Goods.svg';
-import Groceries from '../../../assets/images/mccGroupIcons/MCC-Groceries.svg';
-import Hotel from '../../../assets/images/mccGroupIcons/MCC-Hotel.svg';
-import Mail from '../../../assets/images/mccGroupIcons/MCC-Mail.svg';
-import Meals from '../../../assets/images/mccGroupIcons/MCC-Meals.svg';
-import Rental from '../../../assets/images/mccGroupIcons/MCC-RentalCar.svg';
-import Services from '../../../assets/images/mccGroupIcons/MCC-Services.svg';
-import Taxi from '../../../assets/images/mccGroupIcons/MCC-Taxi.svg';
-import Miscellaneous from '../../../assets/images/mccGroupIcons/MCC-Misc.svg';
-import Utilities from '../../../assets/images/mccGroupIcons/MCC-Utilities.svg';
+import Airlines from '../../../assets/images/MCCGroupIcons/MCC-Airlines.svg';
+import Commuter from '../../../assets/images/MCCGroupIcons/MCC-Commuter.svg';
+import Gas from '../../../assets/images/MCCGroupIcons/MCC-Gas.svg';
+import Goods from '../../../assets/images/MCCGroupIcons/MCC-Goods.svg';
+import Groceries from '../../../assets/images/MCCGroupIcons/MCC-Groceries.svg';
+import Hotel from '../../../assets/images/MCCGroupIcons/MCC-Hotel.svg';
+import Mail from '../../../assets/images/MCCGroupIcons/MCC-Mail.svg';
+import Meals from '../../../assets/images/MCCGroupIcons/MCC-Meals.svg';
+import Rental from '../../../assets/images/MCCGroupIcons/MCC-RentalCar.svg';
+import Services from '../../../assets/images/MCCGroupIcons/MCC-Services.svg';
+import Taxi from '../../../assets/images/MCCGroupIcons/MCC-Taxi.svg';
+import Miscellaneous from '../../../assets/images/MCCGroupIcons/MCC-Misc.svg';
+import Utilities from '../../../assets/images/MCCGroupIcons/MCC-Utilities.svg';
 
 export {Airlines, Commuter, Gas, Goods, Groceries, Hotel, Mail, Meals, Rental, Services, Taxi, Miscellaneous, Utilities};
diff --git a/src/components/IllustratedHeaderPageLayout.js b/src/components/IllustratedHeaderPageLayout.js
index ac916117094b..c45f5e2452dd 100644
--- a/src/components/IllustratedHeaderPageLayout.js
+++ b/src/components/IllustratedHeaderPageLayout.js
@@ -1,6 +1,6 @@
 import React from 'react';
 import PropTypes from 'prop-types';
-import Lottie from 'lottie-react-native';
+import Lottie from './Lottie';
 import headerWithBackButtonPropTypes from './HeaderWithBackButton/headerWithBackButtonPropTypes';
 import styles from '../styles/styles';
 import themeColors from '../styles/themes/default';
diff --git a/src/components/InvertedFlatList/BaseInvertedFlatList.js b/src/components/InvertedFlatList/BaseInvertedFlatList.js
index 10248697394f..f49214f5de70 100644
--- a/src/components/InvertedFlatList/BaseInvertedFlatList.js
+++ b/src/components/InvertedFlatList/BaseInvertedFlatList.js
@@ -133,6 +133,7 @@ function BaseInvertedFlatList(props) {
             // Web requires that items be measured or else crazy things happen when scrolling.
             getItemLayout={shouldMeasureItems ? getItemLayout : undefined}
             windowSize={15}
+            inverted
         />
     );
 }
diff --git a/src/components/InvertedFlatList/CellRendererComponent/index.ios.js b/src/components/InvertedFlatList/CellRendererComponent.js
similarity index 99%
rename from src/components/InvertedFlatList/CellRendererComponent/index.ios.js
rename to src/components/InvertedFlatList/CellRendererComponent.js
index d6f02de2b942..77397aeb4610 100644
--- a/src/components/InvertedFlatList/CellRendererComponent/index.ios.js
+++ b/src/components/InvertedFlatList/CellRendererComponent.js
@@ -21,7 +21,6 @@ function CellRendererComponent(props) {
             {...props}
             style={[
                 props.style,
-
                 /**
                  * To achieve absolute positioning and handle overflows for list items,
                  * it is necessary to assign zIndex values. In the case of inverted lists,
diff --git a/src/components/InvertedFlatList/CellRendererComponent/index.android.js b/src/components/InvertedFlatList/CellRendererComponent/index.android.js
deleted file mode 100644
index 78ca24751187..000000000000
--- a/src/components/InvertedFlatList/CellRendererComponent/index.android.js
+++ /dev/null
@@ -1,35 +0,0 @@
-import React from 'react';
-import {View} from 'react-native';
-import PropTypes from 'prop-types';
-import styles from '../../../styles/styles';
-
-const propTypes = {
-    /** Position index of the list item in a list view */
-    index: PropTypes.number.isRequired,
-};
-
-function CellRendererComponent(props) {
-    return (
-        <View
-            // eslint-disable-next-line react/jsx-props-no-spreading
-            {...props}
-            style={[
-                styles.invert,
-
-                /**
-                 * To achieve absolute positioning and handle overflows for list items,
-                 * it is necessary to assign zIndex values. In the case of inverted lists,
-                 * the lower list items will have higher zIndex values compared to the upper
-                 * list items. Consequently, lower list items can overflow the upper list items.
-                 * See: https://github.com/Expensify/App/issues/20451
-                 */
-                {zIndex: -props.index},
-            ]}
-        />
-    );
-}
-
-CellRendererComponent.propTypes = propTypes;
-CellRendererComponent.displayName = 'CellRendererComponent';
-
-export default CellRendererComponent;
diff --git a/src/components/InvertedFlatList/index.android.js b/src/components/InvertedFlatList/index.android.js
deleted file mode 100644
index 0ffed10921d8..000000000000
--- a/src/components/InvertedFlatList/index.android.js
+++ /dev/null
@@ -1,71 +0,0 @@
-import React, {forwardRef} from 'react';
-import {FlatList} from 'react-native';
-import PropTypes from 'prop-types';
-import _ from 'underscore';
-import BaseInvertedFlatList from './BaseInvertedFlatList';
-import styles from '../../styles/styles';
-import stylePropTypes from '../../styles/stylePropTypes';
-import CellRendererComponent from './CellRendererComponent';
-
-const propTypes = {
-    /** Passed via forwardRef so we can access the FlatList ref */
-    innerRef: PropTypes.shape({
-        current: PropTypes.instanceOf(FlatList),
-    }).isRequired,
-
-    /** The style of the footer of the list */
-    ListFooterComponentStyle: stylePropTypes,
-};
-
-const defaultProps = {
-    ListFooterComponentStyle: {},
-};
-
-class InvertedFlatList extends React.Component {
-    constructor(props) {
-        super(props);
-
-        this.list = undefined;
-    }
-
-    componentDidMount() {
-        if (!_.isFunction(this.props.innerRef)) {
-            // eslint-disable-next-line no-param-reassign
-            this.props.innerRef.current = this.list;
-        } else {
-            this.props.innerRef(this.list);
-        }
-    }
-
-    render() {
-        return (
-            <BaseInvertedFlatList
-                // eslint-disable-next-line react/jsx-props-no-spreading
-                {...this.props}
-                ref={(el) => (this.list = el)}
-                // Manually invert the FlatList to circumvent a react-native bug that causes ANR (application not responding) on android 13
-                inverted={false}
-                style={styles.invert}
-                ListFooterComponentStyle={[styles.invert, this.props.ListFooterComponentStyle]}
-                verticalScrollbarPosition="left" // We are mirroring the X and Y axis, so we need to swap the scrollbar position
-                CellRendererComponent={CellRendererComponent}
-                /**
-                 * To achieve absolute positioning and handle overflows for list items, the property must be disabled
-                 * for Android native builds.
-                 * Source: https://reactnative.dev/docs/0.71/optimizing-flatlist-configuration#removeclippedsubviews
-                 */
-                removeClippedSubviews={false}
-            />
-        );
-    }
-}
-InvertedFlatList.propTypes = propTypes;
-InvertedFlatList.defaultProps = defaultProps;
-
-export default forwardRef((props, ref) => (
-    <InvertedFlatList
-        // eslint-disable-next-line react/jsx-props-no-spreading
-        {...props}
-        innerRef={ref}
-    />
-));
diff --git a/src/components/InvertedFlatList/index.js b/src/components/InvertedFlatList/index.js
index d46cd5801605..564db6296c9b 100644
--- a/src/components/InvertedFlatList/index.js
+++ b/src/components/InvertedFlatList/index.js
@@ -114,7 +114,6 @@ function InvertedFlatList(props) {
         <BaseInvertedFlatList
             // eslint-disable-next-line react/jsx-props-no-spreading
             {...props}
-            inverted
             ref={listRef}
             shouldMeasureItems
             contentContainerStyle={StyleSheet.compose(contentContainerStyle, styles.justifyContentEnd)}
diff --git a/src/components/InvertedFlatList/index.ios.js b/src/components/InvertedFlatList/index.native.js
similarity index 55%
rename from src/components/InvertedFlatList/index.ios.js
rename to src/components/InvertedFlatList/index.native.js
index 357f3d78ea9e..ece86032d80b 100644
--- a/src/components/InvertedFlatList/index.ios.js
+++ b/src/components/InvertedFlatList/index.native.js
@@ -7,7 +7,12 @@ export default forwardRef((props, ref) => (
         // eslint-disable-next-line react/jsx-props-no-spreading
         {...props}
         ref={ref}
-        inverted
         CellRendererComponent={CellRendererComponent}
+        /**
+         * To achieve absolute positioning and handle overflows for list items, the property must be disabled
+         * for Android native builds.
+         * Source: https://reactnative.dev/docs/0.71/optimizing-flatlist-configuration#removeclippedsubviews
+         */
+        removeClippedSubviews={false}
     />
 ));
diff --git a/src/components/KeyboardShortcutsModal.js b/src/components/KeyboardShortcutsModal.js
deleted file mode 100644
index 6ca3cce6412c..000000000000
--- a/src/components/KeyboardShortcutsModal.js
+++ /dev/null
@@ -1,196 +0,0 @@
-import React, {useEffect, useRef, useState} from 'react';
-import PropTypes from 'prop-types';
-import {View, ScrollView} from 'react-native';
-import {withOnyx} from 'react-native-onyx';
-import _ from 'underscore';
-import HeaderWithBackButton from './HeaderWithBackButton';
-import Text from './Text';
-import Modal from './Modal';
-import CONST from '../CONST';
-import styles from '../styles/styles';
-import * as StyleUtils from '../styles/StyleUtils';
-import withWindowDimensions, {windowDimensionsPropTypes} from './withWindowDimensions';
-import withLocalize, {withLocalizePropTypes} from './withLocalize';
-import compose from '../libs/compose';
-import KeyboardShortcut from '../libs/KeyboardShortcut';
-import * as KeyboardShortcutsActions from '../libs/actions/KeyboardShortcuts';
-import * as ModalActions from '../libs/actions/Modal';
-import ONYXKEYS from '../ONYXKEYS';
-
-const propTypes = {
-    /** prop to set shortcuts modal visibility */
-    isShortcutsModalOpen: PropTypes.bool,
-
-    /** prop to fetch screen width */
-    ...windowDimensionsPropTypes,
-
-    /** props to fetch translation functions */
-    ...withLocalizePropTypes,
-};
-
-const defaultProps = {
-    isShortcutsModalOpen: false,
-};
-
-const closeShortcutEscapeModalConfig = CONST.KEYBOARD_SHORTCUTS.ESCAPE;
-const closeShortcutEnterModalConfig = CONST.KEYBOARD_SHORTCUTS.ENTER;
-const arrowUpConfig = CONST.KEYBOARD_SHORTCUTS.ARROW_UP;
-const arrowDownConfig = CONST.KEYBOARD_SHORTCUTS.ARROW_DOWN;
-const openShortcutModalConfig = CONST.KEYBOARD_SHORTCUTS.SHORTCUT_MODAL;
-
-function KeyboardShortcutsModal({isShortcutsModalOpen = false, isSmallScreenWidth, translate}) {
-    const subscribedOpenModalShortcuts = useRef([]);
-    const modalType = isSmallScreenWidth ? CONST.MODAL.MODAL_TYPE.BOTTOM_DOCKED : CONST.MODAL.MODAL_TYPE.CENTERED_UNSWIPEABLE;
-    const [shortcuts, setShortcurts] = useState([]);
-
-    /*
-     * Subscribe shortcuts that only are used when the modal is open
-     */
-    const subscribeOpenModalShortcuts = () => {
-        // Allow closing the modal with the both Enter and Escape keys
-        // Both callbacks have the lowest priority (0) to ensure that they are called before any other callbacks
-        // and configured so that event propagation is stopped after the callback is called (only when the modal is open)
-
-        subscribedOpenModalShortcuts.current = [
-            KeyboardShortcut.subscribe(
-                closeShortcutEscapeModalConfig.shortcutKey,
-                () => {
-                    ModalActions.close();
-                    KeyboardShortcutsActions.hideKeyboardShortcutModal();
-                },
-                closeShortcutEscapeModalConfig.descriptionKey,
-                closeShortcutEscapeModalConfig.modifiers,
-                true,
-                true,
-            ),
-
-            KeyboardShortcut.subscribe(
-                closeShortcutEnterModalConfig.shortcutKey,
-                () => {
-                    ModalActions.close();
-                    KeyboardShortcutsActions.hideKeyboardShortcutModal();
-                },
-                closeShortcutEnterModalConfig.descriptionKey,
-                closeShortcutEnterModalConfig.modifiers,
-                true,
-            ),
-
-            // Intercept arrow up and down keys to prevent scrolling ArrowKeyFocusManager while this modal is open
-            KeyboardShortcut.subscribe(arrowUpConfig.shortcutKey, () => {}, arrowUpConfig.descriptionKey, arrowUpConfig.modifiers, true),
-            KeyboardShortcut.subscribe(arrowDownConfig.shortcutKey, () => {}, arrowDownConfig.descriptionKey, arrowDownConfig.modifiers, true),
-        ];
-        setShortcurts(KeyboardShortcut.getDocumentedShortcuts());
-    };
-
-    /*
-     * Unsubscribe all shortcuts that were subscribed when the modal opened
-     */
-    const unsubscribeOpenModalShortcuts = () => {
-        _.each(subscribedOpenModalShortcuts.current, (unsubscribe) => unsubscribe());
-        subscribedOpenModalShortcuts.current = [];
-    };
-
-    /**
-     * Render single row for the Keyboard shortcuts with description
-     * @param {Object} shortcut
-     * @param {Boolean} isFirstRow
-     * @returns {*}
-     */
-    const renderRow = (shortcut, isFirstRow) => (
-        <View
-            style={[styles.keyboardShortcutTableRow, isFirstRow && styles.keyboardShortcutTableFirstRow]}
-            key={shortcut.displayName}
-        >
-            <View style={[styles.dFlex, styles.p2, styles.keyboardShortcutTablePrefix]}>
-                <Text>{shortcut.displayName}</Text>
-            </View>
-            <View style={[styles.flex1, styles.p2, styles.alignSelfStretch]}>
-                <Text>{translate(`keyboardShortcutModal.shortcuts.${shortcut.descriptionKey}`)}</Text>
-            </View>
-        </View>
-    );
-
-    useEffect(() => {
-        const unsubscribeShortcutModal = KeyboardShortcut.subscribe(
-            openShortcutModalConfig.shortcutKey,
-            () => {
-                if (isShortcutsModalOpen) {
-                    return;
-                }
-
-                ModalActions.close();
-                KeyboardShortcutsActions.showKeyboardShortcutModal();
-            },
-            openShortcutModalConfig.descriptionKey,
-            openShortcutModalConfig.modifiers,
-            true,
-        );
-
-        if (isShortcutsModalOpen) {
-            // The modal started open, which can happen if you reload the page when the modal is open.
-            subscribeOpenModalShortcuts();
-        }
-
-        return () => {
-            if (unsubscribeShortcutModal) {
-                unsubscribeShortcutModal();
-            }
-            unsubscribeOpenModalShortcuts();
-        };
-        // We only want this to run on mount
-        // eslint-disable-next-line react-hooks/exhaustive-deps
-    }, []);
-
-    useEffect(() => {
-        if (isShortcutsModalOpen) {
-            subscribeOpenModalShortcuts();
-        } else {
-            // Modal is closing, remove keyboard shortcuts
-            unsubscribeOpenModalShortcuts();
-        }
-        // subscribeOpenModalShortcuts and unsubscribeOpenModalShortcuts functions are not added as dependencies since they don't change between renders
-        // eslint-disable-next-line react-hooks/exhaustive-deps
-    }, [isShortcutsModalOpen]);
-
-    return (
-        <Modal
-            isVisible={isShortcutsModalOpen}
-            type={modalType}
-            innerContainerStyle={{...styles.keyboardShortcutModalContainer, ...StyleUtils.getKeyboardShortcutsModalWidth(isSmallScreenWidth)}}
-            onClose={KeyboardShortcutsActions.hideKeyboardShortcutModal}
-        >
-            <HeaderWithBackButton
-                title={translate('keyboardShortcutModal.title')}
-                shouldShowCloseButton
-                shouldShowBackButton={false}
-                onCloseButtonPress={KeyboardShortcutsActions.hideKeyboardShortcutModal}
-            />
-            <ScrollView style={[styles.p5, styles.pt0]}>
-                <Text style={styles.mb5}>{translate('keyboardShortcutModal.subtitle')}</Text>
-                <View style={[styles.keyboardShortcutTableWrapper]}>
-                    <View style={[styles.alignItemsCenter, styles.keyboardShortcutTableContainer]}>
-                        {_.map(shortcuts, (shortcut, index) => {
-                            const isFirstRow = index === 0;
-                            return renderRow(shortcut, isFirstRow);
-                        })}
-                    </View>
-                </View>
-            </ScrollView>
-        </Modal>
-    );
-}
-
-KeyboardShortcutsModal.propTypes = propTypes;
-KeyboardShortcutsModal.defaultProps = defaultProps;
-KeyboardShortcutsModal.displayName = 'KeyboardShortcutsModal';
-
-export default compose(
-    withWindowDimensions,
-    withLocalize,
-    withOnyx({
-        isShortcutsModalOpen: {
-            key: ONYXKEYS.IS_SHORTCUTS_MODAL_OPEN,
-            initWithStoredValues: false,
-        },
-    }),
-)(KeyboardShortcutsModal);
diff --git a/src/components/LHNOptionsList/OptionRowLHN.js b/src/components/LHNOptionsList/OptionRowLHN.js
index 4e6564646cac..17c2ef0c1998 100644
--- a/src/components/LHNOptionsList/OptionRowLHN.js
+++ b/src/components/LHNOptionsList/OptionRowLHN.js
@@ -26,7 +26,9 @@ import * as ReportUtils from '../../libs/ReportUtils';
 import useLocalize from '../../hooks/useLocalize';
 import Permissions from '../../libs/Permissions';
 import Tooltip from '../Tooltip';
+import DomUtils from '../../libs/DomUtils';
 import useWindowDimensions from '../../hooks/useWindowDimensions';
+import ReportActionComposeFocusManager from '../../libs/ReportActionComposeFocusManager';
 
 const propTypes = {
     /** Style for hovered state */
@@ -167,12 +169,13 @@ function OptionRowLHN(props) {
                             if (e) {
                                 e.preventDefault();
                             }
-
+                            // Enable Composer to focus on clicking the same chat after opening the context menu.
+                            ReportActionComposeFocusManager.focus();
                             props.onSelectRow(optionItem, popoverAnchor);
                         }}
                         onMouseDown={(e) => {
                             // Allow composer blur on right click
-                            if (!e || e.button === 2) {
+                            if (!e) {
                                 return;
                             }
 
@@ -180,7 +183,11 @@ function OptionRowLHN(props) {
                             e.preventDefault();
                         }}
                         testID={optionItem.reportID}
-                        onSecondaryInteraction={(e) => showPopover(e)}
+                        onSecondaryInteraction={(e) => {
+                            showPopover(e);
+                            // Ensure that we blur the composer when opening context menu, so that only one component is focused at a time
+                            DomUtils.getActiveElement().blur();
+                        }}
                         withoutFocusOnSecondaryInteraction
                         activeOpacity={0.8}
                         style={[
diff --git a/src/components/Lottie/Lottie.tsx b/src/components/Lottie/Lottie.tsx
new file mode 100644
index 000000000000..97c7e8fffdd1
--- /dev/null
+++ b/src/components/Lottie/Lottie.tsx
@@ -0,0 +1,14 @@
+import React, {forwardRef} from 'react';
+import LottieView, {LottieViewProps} from 'lottie-react-native';
+import styles from '../../styles/styles';
+
+const Lottie = forwardRef<LottieView, LottieViewProps>((props: LottieViewProps, ref) => (
+    <LottieView
+        // eslint-disable-next-line
+        {...props}
+        ref={ref}
+        style={[styles.aspectRatioLottie(props.source), props.style]}
+    />
+));
+
+export default Lottie;
diff --git a/src/components/Lottie/index.js b/src/components/Lottie/index.js
new file mode 100644
index 000000000000..ec4ae54b355d
--- /dev/null
+++ b/src/components/Lottie/index.js
@@ -0,0 +1,3 @@
+import Lottie from './Lottie';
+
+export default Lottie;
diff --git a/src/components/LottieAnimations.js b/src/components/LottieAnimations.js
index 167b1078c3ca..cc3abd29a0d7 100644
--- a/src/components/LottieAnimations.js
+++ b/src/components/LottieAnimations.js
@@ -1,4 +1,5 @@
 const ExpensifyLounge = require('../../assets/animations/ExpensifyLounge.json');
+const FastMoney = require('../../assets/animations/FastMoney.json');
 const Fireworks = require('../../assets/animations/Fireworks.json');
 const Hands = require('../../assets/animations/Hands.json');
 const PreferencesDJ = require('../../assets/animations/PreferencesDJ.json');
@@ -8,4 +9,4 @@ const SaveTheWorld = require('../../assets/animations/SaveTheWorld.json');
 const Safe = require('../../assets/animations/Safe.json');
 const Magician = require('../../assets/animations/Magician.json');
 
-export {ExpensifyLounge, Fireworks, Hands, PreferencesDJ, ReviewingBankInfo, SaveTheWorld, WorkspacePlanet, Safe, Magician};
+export {ExpensifyLounge, FastMoney, Fireworks, Hands, PreferencesDJ, ReviewingBankInfo, SaveTheWorld, WorkspacePlanet, Safe, Magician};
diff --git a/src/components/MapView/MapView.tsx b/src/components/MapView/MapView.tsx
index a7155082ad86..5f791112da62 100644
--- a/src/components/MapView/MapView.tsx
+++ b/src/components/MapView/MapView.tsx
@@ -1,5 +1,5 @@
 import {View} from 'react-native';
-import {useFocusEffect} from '@react-navigation/native';
+import {useFocusEffect, useNavigation} from '@react-navigation/native';
 import Mapbox, {MapState, MarkerView, setAccessToken} from '@rnmapbox/maps';
 import {forwardRef, memo, useCallback, useEffect, useImperativeHandle, useRef, useState} from 'react';
 import styles from '../../styles/styles';
@@ -14,6 +14,7 @@ import {MapViewProps, MapViewHandle} from './MapViewTypes';
 const MapView = forwardRef<MapViewHandle, MapViewProps>(({accessToken, style, mapPadding, styleURL, pitchEnabled, initialState, waypoints, directionCoordinates, onMapReady}, ref) => {
     const cameraRef = useRef<Mapbox.Camera>(null);
     const [isIdle, setIsIdle] = useState(false);
+    const navigation = useNavigation();
 
     useImperativeHandle(
         ref,
@@ -30,6 +31,7 @@ const MapView = forwardRef<MapViewHandle, MapViewProps>(({accessToken, style, ma
     // When the page regains focus, the onIdled method of the map will set the actual "idled" state,
     // which in turn triggers the callback.
     useFocusEffect(
+        // eslint-disable-next-line rulesdir/prefer-early-return
         useCallback(() => {
             if (waypoints?.length && isIdle) {
                 if (waypoints.length === 1) {
@@ -46,12 +48,16 @@ const MapView = forwardRef<MapViewHandle, MapViewProps>(({accessToken, style, ma
                     cameraRef.current?.fitBounds(northEast, southWest, mapPadding, 1000);
                 }
             }
-            return () => {
-                setIsIdle(false);
-            };
         }, [mapPadding, waypoints, isIdle, directionCoordinates]),
     );
 
+    useEffect(() => {
+        const unsubscribe = navigation.addListener('blur', () => {
+            setIsIdle(false);
+        });
+        return unsubscribe;
+    }, [navigation]);
+
     useEffect(() => {
         setAccessToken(accessToken);
     }, [accessToken]);
diff --git a/src/components/MoneyReportHeader.js b/src/components/MoneyReportHeader.js
index fbd686fac692..6b2b4e16db65 100644
--- a/src/components/MoneyReportHeader.js
+++ b/src/components/MoneyReportHeader.js
@@ -80,7 +80,7 @@ function MoneyReportHeader({session, personalDetails, policy, chatReport, report
         }
         return isManager && !isDraft && !isApproved && !isSettled;
     }, [policyType, isManager, isDraft, isApproved, isSettled]);
-    const shouldShowSubmitButton = isDraft;
+    const shouldShowSubmitButton = isDraft && reportTotal !== 0;
     const shouldShowAnyButton = shouldShowSettlementButton || shouldShowApproveButton || shouldShowSubmitButton;
     const bankAccountRoute = ReportUtils.getBankAccountRoute(chatReport);
     const formattedAmount = CurrencyUtils.convertToDisplayString(reportTotal, moneyRequestReport.currency);
diff --git a/src/components/MoneyRequestConfirmationList.js b/src/components/MoneyRequestConfirmationList.js
index acaa83181bbf..42fa1db48220 100755
--- a/src/components/MoneyRequestConfirmationList.js
+++ b/src/components/MoneyRequestConfirmationList.js
@@ -80,6 +80,12 @@ const propTypes = {
     /** IOU Tag */
     iouTag: PropTypes.string,
 
+    /** IOU isBillable */
+    iouIsBillable: PropTypes.bool,
+
+    /** Callback to toggle the billable state */
+    onToggleBillable: PropTypes.func,
+
     /** Selected participants from MoneyRequestModal with login / accountID */
     selectedParticipants: PropTypes.arrayOf(optionPropTypes).isRequired,
 
@@ -141,8 +147,14 @@ const propTypes = {
     /** Whether the money request is a distance request */
     isDistanceRequest: PropTypes.bool,
 
-    /** Whether the receipt associated with this report is being scanned */
-    isScanning: PropTypes.bool,
+    /** Whether the money request is a scan request */
+    isScanRequest: PropTypes.bool,
+
+    /** Whether we're editing a split bill */
+    isEditingSplitBill: PropTypes.bool,
+
+    /** Whether we should show the amount, date, and merchant fields. */
+    shouldShowSmartScanFields: PropTypes.bool,
 
     /** A flag for verifying that the current report is a sub-report of a workspace chat */
     isPolicyExpenseChat: PropTypes.bool,
@@ -162,6 +174,8 @@ const defaultProps = {
     iouType: CONST.IOU.MONEY_REQUEST_TYPE.REQUEST,
     iouCategory: '',
     iouTag: '',
+    iouIsBillable: false,
+    onToggleBillable: () => {},
     payeePersonalDetails: null,
     canModifyParticipants: false,
     isReadOnly: false,
@@ -182,17 +196,23 @@ const defaultProps = {
     transaction: {},
     mileageRate: {unit: CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES, rate: 0, currency: 'USD'},
     isDistanceRequest: false,
-    isScanning: false,
+    isScanRequest: false,
+    shouldShowSmartScanFields: true,
     isPolicyExpenseChat: false,
 };
 
 function MoneyRequestConfirmationList(props) {
     // Destructure functions from props to pass it as a dependecy to useCallback/useMemo hooks.
     // Prop functions pass props itself as a "this" value to the function which means they change every time props change.
-    const {onSendMoney, onConfirm, onSelectParticipant, transaction} = props;
+    const {onSendMoney, onConfirm, onSelectParticipant} = props;
     const {translate, toLocaleDigit} = useLocalize();
+    const transaction = props.isEditingSplitBill ? props.draftTransaction || props.transaction : props.transaction;
 
     const isTypeRequest = props.iouType === CONST.IOU.MONEY_REQUEST_TYPE.REQUEST;
+    const isSplitBill = props.iouType === CONST.IOU.MONEY_REQUEST_TYPE.SPLIT;
+    const isTypeSend = props.iouType === CONST.IOU.MONEY_REQUEST_TYPE.SEND;
+
+    const isSplitWithScan = isSplitBill && props.isScanRequest;
 
     const {unit, rate, currency} = props.mileageRate;
     const distance = lodashGet(transaction, 'routes.route0.distance', 0);
@@ -202,13 +222,15 @@ function MoneyRequestConfirmationList(props) {
     const shouldShowCategories =
         props.isPolicyExpenseChat && Permissions.canUseCategories(props.betas) && (props.iouCategory || OptionsListUtils.hasEnabledOptions(_.values(props.policyCategories)));
 
-    // A flag for showing SmartScan fields: date, merchant, and amount, only when we don't have a receiptPath (e.g. manual request)
-    // or in the split details page which is ReadOnly
-    const shouldShowSmartScanFields = (!props.receiptPath || props.isReadOnly) && !props.isScanning;
-
     // A flag and a toggler for showing the rest of the form fields
     const [shouldExpandFields, toggleShouldExpandFields] = useReducer((state) => !state, false);
-    const shouldShowAllFields = props.isDistanceRequest || shouldExpandFields || !shouldShowSmartScanFields;
+
+    // Do not hide fields in case of send money request
+    const shouldShowAllFields = props.isDistanceRequest || shouldExpandFields || !props.shouldShowSmartScanFields || isTypeSend || props.isEditingSplitBill;
+
+    // In Send Money and Split Bill with Scan flow, we don't allow the Merchant or Date to be edited. For distance requests, don't show the merchant as there's already another "Distance" menu item
+    const shouldShowDate = shouldShowAllFields && !isTypeSend && !isSplitWithScan;
+    const shouldShowMerchant = shouldShowAllFields && !isTypeSend && !props.isDistanceRequest && !isSplitWithScan;
 
     // Fetches the first tag list of the policy
     const policyTag = PolicyUtils.getTag(props.policyTags);
@@ -232,10 +254,30 @@ function MoneyRequestConfirmationList(props) {
 
     const isFocused = useIsFocused();
     const [formError, setFormError] = useState('');
+
+    const [didConfirm, setDidConfirm] = useState(false);
+    const [didConfirmSplit, setDidConfirmSplit] = useState(false);
+
+    const shouldDisplayFieldError = useMemo(() => {
+        if (!props.isEditingSplitBill) {
+            return false;
+        }
+
+        return (props.hasSmartScanFailed && TransactionUtils.hasMissingSmartscanFields(transaction)) || (didConfirmSplit && TransactionUtils.areRequiredFieldsEmpty(transaction));
+    }, [props.isEditingSplitBill, props.hasSmartScanFailed, transaction, didConfirmSplit]);
+
     useEffect(() => {
+        if (shouldDisplayFieldError && props.hasSmartScanFailed) {
+            setFormError('iou.receiptScanningFailed');
+            return;
+        }
+        if (shouldDisplayFieldError && didConfirmSplit) {
+            setFormError('iou.error.genericSmartscanFailureMessage');
+            return;
+        }
         // reset the form error whenever the screen gains or loses focus
         setFormError('');
-    }, [isFocused]);
+    }, [isFocused, transaction, shouldDisplayFieldError, props.hasSmartScanFailed, didConfirmSplit]);
 
     useEffect(() => {
         if (!shouldCalculateDistanceAmount) {
@@ -262,25 +304,28 @@ function MoneyRequestConfirmationList(props) {
         [props.iouAmount, props.iouCurrencyCode],
     );
 
-    const [didConfirm, setDidConfirm] = useState(false);
+    // If completing a split bill fails, set didConfirm to false to allow the user to edit the fields again
+    if (props.isEditingSplitBill && didConfirm) {
+        setDidConfirm(false);
+    }
 
     const splitOrRequestOptions = useMemo(() => {
         let text;
-        if (props.receiptPath && props.hasMultipleParticipants && props.iouAmount === 0) {
+        if (isSplitBill && props.iouAmount === 0) {
             text = translate('iou.split');
-        } else if (props.receiptPath || isDistanceRequestWithoutRoute) {
+        } else if ((props.receiptPath && isTypeRequest) || isDistanceRequestWithoutRoute) {
             text = translate('iou.request');
         } else {
-            const translationKey = props.hasMultipleParticipants ? 'iou.splitAmount' : 'iou.requestAmount';
+            const translationKey = isSplitBill ? 'iou.splitAmount' : 'iou.requestAmount';
             text = translate(translationKey, {amount: formattedAmount});
         }
         return [
             {
                 text: text[0].toUpperCase() + text.slice(1),
-                value: props.hasMultipleParticipants ? CONST.IOU.MONEY_REQUEST_TYPE.SPLIT : CONST.IOU.MONEY_REQUEST_TYPE.REQUEST,
+                value: props.iouType,
             },
         ];
-    }, [props.hasMultipleParticipants, props.iouAmount, props.receiptPath, translate, formattedAmount, isDistanceRequestWithoutRoute]);
+    }, [isSplitBill, isTypeRequest, props.iouType, props.iouAmount, props.receiptPath, formattedAmount, isDistanceRequestWithoutRoute, translate]);
 
     const selectedParticipants = useMemo(() => _.filter(props.selectedParticipants, (participant) => participant.selected), [props.selectedParticipants]);
     const payeePersonalDetails = useMemo(() => props.payeePersonalDetails || props.currentUserPersonalDetails, [props.payeePersonalDetails, props.currentUserPersonalDetails]);
@@ -417,11 +462,28 @@ function MoneyRequestConfirmationList(props) {
                     return;
                 }
 
+                if (props.isEditingSplitBill && TransactionUtils.areRequiredFieldsEmpty(transaction)) {
+                    setDidConfirmSplit(true);
+                    setFormError('iou.error.genericSmartscanFailureMessage');
+                    return;
+                }
+
                 setDidConfirm(true);
                 onConfirm(selectedParticipants);
             }
         },
-        [selectedParticipants, onSendMoney, onConfirm, props.iouType, props.isDistanceRequest, isDistanceRequestWithoutRoute, props.iouCurrencyCode, props.iouAmount],
+        [
+            selectedParticipants,
+            onSendMoney,
+            onConfirm,
+            props.isEditingSplitBill,
+            props.iouType,
+            props.isDistanceRequest,
+            isDistanceRequestWithoutRoute,
+            props.iouCurrencyCode,
+            props.iouAmount,
+            transaction,
+        ],
     );
 
     const footerContent = useMemo(() => {
@@ -434,6 +496,7 @@ function MoneyRequestConfirmationList(props) {
 
         const button = shouldShowSettlementButton ? (
             <SettlementButton
+                pressOnEnter
                 isDisabled={shouldDisableButton}
                 onPress={confirm}
                 enablePaymentsRoute={ROUTES.IOU_SEND_ENABLE_PAYMENTS}
@@ -494,6 +557,7 @@ function MoneyRequestConfirmationList(props) {
             optionHoveredStyle={canModifyParticipants ? styles.hoveredComponentBG : {}}
             footerContent={footerContent}
             listStyles={props.listStyles}
+            shouldAllowScrollingChildren
         >
             {props.isDistanceRequest && (
                 <View style={styles.confirmationListMapItem}>
@@ -510,15 +574,27 @@ function MoneyRequestConfirmationList(props) {
                     isAuthTokenRequired={!_.isEmpty(receiptThumbnail)}
                 />
             )}
-            {shouldShowSmartScanFields && (
+            {props.shouldShowSmartScanFields && (
                 <MenuItemWithTopDescription
                     shouldShowRightIcon={!props.isReadOnly && !props.isDistanceRequest}
                     title={formattedAmount}
                     description={translate('iou.amount')}
-                    onPress={() => !props.isDistanceRequest && Navigation.navigate(ROUTES.MONEY_REQUEST_AMOUNT.getRoute(props.iouType, props.reportID))}
+                    interactive={!props.isReadOnly}
+                    onPress={() => {
+                        if (props.isDistanceRequest) {
+                            return;
+                        }
+                        if (props.isEditingSplitBill) {
+                            Navigation.navigate(ROUTES.EDIT_SPLIT_BILL.getRoute(props.reportID, props.reportActionID, CONST.EDIT_REQUEST_FIELD.AMOUNT));
+                            return;
+                        }
+                        Navigation.navigate(ROUTES.MONEY_REQUEST_AMOUNT.getRoute(props.iouType, props.reportID));
+                    }}
                     style={[styles.moneyRequestMenuItem, styles.mt2]}
                     titleStyle={styles.moneyRequestConfirmationAmount}
-                    disabled={didConfirm || props.isReadOnly}
+                    disabled={didConfirm}
+                    brickRoadIndicator={shouldDisplayFieldError && TransactionUtils.isAmountMissing(transaction) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : ''}
+                    error={shouldDisplayFieldError && TransactionUtils.isAmountMissing(transaction) ? translate('common.error.enterAmount') : ''}
                 />
             )}
             <MenuItemWithTopDescription
@@ -526,10 +602,17 @@ function MoneyRequestConfirmationList(props) {
                 shouldParseTitle
                 title={props.iouComment}
                 description={translate('common.description')}
-                onPress={() => Navigation.navigate(ROUTES.MONEY_REQUEST_DESCRIPTION.getRoute(props.iouType, props.reportID))}
+                onPress={() => {
+                    if (props.isEditingSplitBill) {
+                        Navigation.navigate(ROUTES.EDIT_SPLIT_BILL.getRoute(props.reportID, props.reportActionID, CONST.EDIT_REQUEST_FIELD.DESCRIPTION));
+                        return;
+                    }
+                    Navigation.navigate(ROUTES.MONEY_REQUEST_DESCRIPTION.getRoute(props.iouType, props.reportID));
+                }}
                 style={[styles.moneyRequestMenuItem]}
                 titleStyle={styles.flex1}
-                disabled={didConfirm || props.isReadOnly}
+                disabled={didConfirm}
+                interactive={!props.isReadOnly}
                 numberOfLinesTitle={2}
             />
             {!shouldShowAllFields && (
@@ -549,15 +632,24 @@ function MoneyRequestConfirmationList(props) {
             )}
             {shouldShowAllFields && (
                 <>
-                    {shouldShowSmartScanFields && (
+                    {shouldShowDate && (
                         <MenuItemWithTopDescription
-                            shouldShowRightIcon={!props.isReadOnly && isTypeRequest}
+                            shouldShowRightIcon={!props.isReadOnly}
                             title={props.iouCreated || format(new Date(), CONST.DATE.FNS_FORMAT_STRING)}
                             description={translate('common.date')}
                             style={[styles.moneyRequestMenuItem]}
                             titleStyle={styles.flex1}
-                            onPress={() => Navigation.navigate(ROUTES.MONEY_REQUEST_DATE.getRoute(props.iouType, props.reportID))}
-                            disabled={didConfirm || props.isReadOnly}
+                            onPress={() => {
+                                if (props.isEditingSplitBill) {
+                                    Navigation.navigate(ROUTES.EDIT_SPLIT_BILL.getRoute(props.reportID, props.reportActionID, CONST.EDIT_REQUEST_FIELD.DATE));
+                                    return;
+                                }
+                                Navigation.navigate(ROUTES.MONEY_REQUEST_DATE.getRoute(props.iouType, props.reportID));
+                            }}
+                            disabled={didConfirm}
+                            interactive={!props.isReadOnly}
+                            brickRoadIndicator={shouldDisplayFieldError && TransactionUtils.isCreatedMissing(transaction) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : ''}
+                            error={shouldDisplayFieldError && TransactionUtils.isCreatedMissing(transaction) ? translate('common.error.enterDate') : ''}
                         />
                     )}
                     {props.isDistanceRequest && (
@@ -568,18 +660,28 @@ function MoneyRequestConfirmationList(props) {
                             style={[styles.moneyRequestMenuItem]}
                             titleStyle={styles.flex1}
                             onPress={() => Navigation.navigate(ROUTES.MONEY_REQUEST_DISTANCE.getRoute(props.iouType, props.reportID))}
-                            disabled={didConfirm || props.isReadOnly || !isTypeRequest}
+                            disabled={didConfirm || !isTypeRequest}
+                            interactive={!props.isReadOnly}
                         />
                     )}
-                    {shouldShowSmartScanFields && (
+                    {shouldShowMerchant && (
                         <MenuItemWithTopDescription
-                            shouldShowRightIcon={!props.isReadOnly && isTypeRequest}
+                            shouldShowRightIcon={!props.isReadOnly}
                             title={props.iouMerchant}
                             description={translate('common.merchant')}
                             style={[styles.moneyRequestMenuItem]}
                             titleStyle={styles.flex1}
-                            onPress={() => Navigation.navigate(ROUTES.MONEY_REQUEST_MERCHANT.getRoute(props.iouType, props.reportID))}
-                            disabled={didConfirm || props.isReadOnly}
+                            onPress={() => {
+                                if (props.isEditingSplitBill) {
+                                    Navigation.navigate(ROUTES.EDIT_SPLIT_BILL.getRoute(props.reportID, props.reportActionID, CONST.EDIT_REQUEST_FIELD.MERCHANT));
+                                    return;
+                                }
+                                Navigation.navigate(ROUTES.MONEY_REQUEST_MERCHANT.getRoute(props.iouType, props.reportID));
+                            }}
+                            disabled={didConfirm}
+                            interactive={!props.isReadOnly}
+                            brickRoadIndicator={shouldDisplayFieldError && TransactionUtils.isMerchantMissing(transaction) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : ''}
+                            error={shouldDisplayFieldError && TransactionUtils.isMerchantMissing(transaction) ? translate('common.error.enterMerchant') : ''}
                         />
                     )}
                     {shouldShowCategories && (
@@ -589,7 +691,8 @@ function MoneyRequestConfirmationList(props) {
                             description={translate('common.category')}
                             onPress={() => Navigation.navigate(ROUTES.MONEY_REQUEST_CATEGORY.getRoute(props.iouType, props.reportID))}
                             style={[styles.moneyRequestMenuItem]}
-                            disabled={didConfirm || props.isReadOnly}
+                            disabled={didConfirm}
+                            interactive={!props.isReadOnly}
                         />
                     )}
                     {shouldShowTags && (
@@ -599,7 +702,8 @@ function MoneyRequestConfirmationList(props) {
                             description={policyTagListName}
                             onPress={() => Navigation.navigate(ROUTES.MONEY_REQUEST_TAG.getRoute(props.iouType, props.reportID))}
                             style={[styles.moneyRequestMenuItem]}
-                            disabled={didConfirm || props.isReadOnly}
+                            disabled={didConfirm}
+                            interactive={!props.isReadOnly}
                         />
                     )}
                     {shouldShowBillable && (
@@ -640,6 +744,9 @@ export default compose(
             key: ({policyID}) => `${ONYXKEYS.COLLECTION.POLICY}${policyID}`,
             selector: DistanceRequestUtils.getDefaultMileageRate,
         },
+        draftTransaction: {
+            key: ({transactionID}) => `${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`,
+        },
         transaction: {
             key: ({transactionID}) => `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`,
         },
diff --git a/src/components/MoneyRequestHeader.js b/src/components/MoneyRequestHeader.js
index 8a2005e64c22..086e1429baef 100644
--- a/src/components/MoneyRequestHeader.js
+++ b/src/components/MoneyRequestHeader.js
@@ -19,6 +19,8 @@ import ConfirmModal from './ConfirmModal';
 import useLocalize from '../hooks/useLocalize';
 import MoneyRequestHeaderStatusBar from './MoneyRequestHeaderStatusBar';
 import * as TransactionUtils from '../libs/TransactionUtils';
+import * as ReportActionsUtils from '../libs/ReportActionsUtils';
+import * as HeaderUtils from '../libs/HeaderUtils';
 import reportActionPropTypes from '../pages/home/report/reportActionPropTypes';
 import transactionPropTypes from './transactionPropTypes';
 import useWindowDimensions from '../hooks/useWindowDimensions';
@@ -80,8 +82,9 @@ function MoneyRequestHeader({session, parentReport, report, parentReportAction,
     }, [parentReportAction, setIsDeleteModalVisible]);
 
     const isScanning = TransactionUtils.hasReceipt(transaction) && TransactionUtils.isReceiptBeingScanned(transaction);
+    const isPending = TransactionUtils.isExpensifyCardTransaction(transaction) && TransactionUtils.isPending(transaction);
 
-    const canModifyRequest = isActionOwner && !isSettled && !isApproved;
+    const canModifyRequest = isActionOwner && !isSettled && !isApproved && !ReportActionsUtils.isDeletedAction(parentReportAction);
 
     useEffect(() => {
         if (canModifyRequest) {
@@ -90,30 +93,31 @@ function MoneyRequestHeader({session, parentReport, report, parentReportAction,
 
         setIsDeleteModalVisible(false);
     }, [canModifyRequest]);
+    const threeDotsMenuItems = [HeaderUtils.getPinMenuItem(report)];
+    if (canModifyRequest) {
+        if (!TransactionUtils.hasReceipt(transaction)) {
+            threeDotsMenuItems.push({
+                icon: Expensicons.Receipt,
+                text: translate('receipt.addReceipt'),
+                onSelected: () => Navigation.navigate(ROUTES.EDIT_REQUEST.getRoute(report.reportID, CONST.EDIT_REQUEST_FIELD.RECEIPT)),
+            });
+        }
+        threeDotsMenuItems.push({
+            icon: Expensicons.Trashcan,
+            text: translate('reportActionContextMenu.deleteAction', {action: parentReportAction}),
+            onSelected: () => setIsDeleteModalVisible(true),
+        });
+    }
 
     return (
         <>
             <View style={[styles.pl0]}>
                 <HeaderWithBackButton
+                    shouldShowBorderBottom={!isScanning && !isPending}
                     shouldShowAvatarWithDisplay
                     shouldShowPinButton={false}
-                    shouldShowThreeDotsButton={canModifyRequest}
-                    threeDotsMenuItems={[
-                        ...(TransactionUtils.hasReceipt(transaction)
-                            ? []
-                            : [
-                                  {
-                                      icon: Expensicons.Receipt,
-                                      text: translate('receipt.addReceipt'),
-                                      onSelected: () => Navigation.navigate(ROUTES.EDIT_REQUEST.getRoute(report.reportID, CONST.EDIT_REQUEST_FIELD.RECEIPT)),
-                                  },
-                              ]),
-                        {
-                            icon: Expensicons.Trashcan,
-                            text: translate('reportActionContextMenu.deleteAction', {action: parentReportAction}),
-                            onSelected: () => setIsDeleteModalVisible(true),
-                        },
-                    ]}
+                    shouldShowThreeDotsButton
+                    threeDotsMenuItems={threeDotsMenuItems}
                     threeDotsAnchorPosition={styles.threeDotsPopoverOffsetNoCloseButton(windowWidth)}
                     report={{
                         ...report,
@@ -125,7 +129,20 @@ function MoneyRequestHeader({session, parentReport, report, parentReportAction,
                     shouldShowBackButton={isSmallScreenWidth}
                     onBackButtonPress={() => Navigation.goBack(ROUTES.HOME, false, true)}
                 />
-                {isScanning && <MoneyRequestHeaderStatusBar />}
+                {isPending && (
+                    <MoneyRequestHeaderStatusBar
+                        title={translate('iou.pending')}
+                        description={translate('iou.transactionPendingText')}
+                        shouldShowBorderBottom={!isScanning}
+                    />
+                )}
+                {isScanning && (
+                    <MoneyRequestHeaderStatusBar
+                        title={translate('iou.receiptStatusTitle')}
+                        description={translate('iou.receiptStatusText')}
+                        shouldShowBorderBottom
+                    />
+                )}
             </View>
             <ConfirmModal
                 title={translate('iou.deleteRequest')}
diff --git a/src/components/MoneyRequestHeaderStatusBar.js b/src/components/MoneyRequestHeaderStatusBar.js
index 499fa1433e05..31a6e9c0e897 100644
--- a/src/components/MoneyRequestHeaderStatusBar.js
+++ b/src/components/MoneyRequestHeaderStatusBar.js
@@ -1,24 +1,35 @@
 import React from 'react';
 import {View} from 'react-native';
+import PropTypes from 'prop-types';
 import styles from '../styles/styles';
-import useLocalize from '../hooks/useLocalize';
 import Text from './Text';
 
-function MoneyRequestHeaderStatusBar() {
-    const {translate} = useLocalize();
+const propTypes = {
+    /** Title displayed in badge */
+    title: PropTypes.string.isRequired,
 
+    /** Banner Description */
+    description: PropTypes.string.isRequired,
+
+    /** Whether we show the border bottom */
+    shouldShowBorderBottom: PropTypes.bool.isRequired,
+};
+
+function MoneyRequestHeaderStatusBar({title, description, shouldShowBorderBottom}) {
+    const borderBottomStyle = shouldShowBorderBottom ? styles.borderBottom : {};
     return (
-        <View style={[styles.dFlex, styles.flexRow, styles.alignItemsCenter, styles.overflowHidden, styles.ph5, styles.pb3, styles.borderBottom, styles.w100]}>
+        <View style={[styles.dFlex, styles.flexRow, styles.alignItemsCenter, styles.flexGrow1, styles.overflowHidden, styles.ph5, styles.pb3, borderBottomStyle]}>
             <View style={[styles.moneyRequestHeaderStatusBarBadge]}>
-                <Text style={[styles.textStrong, styles.textLabel]}>{translate('iou.receiptStatusTitle')}</Text>
+                <Text style={[styles.textStrong, styles.textLabel]}>{title}</Text>
             </View>
             <View style={[styles.flexShrink1]}>
-                <Text style={[styles.textLabelSupporting]}>{translate('iou.receiptStatusText')}</Text>
+                <Text style={[styles.textLabelSupporting]}>{description}</Text>
             </View>
         </View>
     );
 }
 
 MoneyRequestHeaderStatusBar.displayName = 'MoneyRequestHeaderStatusBar';
+MoneyRequestHeaderStatusBar.propTypes = propTypes;
 
 export default MoneyRequestHeaderStatusBar;
diff --git a/src/components/MultipleAvatars.js b/src/components/MultipleAvatars.js
index 27a697fc458c..8866d61d3870 100644
--- a/src/components/MultipleAvatars.js
+++ b/src/components/MultipleAvatars.js
@@ -85,31 +85,8 @@ const avatarSizeToStylesMap = {
         secondAvatarStyles: styles.secondAvatar,
     },
 };
-
-function getContainerStyles(size, isInReportAction) {
-    let containerStyles;
-
-    switch (size) {
-        case CONST.AVATAR_SIZE.SMALL:
-            containerStyles = [styles.emptyAvatarSmall, styles.emptyAvatarMarginSmall];
-            break;
-        case CONST.AVATAR_SIZE.SMALLER:
-            containerStyles = [styles.emptyAvatarSmaller, styles.emptyAvatarMarginSmaller];
-            break;
-        case CONST.AVATAR_SIZE.MEDIUM:
-            containerStyles = [styles.emptyAvatarMedium, styles.emptyAvatarMargin];
-            break;
-        case CONST.AVATAR_SIZE.LARGE:
-            containerStyles = [styles.emptyAvatarLarge, styles.mb2, styles.mr2];
-            break;
-        default:
-            containerStyles = [styles.emptyAvatar, isInReportAction ? styles.emptyAvatarMarginChat : styles.emptyAvatarMargin];
-    }
-
-    return containerStyles;
-}
 function MultipleAvatars(props) {
-    let avatarContainerStyles = getContainerStyles(props.size, props.isInReportAction);
+    let avatarContainerStyles = StyleUtils.getContainerStyles(props.size, props.isInReportAction);
     const {singleAvatarStyle, secondAvatarStyles} = useMemo(() => avatarSizeToStylesMap[props.size] || avatarSizeToStylesMap.default, [props.size]);
 
     const tooltipTexts = props.shouldShowTooltip ? _.pluck(props.icons, 'name') : [''];
diff --git a/src/components/NewDatePicker/CalendarPicker/index.js b/src/components/NewDatePicker/CalendarPicker/index.js
index 1e1ef3c3fad3..d03c36997845 100644
--- a/src/components/NewDatePicker/CalendarPicker/index.js
+++ b/src/components/NewDatePicker/CalendarPicker/index.js
@@ -125,8 +125,8 @@ class CalendarPicker extends React.PureComponent {
         const currentMonthView = this.state.currentDateView.getMonth();
         const currentYearView = this.state.currentDateView.getFullYear();
         const calendarDaysMatrix = generateMonthMatrix(currentYearView, currentMonthView);
-        const hasAvailableDatesNextMonth = moment(this.props.maxDate).endOf('month').startOf('day') > moment(this.state.currentDateView).add(1, 'months');
-        const hasAvailableDatesPrevMonth = moment(this.props.minDate).startOf('day') < moment(this.state.currentDateView).subtract(1, 'months').endOf('month');
+        const hasAvailableDatesNextMonth = moment(this.props.maxDate).endOf('month').endOf('day') >= moment(this.state.currentDateView).add(1, 'months');
+        const hasAvailableDatesPrevMonth = moment(this.props.minDate).startOf('month').startOf('day') <= moment(this.state.currentDateView).subtract(1, 'months');
 
         return (
             <View>
diff --git a/src/components/NewDatePicker/index.js b/src/components/NewDatePicker/index.js
index 98a1a1ce7edf..3201388790c9 100644
--- a/src/components/NewDatePicker/index.js
+++ b/src/components/NewDatePicker/index.js
@@ -1,14 +1,16 @@
-import React from 'react';
+import React, {useEffect, useState} from 'react';
 import {View} from 'react-native';
 import moment from 'moment';
 import PropTypes from 'prop-types';
+import _ from 'lodash';
 import TextInput from '../TextInput';
 import CONST from '../../CONST';
 import styles from '../../styles/styles';
 import * as Expensicons from '../Icon/Expensicons';
-import {propTypes as baseTextInputPropTypes, defaultProps as defaultBaseTextInputPropTypes} from '../TextInput/baseTextInputPropTypes';
+import {defaultProps as defaultBaseTextInputPropTypes, propTypes as baseTextInputPropTypes} from '../TextInput/baseTextInputPropTypes';
 import withLocalize, {withLocalizePropTypes} from '../withLocalize';
 import CalendarPicker from './CalendarPicker';
+import InputWrapper from '../Form/InputWrapper';
 
 const propTypes = {
     /**
@@ -23,6 +25,8 @@ const propTypes = {
      */
     defaultValue: PropTypes.string,
 
+    inputID: PropTypes.string.isRequired,
+
     /** A minimum date of calendar to select */
     minDate: PropTypes.objectOf(Date),
 
@@ -40,66 +44,58 @@ const datePickerDefaultProps = {
     value: undefined,
 };
 
-class NewDatePicker extends React.Component {
-    constructor(props) {
-        super(props);
-
-        this.state = {
-            selectedDate: props.value || props.defaultValue || undefined,
-        };
+function NewDatePicker({containerStyles, defaultValue, disabled, errorText, inputID, isSmallScreenWidth, label, maxDate, minDate, onInputChange, onTouched, placeholder, translate, value}) {
+    const [selectedDate, setSelectedDate] = useState(value || defaultValue || undefined);
 
-        this.setDate = this.setDate.bind(this);
-    }
-
-    componentDidUpdate(prevProps) {
-        if (prevProps.value === this.props.value) {
+    useEffect(() => {
+        if (selectedDate === value || _.isUndefined(value)) {
             return;
         }
-        this.setDate(this.props.value);
-    }
+        setSelectedDate(value);
+    }, [selectedDate, value]);
 
-    /**
-     * Trigger the `onInputChange` handler when the user input has a complete date or is cleared
-     * @param {string} selectedDate
-     */
-    setDate(selectedDate) {
-        this.setState({selectedDate}, () => {
-            this.props.onTouched();
-            this.props.onInputChange(selectedDate);
-        });
-    }
+    useEffect(() => {
+        if (_.isFunction(onTouched)) {
+            onTouched();
+        }
+        if (_.isFunction(onInputChange)) {
+            onInputChange(selectedDate);
+        }
+        // To keep behavior from class component state update callback, we want to run effect only when the selected date is changed.
+        // eslint-disable-next-line react-hooks/exhaustive-deps
+    }, [selectedDate]);
 
-    render() {
-        return (
-            <View style={styles.datePickerRoot}>
-                <View style={[this.props.isSmallScreenWidth ? styles.flex2 : {}, styles.pointerEventsNone]}>
-                    <TextInput
-                        forceActiveLabel
-                        icon={Expensicons.Calendar}
-                        label={this.props.label}
-                        accessibilityLabel={this.props.label}
-                        accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT}
-                        value={this.props.value || ''}
-                        placeholder={this.props.placeholder || this.props.translate('common.dateFormat')}
-                        errorText={this.props.errorText}
-                        containerStyles={this.props.containerStyles}
-                        textInputContainerStyles={[styles.borderColorFocus]}
-                        inputStyle={[styles.pointerEventsNone]}
-                        disabled={this.props.disabled}
-                        editable={false}
-                    />
-                </View>
-                <View style={[styles.datePickerPopover, styles.border]}>
-                    <CalendarPicker
-                        minDate={this.props.minDate}
-                        maxDate={this.props.maxDate}
-                        value={this.state.selectedDate}
-                        onSelected={this.setDate}
-                    />
-                </View>
+    return (
+        <View style={styles.datePickerRoot}>
+            <View style={[isSmallScreenWidth ? styles.flex2 : {}, styles.pointerEventsNone]}>
+                <InputWrapper
+                    InputComponent={TextInput}
+                    inputID={inputID}
+                    forceActiveLabel
+                    icon={Expensicons.Calendar}
+                    label={label}
+                    accessibilityLabel={label}
+                    accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT}
+                    value={value || selectedDate || ''}
+                    placeholder={placeholder || translate('common.dateFormat')}
+                    errorText={errorText}
+                    containerStyles={containerStyles}
+                    textInputContainerStyles={[styles.borderColorFocus]}
+                    inputStyle={[styles.pointerEventsNone]}
+                    disabled={disabled}
+                    editable={false}
+                />
+            </View>
+            <View style={[styles.datePickerPopover, styles.border]}>
+                <CalendarPicker
+                    minDate={minDate}
+                    maxDate={maxDate}
+                    value={selectedDate}
+                    onSelected={setSelectedDate}
+                />
             </View>
-        );
-    }
+        </View>
+    );
 }
 
 NewDatePicker.propTypes = propTypes;
diff --git a/src/components/OptionRow.js b/src/components/OptionRow.js
index 85d3e83c1360..e3ea3acfc2ee 100644
--- a/src/components/OptionRow.js
+++ b/src/components/OptionRow.js
@@ -1,6 +1,6 @@
 import _ from 'underscore';
 import lodashGet from 'lodash/get';
-import React, {Component} from 'react';
+import React, {useState, useEffect, useRef} from 'react';
 import PropTypes from 'prop-types';
 import {View, StyleSheet, InteractionManager} from 'react-native';
 import styles from '../styles/styles';
@@ -101,233 +101,218 @@ const defaultProps = {
     shouldPreventDefaultFocusOnSelectRow: false,
 };
 
-class OptionRow extends Component {
-    constructor(props) {
-        super(props);
-        this.state = {
-            isDisabled: this.props.isDisabled,
-        };
-    }
+function OptionRow(props) {
+    const pressableRef = useRef(null);
+    const [isDisabled, setIsDisabled] = useState(props.isDisabled);
 
-    // It is very important to use shouldComponentUpdate here so SectionList items will not unnecessarily re-render
-    shouldComponentUpdate(nextProps, nextState) {
-        return (
-            this.state.isDisabled !== nextState.isDisabled ||
-            this.props.isDisabled !== nextProps.isDisabled ||
-            this.props.isMultilineSupported !== nextProps.isMultilineSupported ||
-            this.props.isSelected !== nextProps.isSelected ||
-            this.props.shouldHaveOptionSeparator !== nextProps.shouldHaveOptionSeparator ||
-            this.props.selectedStateButtonText !== nextProps.selectedStateButtonText ||
-            this.props.showSelectedState !== nextProps.showSelectedState ||
-            this.props.highlightSelected !== nextProps.highlightSelected ||
-            this.props.showTitleTooltip !== nextProps.showTitleTooltip ||
-            !_.isEqual(this.props.option.icons, nextProps.option.icons) ||
-            this.props.optionIsFocused !== nextProps.optionIsFocused ||
-            this.props.option.text !== nextProps.option.text ||
-            this.props.option.alternateText !== nextProps.option.alternateText ||
-            this.props.option.descriptiveText !== nextProps.option.descriptiveText ||
-            this.props.option.brickRoadIndicator !== nextProps.option.brickRoadIndicator ||
-            this.props.option.shouldShowSubscript !== nextProps.option.shouldShowSubscript ||
-            this.props.option.ownerAccountID !== nextProps.option.ownerAccountID ||
-            this.props.option.subtitle !== nextProps.option.subtitle ||
-            this.props.option.pendingAction !== nextProps.option.pendingAction ||
-            this.props.option.customIcon !== nextProps.option.customIcon
-        );
-    }
+    useEffect(() => {
+        setIsDisabled(props.isDisabled);
+    }, [props.isDisabled]);
 
-    componentDidUpdate(prevProps) {
-        if (this.props.isDisabled === prevProps.isDisabled) {
-            return;
-        }
+    const textStyle = props.optionIsFocused ? styles.sidebarLinkActiveText : styles.sidebarLinkText;
+    const textUnreadStyle = props.boldStyle || props.option.boldStyle ? [textStyle, styles.sidebarLinkTextBold] : [textStyle];
+    const displayNameStyle = StyleUtils.combineStyles(styles.optionDisplayName, textUnreadStyle, props.style, styles.pre, isDisabled ? styles.optionRowDisabled : {});
+    const alternateTextStyle = StyleUtils.combineStyles(
+        textStyle,
+        styles.optionAlternateText,
+        styles.textLabelSupporting,
+        props.style,
+        lodashGet(props.option, 'alternateTextMaxLines', 1) === 1 ? styles.pre : styles.preWrap,
+    );
+    const contentContainerStyles = [styles.flex1];
+    const sidebarInnerRowStyle = StyleSheet.flatten([styles.chatLinkRowPressable, styles.flexGrow1, styles.optionItemAvatarNameWrapper, styles.optionRow, styles.justifyContentCenter]);
+    const hoveredBackgroundColor = props.hoverStyle && props.hoverStyle.backgroundColor ? props.hoverStyle.backgroundColor : props.backgroundColor;
+    const focusedBackgroundColor = styles.sidebarLinkActive.backgroundColor;
+    const isMultipleParticipant = lodashGet(props.option, 'participantsList.length', 0) > 1;
+    const defaultSubscriptSize = props.option.isExpenseRequest ? CONST.AVATAR_SIZE.SMALL_NORMAL : CONST.AVATAR_SIZE.DEFAULT;
 
-        this.setState({isDisabled: this.props.isDisabled});
+    // We only create tooltips for the first 10 users or so since some reports have hundreds of users, causing performance to degrade.
+    const displayNamesWithTooltips = ReportUtils.getDisplayNamesWithTooltips(
+        (props.option.participantsList || (props.option.accountID ? [props.option] : [])).slice(0, 10),
+        isMultipleParticipant,
+    );
+    let subscriptColor = themeColors.appBG;
+    if (props.optionIsFocused) {
+        subscriptColor = focusedBackgroundColor;
     }
 
-    render() {
-        let pressableRef = null;
-        const textStyle = this.props.optionIsFocused ? styles.sidebarLinkActiveText : styles.sidebarLinkText;
-        const textUnreadStyle = this.props.boldStyle || this.props.option.boldStyle ? [textStyle, styles.sidebarLinkTextBold] : [textStyle];
-        const displayNameStyle = StyleUtils.combineStyles(styles.optionDisplayName, textUnreadStyle, this.props.style, styles.pre, this.state.isDisabled ? styles.optionRowDisabled : {});
-        const alternateTextStyle = StyleUtils.combineStyles(
-            textStyle,
-            styles.optionAlternateText,
-            styles.textLabelSupporting,
-            this.props.style,
-            lodashGet(this.props.option, 'alternateTextMaxLines', 1) === 1 ? styles.pre : styles.preWrap,
-        );
-        const contentContainerStyles = [styles.flex1];
-        const sidebarInnerRowStyle = StyleSheet.flatten([styles.chatLinkRowPressable, styles.flexGrow1, styles.optionItemAvatarNameWrapper, styles.optionRow, styles.justifyContentCenter]);
-        const hoveredBackgroundColor = this.props.hoverStyle && this.props.hoverStyle.backgroundColor ? this.props.hoverStyle.backgroundColor : this.props.backgroundColor;
-        const focusedBackgroundColor = styles.sidebarLinkActive.backgroundColor;
-        const isMultipleParticipant = lodashGet(this.props.option, 'participantsList.length', 0) > 1;
-        const defaultSubscriptSize = this.props.option.isExpenseRequest ? CONST.AVATAR_SIZE.SMALL_NORMAL : CONST.AVATAR_SIZE.DEFAULT;
-
-        // We only create tooltips for the first 10 users or so since some reports have hundreds of users, causing performance to degrade.
-        const displayNamesWithTooltips = ReportUtils.getDisplayNamesWithTooltips(
-            (this.props.option.participantsList || (this.props.option.accountID ? [this.props.option] : [])).slice(0, 10),
-            isMultipleParticipant,
-        );
-        let subscriptColor = themeColors.appBG;
-        if (this.props.optionIsFocused) {
-            subscriptColor = focusedBackgroundColor;
-        }
+    return (
+        <OfflineWithFeedback
+            pendingAction={props.option.pendingAction}
+            errors={props.option.allReportErrors}
+            shouldShowErrorMessages={false}
+            needsOffscreenAlphaCompositing
+        >
+            <Hoverable>
+                {(hovered) => (
+                    <PressableWithFeedback
+                        ref={(el) => (pressableRef.current = el)}
+                        onPress={(e) => {
+                            if (!props.onSelectRow) {
+                                return;
+                            }
 
-        return (
-            <OfflineWithFeedback
-                pendingAction={this.props.option.pendingAction}
-                errors={this.props.option.allReportErrors}
-                shouldShowErrorMessages={false}
-                needsOffscreenAlphaCompositing
-            >
-                <Hoverable>
-                    {(hovered) => (
-                        <PressableWithFeedback
-                            ref={(el) => (pressableRef = el)}
-                            onPress={(e) => {
-                                if (!this.props.onSelectRow) {
-                                    return;
-                                }
-
-                                this.setState({isDisabled: true});
-                                if (e) {
-                                    e.preventDefault();
-                                }
-                                let result = this.props.onSelectRow(this.props.option, pressableRef);
-                                if (!(result instanceof Promise)) {
-                                    result = Promise.resolve();
-                                }
-                                InteractionManager.runAfterInteractions(() => {
-                                    result.finally(() => this.setState({isDisabled: this.props.isDisabled}));
-                                });
-                            }}
-                            disabled={this.state.isDisabled}
-                            style={[
-                                styles.flexRow,
-                                styles.alignItemsCenter,
-                                styles.justifyContentBetween,
-                                styles.sidebarLink,
-                                this.props.shouldDisableRowInnerPadding ? null : styles.sidebarLinkInner,
-                                this.props.optionIsFocused ? styles.sidebarLinkActive : null,
-                                this.props.shouldHaveOptionSeparator && styles.borderTop,
-                                !this.props.onSelectRow && !this.props.isDisabled ? styles.cursorDefault : null,
-                                this.props.isSelected && this.props.highlightSelected && styles.optionRowSelected,
-                            ]}
-                            accessibilityLabel={this.props.option.text}
-                            accessibilityRole={CONST.ACCESSIBILITY_ROLE.BUTTON}
-                            hoverDimmingValue={1}
-                            hoverStyle={this.props.hoverStyle}
-                            needsOffscreenAlphaCompositing={lodashGet(this.props.option, 'icons.length', 0) >= 2}
-                            onMouseDown={this.props.shouldPreventDefaultFocusOnSelectRow ? (e) => e.preventDefault() : undefined}
-                        >
-                            <View style={sidebarInnerRowStyle}>
-                                <View style={[styles.flexRow, styles.alignItemsCenter]}>
-                                    {!_.isEmpty(this.props.option.icons) &&
-                                        (this.props.option.shouldShowSubscript ? (
-                                            <SubscriptAvatar
-                                                mainAvatar={this.props.option.icons[0]}
-                                                secondaryAvatar={this.props.option.icons[1]}
-                                                backgroundColor={hovered ? hoveredBackgroundColor : subscriptColor}
-                                                size={defaultSubscriptSize}
-                                            />
-                                        ) : (
-                                            <MultipleAvatars
-                                                icons={this.props.option.icons}
-                                                size={CONST.AVATAR_SIZE.DEFAULT}
-                                                secondAvatarStyle={[StyleUtils.getBackgroundAndBorderStyle(hovered ? hoveredBackgroundColor : subscriptColor)]}
-                                                shouldShowTooltip={this.props.showTitleTooltip && OptionsListUtils.shouldOptionShowTooltip(this.props.option)}
-                                            />
-                                        ))}
-                                    <View style={contentContainerStyles}>
-                                        <DisplayNames
-                                            accessibilityLabel={this.props.translate('accessibilityHints.chatUserDisplayNames')}
-                                            fullTitle={this.props.option.text}
-                                            displayNamesWithTooltips={displayNamesWithTooltips}
-                                            tooltipEnabled={this.props.showTitleTooltip}
-                                            numberOfLines={this.props.isMultilineSupported ? 2 : 1}
-                                            textStyles={displayNameStyle}
-                                            shouldUseFullTitle={
-                                                this.props.option.isChatRoom ||
-                                                this.props.option.isPolicyExpenseChat ||
-                                                this.props.option.isMoneyRequestReport ||
-                                                this.props.option.isThread ||
-                                                this.props.option.isTaskReport
-                                            }
+                            setIsDisabled(true);
+                            if (e) {
+                                e.preventDefault();
+                            }
+                            let result = props.onSelectRow(props.option, pressableRef.current);
+                            if (!(result instanceof Promise)) {
+                                result = Promise.resolve();
+                            }
+                            InteractionManager.runAfterInteractions(() => {
+                                result.finally(() => setIsDisabled(props.isDisabled));
+                            });
+                        }}
+                        disabled={isDisabled}
+                        style={[
+                            styles.flexRow,
+                            styles.alignItemsCenter,
+                            styles.justifyContentBetween,
+                            styles.sidebarLink,
+                            props.shouldDisableRowInnerPadding ? null : styles.sidebarLinkInner,
+                            props.optionIsFocused ? styles.sidebarLinkActive : null,
+                            props.shouldHaveOptionSeparator && styles.borderTop,
+                            !props.onSelectRow && !props.isDisabled ? styles.cursorDefault : null,
+                            props.isSelected && props.highlightSelected && styles.optionRowSelected,
+                        ]}
+                        accessibilityLabel={props.option.text}
+                        accessibilityRole={CONST.ACCESSIBILITY_ROLE.BUTTON}
+                        hoverDimmingValue={1}
+                        hoverStyle={props.hoverStyle}
+                        needsOffscreenAlphaCompositing={lodashGet(props.option, 'icons.length', 0) >= 2}
+                        onMouseDown={props.shouldPreventDefaultFocusOnSelectRow ? (e) => e.preventDefault() : undefined}
+                    >
+                        <View style={sidebarInnerRowStyle}>
+                            <View style={[styles.flexRow, styles.alignItemsCenter]}>
+                                {!_.isEmpty(props.option.icons) &&
+                                    (props.option.shouldShowSubscript ? (
+                                        <SubscriptAvatar
+                                            mainAvatar={props.option.icons[0]}
+                                            secondaryAvatar={props.option.icons[1]}
+                                            backgroundColor={hovered ? hoveredBackgroundColor : subscriptColor}
+                                            size={defaultSubscriptSize}
                                         />
-                                        {this.props.option.alternateText ? (
-                                            <Text
-                                                style={alternateTextStyle}
-                                                numberOfLines={lodashGet(this.props.option, 'alternateTextMaxLines', 1)}
-                                            >
-                                                {this.props.option.alternateText}
-                                            </Text>
-                                        ) : null}
-                                    </View>
-                                    {this.props.option.descriptiveText ? (
-                                        <View style={[styles.flexWrap, styles.pl2]}>
-                                            <Text style={[styles.textLabel]}>{this.props.option.descriptiveText}</Text>
-                                        </View>
+                                    ) : (
+                                        <MultipleAvatars
+                                            icons={props.option.icons}
+                                            size={CONST.AVATAR_SIZE.DEFAULT}
+                                            secondAvatarStyle={[StyleUtils.getBackgroundAndBorderStyle(hovered ? hoveredBackgroundColor : subscriptColor)]}
+                                            shouldShowTooltip={props.showTitleTooltip && OptionsListUtils.shouldOptionShowTooltip(props.option)}
+                                        />
+                                    ))}
+                                <View style={contentContainerStyles}>
+                                    <DisplayNames
+                                        accessibilityLabel={props.translate('accessibilityHints.chatUserDisplayNames')}
+                                        fullTitle={props.option.text}
+                                        displayNamesWithTooltips={displayNamesWithTooltips}
+                                        tooltipEnabled={props.showTitleTooltip}
+                                        numberOfLines={props.isMultilineSupported ? 2 : 1}
+                                        textStyles={displayNameStyle}
+                                        shouldUseFullTitle={
+                                            props.option.isChatRoom ||
+                                            props.option.isPolicyExpenseChat ||
+                                            props.option.isMoneyRequestReport ||
+                                            props.option.isThread ||
+                                            props.option.isTaskReport
+                                        }
+                                    />
+                                    {props.option.alternateText ? (
+                                        <Text
+                                            style={alternateTextStyle}
+                                            numberOfLines={lodashGet(props.option, 'alternateTextMaxLines', 1)}
+                                        >
+                                            {props.option.alternateText}
+                                        </Text>
                                     ) : null}
-                                    {this.props.option.brickRoadIndicator === CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR && (
-                                        <View style={[styles.alignItemsCenter, styles.justifyContentCenter]}>
-                                            <Icon
-                                                src={Expensicons.DotIndicator}
-                                                fill={themeColors.danger}
-                                            />
-                                        </View>
-                                    )}
-                                    {this.props.showSelectedState && (
-                                        <>
-                                            {this.props.shouldShowSelectedStateAsButton && !this.props.isSelected ? (
-                                                <Button
-                                                    style={[styles.pl2]}
-                                                    text={this.props.selectedStateButtonText}
-                                                    onPress={() => this.props.onSelectedStatePressed(this.props.option)}
-                                                    small
-                                                />
-                                            ) : (
-                                                <PressableWithFeedback
-                                                    onPress={() => this.props.onSelectedStatePressed(this.props.option)}
-                                                    disabled={this.state.isDisabled}
-                                                    accessibilityRole={CONST.ACCESSIBILITY_ROLE.CHECKBOX}
-                                                    accessibilityLabel={CONST.ACCESSIBILITY_ROLE.CHECKBOX}
-                                                >
-                                                    <SelectCircle isChecked={this.props.isSelected} />
-                                                </PressableWithFeedback>
-                                            )}
-                                        </>
-                                    )}
-                                    {this.props.isSelected && this.props.highlightSelected && (
-                                        <View style={styles.defaultCheckmarkWrapper}>
-                                            <Icon
-                                                src={Expensicons.Checkmark}
-                                                fill={themeColors.iconSuccessFill}
-                                            />
-                                        </View>
-                                    )}
                                 </View>
-                            </View>
-                            {Boolean(this.props.option.customIcon) && (
-                                <View
-                                    style={[styles.flexRow, styles.alignItemsCenter]}
-                                    accessible={false}
-                                >
-                                    <View>
+                                {props.option.descriptiveText ? (
+                                    <View style={[styles.flexWrap, styles.pl2]}>
+                                        <Text style={[styles.textLabel]}>{props.option.descriptiveText}</Text>
+                                    </View>
+                                ) : null}
+                                {props.option.brickRoadIndicator === CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR && (
+                                    <View style={[styles.alignItemsCenter, styles.justifyContentCenter]}>
                                         <Icon
-                                            src={lodashGet(this.props.option, 'customIcon.src', '')}
-                                            fill={lodashGet(this.props.option, 'customIcon.color')}
+                                            src={Expensicons.DotIndicator}
+                                            fill={themeColors.danger}
                                         />
                                     </View>
+                                )}
+                                {props.showSelectedState && (
+                                    <>
+                                        {props.shouldShowSelectedStateAsButton && !props.isSelected ? (
+                                            <Button
+                                                style={[styles.pl2]}
+                                                text={props.selectedStateButtonText}
+                                                onPress={() => props.onSelectedStatePressed(props.option)}
+                                                small
+                                            />
+                                        ) : (
+                                            <PressableWithFeedback
+                                                onPress={() => props.onSelectedStatePressed(props.option)}
+                                                disabled={isDisabled}
+                                                accessibilityRole={CONST.ACCESSIBILITY_ROLE.CHECKBOX}
+                                                accessibilityLabel={CONST.ACCESSIBILITY_ROLE.CHECKBOX}
+                                            >
+                                                <SelectCircle isChecked={props.isSelected} />
+                                            </PressableWithFeedback>
+                                        )}
+                                    </>
+                                )}
+                                {props.isSelected && props.highlightSelected && (
+                                    <View style={styles.defaultCheckmarkWrapper}>
+                                        <Icon
+                                            src={Expensicons.Checkmark}
+                                            fill={themeColors.iconSuccessFill}
+                                        />
+                                    </View>
+                                )}
+                            </View>
+                        </View>
+                        {Boolean(props.option.customIcon) && (
+                            <View
+                                style={[styles.flexRow, styles.alignItemsCenter]}
+                                accessible={false}
+                            >
+                                <View>
+                                    <Icon
+                                        src={lodashGet(props.option, 'customIcon.src', '')}
+                                        fill={lodashGet(props.option, 'customIcon.color')}
+                                    />
                                 </View>
-                            )}
-                        </PressableWithFeedback>
-                    )}
-                </Hoverable>
-            </OfflineWithFeedback>
-        );
-    }
+                            </View>
+                        )}
+                    </PressableWithFeedback>
+                )}
+            </Hoverable>
+        </OfflineWithFeedback>
+    );
 }
 
 OptionRow.propTypes = propTypes;
 OptionRow.defaultProps = defaultProps;
 
-export default withLocalize(OptionRow);
+export default React.memo(
+    withLocalize(OptionRow),
+    (prevProps, nextProps) =>
+        prevProps.isDisabled === nextProps.isDisabled &&
+        prevProps.isMultilineSupported === nextProps.isMultilineSupported &&
+        prevProps.isSelected === nextProps.isSelected &&
+        prevProps.shouldHaveOptionSeparator === nextProps.shouldHaveOptionSeparator &&
+        prevProps.selectedStateButtonText === nextProps.selectedStateButtonText &&
+        prevProps.showSelectedState === nextProps.showSelectedState &&
+        prevProps.highlightSelected === nextProps.highlightSelected &&
+        prevProps.showTitleTooltip === nextProps.showTitleTooltip &&
+        !_.isEqual(prevProps.option.icons, nextProps.option.icons) &&
+        prevProps.optionIsFocused === nextProps.optionIsFocused &&
+        prevProps.option.text === nextProps.option.text &&
+        prevProps.option.alternateText === nextProps.option.alternateText &&
+        prevProps.option.descriptiveText === nextProps.option.descriptiveText &&
+        prevProps.option.brickRoadIndicator === nextProps.option.brickRoadIndicator &&
+        prevProps.option.shouldShowSubscript === nextProps.option.shouldShowSubscript &&
+        prevProps.option.ownerAccountID === nextProps.option.ownerAccountID &&
+        prevProps.option.subtitle === nextProps.option.subtitle &&
+        prevProps.option.pendingAction === nextProps.option.pendingAction &&
+        prevProps.option.customIcon === nextProps.option.customIcon,
+);
diff --git a/src/components/OptionsList/BaseOptionsList.js b/src/components/OptionsList/BaseOptionsList.js
index 23049b65f198..91fd77dbea30 100644
--- a/src/components/OptionsList/BaseOptionsList.js
+++ b/src/components/OptionsList/BaseOptionsList.js
@@ -66,6 +66,9 @@ function BaseOptionsList({
     isDisabled,
     innerRef,
     isRowMultilineSupported,
+    isLoadingNewOptions,
+    nestedScrollEnabled,
+    bounces,
 }) {
     const flattenedData = useRef();
     const previousSections = usePrevious(sections);
@@ -245,18 +248,21 @@ function BaseOptionsList({
                 <OptionsListSkeletonView shouldAnimate />
             ) : (
                 <>
-                    {headerMessage ? (
+                    {/* If we are loading new options we will avoid showing any header message. This is mostly because one of the header messages says there are no options. */}
+                    {/* This is misleading because we might be in the process of loading fresh options from the server. */}
+                    {!isLoadingNewOptions && headerMessage ? (
                         <View style={[styles.ph5, styles.pb5]}>
                             <Text style={[styles.textLabel, styles.colorMuted]}>{headerMessage}</Text>
                         </View>
                     ) : null}
                     <SectionList
                         ref={innerRef}
-                        nestedScrollEnabled
                         style={listStyles}
                         indicatorStyle="white"
                         keyboardShouldPersistTaps="always"
                         keyboardDismissMode={keyboardDismissMode}
+                        nestedScrollEnabled={nestedScrollEnabled}
+                        scrollEnabled={nestedScrollEnabled}
                         onScrollBeginDrag={onScrollBeginDrag}
                         onScroll={onScroll}
                         contentContainerStyle={contentContainerStyles}
@@ -273,6 +279,7 @@ function BaseOptionsList({
                         windowSize={5}
                         viewabilityConfig={{viewAreaCoveragePercentThreshold: 95}}
                         onViewableItemsChanged={onViewableItemsChanged}
+                        bounces={bounces}
                     />
                 </>
             )}
diff --git a/src/components/OptionsList/optionsListPropTypes.js b/src/components/OptionsList/optionsListPropTypes.js
index 165cec699b80..caabf39a41bb 100644
--- a/src/components/OptionsList/optionsListPropTypes.js
+++ b/src/components/OptionsList/optionsListPropTypes.js
@@ -87,6 +87,15 @@ const propTypes = {
 
     /** Whether to wrap large text up to 2 lines */
     isRowMultilineSupported: PropTypes.bool,
+
+    /** Whether we are loading new options */
+    isLoadingNewOptions: PropTypes.bool,
+
+    /** Whether nested scroll of options is enabled, true by default */
+    nestedScrollEnabled: PropTypes.bool,
+
+    /** Whether the list should have a bounce effect on iOS */
+    bounces: PropTypes.bool,
 };
 
 const defaultProps = {
@@ -113,6 +122,9 @@ const defaultProps = {
     shouldPreventDefaultFocusOnSelectRow: false,
     showScrollIndicator: false,
     isRowMultilineSupported: false,
+    isLoadingNewOptions: false,
+    nestedScrollEnabled: true,
+    bounces: true,
 };
 
 export {propTypes, defaultProps};
diff --git a/src/components/OptionsSelector/BaseOptionsSelector.js b/src/components/OptionsSelector/BaseOptionsSelector.js
index 65f4bc64cee0..4ffddd700359 100755
--- a/src/components/OptionsSelector/BaseOptionsSelector.js
+++ b/src/components/OptionsSelector/BaseOptionsSelector.js
@@ -2,7 +2,7 @@ import _ from 'underscore';
 import lodashGet from 'lodash/get';
 import React, {Component} from 'react';
 import PropTypes from 'prop-types';
-import {View} from 'react-native';
+import {ScrollView, View} from 'react-native';
 import Button from '../Button';
 import FixedFooter from '../FixedFooter';
 import OptionsList from '../OptionsList';
@@ -17,6 +17,7 @@ import {propTypes as optionsSelectorPropTypes, defaultProps as optionsSelectorDe
 import setSelection from '../../libs/setSelection';
 import compose from '../../libs/compose';
 import getPlatform from '../../libs/getPlatform';
+import FormHelpMessage from '../FormHelpMessage';
 
 const propTypes = {
     /** padding bottom style of safe area */
@@ -72,7 +73,7 @@ class BaseOptionsSelector extends Component {
         this.subscribeToKeyboardShortcut();
 
         if (this.props.isFocused && this.props.autoFocus && this.textInput) {
-            setTimeout(() => {
+            this.focusTimeout = setTimeout(() => {
                 this.textInput.focus();
             }, CONST.ANIMATED_TRANSITION);
         }
@@ -392,6 +393,7 @@ class BaseOptionsSelector extends Component {
                 blurOnSubmit={Boolean(this.state.allOptions.length)}
                 spellCheck={false}
                 shouldInterceptSwipe={this.props.shouldTextInputInterceptSwipe}
+                isLoading={this.props.isLoadingNewOptions}
             />
         );
         const optionsList = (
@@ -428,9 +430,23 @@ class BaseOptionsSelector extends Component {
                 isLoading={!this.props.shouldShowOptions}
                 showScrollIndicator={this.props.showScrollIndicator}
                 isRowMultilineSupported={this.props.isRowMultilineSupported}
+                isLoadingNewOptions={this.props.isLoadingNewOptions}
                 shouldPreventDefaultFocusOnSelectRow={this.props.shouldPreventDefaultFocusOnSelectRow}
+                nestedScrollEnabled={this.props.nestedScrollEnabled}
+                bounces={!this.props.shouldTextInputAppearBelowOptions || !this.props.shouldAllowScrollingChildren}
             />
         );
+
+        const optionsAndInputsBelowThem = (
+            <>
+                <View style={[styles.flexGrow0, styles.flexShrink1, styles.flexBasisAuto, styles.w100, styles.flexRow]}>{optionsList}</View>
+                <View style={this.props.shouldUseStyleForChildren ? [styles.ph5, styles.pv5, styles.flexGrow1, styles.flexShrink0] : []}>
+                    {this.props.children}
+                    {this.props.shouldShowTextInput && textInput}
+                </View>
+            </>
+        );
+
         return (
             <ArrowKeyFocusManager
                 disabledIndexes={this.disabledOptionsIndexes}
@@ -440,19 +456,37 @@ class BaseOptionsSelector extends Component {
                 shouldResetIndexOnEndReached={false}
             >
                 <View style={[styles.flexGrow1, styles.flexShrink1, styles.flexBasisAuto]}>
-                    {this.props.shouldTextInputAppearBelowOptions ? (
-                        <>
-                            <View style={[styles.flexGrow0, styles.flexShrink1, styles.flexBasisAuto, styles.w100, styles.flexRow]}>{optionsList}</View>
-                            <View style={this.props.shouldUseStyleForChildren ? [styles.ph5, styles.pv5, styles.flexGrow1, styles.flexShrink0] : []}>
-                                {this.props.children}
-                                {this.props.shouldShowTextInput && textInput}
-                            </View>
-                        </>
-                    ) : (
+                    {/*
+                     * The OptionsList component uses a SectionList which uses a VirtualizedList internally.
+                     * VirtualizedList cannot be directly nested within ScrollViews of the same orientation.
+                     * To work around this, we wrap the OptionsList component with a horizontal ScrollView.
+                     */}
+                    {this.props.shouldTextInputAppearBelowOptions && this.props.shouldAllowScrollingChildren && (
+                        <ScrollView contentContainerStyle={[styles.flexGrow1]}>
+                            <ScrollView
+                                horizontal
+                                bounces={false}
+                                contentContainerStyle={[styles.flex1, styles.flexColumn]}
+                            >
+                                {optionsAndInputsBelowThem}
+                            </ScrollView>
+                        </ScrollView>
+                    )}
+
+                    {this.props.shouldTextInputAppearBelowOptions && !this.props.shouldAllowScrollingChildren && optionsAndInputsBelowThem}
+
+                    {!this.props.shouldTextInputAppearBelowOptions && (
                         <>
                             <View style={this.props.shouldUseStyleForChildren ? [styles.ph5, styles.pb3] : []}>
                                 {this.props.children}
                                 {this.props.shouldShowTextInput && textInput}
+                                {Boolean(this.props.textInputAlert) && (
+                                    <FormHelpMessage
+                                        message={this.props.textInputAlert}
+                                        style={[styles.mb3]}
+                                        isError={false}
+                                    />
+                                )}
                             </View>
                             {optionsList}
                         </>
diff --git a/src/components/OptionsSelector/optionsSelectorPropTypes.js b/src/components/OptionsSelector/optionsSelectorPropTypes.js
index 9e028510e608..bfef8ca3a925 100644
--- a/src/components/OptionsSelector/optionsSelectorPropTypes.js
+++ b/src/components/OptionsSelector/optionsSelectorPropTypes.js
@@ -128,6 +128,12 @@ const propTypes = {
 
     /** Whether the text input should intercept swipes or not */
     shouldTextInputInterceptSwipe: PropTypes.bool,
+
+    /** Whether we should allow the view wrapping the nested children to be scrollable */
+    shouldAllowScrollingChildren: PropTypes.bool,
+
+    /** Whether nested scroll of options is enabled, true by default */
+    nestedScrollEnabled: PropTypes.bool,
 };
 
 const defaultProps = {
@@ -165,6 +171,8 @@ const defaultProps = {
     isRowMultilineSupported: false,
     initialFocusedIndex: undefined,
     shouldTextInputInterceptSwipe: false,
+    shouldAllowScrollingChildren: false,
+    nestedScrollEnabled: true,
 };
 
 export {propTypes, defaultProps};
diff --git a/src/components/PDFView/PDFPasswordForm.js b/src/components/PDFView/PDFPasswordForm.js
index 42d2202de8b7..58a4e64a28a5 100644
--- a/src/components/PDFView/PDFPasswordForm.js
+++ b/src/components/PDFView/PDFPasswordForm.js
@@ -50,6 +50,8 @@ function PDFPasswordForm({isFocused, isPasswordInvalid, shouldShowLoadingIndicat
     const [shouldShowForm, setShouldShowForm] = useState(false);
     const textInputRef = useRef(null);
 
+    const focusTimeoutRef = useRef(null);
+
     const errorText = useMemo(() => {
         if (isPasswordInvalid) {
             return translate('attachmentView.passwordIncorrect');
@@ -67,7 +69,19 @@ function PDFPasswordForm({isFocused, isPasswordInvalid, shouldShowLoadingIndicat
         if (!textInputRef.current) {
             return;
         }
-        textInputRef.current.focus();
+        /**
+         * We recommend using setTimeout to wait for the animation to finish and then focus on the input
+         * Relevant thread: https://expensify.slack.com/archives/C01GTK53T8Q/p1694660990479979
+         */
+        focusTimeoutRef.current = setTimeout(() => {
+            textInputRef.current.focus();
+        }, CONST.ANIMATED_TRANSITION);
+        return () => {
+            if (!focusTimeoutRef.current) {
+                return;
+            }
+            clearTimeout(focusTimeoutRef.current);
+        };
     }, [isFocused]);
 
     const updatePassword = (newPassword) => {
diff --git a/src/components/QRShare/QRShareWithDownload/index.js b/src/components/QRShare/QRShareWithDownload/index.js
index 665115823357..b16f22dc6483 100644
--- a/src/components/QRShare/QRShareWithDownload/index.js
+++ b/src/components/QRShare/QRShareWithDownload/index.js
@@ -3,6 +3,7 @@ import fileDownload from '../../../libs/fileDownload';
 import QRShare from '..';
 import {qrShareDefaultProps, qrSharePropTypes} from '../propTypes';
 import getQrCodeFileName from '../getQrCodeDownloadFileName';
+import {withNetwork} from '../../OnyxProvider';
 
 class QRShareWithDownload extends Component {
     qrShareRef = React.createRef();
@@ -31,6 +32,7 @@ class QRShareWithDownload extends Component {
                 ref={this.qrShareRef}
                 // eslint-disable-next-line react/jsx-props-no-spreading
                 {...this.props}
+                logo={this.props.network.isOffline ? null : this.props.logo}
             />
         );
     }
@@ -38,4 +40,4 @@ class QRShareWithDownload extends Component {
 QRShareWithDownload.propTypes = qrSharePropTypes;
 QRShareWithDownload.defaultProps = qrShareDefaultProps;
 
-export default QRShareWithDownload;
+export default withNetwork()(QRShareWithDownload);
diff --git a/src/components/QRShare/QRShareWithDownload/index.native.js b/src/components/QRShare/QRShareWithDownload/index.native.js
index 6154b8137bf3..66fe7a6762d0 100644
--- a/src/components/QRShare/QRShareWithDownload/index.native.js
+++ b/src/components/QRShare/QRShareWithDownload/index.native.js
@@ -4,6 +4,7 @@ import fileDownload from '../../../libs/fileDownload';
 import QRShare from '..';
 import {qrShareDefaultProps, qrSharePropTypes} from '../propTypes';
 import getQrCodeFileName from '../getQrCodeDownloadFileName';
+import {withNetwork} from '../../OnyxProvider';
 
 class QRShareWithDownload extends Component {
     qrCodeScreenshotRef = React.createRef();
@@ -24,6 +25,7 @@ class QRShareWithDownload extends Component {
                 <QRShare
                     // eslint-disable-next-line react/jsx-props-no-spreading
                     {...this.props}
+                    logo={this.props.network.isOffline ? null : this.props.logo}
                 />
             </ViewShot>
         );
@@ -32,4 +34,4 @@ class QRShareWithDownload extends Component {
 QRShareWithDownload.propTypes = qrSharePropTypes;
 QRShareWithDownload.defaultProps = qrShareDefaultProps;
 
-export default QRShareWithDownload;
+export default withNetwork()(QRShareWithDownload);
diff --git a/src/components/RNTextInput.js b/src/components/RNTextInput.js
index 37020204a6ee..5a790cde91d7 100644
--- a/src/components/RNTextInput.js
+++ b/src/components/RNTextInput.js
@@ -21,6 +21,7 @@ function RNTextInput(props) {
     return (
         <AnimatedTextInput
             allowFontScaling={false}
+            textBreakStrategy="simple"
             ref={(ref) => {
                 if (!_.isFunction(props.forwardedRef)) {
                     return;
diff --git a/src/components/ReimbursementAccountLoadingIndicator.js b/src/components/ReimbursementAccountLoadingIndicator.js
index 21aac35f4005..bd3011a74ffb 100644
--- a/src/components/ReimbursementAccountLoadingIndicator.js
+++ b/src/components/ReimbursementAccountLoadingIndicator.js
@@ -1,7 +1,7 @@
 import React from 'react';
 import {StyleSheet, View} from 'react-native';
 import PropTypes from 'prop-types';
-import Lottie from 'lottie-react-native';
+import Lottie from './Lottie';
 import * as LottieAnimations from './LottieAnimations';
 import styles from '../styles/styles';
 import useLocalize from '../hooks/useLocalize';
diff --git a/src/components/ReportActionItem/MoneyRequestAction.js b/src/components/ReportActionItem/MoneyRequestAction.js
index b4a5e010b7a8..136e6a753e67 100644
--- a/src/components/ReportActionItem/MoneyRequestAction.js
+++ b/src/components/ReportActionItem/MoneyRequestAction.js
@@ -117,6 +117,7 @@ function MoneyRequestAction({
 
     let shouldShowPendingConversionMessage = false;
     const isDeletedParentAction = ReportActionsUtils.isDeletedParentAction(action);
+    const isReversedTransaction = ReportActionsUtils.isReversedTransaction(action);
     if (
         !_.isEmpty(iouReport) &&
         !_.isEmpty(reportActions) &&
@@ -128,8 +129,8 @@ function MoneyRequestAction({
         shouldShowPendingConversionMessage = IOUUtils.isIOUReportPendingCurrencyConversion(iouReport);
     }
 
-    return isDeletedParentAction ? (
-        <RenderHTML html={`<comment>${translate('parentReportAction.deletedRequest')}</comment>`} />
+    return isDeletedParentAction || isReversedTransaction ? (
+        <RenderHTML html={`<comment>${translate(isReversedTransaction ? 'parentReportAction.reversedTransaction' : 'parentReportAction.deletedRequest')}</comment>`} />
     ) : (
         <MoneyRequestPreview
             iouReportID={requestReportID}
diff --git a/src/components/ReportActionItem/MoneyRequestPreview.js b/src/components/ReportActionItem/MoneyRequestPreview.js
index b4101d9b5721..720fa292de53 100644
--- a/src/components/ReportActionItem/MoneyRequestPreview.js
+++ b/src/components/ReportActionItem/MoneyRequestPreview.js
@@ -164,7 +164,8 @@ function MoneyRequestPreview(props) {
     const isScanning = hasReceipt && TransactionUtils.isReceiptBeingScanned(props.transaction);
     const hasFieldErrors = TransactionUtils.hasMissingSmartscanFields(props.transaction);
     const isDistanceRequest = TransactionUtils.isDistanceRequest(props.transaction);
-    const isSettled = ReportUtils.isSettled(props.iouReport);
+    const isExpensifyCardTransaction = TransactionUtils.isExpensifyCardTransaction(props.transaction);
+    const isSettled = ReportUtils.isSettled(props.iouReport.reportID);
 
     // Show the merchant for IOUs and expenses only if they are custom or not related to scanning smartscan
     const shouldShowMerchant =
@@ -174,6 +175,9 @@ function MoneyRequestPreview(props) {
     const receiptImages = hasReceipt ? [ReceiptUtils.getThumbnailAndImageURIs(props.transaction.receipt.source, props.transaction.filename || '')] : [];
 
     const getSettledMessage = () => {
+        if (isExpensifyCardTransaction) {
+            return props.translate('common.done');
+        }
         switch (lodashGet(props.action, 'originalMessage.paymentType', '')) {
             case CONST.IOU.PAYMENT_TYPE.EXPENSIFY:
                 return props.translate('iou.settledExpensify');
@@ -199,20 +203,26 @@ function MoneyRequestPreview(props) {
             return props.translate('iou.split');
         }
 
+        if (isExpensifyCardTransaction) {
+            let message = props.translate('iou.card');
+            if (TransactionUtils.isPending(props.transaction)) {
+                message += ` • ${props.translate('iou.pending')}`;
+            }
+            return message;
+        }
+
         let message = props.translate('iou.cash');
         if (ReportUtils.isControlPolicyExpenseReport(props.iouReport) && ReportUtils.isReportApproved(props.iouReport) && !ReportUtils.isSettled(props.iouReport)) {
             message += ` • ${props.translate('iou.approved')}`;
         } else if (props.iouReport.isWaitingOnBankAccount) {
             message += ` • ${props.translate('iou.pending')}`;
-        } else if (ReportUtils.isSettled(props.iouReport.reportID)) {
-            message += ` • ${props.translate('iou.settledExpensify')}`;
         }
         return message;
     };
 
     const getDisplayAmountText = () => {
         if (isDistanceRequest) {
-            return CurrencyUtils.convertToDisplayString(TransactionUtils.getAmount(props.transaction), props.transaction.currency);
+            return requestAmount ? CurrencyUtils.convertToDisplayString(requestAmount, props.transaction.currency) : props.translate('common.tbd');
         }
 
         if (isScanning) {
@@ -242,7 +252,8 @@ function MoneyRequestPreview(props) {
                     {hasReceipt && (
                         <ReportActionItemImages
                             images={receiptImages}
-                            isHovered={isScanning}
+                            isHovered={props.isHovered || isScanning}
+                            size={1}
                         />
                     )}
                     {_.isEmpty(props.transaction) &&
@@ -252,20 +263,7 @@ function MoneyRequestPreview(props) {
                     ) : (
                         <View style={styles.moneyRequestPreviewBoxText}>
                             <View style={[styles.flexRow]}>
-                                <View style={[styles.flex1, styles.flexRow, styles.alignItemsCenter]}>
-                                    <Text style={[styles.textLabelSupporting, styles.mb1, styles.lh20]}>{getPreviewHeaderText()}</Text>
-                                    {isSettled && (
-                                        <>
-                                            <Icon
-                                                src={Expensicons.DotIndicator}
-                                                width={4}
-                                                height={4}
-                                                additionalStyles={[styles.mr1, styles.ml1]}
-                                            />
-                                            <Text style={[styles.textLabelSupporting, styles.mb1, styles.lh20]}>{getSettledMessage()}</Text>
-                                        </>
-                                    )}
-                                </View>
+                                <Text style={[styles.textLabelSupporting, styles.lh20, styles.mb1]}>{getPreviewHeaderText() + (isSettled ? ` • ${getSettledMessage()}` : '')}</Text>
                                 {hasFieldErrors && (
                                     <Icon
                                         src={Expensicons.DotIndicator}
diff --git a/src/components/ReportActionItem/MoneyRequestView.js b/src/components/ReportActionItem/MoneyRequestView.js
index 079bc64d96bf..289cd70c3332 100644
--- a/src/components/ReportActionItem/MoneyRequestView.js
+++ b/src/components/ReportActionItem/MoneyRequestView.js
@@ -20,6 +20,7 @@ import * as OptionsListUtils from '../../libs/OptionsListUtils';
 import * as ReportActionsUtils from '../../libs/ReportActionsUtils';
 import * as StyleUtils from '../../styles/StyleUtils';
 import * as PolicyUtils from '../../libs/PolicyUtils';
+import * as CardUtils from '../../libs/CardUtils';
 import CONST from '../../CONST';
 import * as Expensicons from '../Icon/Expensicons';
 import iouReportPropTypes from '../../pages/iouReportPropTypes';
@@ -90,13 +91,24 @@ function MoneyRequestView({report, betas, parentReport, policyCategories, should
         billable: transactionBillable,
         category: transactionCategory,
         tag: transactionTag,
+        originalAmount: transactionOriginalAmount,
+        originalCurrency: transactionOriginalCurrency,
+        cardID: transactionCardID,
     } = ReportUtils.getTransactionDetails(transaction);
     const isEmptyMerchant =
         transactionMerchant === '' || transactionMerchant === CONST.TRANSACTION.UNKNOWN_MERCHANT || transactionMerchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT;
-    const formattedTransactionAmount = transactionAmount && transactionCurrency && CurrencyUtils.convertToDisplayString(transactionAmount, transactionCurrency);
+    const isDistanceRequest = TransactionUtils.isDistanceRequest(transaction);
+    let formattedTransactionAmount = transactionAmount ? CurrencyUtils.convertToDisplayString(transactionAmount, transactionCurrency) : '';
+    if (isDistanceRequest && !formattedTransactionAmount) {
+        formattedTransactionAmount = translate('common.tbd');
+    }
+    const formattedOriginalAmount = transactionOriginalAmount && transactionOriginalCurrency && CurrencyUtils.convertToDisplayString(transactionOriginalAmount, transactionOriginalCurrency);
+    const isExpensifyCardTransaction = TransactionUtils.isExpensifyCardTransaction(transaction);
+    const cardProgramName = isExpensifyCardTransaction ? CardUtils.getCardDescription(transactionCardID) : '';
 
     const isSettled = ReportUtils.isSettled(moneyRequestReport.reportID);
-    const canEdit = ReportUtils.canEditMoneyRequest(parentReportAction);
+    const canEdit = ReportUtils.canEditMoneyRequest(parentReportAction) && !isExpensifyCardTransaction;
+
     // A flag for verifying that the current report is a sub-report of a workspace chat
     const isPolicyExpenseChat = useMemo(() => ReportUtils.isPolicyExpenseChat(ReportUtils.getRootParentReport(report)), [report]);
 
@@ -109,11 +121,24 @@ function MoneyRequestView({report, betas, parentReport, policyCategories, should
     const shouldShowTag = isPolicyExpenseChat && Permissions.canUseTags(betas) && (transactionTag || OptionsListUtils.hasEnabledOptions(lodashValues(policyTagsList)));
     const shouldShowBillable = isPolicyExpenseChat && Permissions.canUseTags(betas) && (transactionBillable || !lodashGet(policy, 'disabledFields.defaultBillable', true));
 
-    let description = `${translate('iou.amount')} • ${translate('iou.cash')}`;
-    if (isSettled) {
-        description += ` • ${translate('iou.settledExpensify')}`;
-    } else if (report.isWaitingOnBankAccount) {
-        description += ` • ${translate('iou.pending')}`;
+    let amountDescription = `${translate('iou.amount')}`;
+
+    if (isExpensifyCardTransaction) {
+        if (formattedOriginalAmount) {
+            amountDescription += ` • ${translate('iou.original')} ${formattedOriginalAmount}`;
+        }
+        if (TransactionUtils.isPending(transaction)) {
+            amountDescription += ` • ${translate('iou.pending')}`;
+        }
+    } else {
+        if (!isDistanceRequest) {
+            amountDescription += ` • ${translate('iou.cash')}`;
+        }
+        if (isSettled) {
+            amountDescription += ` • ${translate('iou.settledExpensify')}`;
+        } else if (report.isWaitingOnBankAccount) {
+            amountDescription += ` • ${translate('iou.pending')}`;
+        }
     }
 
     // A temporary solution to hide the transaction detail
@@ -130,7 +155,6 @@ function MoneyRequestView({report, betas, parentReport, policyCategories, should
         hasErrors = canEdit && TransactionUtils.hasMissingSmartscanFields(transaction);
     }
 
-    const isDistanceRequest = TransactionUtils.isDistanceRequest(transaction);
     const pendingAction = lodashGet(transaction, 'pendingAction');
     const getPendingFieldAction = (fieldPath) => lodashGet(transaction, fieldPath) || pendingAction;
 
@@ -156,7 +180,7 @@ function MoneyRequestView({report, betas, parentReport, policyCategories, should
                     title={formattedTransactionAmount ? formattedTransactionAmount.toString() : ''}
                     shouldShowTitleIcon={isSettled}
                     titleIcon={Expensicons.Checkmark}
-                    description={description}
+                    description={amountDescription}
                     titleStyle={styles.newKansasLarge}
                     interactive={canEdit}
                     shouldShowRightIcon={canEdit}
@@ -178,18 +202,6 @@ function MoneyRequestView({report, betas, parentReport, policyCategories, should
                     numberOfLinesTitle={0}
                 />
             </OfflineWithFeedback>
-            <OfflineWithFeedback pendingAction={getPendingFieldAction('pendingFields.created')}>
-                <MenuItemWithTopDescription
-                    description={translate('common.date')}
-                    title={transactionDate}
-                    interactive={canEdit}
-                    shouldShowRightIcon={canEdit}
-                    titleStyle={styles.flex1}
-                    onPress={() => Navigation.navigate(ROUTES.EDIT_REQUEST.getRoute(report.reportID, CONST.EDIT_REQUEST_FIELD.DATE))}
-                    brickRoadIndicator={hasErrors && transactionDate === '' ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : ''}
-                    error={hasErrors && transactionDate === '' ? translate('common.error.enterDate') : ''}
-                />
-            </OfflineWithFeedback>
             {isDistanceRequest ? (
                 <OfflineWithFeedback pendingAction={lodashGet(transaction, 'pendingFields.waypoints') || lodashGet(transaction, 'pendingAction')}>
                     <MenuItemWithTopDescription
@@ -215,6 +227,18 @@ function MoneyRequestView({report, betas, parentReport, policyCategories, should
                     />
                 </OfflineWithFeedback>
             )}
+            <OfflineWithFeedback pendingAction={getPendingFieldAction('pendingFields.created')}>
+                <MenuItemWithTopDescription
+                    description={translate('common.date')}
+                    title={transactionDate}
+                    interactive={canEdit}
+                    shouldShowRightIcon={canEdit}
+                    titleStyle={styles.flex1}
+                    onPress={() => Navigation.navigate(ROUTES.EDIT_REQUEST.getRoute(report.reportID, CONST.EDIT_REQUEST_FIELD.DATE))}
+                    brickRoadIndicator={hasErrors && transactionDate === '' ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : ''}
+                    error={hasErrors && transactionDate === '' ? translate('common.error.enterDate') : ''}
+                />
+            </OfflineWithFeedback>
             {shouldShowCategory && (
                 <OfflineWithFeedback pendingAction={lodashGet(transaction, 'pendingFields.category') || lodashGet(transaction, 'pendingAction')}>
                     <MenuItemWithTopDescription
@@ -239,6 +263,16 @@ function MoneyRequestView({report, betas, parentReport, policyCategories, should
                     />
                 </OfflineWithFeedback>
             )}
+            {isExpensifyCardTransaction ? (
+                <OfflineWithFeedback pendingAction={getPendingFieldAction('pendingFields.cardID')}>
+                    <MenuItemWithTopDescription
+                        description={translate('iou.card')}
+                        title={cardProgramName}
+                        titleStyle={styles.flex1}
+                        interactive={canEdit}
+                    />
+                </OfflineWithFeedback>
+            ) : null}
             {shouldShowBillable && (
                 <View style={[styles.flexRow, styles.mb4, styles.justifyContentBetween, styles.alignItemsCenter, styles.ml5, styles.mr8]}>
                     <Text color={!transactionBillable ? themeColors.textSupporting : undefined}>{translate('common.billable')}</Text>
diff --git a/src/components/ReportActionItem/ReportActionItemImages.js b/src/components/ReportActionItem/ReportActionItemImages.js
index 7e6287720952..773c66d6e7b6 100644
--- a/src/components/ReportActionItem/ReportActionItemImages.js
+++ b/src/components/ReportActionItem/ReportActionItemImages.js
@@ -5,6 +5,8 @@ import _ from 'underscore';
 import styles from '../../styles/styles';
 import Text from '../Text';
 import ReportActionItemImage from './ReportActionItemImage';
+import * as StyleUtils from '../../styles/StyleUtils';
+import variables from '../../styles/variables';
 
 const propTypes = {
     /** array of image and thumbnail URIs */
@@ -45,13 +47,27 @@ const defaultProps = {
  */
 
 function ReportActionItemImages({images, size, total, isHovered}) {
-    const numberOfShownImages = size || images.length;
-    const shownImages = images.slice(0, size);
+    // Calculate the number of images to be shown, limited by the value of 'size' (if defined)
+    // or the total number of images.
+    const numberOfShownImages = Math.min(size || images.length, images.length);
+    const shownImages = images.slice(0, numberOfShownImages);
     const remaining = (total || images.length) - size;
+    const MAX_REMAINING = 9;
+
+    // The height varies depending on the number of images we are displaying.
+    let heightStyle = {};
+    if (numberOfShownImages === 1) {
+        heightStyle = StyleUtils.getHeight(variables.reportActionImagesSingleImageHeight);
+    } else if (numberOfShownImages === 2) {
+        heightStyle = StyleUtils.getHeight(variables.reportActionImagesDoubleImageHeight);
+    } else if (numberOfShownImages > 2) {
+        heightStyle = StyleUtils.getHeight(variables.reportActionImagesMultipleImageHeight);
+    }
 
     const hoverStyle = isHovered ? styles.reportPreviewBoxHoverBorder : undefined;
+
     return (
-        <View style={[styles.reportActionItemImages, hoverStyle]}>
+        <View style={[styles.reportActionItemImages, hoverStyle, heightStyle]}>
             {_.map(shownImages, ({thumbnail, image}, index) => {
                 const isLastImage = index === numberOfShownImages - 1;
 
@@ -68,8 +84,10 @@ function ReportActionItemImages({images, size, total, isHovered}) {
                             image={image}
                         />
                         {isLastImage && remaining > 0 && (
-                            <View style={[styles.reportActionItemImagesMore, hoverStyle]}>
-                                <Text>+{remaining}</Text>
+                            <View style={[styles.reportActionItemImagesMoreContainer]}>
+                                <View style={[styles.reportActionItemImagesMore, isHovered ? styles.reportActionItemImagesMoreHovered : {}]} />
+                                <View style={[styles.reportActionItemImagesMoreCornerTriangle, isHovered ? styles.reportActionItemImagesMoreCornerTriangleHighlighted : {}]} />
+                                <Text style={[styles.reportActionItemImagesMoreText, styles.textStrong]}>{remaining > MAX_REMAINING ? `${MAX_REMAINING}+` : `+${remaining}`}</Text>
                             </View>
                         )}
                     </View>
diff --git a/src/components/ReportActionItem/ReportPreview.js b/src/components/ReportActionItem/ReportPreview.js
index d89d1e02d7a9..d4d839183e07 100644
--- a/src/components/ReportActionItem/ReportPreview.js
+++ b/src/components/ReportActionItem/ReportPreview.js
@@ -127,7 +127,7 @@ function ReportPreview(props) {
     const hasErrors = hasReceipts && ReportUtils.hasMissingSmartscanFields(props.iouReportID);
     const lastThreeTransactionsWithReceipts = ReportUtils.getReportPreviewDisplayTransactions(props.action);
     const lastThreeReceipts = _.map(lastThreeTransactionsWithReceipts, ({receipt, filename}) => ReceiptUtils.getThumbnailAndImageURIs(receipt.source, filename || ''));
-
+    const hasNonReimbursableTransactions = ReportUtils.hasNonReimbursableTransactions(props.iouReportID);
     const hasOnlyOneReceiptRequest = numberOfRequests === 1 && hasReceipts;
     const previewSubtitle = hasOnlyOneReceiptRequest
         ? TransactionUtils.getMerchant(transactionsWithReceipts[0])
@@ -136,6 +136,8 @@ function ReportPreview(props) {
               scanningReceipts: numberOfScanningReceipts,
           });
 
+    const shouldShowSubmitButton = isReportDraft && reportTotal !== 0;
+
     const getDisplayAmount = () => {
         if (reportTotal) {
             return CurrencyUtils.convertToDisplayString(reportTotal, props.iouReport.currency);
@@ -164,7 +166,11 @@ function ReportPreview(props) {
             return props.translate('iou.managerApproved', {manager: ReportUtils.getDisplayNameForParticipant(managerID, true)});
         }
         const managerName = isPolicyExpenseChat ? ReportUtils.getPolicyName(props.chatReport) : ReportUtils.getDisplayNameForParticipant(managerID, true);
-        return props.translate(iouSettled || props.iouReport.isWaitingOnBankAccount ? 'iou.payerPaid' : 'iou.payerOwes', {payer: managerName});
+        let paymentVerb = hasNonReimbursableTransactions ? 'iou.payerSpent' : 'iou.payerOwes';
+        if (iouSettled || props.iouReport.isWaitingOnBankAccount) {
+            paymentVerb = 'iou.payerPaid';
+        }
+        return props.translate(paymentVerb, {payer: managerName});
     };
 
     const bankAccountRoute = ReportUtils.getBankAccountRoute(props.chatReport);
@@ -189,9 +195,9 @@ function ReportPreview(props) {
                     {hasReceipts && (
                         <ReportActionItemImages
                             images={lastThreeReceipts}
-                            size={3}
                             total={transactionsWithReceipts.length}
                             isHovered={props.isHovered || isScanning}
+                            size={CONST.RECEIPT.MAX_REPORT_PREVIEW_RECEIPTS}
                         />
                     )}
                     <View style={styles.reportPreviewBoxBody}>
@@ -235,19 +241,19 @@ function ReportPreview(props) {
                                 onPress={(paymentType) => IOU.payMoneyRequest(paymentType, props.chatReport, props.iouReport)}
                                 enablePaymentsRoute={ROUTES.ENABLE_PAYMENTS}
                                 addBankAccountRoute={bankAccountRoute}
-                                style={[styles.requestPreviewBox]}
+                                style={[styles.mt3]}
                                 anchorAlignment={{
                                     horizontal: CONST.MODAL.ANCHOR_ORIGIN_HORIZONTAL.LEFT,
                                     vertical: CONST.MODAL.ANCHOR_ORIGIN_VERTICAL.BOTTOM,
                                 }}
                             />
                         )}
-                        {isReportDraft && (
+                        {shouldShowSubmitButton && (
                             <Button
                                 medium
                                 success={props.chatReport.isOwnPolicyExpenseChat}
                                 text={translate('common.submit')}
-                                style={styles.requestPreviewBox}
+                                style={styles.mt3}
                                 onPress={() => IOU.submitReport(props.iouReport)}
                             />
                         )}
diff --git a/src/components/Section.js b/src/components/Section.js
index cd390be0d00b..c0b07d1c1453 100644
--- a/src/components/Section.js
+++ b/src/components/Section.js
@@ -14,6 +14,9 @@ const propTypes = {
     /** The text to display in the title of the section */
     title: PropTypes.string.isRequired,
 
+    /** The text to display in the subtitle of the section */
+    subtitle: PropTypes.string,
+
     /** The icon to display along with the title */
     icon: PropTypes.func,
 
@@ -27,6 +30,18 @@ const propTypes = {
     // eslint-disable-next-line react/forbid-prop-types
     containerStyles: PropTypes.arrayOf(PropTypes.object),
 
+    /** Customize the Section container */
+    // eslint-disable-next-line react/forbid-prop-types
+    titleStyles: PropTypes.arrayOf(PropTypes.object),
+
+    /** Customize the Section container */
+    // eslint-disable-next-line react/forbid-prop-types
+    subtitleStyles: PropTypes.arrayOf(PropTypes.object),
+
+    /** Customize the Section container */
+    // eslint-disable-next-line react/forbid-prop-types
+    childrenStyles: PropTypes.arrayOf(PropTypes.object),
+
     /** Customize the Icon container */
     // eslint-disable-next-line react/forbid-prop-types
     iconContainerStyles: PropTypes.arrayOf(PropTypes.object),
@@ -39,21 +54,24 @@ const defaultProps = {
     IconComponent: null,
     containerStyles: [],
     iconContainerStyles: [],
+    titleStyles: [],
+    subtitleStyles: [],
+    childrenStyles: [],
+    subtitle: null,
 };
 
-function Section(props) {
-    const IconComponent = props.IconComponent;
+function Section({children, childrenStyles, containerStyles, icon, IconComponent, iconContainerStyles, menuItems, subtitle, subtitleStyles, title, titleStyles}) {
     return (
         <>
-            <View style={[styles.pageWrapper, styles.cardSection, ...props.containerStyles]}>
-                <View style={[styles.flexRow, styles.alignItemsCenter, styles.w100]}>
+            <View style={[styles.pageWrapper, styles.cardSection, ...containerStyles]}>
+                <View style={[styles.flexRow, styles.alignItemsCenter, styles.w100, ...titleStyles]}>
                     <View style={[styles.flexShrink1]}>
-                        <Text style={[styles.textHeadline, styles.cardSectionTitle]}>{props.title}</Text>
+                        <Text style={[styles.textHeadline, styles.cardSectionTitle]}>{title}</Text>
                     </View>
-                    <View style={[styles.flexGrow1, styles.flexRow, styles.justifyContentEnd, ...props.iconContainerStyles]}>
-                        {Boolean(props.icon) && (
+                    <View style={[styles.flexGrow1, styles.flexRow, styles.justifyContentEnd, ...iconContainerStyles]}>
+                        {Boolean(icon) && (
                             <Icon
-                                src={props.icon}
+                                src={icon}
                                 height={68}
                                 width={68}
                             />
@@ -62,9 +80,15 @@ function Section(props) {
                     </View>
                 </View>
 
-                <View style={[styles.w100]}>{props.children}</View>
+                {Boolean(subtitle) && (
+                    <View style={[styles.flexRow, styles.alignItemsCenter, styles.w100, styles.mt4, ...subtitleStyles]}>
+                        <Text style={styles.textNormal}>{subtitle}</Text>
+                    </View>
+                )}
+
+                <View style={[styles.w100, ...childrenStyles]}>{children}</View>
 
-                <View style={[styles.w100]}>{Boolean(props.menuItems) && <MenuItemList menuItems={props.menuItems} />}</View>
+                <View style={[styles.w100]}>{Boolean(menuItems) && <MenuItemList menuItems={menuItems} />}</View>
             </View>
         </>
     );
diff --git a/src/components/SelectionList/BaseSelectionList.js b/src/components/SelectionList/BaseSelectionList.js
index 86ed932ab0d6..fdb1f92ca73b 100644
--- a/src/components/SelectionList/BaseSelectionList.js
+++ b/src/components/SelectionList/BaseSelectionList.js
@@ -22,8 +22,8 @@ import Log from '../../libs/Log';
 import OptionsListSkeletonView from '../OptionsListSkeletonView';
 import useActiveElement from '../../hooks/useActiveElement';
 import BaseListItem from './BaseListItem';
-import themeColors from '../../styles/themes/default';
 import ArrowKeyFocusManager from '../ArrowKeyFocusManager';
+import themeColors from '../../styles/themes/default';
 
 const propTypes = {
     ...keyboardStatePropTypes,
@@ -426,7 +426,7 @@ function BaseSelectionList({
                                     onScrollBeginDrag={onScrollBeginDrag}
                                     keyExtractor={(item) => item.keyForList}
                                     extraData={focusedIndex}
-                                    indicatorStyle={themeColors.selectionListIndicatorColor}
+                                    indicatorStyle={themeColors.white}
                                     keyboardShouldPersistTaps="always"
                                     showsVerticalScrollIndicator={showScrollIndicator}
                                     initialNumToRender={12}
diff --git a/src/components/SettlementButton.js b/src/components/SettlementButton.js
index 3bf8aa4c111d..043c27de9a48 100644
--- a/src/components/SettlementButton.js
+++ b/src/components/SettlementButton.js
@@ -20,6 +20,9 @@ const propTypes = {
     /** Callback to execute when this button is pressed. Receives a single payment type argument. */
     onPress: PropTypes.func.isRequired,
 
+    /** Call the onPress function on main button when Enter key is pressed */
+    pressOnEnter: PropTypes.bool,
+
     /** Settlement currency type */
     currency: PropTypes.string,
 
@@ -75,6 +78,7 @@ const propTypes = {
 const defaultProps = {
     isLoading: false,
     isDisabled: false,
+    pressOnEnter: false,
     addBankAccountRoute: '',
     addDebitCardRoute: '',
     currency: CONST.CURRENCY.USD,
@@ -111,6 +115,7 @@ function SettlementButton({
     formattedAmount,
     nvp_lastPaymentMethod,
     onPress,
+    pressOnEnter,
     policyID,
     shouldShowPaymentOptions,
     style,
@@ -209,6 +214,7 @@ function SettlementButton({
                     isDisabled={isDisabled}
                     isLoading={isLoading}
                     onPress={(event, iouPaymentType) => selectPaymentType(event, iouPaymentType, triggerKYCFlow)}
+                    pressOnEnter={pressOnEnter}
                     options={paymentButtonOptions}
                     style={style}
                     buttonSize={buttonSize}
diff --git a/src/components/SignInButtons/GoogleSignIn/index.native.js b/src/components/SignInButtons/GoogleSignIn/index.native.js
index 9e638f0723cf..099fbfde22fd 100644
--- a/src/components/SignInButtons/GoogleSignIn/index.native.js
+++ b/src/components/SignInButtons/GoogleSignIn/index.native.js
@@ -25,14 +25,18 @@ function googleSignInRequest() {
         .then((response) => response.idToken)
         .then((token) => Session.beginGoogleSignIn(token))
         .catch((error) => {
+            // Handle unexpected error shape
+            if (error === undefined || error.code === undefined) {
+                Log.alert(`[Google Sign In] Google sign in failed: ${error}`);
+            }
+            /** The logged code is useful for debugging any new errors that are not specifically handled. To decode, see:
+              - The common status codes documentation: https://developers.google.com/android/reference/com/google/android/gms/common/api/CommonStatusCodes
+              - The Google Sign In codes documentation: https://developers.google.com/android/reference/com/google/android/gms/auth/api/signin/GoogleSignInStatusCodes
+            */
             if (error.code === statusCodes.SIGN_IN_CANCELLED) {
-                Log.alert('[Google Sign In] Google sign in cancelled', true, {error});
-            } else if (error.code === statusCodes.IN_PROGRESS) {
-                Log.alert('[Google Sign In] Google sign in already in progress', true, {error});
-            } else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
-                Log.alert('[Google Sign In] Google play services not available or outdated', true, {error});
+                Log.info('[Google Sign In] Google Sign In cancelled');
             } else {
-                Log.alert('[Google Sign In] Unknown Google sign in error', true, {error});
+                Log.alert(`[Google Sign In] Error Code: ${error.code}. ${error.message}`, {}, false);
             }
         });
 }
diff --git a/src/components/SplashScreenHider/index.native.js b/src/components/SplashScreenHider/index.native.js
index f4c234bb877d..dbfac3331484 100644
--- a/src/components/SplashScreenHider/index.native.js
+++ b/src/components/SplashScreenHider/index.native.js
@@ -18,6 +18,9 @@ const defaultProps = {
 function SplashScreenHider(props) {
     const {onHide} = props;
 
+    const logoSizeRatio = BootSplash.logoSizeRatio || 1;
+    const navigationBarHeight = BootSplash.navigationBarHeight || 0;
+
     const opacity = useSharedValue(1);
     const scale = useSharedValue(1);
 
@@ -64,15 +67,15 @@ function SplashScreenHider(props) {
                 opacityStyle,
                 {
                     // Apply negative margins to center the logo on window (instead of screen)
-                    marginBottom: -(BootSplash.navigationBarHeight || 0),
+                    marginBottom: -navigationBarHeight,
                 },
             ]}
         >
             <Reanimated.View style={scaleStyle}>
                 <Logo
                     viewBox="0 0 80 80"
-                    width={100}
-                    height={100}
+                    width={100 * logoSizeRatio}
+                    height={100 * logoSizeRatio}
                 />
             </Reanimated.View>
         </Reanimated.View>
diff --git a/src/components/SubscriptAvatar.js b/src/components/SubscriptAvatar.js
index 4102ae5ec043..66d9812d994e 100644
--- a/src/components/SubscriptAvatar.js
+++ b/src/components/SubscriptAvatar.js
@@ -43,17 +43,10 @@ const defaultProps = {
 function SubscriptAvatar({size, backgroundColor, mainAvatar, secondaryAvatar, noMargin, showTooltip}) {
     const isSmall = size === CONST.AVATAR_SIZE.SMALL;
     const subscriptStyle = size === CONST.AVATAR_SIZE.SMALL_NORMAL ? styles.secondAvatarSubscriptSmallNormal : styles.secondAvatarSubscript;
-    const containerStyle = isSmall ? styles.emptyAvatarSmall : styles.emptyAvatar;
-    // Default the margin style to what is normal for small or normal sized avatars
-    let marginStyle = isSmall ? styles.emptyAvatarMarginSmall : styles.emptyAvatarMargin;
-
-    // Some views like the chat view require that there be no margins
-    if (noMargin) {
-        marginStyle = {};
-    }
+    const containerStyle = StyleUtils.getContainerStyles(size);
 
     return (
-        <View style={[containerStyle, marginStyle]}>
+        <View style={[containerStyle, noMargin ? styles.mr0 : {}]}>
             <UserDetailsTooltip
                 shouldRender={showTooltip}
                 accountID={lodashGet(mainAvatar, 'id', -1)}
diff --git a/src/components/TabSelector/TabSelectorItem.js b/src/components/TabSelector/TabSelectorItem.js
index 6611b8acf914..04a576f9dbf0 100644
--- a/src/components/TabSelector/TabSelectorItem.js
+++ b/src/components/TabSelector/TabSelectorItem.js
@@ -54,13 +54,13 @@ function TabSelectorItem({icon, title, onPress, backgroundColor, activeOpacity,
                 <Animated.View style={[styles.tabSelectorButton, StyleSheet.absoluteFill, styles.tabBackground(hovered, isFocused, backgroundColor)]}>
                     <TabIcon
                         icon={icon}
-                        activeOpacity={styles.tabOpacity(hovered, isFocused, activeOpacity, inactiveOpacity)}
-                        inactiveOpacity={styles.tabOpacity(hovered, isFocused, inactiveOpacity, activeOpacity)}
+                        activeOpacity={styles.tabOpacity(hovered, isFocused, activeOpacity, inactiveOpacity).opacity}
+                        inactiveOpacity={styles.tabOpacity(hovered, isFocused, inactiveOpacity, activeOpacity).opacity}
                     />
                     <TabLabel
                         title={title}
-                        activeOpacity={styles.tabOpacity(hovered, isFocused, activeOpacity, inactiveOpacity)}
-                        inactiveOpacity={styles.tabOpacity(hovered, isFocused, inactiveOpacity, activeOpacity)}
+                        activeOpacity={styles.tabOpacity(hovered, isFocused, activeOpacity, inactiveOpacity).opacity}
+                        inactiveOpacity={styles.tabOpacity(hovered, isFocused, inactiveOpacity, activeOpacity).opacity}
                     />
                 </Animated.View>
             )}
diff --git a/src/components/TextInput/BaseTextInput.js b/src/components/TextInput/BaseTextInput.js
index 91591de7f045..9bfdc79fad68 100644
--- a/src/components/TextInput/BaseTextInput.js
+++ b/src/components/TextInput/BaseTextInput.js
@@ -1,6 +1,6 @@
 import _ from 'underscore';
 import React, {useState, useRef, useEffect, useCallback, useMemo} from 'react';
-import {Animated, View, StyleSheet} from 'react-native';
+import {Animated, View, StyleSheet, ActivityIndicator} from 'react-native';
 import Str from 'expensify-common/lib/str';
 import RNTextInput from '../RNTextInput';
 import TextInputLabel from './TextInputLabel';
@@ -47,19 +47,11 @@ function BaseTextInput(props) {
             return;
         }
 
-        let focusTimeout;
         if (props.shouldDelayFocus) {
-            focusTimeout = setTimeout(() => input.current.focus(), CONST.ANIMATED_TRANSITION);
-            return;
+            const focusTimeout = setTimeout(() => input.current.focus(), CONST.ANIMATED_TRANSITION);
+            return () => clearTimeout(focusTimeout);
         }
         input.current.focus();
-
-        return () => {
-            if (!focusTimeout) {
-                return;
-            }
-            clearTimeout(focusTimeout);
-        };
         // We only want this to run on mount
         // eslint-disable-next-line react-hooks/exhaustive-deps
     }, []);
@@ -243,17 +235,17 @@ function BaseTextInput(props) {
     For other platforms, explicitly remove `lineHeight` from single-line inputs
     to prevent long text from disappearing once it exceeds the input space.
     See https://github.com/Expensify/App/issues/13802 */
+
     const lineHeight = useMemo(() => {
-        if (Browser.isSafari() && _.isArray(props.inputStyle)) {
+        if ((Browser.isSafari() || Browser.isMobileChrome()) && _.isArray(props.inputStyle)) {
             const lineHeightValue = _.find(props.inputStyle, (f) => f.lineHeight !== undefined);
             if (lineHeightValue) {
                 return lineHeightValue.lineHeight;
             }
-        } else if (Browser.isSafari() || Browser.isMobileChrome()) {
-            return height;
         }
+
         return undefined;
-    }, [props.inputStyle, height]);
+    }, [props.inputStyle]);
 
     return (
         <>
@@ -346,6 +338,10 @@ function BaseTextInput(props) {
                                     // once it exceeds the input space (See https://github.com/Expensify/App/issues/13802)
                                     !isMultiline && {height, lineHeight},
 
+                                    // Explicitly change boxSizing attribute for mobile chrome in order to apply line-height
+                                    // for the issue mentioned here https://github.com/Expensify/App/issues/26735
+                                    !isMultiline && Browser.isMobileChrome() && {boxSizing: 'content-box', height: undefined},
+
                                     // Stop scrollbar flashing when breaking lines with autoGrowHeight enabled.
                                     props.autoGrowHeight && StyleUtils.getAutoGrowHeightInputStyle(textInputHeight, maxHeight),
                                     // Add disabled color theme when field is not editable.
@@ -368,6 +364,13 @@ function BaseTextInput(props) {
                                 // `dataset.submitOnEnter` is used to indicate that pressing Enter on this input should call the submit callback.
                                 dataSet={{submitOnEnter: isMultiline && props.submitOnEnter}}
                             />
+                            {props.isLoading && (
+                                <ActivityIndicator
+                                    size="small"
+                                    color={themeColors.iconSuccessFill}
+                                    style={[styles.mt4, styles.ml1]}
+                                />
+                            )}
                             {Boolean(props.secureTextEntry) && (
                                 <Checkbox
                                     style={[styles.flex1, styles.textInputIconContainer]}
diff --git a/src/components/Tooltip/BaseTooltip.js b/src/components/Tooltip/BaseTooltip.js
index f60982f52dd4..50ade2026bae 100644
--- a/src/components/Tooltip/BaseTooltip.js
+++ b/src/components/Tooltip/BaseTooltip.js
@@ -2,6 +2,7 @@ import _ from 'underscore';
 import React, {memo, useCallback, useEffect, useRef, useState} from 'react';
 import {Animated} from 'react-native';
 import {BoundsObserver} from '@react-ng/bounds-observer';
+import Str from 'expensify-common/lib/str';
 import TooltipRenderedOnPageBody from './TooltipRenderedOnPageBody';
 import Hoverable from '../Hoverable';
 import * as tooltipPropTypes from './tooltipPropTypes';
@@ -19,9 +20,39 @@ const hasHoverSupport = DeviceCapabilities.hasHoverSupport();
  * @param {propTypes} props
  * @returns {ReactNodeLike}
  */
-function Tooltip(props) {
-    const {children, numberOfLines, maxWidth, text, renderTooltipContent, renderTooltipContentKey} = props;
 
+/**
+ * Choose the correct bounding box for the tooltip to be positioned against.
+ * This handles the case where the target is wrapped across two lines, and
+ * so we need to find the correct part (the one that the user is hovering
+ * over) and show the tooltip there.
+ *
+ * @param {Element} target The DOM element being hovered over.
+ * @param {number} clientX The X position from the MouseEvent.
+ * @param {number} clientY The Y position from the MouseEvent.
+ * @return {DOMRect} The chosen bounding box.
+ */
+
+function chooseBoundingBox(target, clientX, clientY) {
+    const slop = 5;
+    const bbs = target.getClientRects();
+    const clientXMin = clientX - slop;
+    const clientXMax = clientX + slop;
+    const clientYMin = clientY - slop;
+    const clientYMax = clientY + slop;
+
+    for (let i = 0; i < bbs.length; i++) {
+        const bb = bbs[i];
+        if (clientXMin <= bb.right && clientXMax >= bb.left && clientYMin <= bb.bottom && clientYMax >= bb.top) {
+            return bb;
+        }
+    }
+
+    // If no matching bounding box is found, fall back to getBoundingClientRect.
+    return target.getBoundingClientRect();
+}
+
+function Tooltip({children, numberOfLines, maxWidth, text, renderTooltipContent, renderTooltipContentKey, shouldHandleScroll, shiftHorizontal, shiftVertical}) {
     const {preferredLocale} = useLocalize();
     const {windowWidth} = useWindowDimensions();
 
@@ -43,6 +74,14 @@ function Tooltip(props) {
     const isAnimationCanceled = useRef(false);
     const prevText = usePrevious(text);
 
+    const target = useRef(null);
+    const initialMousePosition = useRef({x: 0, y: 0});
+
+    const updateTargetAndMousePosition = useCallback((e) => {
+        target.current = e.target;
+        initialMousePosition.current = {x: e.clientX, y: e.clientY};
+    }, []);
+
     /**
      * Display the tooltip in an animation.
      */
@@ -91,10 +130,15 @@ function Tooltip(props) {
         if (bounds.width === 0) {
             setIsRendered(false);
         }
-        setWrapperWidth(bounds.width);
-        setWrapperHeight(bounds.height);
-        setXOffset(bounds.x);
-        setYOffset(bounds.y);
+        // Choose a bounding box for the tooltip to target.
+        // In the case when the target is a link that has wrapped onto
+        // multiple lines, we want to show the tooltip over the part
+        // of the link that the user is hovering over.
+        const betterBounds = chooseBoundingBox(target.current, initialMousePosition.current.x, initialMousePosition.current.y);
+        setWrapperWidth(betterBounds.width);
+        setWrapperHeight(betterBounds.height);
+        setXOffset(betterBounds.x);
+        setYOffset(betterBounds.y);
     };
 
     /**
@@ -136,8 +180,8 @@ function Tooltip(props) {
                     yOffset={yOffset}
                     targetWidth={wrapperWidth}
                     targetHeight={wrapperHeight}
-                    shiftHorizontal={_.result(props, 'shiftHorizontal')}
-                    shiftVertical={_.result(props, 'shiftVertical')}
+                    shiftHorizontal={Str.result(shiftHorizontal)}
+                    shiftVertical={Str.result(shiftVertical)}
                     text={text}
                     maxWidth={maxWidth}
                     numberOfLines={numberOfLines}
@@ -152,9 +196,10 @@ function Tooltip(props) {
                 onBoundsChange={updateBounds}
             >
                 <Hoverable
+                    onMouseEnter={updateTargetAndMousePosition}
                     onHoverIn={showTooltip}
                     onHoverOut={hideTooltip}
-                    shouldHandleScroll={props.shouldHandleScroll}
+                    shouldHandleScroll={shouldHandleScroll}
                 >
                     {children}
                 </Hoverable>
@@ -165,4 +210,6 @@ function Tooltip(props) {
 
 Tooltip.propTypes = tooltipPropTypes.propTypes;
 Tooltip.defaultProps = tooltipPropTypes.defaultProps;
+Tooltip.displayName = 'Tooltip';
+
 export default memo(Tooltip);
diff --git a/src/components/UserCurrentLocationButton.js b/src/components/UserCurrentLocationButton.js
index 9ba74ac6c426..fa22eb602886 100644
--- a/src/components/UserCurrentLocationButton.js
+++ b/src/components/UserCurrentLocationButton.js
@@ -88,6 +88,8 @@ function UserCurrentLocationButton({onLocationFetched, onLocationError, onClick,
                 onPress={getUserLocation}
                 accessibilityLabel={translate('location.useCurrent')}
                 disabled={isDisabled}
+                onMouseDown={(e) => e.preventDefault()}
+                onTouchStart={(e) => e.preventDefault()}
             >
                 <Icon
                     src={Expensicons.Location}
diff --git a/src/components/ValuePicker/ValueSelectorModal.js b/src/components/ValuePicker/ValueSelectorModal.js
new file mode 100644
index 000000000000..23aac4839d2a
--- /dev/null
+++ b/src/components/ValuePicker/ValueSelectorModal.js
@@ -0,0 +1,84 @@
+import React, {useState, useEffect} from 'react';
+import PropTypes from 'prop-types';
+import _ from 'lodash';
+import CONST from '../../CONST';
+import HeaderWithBackButton from '../HeaderWithBackButton';
+import SelectionList from '../SelectionList';
+import Modal from '../Modal';
+import ScreenWrapper from '../ScreenWrapper';
+import styles from '../../styles/styles';
+
+const propTypes = {
+    /** Whether the modal is visible */
+    isVisible: PropTypes.bool.isRequired,
+
+    /** Current value selected  */
+    currentValue: PropTypes.string,
+
+    /** Items to pick from */
+    items: PropTypes.arrayOf(PropTypes.shape({value: PropTypes.string, label: PropTypes.string})),
+
+    /** The selected item */
+    selectedItem: PropTypes.shape({value: PropTypes.string, label: PropTypes.string}),
+
+    /** Label for values */
+    label: PropTypes.string,
+
+    /** Function to call when the user selects a item */
+    onItemSelected: PropTypes.func,
+
+    /** Function to call when the user closes the modal */
+    onClose: PropTypes.func,
+};
+
+const defaultProps = {
+    currentValue: '',
+    items: [],
+    selectedItem: {},
+    label: '',
+    onClose: () => {},
+    onItemSelected: () => {},
+};
+
+function ValueSelectorModal({currentValue, items, selectedItem, label, isVisible, onClose, onItemSelected}) {
+    const [sectionsData, setSectionsData] = useState([]);
+
+    useEffect(() => {
+        const itemsData = _.map(items, (item) => ({value: item.value, keyForList: item.value, text: item.label, isSelected: item === selectedItem}));
+        setSectionsData(itemsData);
+    }, [items, selectedItem]);
+
+    return (
+        <Modal
+            type={CONST.MODAL.MODAL_TYPE.RIGHT_DOCKED}
+            isVisible={isVisible}
+            onClose={onClose}
+            onModalHide={onClose}
+            hideModalContentWhileAnimating
+            useNativeDriver
+        >
+            <ScreenWrapper
+                style={[styles.pb0]}
+                includePaddingTop={false}
+                includeSafeAreaPaddingBottom={false}
+                testID="ValueSelectorModal"
+            >
+                <HeaderWithBackButton
+                    title={label}
+                    onBackButtonPress={onClose}
+                />
+                <SelectionList
+                    sections={[{data: sectionsData}]}
+                    onSelectRow={onItemSelected}
+                    initiallyFocusedOptionKey={currentValue}
+                />
+            </ScreenWrapper>
+        </Modal>
+    );
+}
+
+ValueSelectorModal.propTypes = propTypes;
+ValueSelectorModal.defaultProps = defaultProps;
+ValueSelectorModal.displayName = 'ValueSelectorModal';
+
+export default ValueSelectorModal;
diff --git a/src/components/ValuePicker/index.js b/src/components/ValuePicker/index.js
new file mode 100644
index 000000000000..161fbbfadb8b
--- /dev/null
+++ b/src/components/ValuePicker/index.js
@@ -0,0 +1,102 @@
+import React, {useState} from 'react';
+import {View} from 'react-native';
+import PropTypes from 'prop-types';
+import _ from 'lodash';
+import styles from '../../styles/styles';
+import MenuItemWithTopDescription from '../MenuItemWithTopDescription';
+import ValueSelectorModal from './ValueSelectorModal';
+import FormHelpMessage from '../FormHelpMessage';
+import refPropTypes from '../refPropTypes';
+
+const propTypes = {
+    /** Form Error description */
+    errorText: PropTypes.string,
+
+    /** Item to display */
+    value: PropTypes.string,
+
+    /** A placeholder value to display */
+    placeholder: PropTypes.string,
+
+    /** Items to pick from */
+    items: PropTypes.arrayOf(PropTypes.shape({value: PropTypes.string, label: PropTypes.string})),
+
+    /** Label of picker */
+    label: PropTypes.string,
+
+    /** Callback to call when the input changes */
+    onInputChange: PropTypes.func,
+
+    /** A ref to forward to MenuItemWithTopDescription */
+    forwardedRef: refPropTypes,
+};
+
+const defaultProps = {
+    value: undefined,
+    label: undefined,
+    placeholder: '',
+    items: {},
+    forwardedRef: undefined,
+    errorText: '',
+    onInputChange: () => {},
+};
+
+function ValuePicker({value, label, items, placeholder, errorText, onInputChange, forwardedRef}) {
+    const [isPickerVisible, setIsPickerVisible] = useState(false);
+
+    const showPickerModal = () => {
+        setIsPickerVisible(true);
+    };
+
+    const hidePickerModal = () => {
+        setIsPickerVisible(false);
+    };
+
+    const updateInput = (item) => {
+        if (item.value !== value) {
+            onInputChange(item.value);
+        }
+        hidePickerModal();
+    };
+
+    const descStyle = value.length === 0 ? styles.textNormal : null;
+    const selectedItem = _.find(items, {value});
+    const selectedLabel = selectedItem ? selectedItem.label : '';
+
+    return (
+        <View>
+            <MenuItemWithTopDescription
+                ref={forwardedRef}
+                shouldShowRightIcon
+                title={selectedLabel || placeholder || ''}
+                descriptionTextStyle={descStyle}
+                description={label}
+                onPress={showPickerModal}
+            />
+            <View style={styles.ml5}>
+                <FormHelpMessage message={errorText} />
+            </View>
+            <ValueSelectorModal
+                isVisible={isPickerVisible}
+                currentValue={selectedLabel || placeholder || ''}
+                label={label}
+                selectedItem={selectedItem}
+                items={items}
+                onClose={hidePickerModal}
+                onItemSelected={updateInput}
+            />
+        </View>
+    );
+}
+
+ValuePicker.propTypes = propTypes;
+ValuePicker.defaultProps = defaultProps;
+ValuePicker.displayName = 'ValuePicker';
+
+export default React.forwardRef((props, ref) => (
+    <ValuePicker
+        // eslint-disable-next-line react/jsx-props-no-spreading
+        {...props}
+        forwardedRef={ref}
+    />
+));
diff --git a/src/components/WalletSection.js b/src/components/WalletSection.js
new file mode 100644
index 000000000000..ec8a1680937c
--- /dev/null
+++ b/src/components/WalletSection.js
@@ -0,0 +1,45 @@
+import PropTypes from 'prop-types';
+import React from 'react';
+import Section from './Section';
+import styles from '../styles/styles';
+
+const propTypes = {
+    /** Contents to display inside the section */
+    children: PropTypes.node,
+
+    /** The icon to display along with the title */
+    icon: PropTypes.func,
+
+    /** The text to display in the subtitle of the section */
+    subtitle: PropTypes.string,
+
+    /** The text to display in the title of the section */
+    title: PropTypes.string.isRequired,
+};
+
+const defaultProps = {
+    children: null,
+    icon: null,
+    subtitle: null,
+};
+
+function WalletSection({children, icon, subtitle, title}) {
+    return (
+        <Section
+            icon={icon}
+            subtitle={subtitle}
+            title={title}
+            containerStyles={[styles.p0, styles.pv5]}
+            titleStyles={[styles.ph5]}
+            subtitleStyles={[styles.ph5]}
+        >
+            {children}
+        </Section>
+    );
+}
+
+WalletSection.defaultProps = defaultProps;
+WalletSection.displayName = 'WalletSection';
+WalletSection.propTypes = propTypes;
+
+export default WalletSection;
diff --git a/src/components/withViewportOffsetTop.js b/src/components/withViewportOffsetTop.js
index 113c72ed1e1a..ccf928b3bd13 100644
--- a/src/components/withViewportOffsetTop.js
+++ b/src/components/withViewportOffsetTop.js
@@ -1,4 +1,4 @@
-import React, {Component} from 'react';
+import React, {useEffect, forwardRef, useState} from 'react';
 import PropTypes from 'prop-types';
 import lodashGet from 'lodash/get';
 import getComponentDisplayName from '../libs/getComponentDisplayName';
@@ -13,43 +13,33 @@ const viewportOffsetTopPropTypes = {
 };
 
 export default function (WrappedComponent) {
-    class WithViewportOffsetTop extends Component {
-        constructor(props) {
-            super(props);
-
-            this.updateDimensions = this.updateDimensions.bind(this);
-
-            this.state = {
-                viewportOffsetTop: 0,
+    function WithViewportOffsetTop(props) {
+        const [viewportOffsetTop, setViewportOffsetTop] = useState(0);
+
+        useEffect(() => {
+            /**
+             * @param {SyntheticEvent} e
+             */
+            const updateDimensions = (e) => {
+                const targetOffsetTop = lodashGet(e, 'target.offsetTop', 0);
+                setViewportOffsetTop(targetOffsetTop);
             };
-        }
-
-        componentDidMount() {
-            this.removeViewportResizeListener = addViewportResizeListener(this.updateDimensions);
-        }
 
-        componentWillUnmount() {
-            this.removeViewportResizeListener();
-        }
+            const removeViewportResizeListener = addViewportResizeListener(updateDimensions);
 
-        /**
-         * @param {SyntheticEvent} e
-         */
-        updateDimensions(e) {
-            const viewportOffsetTop = lodashGet(e, 'target.offsetTop', 0);
-            this.setState({viewportOffsetTop});
-        }
-
-        render() {
-            return (
-                <WrappedComponent
-                    // eslint-disable-next-line react/jsx-props-no-spreading
-                    {...this.props}
-                    ref={this.props.forwardedRef}
-                    viewportOffsetTop={this.state.viewportOffsetTop}
-                />
-            );
-        }
+            return () => {
+                removeViewportResizeListener();
+            };
+        }, []);
+
+        return (
+            <WrappedComponent
+                // eslint-disable-next-line react/jsx-props-no-spreading
+                {...props}
+                ref={props.forwardedRef}
+                viewportOffsetTop={viewportOffsetTop}
+            />
+        );
     }
 
     WithViewportOffsetTop.displayName = `WithViewportOffsetTop(${getComponentDisplayName(WrappedComponent)})`;
@@ -59,7 +49,7 @@ export default function (WrappedComponent) {
     WithViewportOffsetTop.defaultProps = {
         forwardedRef: undefined,
     };
-    return React.forwardRef((props, ref) => (
+    return forwardRef((props, ref) => (
         <WithViewportOffsetTop
             // eslint-disable-next-line react/jsx-props-no-spreading
             {...props}
diff --git a/src/hooks/useAutoFocusInput.js b/src/hooks/useAutoFocusInput.js
new file mode 100644
index 000000000000..6611f867f210
--- /dev/null
+++ b/src/hooks/useAutoFocusInput.js
@@ -0,0 +1,40 @@
+import {useFocusEffect} from '@react-navigation/native';
+import {useState, useEffect, useRef, useCallback} from 'react';
+import CONST from '../CONST';
+
+export default function useAutoFocusInput() {
+    const [isInputInitialized, setIsInputInitialized] = useState(false);
+    const [isScreenTransitionEnded, setIsScreenTransitionEnded] = useState(false);
+
+    const inputRef = useRef(null);
+    const focusTimeoutRef = useRef(null);
+
+    useEffect(() => {
+        if (!isScreenTransitionEnded || !isInputInitialized || !inputRef.current) {
+            return;
+        }
+        inputRef.current.focus();
+    }, [isScreenTransitionEnded, isInputInitialized]);
+
+    useFocusEffect(
+        useCallback(() => {
+            focusTimeoutRef.current = setTimeout(() => {
+                setIsScreenTransitionEnded(true);
+            }, CONST.ANIMATED_TRANSITION);
+            return () => {
+                if (!focusTimeoutRef.current) {
+                    return;
+                }
+                clearTimeout(focusTimeoutRef.current);
+            };
+            // eslint-disable-next-line react-hooks/exhaustive-deps
+        }, []),
+    );
+
+    const inputCallbackRef = (ref) => {
+        inputRef.current = ref;
+        setIsInputInitialized(true);
+    };
+
+    return {inputCallbackRef};
+}
diff --git a/src/hooks/useDragAndDrop.js b/src/hooks/useDragAndDrop.ts
similarity index 83%
rename from src/hooks/useDragAndDrop.js
rename to src/hooks/useDragAndDrop.ts
index fb1d158e4063..27230dd94679 100644
--- a/src/hooks/useDragAndDrop.js
+++ b/src/hooks/useDragAndDrop.ts
@@ -1,4 +1,4 @@
-import {useEffect, useRef, useState, useCallback} from 'react';
+import React, {useEffect, useRef, useState, useCallback} from 'react';
 import {useIsFocused} from '@react-navigation/native';
 
 const COPY_DROP_EFFECT = 'copy';
@@ -8,15 +8,22 @@ const DRAG_OVER_EVENT = 'dragover';
 const DRAG_LEAVE_EVENT = 'dragleave';
 const DROP_EVENT = 'drop';
 
+type DragAndDropParams = {
+    dropZone: React.MutableRefObject<HTMLDivElement | null>;
+    onDrop?: (event?: DragEvent) => void;
+    shouldAllowDrop?: boolean;
+    isDisabled?: boolean;
+    shouldAcceptDrop?: (event?: DragEvent) => boolean;
+};
+
+type DragAndDropOptions = {
+    isDraggingOver: boolean;
+};
+
 /**
- * @param {Object} dropZone – ref to the dropZone component
- * @param {Function} [onDrop]
- * @param {Boolean} [shouldAllowDrop]
- * @param {Boolean} [isDisabled]
- * @param {Function} [shouldAcceptDrop]
- * @returns {{isDraggingOver: Boolean}}
+ * @param dropZone – ref to the dropZone component
  */
-export default function useDragAndDrop({dropZone, onDrop = () => {}, shouldAllowDrop = true, isDisabled = false, shouldAcceptDrop = () => true}) {
+export default function useDragAndDrop({dropZone, onDrop = () => {}, shouldAllowDrop = true, isDisabled = false, shouldAcceptDrop = () => true}: DragAndDropParams): DragAndDropOptions {
     const isFocused = useIsFocused();
     const [isDraggingOver, setIsDraggingOver] = useState(false);
 
@@ -36,23 +43,24 @@ export default function useDragAndDrop({dropZone, onDrop = () => {}, shouldAllow
     }, [isFocused, isDisabled]);
 
     const setDropEffect = useCallback(
-        (event) => {
+        (event: DragEvent) => {
             const effect = shouldAllowDrop && shouldAcceptDrop(event) ? COPY_DROP_EFFECT : NONE_DROP_EFFECT;
-            // eslint-disable-next-line no-param-reassign
-            event.dataTransfer.dropEffect = effect;
-            // eslint-disable-next-line no-param-reassign
-            event.dataTransfer.effectAllowed = effect;
+
+            if (event.dataTransfer) {
+                // eslint-disable-next-line no-param-reassign
+                event.dataTransfer.dropEffect = effect;
+                // eslint-disable-next-line no-param-reassign
+                event.dataTransfer.effectAllowed = effect;
+            }
         },
         [shouldAllowDrop, shouldAcceptDrop],
     );
 
     /**
      * Handles all types of drag-N-drop events on the drop zone associated with composer
-     *
-     * @param {Object} event native Event
      */
     const dropZoneDragHandler = useCallback(
-        (event) => {
+        (event: DragEvent) => {
             if (!isFocused || isDisabled || !shouldAcceptDrop(event)) {
                 return;
             }
diff --git a/src/languages/en.ts b/src/languages/en.ts
index 72e183fc8561..37eeec913b00 100755
--- a/src/languages/en.ts
+++ b/src/languages/en.ts
@@ -27,6 +27,7 @@ import type {
     SettleExpensifyCardParams,
     RequestAmountParams,
     SplitAmountParams,
+    DidSplitAmountMessageParams,
     AmountEachParams,
     PayerOwesAmountParams,
     PayerOwesParams,
@@ -263,6 +264,7 @@ export default {
         recent: 'Recent',
         all: 'All',
         tbd: 'TBD',
+        card: 'Card',
     },
     location: {
         useCurrent: 'Use current location',
@@ -379,6 +381,14 @@ export default {
         termsOfService: 'Terms of Service',
         privacy: 'Privacy',
     },
+    samlSignIn: {
+        welcomeSAMLEnabled: 'Continue logging in with single sign-on:',
+        orContinueWithMagicCode: 'Or optionally, your company allows signing in with a magic code',
+        useSingleSignOn: 'Use single sign-on',
+        useMagicCode: 'Use magic code',
+        launching: 'Launching...',
+        oneMoment: "One moment while we redirect you to your company's single sign-on portal.",
+    },
     reportActionCompose: {
         addAction: 'Actions',
         dropToUpload: 'Drop to upload',
@@ -477,8 +487,8 @@ export default {
     sidebarScreen: {
         buttonSearch: 'Search',
         buttonMySettings: 'My settings',
-        fabNewChat: 'Send message',
-        fabNewChatExplained: 'Send message (Floating action)',
+        fabNewChat: 'Start chat',
+        fabNewChatExplained: 'Start chat (Floating action)',
         chatPinned: 'Chat pinned',
         draftedMessage: 'Drafted message',
         listOfChatMessages: 'List of chat messages',
@@ -506,6 +516,8 @@ export default {
         flash: 'flash',
         shutter: 'shutter',
         gallery: 'gallery',
+        deleteReceipt: 'Delete receipt',
+        deleteConfirmation: 'Are you sure you want to delete this receipt?',
         addReceipt: 'Add receipt',
     },
     iou: {
@@ -513,6 +525,8 @@ export default {
         approve: 'Approve',
         approved: 'Approved',
         cash: 'Cash',
+        card: 'Card',
+        original: 'Original',
         split: 'Split',
         addToSplit: 'Add to split',
         splitBill: 'Split bill',
@@ -523,11 +537,14 @@ export default {
         pay: 'Pay',
         viewDetails: 'View details',
         pending: 'Pending',
+        posted: 'Posted',
         deleteReceipt: 'Delete receipt',
         receiptScanning: 'Receipt scan in progress…',
         receiptMissingDetails: 'Receipt missing details',
         receiptStatusTitle: 'Scanning…',
         receiptStatusText: "Only you can see this receipt when it's scanning. Check back later or enter the details now.",
+        receiptScanningFailed: 'Receipt scanning failed. Enter the details manually.',
+        transactionPendingText: 'It takes a few days from the date the card was used for the transaction to post.',
         requestCount: ({count, scanningReceipts = 0}: RequestCountParams) => `${count} requests${scanningReceipts > 0 ? `, ${scanningReceipts} scanning` : ''}`,
         deleteRequest: 'Delete request',
         deleteConfirmation: 'Are you sure that you want to delete this request?',
@@ -538,11 +555,14 @@ export default {
         requestAmount: ({amount}: RequestAmountParams) => `request ${amount}`,
         requestedAmount: ({formattedAmount, comment}: RequestedAmountMessageParams) => `requested ${formattedAmount}${comment ? ` for ${comment}` : ''}`,
         splitAmount: ({amount}: SplitAmountParams) => `split ${amount}`,
+        didSplitAmount: ({formattedAmount, comment}: DidSplitAmountMessageParams) => `split ${formattedAmount}${comment ? ` for ${comment}` : ''}`,
         amountEach: ({amount}: AmountEachParams) => `${amount} each`,
         payerOwesAmount: ({payer, amount}: PayerOwesAmountParams) => `${payer} owes ${amount}`,
         payerOwes: ({payer}: PayerOwesParams) => `${payer} owes: `,
         payerPaidAmount: ({payer, amount}: PayerPaidAmountParams): string => `${payer} paid ${amount}`,
         payerPaid: ({payer}: PayerPaidParams) => `${payer} paid: `,
+        payerSpentAmount: ({payer, amount}: PayerPaidAmountParams): string => `${payer} spent ${amount}`,
+        payerSpent: ({payer}: PayerPaidParams) => `${payer} spent: `,
         managerApproved: ({manager}: ManagerApprovedParams) => `${manager} approved:`,
         payerSettled: ({amount}: PayerSettledParams) => `paid ${amount}`,
         waitingOnBankAccount: ({submitterDisplayName}: WaitingOnBankAccountParams) => `started settling up, payment is held until ${submitterDisplayName} adds a bank account`,
@@ -571,6 +591,8 @@ export default {
             genericDeleteFailureMessage: 'Unexpected error deleting the money request, please try again later',
             genericEditFailureMessage: 'Unexpected error editing the money request, please try again later',
             genericSmartscanFailureMessage: 'Transaction is missing fields',
+            duplicateWaypointsErrorMessage: 'Please remove duplicate waypoints',
+            emptyWaypointsErrorMessage: 'Please enter at least two waypoints',
         },
     },
     notificationPreferencesPage: {
@@ -828,6 +850,19 @@ export default {
             setDefaultFailure: 'Something went wrong. Please chat with Concierge for further assistance.',
         },
         addBankAccountFailure: 'An unexpected error occurred while trying to add your bank account. Please try again.',
+        getPaidFaster: 'Get paid faster',
+        addPaymentMethod: 'Add a payment method to send and receive payments directly in the app.',
+        getPaidBackFaster: 'Get paid back faster',
+        secureAccessToYourMoney: 'Secure access to your money',
+        receiveMoney: 'Receive money in your local currency',
+        expensifyWallet: 'Expensify Wallet',
+        sendAndReceiveMoney: 'Send and receive money from your Expensify Wallet.',
+        bankAccounts: 'Bank accounts',
+        addBankAccountToSendAndReceive: 'Add a bank account to send and receive payments directly in the app.',
+        addBankAccount: 'Add bank account',
+        assignedCards: 'Assigned cards',
+        assignedCardsDescription: 'These are cards assigned by a Workspace admin to manage company spend.',
+        expensifyCard: 'Expensify Card',
     },
     cardPage: {
         expensifyCard: 'Expensify Card',
@@ -904,6 +939,7 @@ export default {
     },
     welcomeMessagePage: {
         welcomeMessage: 'Welcome message',
+        welcomeMessageOptional: 'Welcome message (optional)',
         explainerText: 'Set a custom welcome message that will be sent to users when they join this room.',
     },
     languagePage: {
@@ -1589,7 +1625,7 @@ export default {
     statementPage: {
         generatingPDF: "We're generating your PDF right now. Please come back later!",
     },
-    keyboardShortcutModal: {
+    keyboardShortcutsPage: {
         title: 'Keyboard shortcuts',
         subtitle: 'Save time with these handy keyboard shortcuts:',
         shortcuts: {
@@ -1604,6 +1640,9 @@ export default {
         screenShare: 'Screen share',
         screenShareRequest: 'Expensify is inviting you to a screen share',
     },
+    search: {
+        resultsAreLimited: 'Search results are limited.',
+    },
     genericErrorPage: {
         title: 'Uh-oh, something went wrong!',
         body: {
@@ -1750,6 +1789,7 @@ export default {
     parentReportAction: {
         deletedMessage: '[Deleted message]',
         deletedRequest: '[Deleted request]',
+        reversedTransaction: '[Reversed transaction]',
         deletedTask: '[Deleted task]',
         hiddenMessage: '[Hidden message]',
     },
@@ -1833,6 +1873,10 @@ export default {
             selectSuggestedAddress: 'Please select a suggested address or use current location',
         },
     },
+    eReceipt: {
+        guaranteed: 'Guaranteed eReceipt',
+        transactionDate: 'Transaction date',
+    },
     globalNavigationOptions: {
         chats: 'Chats',
     },
diff --git a/src/languages/es.ts b/src/languages/es.ts
index eed5c75e2269..39854965367f 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -27,6 +27,7 @@ import type {
     SettleExpensifyCardParams,
     RequestAmountParams,
     SplitAmountParams,
+    DidSplitAmountMessageParams,
     AmountEachParams,
     PayerOwesAmountParams,
     PayerOwesParams,
@@ -253,6 +254,7 @@ export default {
         recent: 'Reciente',
         all: 'Todo',
         tbd: 'Por determinar',
+        card: 'Tarjeta',
     },
     location: {
         useCurrent: 'Usar ubicación actual',
@@ -370,6 +372,14 @@ export default {
         termsOfService: 'Términos de servicio',
         privacy: 'Privacidad',
     },
+    samlSignIn: {
+        welcomeSAMLEnabled: 'Continua iniciando sesión con el inicio de sesión único:',
+        orContinueWithMagicCode: 'O, opcionalmente, tu empresa te permite iniciar sesión con un código mágico',
+        useSingleSignOn: 'Usar el inicio de sesión único',
+        useMagicCode: 'Usar código mágico',
+        launching: 'Cargando...',
+        oneMoment: 'Un momento mientras te redirigimos al portal de inicio de sesión único de tu empresa.',
+    },
     reportActionCompose: {
         addAction: 'Acción',
         dropToUpload: 'Suelta el archivo aquí para compartirlo',
@@ -469,8 +479,8 @@ export default {
     sidebarScreen: {
         buttonSearch: 'Buscar',
         buttonMySettings: 'Mi configuración',
-        fabNewChat: 'Enviar mensaje',
-        fabNewChatExplained: 'Enviar mensaje',
+        fabNewChat: 'Iniciar chat',
+        fabNewChatExplained: 'Iniciar chat',
         chatPinned: 'Chat fijado',
         draftedMessage: 'Mensaje borrador',
         listOfChatMessages: 'Lista de mensajes del chat',
@@ -498,6 +508,8 @@ export default {
         flash: 'flash',
         shutter: 'obturador',
         gallery: 'galería',
+        deleteReceipt: 'Eliminar recibo',
+        deleteConfirmation: '¿Estás seguro de que quieres borrar este recibo?',
         addReceipt: 'Añadir recibo',
     },
     iou: {
@@ -505,6 +517,8 @@ export default {
         approve: 'Aprobar',
         approved: 'Aprobado',
         cash: 'Efectivo',
+        card: 'Tarjeta',
+        original: 'Original',
         split: 'Dividir',
         addToSplit: 'Añadir para dividir',
         splitBill: 'Dividir factura',
@@ -515,11 +529,14 @@ export default {
         pay: 'Pagar',
         viewDetails: 'Ver detalles',
         pending: 'Pendiente',
+        posted: 'Contabilizado',
         deleteReceipt: 'Eliminar recibo',
         receiptScanning: 'Escaneo de recibo en curso…',
         receiptMissingDetails: 'Recibo con campos vacíos',
         receiptStatusTitle: 'Escaneando…',
         receiptStatusText: 'Solo tú puedes ver este recibo cuando se está escaneando. Vuelve más tarde o introduce los detalles ahora.',
+        receiptScanningFailed: 'El escaneo de recibo ha fallado. Introduce los detalles manualmente.',
+        transactionPendingText: 'La transacción tarda unos días en contabilizarse desde la fecha en que se utilizó la tarjeta.',
         requestCount: ({count, scanningReceipts = 0}: RequestCountParams) => `${count} solicitudes${scanningReceipts > 0 ? `, ${scanningReceipts} escaneando` : ''}`,
         deleteRequest: 'Eliminar pedido',
         deleteConfirmation: '¿Estás seguro de que quieres eliminar este pedido?',
@@ -530,11 +547,14 @@ export default {
         requestAmount: ({amount}: RequestAmountParams) => `solicitar ${amount}`,
         requestedAmount: ({formattedAmount, comment}: RequestedAmountMessageParams) => `solicité ${formattedAmount}${comment ? ` para ${comment}` : ''}`,
         splitAmount: ({amount}: SplitAmountParams) => `dividir ${amount}`,
+        didSplitAmount: ({formattedAmount, comment}: DidSplitAmountMessageParams) => `dividió ${formattedAmount}${comment ? ` para ${comment}` : ''}`,
         amountEach: ({amount}: AmountEachParams) => `${amount} cada uno`,
         payerOwesAmount: ({payer, amount}: PayerOwesAmountParams) => `${payer} debe ${amount}`,
         payerOwes: ({payer}: PayerOwesParams) => `${payer} debe: `,
         payerPaidAmount: ({payer, amount}: PayerPaidAmountParams) => `${payer} pagó ${amount}`,
         payerPaid: ({payer}: PayerPaidParams) => `${payer} pagó: `,
+        payerSpentAmount: ({payer, amount}: PayerPaidAmountParams): string => `${payer} gastó ${amount}`,
+        payerSpent: ({payer}: PayerPaidParams) => `${payer} gastó: `,
         managerApproved: ({manager}: ManagerApprovedParams) => `${manager} aprobó:`,
         payerSettled: ({amount}: PayerSettledParams) => `pagó ${amount}`,
         waitingOnBankAccount: ({submitterDisplayName}: WaitingOnBankAccountParams) => `inicio el pago, pero no se procesará hasta que ${submitterDisplayName} añada una cuenta bancaria`,
@@ -565,6 +585,8 @@ export default {
             genericDeleteFailureMessage: 'Error inesperado eliminando la solicitud de dinero. Por favor, inténtalo más tarde',
             genericEditFailureMessage: 'Error inesperado al guardar la solicitud de dinero. Por favor, inténtalo más tarde',
             genericSmartscanFailureMessage: 'La transacción tiene campos vacíos',
+            duplicateWaypointsErrorMessage: 'Por favor elimina los puntos de ruta duplicados',
+            emptyWaypointsErrorMessage: 'Por favor introduce al menos dos puntos de ruta',
         },
     },
     notificationPreferencesPage: {
@@ -824,6 +846,19 @@ export default {
             setDefaultFailure: 'No se ha podido configurar el método de pago.',
         },
         addBankAccountFailure: 'Ocurrió un error inesperado al intentar añadir la cuenta bancaria. Inténtalo de nuevo.',
+        getPaidFaster: 'Cobra más rápido',
+        addPaymentMethod: 'Añade un método de pago para enviar y recibir pagos directamente en la aplicación.',
+        getPaidBackFaster: 'Recibe tus pagos más rápido',
+        secureAccessToYourMoney: 'Acceso seguro a tu dinero',
+        receiveMoney: 'Recibe dinero en tu moneda local',
+        expensifyWallet: 'Billetera Expensify',
+        sendAndReceiveMoney: 'Envía y recibe dinero desde tu Billetera Expensify.',
+        bankAccounts: 'Cuentas bancarias',
+        addBankAccountToSendAndReceive: 'Añade una cuenta bancaria para enviar y recibir pagos directamente en la aplicación.',
+        addBankAccount: 'Agregar cuenta bancaria',
+        assignedCards: 'Tarjetas asignadas',
+        assignedCardsDescription: 'Son tarjetas asignadas por un administrador del Espacio de Trabajo para gestionar los gastos de la empresa.',
+        expensifyCard: 'Tarjeta Expensify',
     },
     cardPage: {
         expensifyCard: 'Tarjeta Expensify',
@@ -902,6 +937,7 @@ export default {
     },
     welcomeMessagePage: {
         welcomeMessage: 'Mensaje de bienvenida',
+        welcomeMessageOptional: 'Mensaje de bienvenida (opcional)',
         explainerText: 'Configura un mensaje de bienvenida privado y personalizado que se enviará cuando los usuarios se unan a esta sala de chat.',
     },
     languagePage: {
@@ -1613,7 +1649,7 @@ export default {
     statementPage: {
         generatingPDF: 'Estamos generando tu PDF ahora mismo. ¡Por favor, vuelve más tarde!',
     },
-    keyboardShortcutModal: {
+    keyboardShortcutsPage: {
         title: 'Atajos de teclado',
         subtitle: 'Ahorra tiempo con estos atajos de teclado:',
         shortcuts: {
@@ -1628,6 +1664,9 @@ export default {
         screenShare: 'Compartir pantalla',
         screenShareRequest: 'Expensify te está invitando a compartir la pantalla',
     },
+    search: {
+        resultsAreLimited: 'Los resultados de búsqueda están limitados.',
+    },
     genericErrorPage: {
         title: '¡Uh-oh, algo salió mal!',
         body: {
@@ -2234,6 +2273,7 @@ export default {
     parentReportAction: {
         deletedMessage: '[Mensaje eliminado]',
         deletedRequest: '[Pedido eliminado]',
+        reversedTransaction: '[Transacción anulada]',
         deletedTask: '[Tarea eliminado]',
         hiddenMessage: '[Mensaje oculto]',
     },
@@ -2318,6 +2358,10 @@ export default {
             selectSuggestedAddress: 'Por favor, selecciona una dirección sugerida o usa la ubicación actual.',
         },
     },
+    eReceipt: {
+        guaranteed: 'eRecibo garantizado',
+        transactionDate: 'Fecha de transacción',
+    },
     globalNavigationOptions: {
         chats: 'Chats',
     },
diff --git a/src/languages/types.ts b/src/languages/types.ts
index 3ee504ccddd7..9560cd41b25f 100644
--- a/src/languages/types.ts
+++ b/src/languages/types.ts
@@ -106,6 +106,8 @@ type RequestedAmountMessageParams = {formattedAmount: string; comment: string};
 
 type SplitAmountParams = {amount: number};
 
+type DidSplitAmountMessageParams = {formattedAmount: string; comment: string};
+
 type AmountEachParams = {amount: number};
 
 type PayerOwesAmountParams = {payer: string; amount: number};
@@ -269,6 +271,7 @@ export type {
     RequestAmountParams,
     RequestedAmountMessageParams,
     SplitAmountParams,
+    DidSplitAmountMessageParams,
     AmountEachParams,
     PayerOwesAmountParams,
     PayerOwesParams,
diff --git a/src/libs/BootSplash/index.native.ts b/src/libs/BootSplash/index.native.ts
index 0790b4de89bc..307d0d62c8dd 100644
--- a/src/libs/BootSplash/index.native.ts
+++ b/src/libs/BootSplash/index.native.ts
@@ -11,5 +11,6 @@ function hide(): Promise<void> {
 export default {
     hide,
     getVisibilityStatus: BootSplash.getVisibilityStatus,
+    logoSizeRatio: BootSplash.logoSizeRatio || 1,
     navigationBarHeight: BootSplash.navigationBarHeight || 0,
 };
diff --git a/src/libs/BootSplash/index.ts b/src/libs/BootSplash/index.ts
index 24842fe631f4..e58763039129 100644
--- a/src/libs/BootSplash/index.ts
+++ b/src/libs/BootSplash/index.ts
@@ -30,5 +30,6 @@ function getVisibilityStatus(): Promise<VisibilityStatus> {
 export default {
     hide,
     getVisibilityStatus,
+    logoSizeRatio: 1,
     navigationBarHeight: 0,
 };
diff --git a/src/libs/BootSplash/types.ts b/src/libs/BootSplash/types.ts
index 2329d5315817..b50b5a3397aa 100644
--- a/src/libs/BootSplash/types.ts
+++ b/src/libs/BootSplash/types.ts
@@ -1,6 +1,7 @@
 type VisibilityStatus = 'visible' | 'hidden';
 
 type BootSplashModule = {
+    logoSizeRatio: number;
     navigationBarHeight: number;
     hide: () => Promise<void>;
     getVisibilityStatus: () => Promise<VisibilityStatus>;
diff --git a/src/libs/CardUtils.ts b/src/libs/CardUtils.ts
index e138034ed327..8df554dd4dbf 100644
--- a/src/libs/CardUtils.ts
+++ b/src/libs/CardUtils.ts
@@ -29,7 +29,7 @@ function getMonthFromExpirationDateString(expirationDateString: string) {
  * @param cardID
  * @returns boolean
  */
-function isExpensifyCard(cardID: string) {
+function isExpensifyCard(cardID: number) {
     const card = allCards[cardID];
     if (!card) {
         return false;
@@ -41,7 +41,7 @@ function isExpensifyCard(cardID: string) {
  * @param cardID
  * @returns string in format %<bank> - <lastFourPAN || Not Activated>%.
  */
-function getCardDescription(cardID: string) {
+function getCardDescription(cardID: number) {
     const card = allCards[cardID];
     if (!card) {
         return '';
@@ -73,8 +73,8 @@ function getCompanyCards(cardList: {string: Card}) {
  */
 function getDomainCards(cardList: Record<string, OnyxTypes.Card>) {
     // eslint-disable-next-line you-dont-need-lodash-underscore/filter
-    const activeCards = lodash.filter(cardList, (card) => [2, 3, 4, 7].includes(card.state));
-    return lodash.groupBy(activeCards, (card) => card.domainName.toLowerCase());
+    const activeCards = lodash.filter(cardList, (card) => (CONST.EXPENSIFY_CARD.ACTIVE_STATES as ReadonlyArray<OnyxTypes.Card['state']>).includes(card.state));
+    return lodash.groupBy(activeCards, (card) => card.domainName);
 }
 
 /**
diff --git a/src/libs/Clipboard/index.js b/src/libs/Clipboard/index.js
index b770b2f2c787..6fbaa8eccd31 100644
--- a/src/libs/Clipboard/index.js
+++ b/src/libs/Clipboard/index.js
@@ -1,5 +1,4 @@
-// on Web/desktop this import will be replaced with `react-native-web`
-import {Clipboard} from 'react-native-web';
+import Clipboard from '@react-native-clipboard/clipboard';
 import lodashGet from 'lodash/get';
 import CONST from '../../CONST';
 import * as Browser from '../Browser';
diff --git a/src/libs/Clipboard/index.native.js b/src/libs/Clipboard/index.native.js
index d6345ac94a36..fe79e38585c4 100644
--- a/src/libs/Clipboard/index.native.js
+++ b/src/libs/Clipboard/index.native.js
@@ -1,7 +1,7 @@
-import Clipboard from '@react-native-community/clipboard';
+import Clipboard from '@react-native-clipboard/clipboard';
 
 /**
- * Sets a string on the Clipboard object via @react-native-community/clipboard
+ * Sets a string on the Clipboard object via @react-native-clipboard/clipboard
  *
  * @param {String} text
  */
diff --git a/src/libs/ComposerUtils/updateNumberOfLines/index.native.ts b/src/libs/ComposerUtils/updateNumberOfLines/index.native.ts
index b22135b4f767..b5c28cfc79e8 100644
--- a/src/libs/ComposerUtils/updateNumberOfLines/index.native.ts
+++ b/src/libs/ComposerUtils/updateNumberOfLines/index.native.ts
@@ -8,7 +8,7 @@ import UpdateNumberOfLines from './types';
  * divide by line height to get the total number of rows for the textarea.
  */
 const updateNumberOfLines: UpdateNumberOfLines = (props, event) => {
-    const lineHeight = styles.textInputCompose.lineHeight;
+    const lineHeight = styles.textInputCompose.lineHeight ?? 0;
     const paddingTopAndBottom = styles.textInputComposeSpacing.paddingVertical * 2;
     const inputHeight = event?.nativeEvent?.contentSize?.height ?? null;
     if (!inputHeight) {
diff --git a/src/libs/DistanceRequestUtils.js b/src/libs/DistanceRequestUtils.js
index 9b875fb82004..32de571c218c 100644
--- a/src/libs/DistanceRequestUtils.js
+++ b/src/libs/DistanceRequestUtils.js
@@ -89,8 +89,7 @@ const getDistanceMerchant = (hasRoute, distanceInMeters, unit, rate, currency, t
     const distanceUnit = unit === CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES ? translate('common.miles') : translate('common.kilometers');
     const singularDistanceUnit = unit === CONST.CUSTOM_UNITS.DISTANCE_UNIT_MILES ? translate('common.mile') : translate('common.kilometer');
     const unitString = distanceInUnits === 1 ? singularDistanceUnit : distanceUnit;
-
-    const ratePerUnit = PolicyUtils.getUnitRateValue({rate}, toLocaleDigit);
+    const ratePerUnit = rate ? PolicyUtils.getUnitRateValue({rate}, toLocaleDigit) : translate('common.tbd');
     const currencySymbol = CurrencyUtils.getCurrencySymbol(currency) || `${currency} `;
 
     return `${distanceInUnits} ${unitString} @ ${currencySymbol}${ratePerUnit} / ${singularDistanceUnit}`;
diff --git a/src/libs/DomUtils/index.native.ts b/src/libs/DomUtils/index.native.ts
index d3774baec208..9a9758228776 100644
--- a/src/libs/DomUtils/index.native.ts
+++ b/src/libs/DomUtils/index.native.ts
@@ -1,10 +1,7 @@
-import {BlurActiveElement, GetActiveElement} from './types';
-
-const blurActiveElement: BlurActiveElement = () => {};
+import GetActiveElement from './types';
 
 const getActiveElement: GetActiveElement = () => null;
 
 export default {
-    blurActiveElement,
     getActiveElement,
 };
diff --git a/src/libs/DomUtils/index.ts b/src/libs/DomUtils/index.ts
index 784a01bd7885..94dd54547454 100644
--- a/src/libs/DomUtils/index.ts
+++ b/src/libs/DomUtils/index.ts
@@ -1,18 +1,7 @@
-import {BlurActiveElement, GetActiveElement} from './types';
-
-const blurActiveElement: BlurActiveElement = () => {
-    const activeElement = document.activeElement as HTMLElement;
-
-    if (!activeElement?.blur) {
-        return;
-    }
-
-    activeElement.blur();
-};
+import GetActiveElement from './types';
 
 const getActiveElement: GetActiveElement = () => document.activeElement;
 
 export default {
-    blurActiveElement,
     getActiveElement,
 };
diff --git a/src/libs/DomUtils/types.ts b/src/libs/DomUtils/types.ts
index 8be7b3cddae5..fe121bc07f3c 100644
--- a/src/libs/DomUtils/types.ts
+++ b/src/libs/DomUtils/types.ts
@@ -1,4 +1,3 @@
-type BlurActiveElement = () => void;
 type GetActiveElement = () => Element | null;
 
-export type {BlurActiveElement, GetActiveElement};
+export default GetActiveElement;
diff --git a/src/libs/EmojiUtils.js b/src/libs/EmojiUtils.js
index af498831f4a4..a44a69f087ab 100644
--- a/src/libs/EmojiUtils.js
+++ b/src/libs/EmojiUtils.js
@@ -426,7 +426,7 @@ function suggestEmojis(text, lang, limit = CONST.AUTO_COMPLETE_SUGGESTER.MAX_AMO
  * @returns {Number}
  */
 const getPreferredSkinToneIndex = (val) => {
-    if (!_.isNull(val) && Number.isInteger(Number(val))) {
+    if (!_.isNull(val) && !_.isUndefined(val) && Number.isInteger(Number(val))) {
         return val;
     }
 
diff --git a/src/libs/HeaderUtils.js b/src/libs/HeaderUtils.js
new file mode 100644
index 000000000000..16d375ea1124
--- /dev/null
+++ b/src/libs/HeaderUtils.js
@@ -0,0 +1,28 @@
+import * as Localize from './Localize';
+import * as Session from './actions/Session';
+import * as Report from './actions/Report';
+import * as Expensicons from '../components/Icon/Expensicons';
+
+/**
+ * @param {Object} report
+ * @returns {Object} pin/unpin object
+ */
+function getPinMenuItem(report) {
+    if (!report.isPinned) {
+        return {
+            icon: Expensicons.Pin,
+            text: Localize.translateLocal('common.pin'),
+            onSelected: Session.checkIfActionIsAllowed(() => Report.togglePinnedState(report.reportID, report.isPinned)),
+        };
+    }
+    return {
+        icon: Expensicons.Pin,
+        text: Localize.translateLocal('common.unPin'),
+        onSelected: Session.checkIfActionIsAllowed(() => Report.togglePinnedState(report.reportID, report.isPinned)),
+    };
+}
+
+export {
+    // eslint-disable-next-line import/prefer-default-export
+    getPinMenuItem,
+};
diff --git a/src/libs/KeyboardShortcut/index.js b/src/libs/KeyboardShortcut/index.js
index f91c81a1b856..bce65744801c 100644
--- a/src/libs/KeyboardShortcut/index.js
+++ b/src/libs/KeyboardShortcut/index.js
@@ -164,7 +164,9 @@ function subscribe(key, callback, descriptionKey, modifiers = 'shift', captureOn
  */
 const KeyboardShortcut = {
     subscribe,
+    getDisplayName,
     getDocumentedShortcuts,
+    getPlatformEquivalentForKeys,
 };
 
 export default KeyboardShortcut;
diff --git a/src/libs/Navigation/AppNavigator/AuthScreens.js b/src/libs/Navigation/AppNavigator/AuthScreens.js
index 428550a43aa8..a4d934faec43 100644
--- a/src/libs/Navigation/AppNavigator/AuthScreens.js
+++ b/src/libs/Navigation/AppNavigator/AuthScreens.js
@@ -117,6 +117,13 @@ const propTypes = {
     /** The last Onyx update ID was applied to the client */
     lastUpdateIDAppliedToClient: PropTypes.number,
 
+    /** Information about any currently running demos */
+    demoInfo: PropTypes.shape({
+        money2020: PropTypes.shape({
+            isBeginningDemo: PropTypes.bool,
+        }),
+    }),
+
     ...windowDimensionsPropTypes,
 };
 
@@ -127,6 +134,7 @@ const defaultProps = {
     },
     lastOpenedPublicRoomID: null,
     lastUpdateIDAppliedToClient: null,
+    demoInfo: {},
 };
 
 class AuthScreens extends React.Component {
@@ -169,6 +177,10 @@ class AuthScreens extends React.Component {
         App.setUpPoliciesAndNavigate(this.props.session, !this.props.isSmallScreenWidth);
         App.redirectThirdPartyDesktopSignIn();
 
+        // Check if we should be running any demos immediately after signing in.
+        if (lodashGet(this.props.demoInfo, 'money2020.isBeginningDemo', false)) {
+            Navigation.navigate(ROUTES.MONEY2020, CONST.NAVIGATION.TYPE.FORCED_UP);
+        }
         if (this.props.lastOpenedPublicRoomID) {
             // Re-open the last opened public room if the user logged in from a public room link
             Report.openLastOpenedPublicRoom(this.props.lastOpenedPublicRoomID);
@@ -176,22 +188,30 @@ class AuthScreens extends React.Component {
         Download.clearDownloads();
         Timing.end(CONST.TIMING.HOMEPAGE_INITIAL_RENDER);
 
+        const shortcutsOverviewShortcutConfig = CONST.KEYBOARD_SHORTCUTS.SHORTCUTS;
         const searchShortcutConfig = CONST.KEYBOARD_SHORTCUTS.SEARCH;
         const chatShortcutConfig = CONST.KEYBOARD_SHORTCUTS.NEW_CHAT;
 
-        // Listen for the key K being pressed so that focus can be given to
-        // the chat switcher, or new group chat
-        // based on the key modifiers pressed and the operating system
-        this.unsubscribeSearchShortcut = KeyboardShortcut.subscribe(
-            searchShortcutConfig.shortcutKey,
+        // Listen to keyboard shortcuts for opening certain pages
+        this.unsubscribeShortcutsOverviewShortcut = KeyboardShortcut.subscribe(
+            shortcutsOverviewShortcutConfig.shortcutKey,
             () => {
                 Modal.close(() => {
-                    if (Navigation.isActiveRoute(ROUTES.SEARCH)) {
+                    if (Navigation.isActiveRoute(ROUTES.KEYBOARD_SHORTCUTS)) {
                         return;
                     }
-                    return Navigation.navigate(ROUTES.SEARCH);
+                    return Navigation.navigate(ROUTES.KEYBOARD_SHORTCUTS);
                 });
             },
+            shortcutsOverviewShortcutConfig.descriptionKey,
+            shortcutsOverviewShortcutConfig.modifiers,
+            true,
+        );
+        this.unsubscribeSearchShortcut = KeyboardShortcut.subscribe(
+            searchShortcutConfig.shortcutKey,
+            () => {
+                Modal.close(() => Navigation.navigate(ROUTES.SEARCH));
+            },
             searchShortcutConfig.descriptionKey,
             searchShortcutConfig.modifiers,
             true,
@@ -199,12 +219,7 @@ class AuthScreens extends React.Component {
         this.unsubscribeChatShortcut = KeyboardShortcut.subscribe(
             chatShortcutConfig.shortcutKey,
             () => {
-                Modal.close(() => {
-                    if (Navigation.isActiveRoute(ROUTES.NEW)) {
-                        return;
-                    }
-                    Navigation.navigate(ROUTES.NEW);
-                });
+                Modal.close(() => Navigation.navigate(ROUTES.NEW));
             },
             chatShortcutConfig.descriptionKey,
             chatShortcutConfig.modifiers,
@@ -217,6 +232,9 @@ class AuthScreens extends React.Component {
     }
 
     componentWillUnmount() {
+        if (this.unsubscribeShortcutsOverviewShortcut) {
+            this.unsubscribeShortcutsOverviewShortcut();
+        }
         if (this.unsubscribeSearchShortcut) {
             this.unsubscribeSearchShortcut();
         }
@@ -293,6 +311,11 @@ class AuthScreens extends React.Component {
                         options={defaultScreenOptions}
                         component={DemoSetupPage}
                     />
+                    <RootStack.Screen
+                        name={CONST.DEMO_PAGES.MONEY2020}
+                        options={defaultScreenOptions}
+                        component={DemoSetupPage}
+                    />
                     <RootStack.Screen
                         name={SCREENS.REPORT_ATTACHMENTS}
                         options={{
@@ -344,5 +367,8 @@ export default compose(
         lastUpdateIDAppliedToClient: {
             key: ONYXKEYS.ONYX_UPDATES_LAST_UPDATE_ID_APPLIED_TO_CLIENT,
         },
+        demoInfo: {
+            key: ONYXKEYS.DEMO_INFO,
+        },
     }),
 )(AuthScreens);
diff --git a/src/libs/Navigation/AppNavigator/ModalStackNavigators.js b/src/libs/Navigation/AppNavigator/ModalStackNavigators.js
index c32120db2e45..2d0fdd281422 100644
--- a/src/libs/Navigation/AppNavigator/ModalStackNavigators.js
+++ b/src/libs/Navigation/AppNavigator/ModalStackNavigators.js
@@ -53,6 +53,8 @@ const MoneyRequestModalStackNavigator = createModalStackNavigator({
 
 const SplitDetailsModalStackNavigator = createModalStackNavigator({
     SplitDetails_Root: () => require('../../../pages/iou/SplitBillDetailsPage').default,
+    SplitDetails_Edit_Request: () => require('../../../pages/EditSplitBillPage').default,
+    SplitDetails_Edit_Currency: () => require('../../../pages/iou/IOUCurrencySelection').default,
 });
 
 const DetailsModalStackNavigator = createModalStackNavigator({
@@ -153,6 +155,7 @@ const SettingsModalStackNavigator = createModalStackNavigator({
     Settings_Status_Set: () => require('../../../pages/settings/Profile/CustomStatus/StatusSetPage').default,
     Workspace_Initial: () => require('../../../pages/workspace/WorkspaceInitialPage').default,
     Workspace_Settings: () => require('../../../pages/workspace/WorkspaceSettingsPage').default,
+    Workspace_Settings_Currency: () => require('../../../pages/workspace/WorkspaceSettingsCurrencyPage').default,
     Workspace_Card: () => require('../../../pages/workspace/card/WorkspaceCardPage').default,
     Workspace_Reimburse: () => require('../../../pages/workspace/reimburse/WorkspaceReimbursePage').default,
     Workspace_RateAndUnit: () => require('../../../pages/workspace/reimburse/WorkspaceRateAndUnitPage').default,
@@ -165,6 +168,7 @@ const SettingsModalStackNavigator = createModalStackNavigator({
     ReimbursementAccount: () => require('../../../pages/ReimbursementAccount/ReimbursementAccountPage').default,
     GetAssistance: () => require('../../../pages/GetAssistancePage').default,
     Settings_TwoFactorAuth: () => require('../../../pages/settings/Security/TwoFactorAuth/TwoFactorAuthPage').default,
+    KeyboardShortcuts: () => require('../../../pages/KeyboardShortcutsPage').default,
 });
 
 const EnablePaymentsStackNavigator = createModalStackNavigator({
diff --git a/src/libs/Navigation/AppNavigator/PublicScreens.js b/src/libs/Navigation/AppNavigator/PublicScreens.js
index 7a87530a2d9e..7b0afb787278 100644
--- a/src/libs/Navigation/AppNavigator/PublicScreens.js
+++ b/src/libs/Navigation/AppNavigator/PublicScreens.js
@@ -8,6 +8,7 @@ import defaultScreenOptions from './defaultScreenOptions';
 import UnlinkLoginPage from '../../../pages/UnlinkLoginPage';
 import AppleSignInDesktopPage from '../../../pages/signin/AppleSignInDesktopPage';
 import GoogleSignInDesktopPage from '../../../pages/signin/GoogleSignInDesktopPage';
+import SAMLSignInPage from '../../../pages/signin/SAMLSignInPage';
 
 const RootStack = createStackNavigator();
 
@@ -44,6 +45,11 @@ function PublicScreens() {
                 options={defaultScreenOptions}
                 component={GoogleSignInDesktopPage}
             />
+            <RootStack.Screen
+                name="SAMLSignIn"
+                options={defaultScreenOptions}
+                component={SAMLSignInPage}
+            />
         </RootStack.Navigator>
     );
 }
diff --git a/src/libs/Navigation/Navigation.js b/src/libs/Navigation/Navigation.js
index 3e3dc59dcd80..db806f71fab0 100644
--- a/src/libs/Navigation/Navigation.js
+++ b/src/libs/Navigation/Navigation.js
@@ -3,7 +3,6 @@ import lodashGet from 'lodash/get';
 import {CommonActions, getPathFromState, StackActions} from '@react-navigation/native';
 import {getActionFromState} from '@react-navigation/core';
 import Log from '../Log';
-import DomUtils from '../DomUtils';
 import linkTo from './linkTo';
 import ROUTES from '../../ROUTES';
 import linkingConfig from './linkingConfig';
@@ -13,7 +12,7 @@ import originalGetTopmostReportId from './getTopmostReportId';
 import originalGetTopMostCentralPaneRouteName from './getTopMostCentralPaneRouteName';
 import originalGetTopmostReportActionId from './getTopmostReportActionID';
 import getStateFromPath from './getStateFromPath';
-import SCREENS from '../../SCREENS';
+import SCREENS, {PROTECTED_SCREENS} from '../../SCREENS';
 import CONST from '../../CONST';
 
 let resolveNavigationIsReadyPromise;
@@ -81,7 +80,7 @@ const getActiveRouteIndex = function (route, index) {
 /**
  * Main navigation method for redirecting to a route.
  * @param {String} route
- * @param {String} type - Type of action to perform. Currently UP is supported.
+ * @param {String} [type] - Type of action to perform. Currently UP is supported.
  */
 function navigate(route = ROUTES.HOME, type) {
     if (!canNavigate('navigate', {route})) {
@@ -92,11 +91,6 @@ function navigate(route = ROUTES.HOME, type) {
         return;
     }
 
-    // A pressed navigation button will remain focused, keeping its tooltip visible, even if it's supposed to be out of view.
-    // To prevent that we blur the button manually (especially for Safari, where the mouse leave event is missing).
-    // More info: https://github.com/Expensify/App/issues/13146
-    DomUtils.blurActiveElement();
-
     linkTo(navigationRef.current, route, type);
 }
 
@@ -178,6 +172,11 @@ function dismissModal(targetReportID) {
                 const action = getActionFromState(state, linkingConfig.config);
                 action.type = 'REPLACE';
                 navigationRef.current.dispatch(action);
+                // If not-found page is in the route stack, we need to close it
+            } else if (targetReportID && _.some(rootState.routes, (route) => route.name === SCREENS.NOT_FOUND)) {
+                const lastRouteIndex = rootState.routes.length - 1;
+                const centralRouteIndex = _.findLastIndex(rootState.routes, (route) => route.name === NAVIGATORS.CENTRAL_PANE_NAVIGATOR);
+                navigationRef.current.dispatch({...StackActions.pop(lastRouteIndex - centralRouteIndex), target: rootState.key});
             } else {
                 navigationRef.current.dispatch({...StackActions.pop(), target: rootState.key});
             }
@@ -263,6 +262,61 @@ function setIsNavigationReady() {
     resolveNavigationIsReadyPromise();
 }
 
+/**
+ *  Checks if the navigation state contains routes that are protected (over the auth wall).
+ *
+ *  @function
+ *  @param {Object} state - react-navigation state object
+ *
+ *  @returns {Boolean}
+ */
+function navContainsProtectedRoutes(state) {
+    if (!state || !state.routeNames || !_.isArray(state.routeNames)) {
+        return false;
+    }
+    const protectedScreensNames = _.values(PROTECTED_SCREENS);
+    const difference = _.difference(protectedScreensNames, state.routeNames);
+
+    return !difference.length;
+}
+
+/**
+ * Waits for the navigation state to contain protected routes specified in PROTECTED_SCREENS constant
+ * If the navigation is in a state, where protected routes are available, the promise will resolve immediately.
+ *
+ * @function
+ * @returns {Promise<void>} A promise that resolves to `true` when the Concierge route is present.
+ *                             Rejects with an error if the navigation is not ready.
+ *
+ * @example
+ * waitForProtectedRoutes()
+ *   .then(() => console.log('Protected routes are present!'))
+ *   .catch(error => console.error(error.message));
+ */
+function waitForProtectedRoutes() {
+    return new Promise((resolve, reject) => {
+        const isReady = navigationRef.current && navigationRef.current.isReady();
+        if (!isReady) {
+            reject(new Error('[Navigation] is not ready yet!'));
+            return;
+        }
+        const currentState = navigationRef.current.getState();
+        if (navContainsProtectedRoutes(currentState)) {
+            resolve();
+            return;
+        }
+        let unsubscribe;
+        const handleStateChange = ({data}) => {
+            const state = lodashGet(data, 'state');
+            if (navContainsProtectedRoutes(state)) {
+                unsubscribe();
+                resolve();
+            }
+        };
+        unsubscribe = navigationRef.current.addListener('state', handleStateChange);
+    });
+}
+
 export default {
     setShouldPopAllStateOnUP,
     canNavigate,
@@ -276,6 +330,7 @@ export default {
     setIsNavigationReady,
     getTopmostReportId,
     getRouteNameFromStateEvent,
+    waitForProtectedRoutes,
     getTopMostCentralPaneRouteName,
     getTopmostReportActionId,
 };
diff --git a/src/libs/Navigation/NavigationRoot.js b/src/libs/Navigation/NavigationRoot.js
index 34a52adfeca9..c7a3b14e4fb0 100644
--- a/src/libs/Navigation/NavigationRoot.js
+++ b/src/libs/Navigation/NavigationRoot.js
@@ -101,7 +101,7 @@ function NavigationRoot(props) {
 
     const animateStatusBarBackgroundColor = () => {
         const currentRoute = navigationRef.getCurrentRoute();
-        const currentScreenBackgroundColor = themeColors.PAGE_BACKGROUND_COLORS[currentRoute.name] || themeColors.appBG;
+        const currentScreenBackgroundColor = (currentRoute.params && currentRoute.params.backgroundColor) || themeColors.PAGE_BACKGROUND_COLORS[currentRoute.name] || themeColors.appBG;
 
         prevStatusBarBackgroundColor.current = statusBarBackgroundColor.current;
         statusBarBackgroundColor.current = currentScreenBackgroundColor;
diff --git a/src/libs/Navigation/linkingConfig.js b/src/libs/Navigation/linkingConfig.js
index 5616e8d63797..85c309c90d63 100644
--- a/src/libs/Navigation/linkingConfig.js
+++ b/src/libs/Navigation/linkingConfig.js
@@ -15,9 +15,13 @@ export default {
             [SCREENS.CONCIERGE]: ROUTES.CONCIERGE,
             AppleSignInDesktop: ROUTES.APPLE_SIGN_IN,
             GoogleSignInDesktop: ROUTES.GOOGLE_SIGN_IN,
+            SAMLSignIn: ROUTES.SAML_SIGN_IN,
             [SCREENS.DESKTOP_SIGN_IN_REDIRECT]: ROUTES.DESKTOP_SIGN_IN_REDIRECT,
             [SCREENS.REPORT_ATTACHMENTS]: ROUTES.REPORT_ATTACHMENTS.route,
 
+            // Demo routes
+            [CONST.DEMO_PAGES.MONEY2020]: ROUTES.MONEY2020,
+
             // Sidebar
             [SCREENS.HOME]: {
                 path: ROUTES.HOME,
@@ -185,6 +189,9 @@ export default {
                             Workspace_Settings: {
                                 path: ROUTES.WORKSPACE_SETTINGS.route,
                             },
+                            Workspace_Settings_Currency: {
+                                path: ROUTES.WORKSPACE_SETTINGS_CURRENCY.route,
+                            },
                             Workspace_Card: {
                                 path: ROUTES.WORKSPACE_CARD.route,
                             },
@@ -219,6 +226,9 @@ export default {
                             GetAssistance: {
                                 path: ROUTES.GET_ASSISTANCE.route,
                             },
+                            KeyboardShortcuts: {
+                                path: ROUTES.KEYBOARD_SHORTCUTS,
+                            },
                         },
                     },
                     Private_Notes: {
@@ -352,6 +362,8 @@ export default {
                     SplitDetails: {
                         screens: {
                             SplitDetails_Root: ROUTES.SPLIT_BILL_DETAILS.route,
+                            SplitDetails_Edit_Request: ROUTES.EDIT_SPLIT_BILL.route,
+                            SplitDetails_Edit_Currency: ROUTES.EDIT_SPLIT_BILL_CURRENCY.route,
                         },
                     },
                     Task_Details: {
diff --git a/src/libs/NumberUtils.ts b/src/libs/NumberUtils.ts
index 477ac8464d57..6e8d0fa4362b 100644
--- a/src/libs/NumberUtils.ts
+++ b/src/libs/NumberUtils.ts
@@ -71,4 +71,14 @@ function generateRandomInt(a: number, b: number): number {
     return Math.floor(lower + Math.random() * (upper - lower + 1));
 }
 
-export {rand64, generateHexadecimalValue, generateRandomInt, clampWorklet};
+/**
+ * Parses a numeric string value containing a decimal separator from any locale.
+ *
+ * @param value the string value to parse
+ * @returns a floating point number parsed from the string value
+ */
+function parseFloatAnyLocale(value: string): number {
+    return parseFloat(value ? value.replace(',', '.') : value);
+}
+
+export {rand64, generateHexadecimalValue, generateRandomInt, clampWorklet, parseFloatAnyLocale};
diff --git a/src/libs/OptionsListUtils.js b/src/libs/OptionsListUtils.js
index 82285545b303..051c19312f09 100644
--- a/src/libs/OptionsListUtils.js
+++ b/src/libs/OptionsListUtils.js
@@ -91,33 +91,6 @@ Onyx.connect({
     },
 });
 
-/**
- * Get the option for a policy expense report.
- * @param {Object} report
- * @returns {Object}
- */
-function getPolicyExpenseReportOption(report) {
-    const expenseReport = policyExpenseReports[`${ONYXKEYS.COLLECTION.REPORT}${report.reportID}`];
-    const policyExpenseChatAvatarSource = ReportUtils.getWorkspaceAvatar(expenseReport);
-    const reportName = ReportUtils.getReportName(expenseReport);
-    return {
-        ...expenseReport,
-        keyForList: expenseReport.policyID,
-        text: reportName,
-        alternateText: Localize.translateLocal('workspace.common.workspace'),
-        icons: [
-            {
-                source: policyExpenseChatAvatarSource,
-                name: reportName,
-                type: CONST.ICON_TYPE_WORKSPACE,
-            },
-        ],
-        selected: report.selected,
-        isPolicyExpenseChat: true,
-        searchText: report.searchText,
-    };
-}
-
 /**
  * Adds expensify SMS domain (@expensify.sms) if login is a phone number and if it's not included yet
  *
@@ -471,6 +444,7 @@ function createOption(accountIDs, personalDetails, report, reportActions = {}, {
         isArchivedRoom: false,
         shouldShowSubscript: false,
         isPolicyExpenseChat: false,
+        isOwnPolicyExpenseChat: false,
         isExpenseReport: false,
         policyID: null,
         isOptimisticPersonalDetail: false,
@@ -490,12 +464,13 @@ function createOption(accountIDs, personalDetails, report, reportActions = {}, {
         result.isChatRoom = ReportUtils.isChatRoom(report);
         result.isDefaultRoom = ReportUtils.isDefaultRoom(report);
         result.isArchivedRoom = ReportUtils.isArchivedRoom(report);
-        result.isPolicyExpenseChat = ReportUtils.isPolicyExpenseChat(report);
         result.isExpenseReport = ReportUtils.isExpenseReport(report);
         result.isMoneyRequestReport = ReportUtils.isMoneyRequestReport(report);
         result.isThread = ReportUtils.isChatThread(report);
         result.isTaskReport = ReportUtils.isTaskReport(report);
         result.shouldShowSubscript = ReportUtils.shouldReportShowSubscript(report);
+        result.isPolicyExpenseChat = ReportUtils.isPolicyExpenseChat(report);
+        result.isOwnPolicyExpenseChat = report.isOwnPolicyExpenseChat || false;
         result.allReportErrors = getAllReportErrors(report, reportActions);
         result.brickRoadIndicator = !_.isEmpty(result.allReportErrors) ? CONST.BRICK_ROAD_INDICATOR_STATUS.ERROR : '';
         result.pendingAction = report.pendingFields ? report.pendingFields.addWorkspaceRoom || report.pendingFields.createChat : null;
@@ -562,6 +537,32 @@ function createOption(accountIDs, personalDetails, report, reportActions = {}, {
     return result;
 }
 
+/**
+ * Get the option for a policy expense report.
+ * @param {Object} report
+ * @returns {Object}
+ */
+function getPolicyExpenseReportOption(report) {
+    const expenseReport = policyExpenseReports[`${ONYXKEYS.COLLECTION.REPORT}${report.reportID}`];
+
+    const option = createOption(
+        expenseReport.participantAccountIDs,
+        allPersonalDetails,
+        expenseReport,
+        {},
+        {
+            showChatPreviewLine: false,
+            forcePolicyNamePreview: false,
+        },
+    );
+
+    // Update text & alternateText because createOption returns workspace name only if report is owned by the user
+    option.text = ReportUtils.getPolicyName(expenseReport);
+    option.alternateText = Localize.translateLocal('workspace.common.workspace');
+    option.selected = report.selected;
+    return option;
+}
+
 /**
  * Searches for a match when provided with a value
  *
diff --git a/src/libs/Performance.js b/src/libs/Performance.tsx
similarity index 52%
rename from src/libs/Performance.js
rename to src/libs/Performance.tsx
index 0207fd20c564..cfb5e258c9f8 100644
--- a/src/libs/Performance.js
+++ b/src/libs/Performance.tsx
@@ -1,39 +1,73 @@
-import _ from 'underscore';
-import lodashTransform from 'lodash/transform';
 import React, {Profiler, forwardRef} from 'react';
 import {Alert, InteractionManager} from 'react-native';
+import lodashTransform from 'lodash/transform';
+import isObject from 'lodash/isObject';
+import isEqual from 'lodash/isEqual';
+import {Performance as RNPerformance, PerformanceEntry, PerformanceMark, PerformanceMeasure} from 'react-native-performance';
+import {PerformanceObserverEntryList} from 'react-native-performance/lib/typescript/performance-observer';
 
 import * as Metrics from './Metrics';
 import getComponentDisplayName from './getComponentDisplayName';
 import CONST from '../CONST';
 import isE2ETestSession from './E2E/isE2ETestSession';
 
-/** @type {import('react-native-performance').Performance} */
-let rnPerformance;
+type WrappedComponentConfig = {id: string};
+
+type PerformanceEntriesCallback = (entry: PerformanceEntry) => void;
+
+type Phase = 'mount' | 'update';
+
+type WithRenderTraceHOC = <P extends Record<string, unknown>>(WrappedComponent: React.ComponentType<P>) => React.ComponentType<P & React.RefAttributes<unknown>>;
+
+type BlankHOC = <P extends Record<string, unknown>>(Component: React.ComponentType<P>) => React.ComponentType<P>;
+
+type SetupPerformanceObserver = () => void;
+type DiffObject = (object: Record<string, unknown>, base: Record<string, unknown>) => Record<string, unknown>;
+type GetPerformanceMetrics = () => PerformanceEntry[];
+type PrintPerformanceMetrics = () => void;
+type MarkStart = (name: string, detail?: Record<string, unknown>) => PerformanceMark | void;
+type MarkEnd = (name: string, detail?: Record<string, unknown>) => PerformanceMark | void;
+type MeasureFailSafe = (measureName: string, startOrMeasureOptions: string, endMark: string) => void;
+type MeasureTTI = (endMark: string) => void;
+type TraceRender = (id: string, phase: Phase, actualDuration: number, baseDuration: number, startTime: number, commitTime: number, interactions: Set<unknown>) => PerformanceMeasure | void;
+type WithRenderTrace = ({id}: WrappedComponentConfig) => WithRenderTraceHOC | BlankHOC;
+type SubscribeToMeasurements = (callback: PerformanceEntriesCallback) => void;
+
+type PerformanceModule = {
+    diffObject: DiffObject;
+    setupPerformanceObserver: SetupPerformanceObserver;
+    getPerformanceMetrics: GetPerformanceMetrics;
+    printPerformanceMetrics: PrintPerformanceMetrics;
+    markStart: MarkStart;
+    markEnd: MarkEnd;
+    measureFailSafe: MeasureFailSafe;
+    measureTTI: MeasureTTI;
+    traceRender: TraceRender;
+    withRenderTrace: WithRenderTrace;
+    subscribeToMeasurements: SubscribeToMeasurements;
+};
+
+let rnPerformance: RNPerformance;
 
 /**
  * Deep diff between two objects. Useful for figuring out what changed about an object from one render to the next so
  * that state and props updates can be optimized.
- *
- * @param  {Object} object
- * @param  {Object} base
- * @return {Object}
  */
-function diffObject(object, base) {
-    function changes(obj, comparisonObject) {
+function diffObject(object: Record<string, unknown>, base: Record<string, unknown>): Record<string, unknown> {
+    function changes(obj: Record<string, unknown>, comparisonObject: Record<string, unknown>): Record<string, unknown> {
         return lodashTransform(obj, (result, value, key) => {
-            if (_.isEqual(value, comparisonObject[key])) {
+            if (isEqual(value, comparisonObject[key])) {
                 return;
             }
 
             // eslint-disable-next-line no-param-reassign
-            result[key] = _.isObject(value) && _.isObject(comparisonObject[key]) ? changes(value, comparisonObject[key]) : value;
+            result[key] = isObject(value) && isObject(comparisonObject[key]) ? changes(value as Record<string, unknown>, comparisonObject[key] as Record<string, unknown>) : value;
         });
     }
     return changes(object, base);
 }
 
-const Performance = {
+const Performance: PerformanceModule = {
     // When performance monitoring is disabled the implementations are blank
     diffObject,
     setupPerformanceObserver: () => {},
@@ -44,7 +78,11 @@ const Performance = {
     measureFailSafe: () => {},
     measureTTI: () => {},
     traceRender: () => {},
-    withRenderTrace: () => (Component) => Component,
+    withRenderTrace:
+        () =>
+        // eslint-disable-next-line @typescript-eslint/naming-convention
+        <P extends Record<string, unknown>>(Component: React.ComponentType<P>): React.ComponentType<P> =>
+            Component,
     subscribeToMeasurements: () => {},
 };
 
@@ -53,20 +91,21 @@ if (Metrics.canCapturePerformanceMetrics()) {
     perfModule.setResourceLoggingEnabled(true);
     rnPerformance = perfModule.default;
 
-    Performance.measureFailSafe = (measureName, startOrMeasureOptions, endMark) => {
+    Performance.measureFailSafe = (measureName: string, startOrMeasureOptions: string, endMark: string) => {
         try {
             rnPerformance.measure(measureName, startOrMeasureOptions, endMark);
         } catch (error) {
             // Sometimes there might be no start mark recorded and the measure will fail with an error
-            console.debug(error.message);
+            if (error instanceof Error) {
+                console.debug(error.message);
+            }
         }
     };
 
     /**
      * Measures the TTI time. To be called when the app is considered to be interactive.
-     * @param {String} [endMark] Optional end mark name
      */
-    Performance.measureTTI = (endMark) => {
+    Performance.measureTTI = (endMark: string) => {
         // Make sure TTI is captured when the app is really usable
         InteractionManager.runAfterInteractions(() => {
             requestAnimationFrame(() => {
@@ -88,8 +127,8 @@ if (Metrics.canCapturePerformanceMetrics()) {
         performanceReported.setupDefaultFlipperReporter();
 
         // Monitor some native marks that we want to put on the timeline
-        new perfModule.PerformanceObserver((list, observer) => {
-            list.getEntries().forEach((entry) => {
+        new perfModule.PerformanceObserver((list: PerformanceObserverEntryList, observer: PerformanceObserver) => {
+            list.getEntries().forEach((entry: PerformanceEntry) => {
                 if (entry.name === 'nativeLaunchEnd') {
                     Performance.measureFailSafe('nativeLaunch', 'nativeLaunchStart', 'nativeLaunchEnd');
                 }
@@ -108,8 +147,8 @@ if (Metrics.canCapturePerformanceMetrics()) {
         }).observe({type: 'react-native-mark', buffered: true});
 
         // Monitor for "_end" marks and capture "_start" to "_end" measures
-        new perfModule.PerformanceObserver((list) => {
-            list.getEntriesByType('mark').forEach((mark) => {
+        new perfModule.PerformanceObserver((list: PerformanceObserverEntryList) => {
+            list.getEntriesByType('mark').forEach((mark: PerformanceEntry) => {
                 if (mark.name.endsWith('_end')) {
                     const end = mark.name;
                     const name = end.replace(/_end$/, '');
@@ -125,65 +164,64 @@ if (Metrics.canCapturePerformanceMetrics()) {
         }).observe({type: 'mark', buffered: true});
     };
 
-    Performance.getPerformanceMetrics = () =>
-        _.chain([
+    Performance.getPerformanceMetrics = (): PerformanceEntry[] =>
+        [
             ...rnPerformance.getEntriesByName('nativeLaunch'),
             ...rnPerformance.getEntriesByName('runJsBundle'),
             ...rnPerformance.getEntriesByName('jsBundleDownload'),
             ...rnPerformance.getEntriesByName('TTI'),
             ...rnPerformance.getEntriesByName('regularAppStart'),
             ...rnPerformance.getEntriesByName('appStartedToReady'),
-        ])
-            .filter((entry) => entry.duration > 0)
-            .value();
+        ].filter((entry) => entry.duration > 0);
 
     /**
      * Outputs performance stats. We alert these so that they are easy to access in release builds.
      */
     Performance.printPerformanceMetrics = () => {
         const stats = Performance.getPerformanceMetrics();
-        const statsAsText = _.map(stats, (entry) => `\u2022 ${entry.name}: ${entry.duration.toFixed(1)}ms`).join('\n');
+        const statsAsText = stats.map((entry) => `\u2022 ${entry.name}: ${entry.duration.toFixed(1)}ms`).join('\n');
 
         if (stats.length > 0) {
             Alert.alert('Performance', statsAsText);
         }
     };
 
-    Performance.subscribeToMeasurements = (callback) => {
-        new perfModule.PerformanceObserver((list) => {
+    Performance.subscribeToMeasurements = (callback: PerformanceEntriesCallback) => {
+        new perfModule.PerformanceObserver((list: PerformanceObserverEntryList) => {
             list.getEntriesByType('measure').forEach(callback);
         }).observe({type: 'measure', buffered: true});
     };
 
     /**
      * Add a start mark to the performance entries
-     * @param {string} name
-     * @param {Object} [detail]
-     * @returns {PerformanceMark}
      */
-    Performance.markStart = (name, detail) => rnPerformance.mark(`${name}_start`, {detail});
+    Performance.markStart = (name: string, detail?: Record<string, unknown>): PerformanceMark => rnPerformance.mark(`${name}_start`, {detail});
 
     /**
      * Add an end mark to the performance entries
      * A measure between start and end is captured automatically
-     * @param {string} name
-     * @param {Object} [detail]
-     * @returns {PerformanceMark}
      */
-    Performance.markEnd = (name, detail) => rnPerformance.mark(`${name}_end`, {detail});
+    Performance.markEnd = (name: string, detail?: Record<string, unknown>): PerformanceMark => rnPerformance.mark(`${name}_end`, {detail});
 
     /**
      * Put data emitted by Profiler components on the timeline
-     * @param {string} id the "id" prop of the Profiler tree that has just committed
-     * @param {'mount'|'update'} phase either "mount" (if the tree just mounted) or "update" (if it re-rendered)
-     * @param {number} actualDuration time spent rendering the committed update
-     * @param {number} baseDuration estimated time to render the entire subtree without memoization
-     * @param {number} startTime when React began rendering this update
-     * @param {number} commitTime when React committed this update
-     * @param {Set} interactions the Set of interactions belonging to this update
-     * @returns {PerformanceMeasure}
+     * @param id the "id" prop of the Profiler tree that has just committed
+     * @param phase either "mount" (if the tree just mounted) or "update" (if it re-rendered)
+     * @param actualDuration time spent rendering the committed update
+     * @param baseDuration estimated time to render the entire subtree without memoization
+     * @param startTime when React began rendering this update
+     * @param commitTime when React committed this update
+     * @param interactions the Set of interactions belonging to this update
      */
-    Performance.traceRender = (id, phase, actualDuration, baseDuration, startTime, commitTime, interactions) =>
+    Performance.traceRender = (
+        id: string,
+        phase: Phase,
+        actualDuration: number,
+        baseDuration: number,
+        startTime: number,
+        commitTime: number,
+        interactions: Set<unknown>,
+    ): PerformanceMeasure =>
         rnPerformance.measure(id, {
             start: startTime,
             duration: actualDuration,
@@ -197,14 +235,12 @@ if (Metrics.canCapturePerformanceMetrics()) {
 
     /**
      * A HOC that captures render timings of the Wrapped component
-     * @param {object} config
-     * @param {string} config.id
-     * @returns {function(React.Component): React.FunctionComponent}
      */
     Performance.withRenderTrace =
-        ({id}) =>
-        (WrappedComponent) => {
-            const WithRenderTrace = forwardRef((props, ref) => (
+        ({id}: WrappedComponentConfig) =>
+        // eslint-disable-next-line @typescript-eslint/naming-convention
+        <P extends Record<string, unknown>>(WrappedComponent: React.ComponentType<P>): React.ComponentType<P & React.RefAttributes<unknown>> => {
+            const WithRenderTrace: React.ComponentType<P & React.RefAttributes<unknown>> = forwardRef((props: P, ref) => (
                 <Profiler
                     id={id}
                     onRender={Performance.traceRender}
@@ -217,7 +253,7 @@ if (Metrics.canCapturePerformanceMetrics()) {
                 </Profiler>
             ));
 
-            WithRenderTrace.displayName = `withRenderTrace(${getComponentDisplayName(WrappedComponent)})`;
+            WithRenderTrace.displayName = `withRenderTrace(${getComponentDisplayName(WrappedComponent as React.ComponentType)})`;
             return WithRenderTrace;
         };
 }
diff --git a/src/libs/Pusher/EventType.js b/src/libs/Pusher/EventType.ts
similarity index 97%
rename from src/libs/Pusher/EventType.js
rename to src/libs/Pusher/EventType.ts
index 85ccc5e17242..89e8a0ca0260 100644
--- a/src/libs/Pusher/EventType.js
+++ b/src/libs/Pusher/EventType.ts
@@ -11,4 +11,4 @@ export default {
     MULTIPLE_EVENT_TYPE: {
         ONYX_API_UPDATE: 'onyxApiUpdate',
     },
-};
+} as const;
diff --git a/src/libs/Pusher/library/index.js b/src/libs/Pusher/library/index.js
deleted file mode 100644
index 12cfae7df02f..000000000000
--- a/src/libs/Pusher/library/index.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * We use the standard pusher-js module to support pusher on web environments.
- * @see: https://github.com/pusher/pusher-js
- */
-import Pusher from 'pusher-js/with-encryption';
-
-export default Pusher;
diff --git a/src/libs/Pusher/library/index.native.js b/src/libs/Pusher/library/index.native.js
deleted file mode 100644
index 7b87d0c8bdfb..000000000000
--- a/src/libs/Pusher/library/index.native.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * We use the pusher-js/react-native module to support pusher on native environments.
- * @see: https://github.com/pusher/pusher-js
- */
-import Pusher from 'pusher-js/react-native';
-
-export default Pusher;
diff --git a/src/libs/Pusher/library/index.native.ts b/src/libs/Pusher/library/index.native.ts
new file mode 100644
index 000000000000..f50834366515
--- /dev/null
+++ b/src/libs/Pusher/library/index.native.ts
@@ -0,0 +1,10 @@
+/**
+ * We use the pusher-js/react-native module to support pusher on native environments.
+ * @see: https://github.com/pusher/pusher-js
+ */
+import PusherImplementation from 'pusher-js/react-native';
+import Pusher from './types';
+
+const PusherNative: Pusher = PusherImplementation;
+
+export default PusherNative;
diff --git a/src/libs/Pusher/library/index.ts b/src/libs/Pusher/library/index.ts
new file mode 100644
index 000000000000..6a7104a1d2a5
--- /dev/null
+++ b/src/libs/Pusher/library/index.ts
@@ -0,0 +1,10 @@
+/**
+ * We use the standard pusher-js module to support pusher on web environments.
+ * @see: https://github.com/pusher/pusher-js
+ */
+import PusherImplementation from 'pusher-js/with-encryption';
+import type Pusher from './types';
+
+const PusherWeb: Pusher = PusherImplementation;
+
+export default PusherWeb;
diff --git a/src/libs/Pusher/library/types.ts b/src/libs/Pusher/library/types.ts
new file mode 100644
index 000000000000..cc8c70fccdbb
--- /dev/null
+++ b/src/libs/Pusher/library/types.ts
@@ -0,0 +1,10 @@
+import PusherClass from 'pusher-js/with-encryption';
+import {LiteralUnion} from 'type-fest';
+
+type Pusher = typeof PusherClass;
+
+type SocketEventName = LiteralUnion<'error' | 'connected' | 'disconnected' | 'state_change', string>;
+
+export default Pusher;
+
+export type {SocketEventName};
diff --git a/src/libs/Pusher/pusher.js b/src/libs/Pusher/pusher.ts
similarity index 72%
rename from src/libs/Pusher/pusher.js
rename to src/libs/Pusher/pusher.ts
index 4f2b63d36c0c..dad963e933fe 100644
--- a/src/libs/Pusher/pusher.js
+++ b/src/libs/Pusher/pusher.ts
@@ -1,9 +1,48 @@
 import Onyx from 'react-native-onyx';
-import _ from 'underscore';
+import {Channel, ChannelAuthorizerGenerator, Options} from 'pusher-js/with-encryption';
+import isObject from 'lodash/isObject';
+import {LiteralUnion, ValueOf} from 'type-fest';
 import ONYXKEYS from '../../ONYXKEYS';
 import Pusher from './library';
 import TYPE from './EventType';
 import Log from '../Log';
+import DeepValueOf from '../../types/utils/DeepValueOf';
+import {SocketEventName} from './library/types';
+import CONST from '../../CONST';
+import {OnyxUpdateEvent, OnyxUpdatesFromServer} from '../../types/onyx';
+
+type States = {
+    previous: string;
+    current: string;
+};
+
+type Args = {
+    appKey: string;
+    cluster: string;
+    authEndpoint: string;
+};
+
+type PushJSON = OnyxUpdateEvent[] | OnyxUpdatesFromServer;
+
+type EventCallbackError = {type: ValueOf<typeof CONST.ERROR>; data: {code: number}};
+
+type ChunkedDataEvents = {chunks: unknown[]; receivedFinal: boolean};
+
+type EventData = {id?: string; chunk?: unknown; final?: boolean; index: number};
+
+type SocketEventCallback = (eventName: SocketEventName, data?: States | EventCallbackError) => void;
+
+type PusherWithAuthParams = InstanceType<typeof Pusher> & {
+    config: {
+        auth?: {
+            params?: unknown;
+        };
+    };
+};
+
+type PusherEventName = LiteralUnion<DeepValueOf<typeof TYPE>, string>;
+
+type PusherSubscribtionErrorData = {type?: string; error?: string; status?: string};
 
 let shouldForceOffline = false;
 Onyx.connect({
@@ -16,33 +55,23 @@ Onyx.connect({
     },
 });
 
-let socket;
+let socket: PusherWithAuthParams | null;
 let pusherSocketID = '';
-const socketEventCallbacks = [];
-let customAuthorizer;
+const socketEventCallbacks: SocketEventCallback[] = [];
+let customAuthorizer: ChannelAuthorizerGenerator;
 
 /**
  * Trigger each of the socket event callbacks with the event information
- *
- * @param {String} eventName
- * @param {*} data
  */
-function callSocketEventCallbacks(eventName, data) {
-    _.each(socketEventCallbacks, (cb) => cb(eventName, data));
+function callSocketEventCallbacks(eventName: SocketEventName, data?: EventCallbackError | States) {
+    socketEventCallbacks.forEach((cb) => cb(eventName, data));
 }
 
 /**
  * Initialize our pusher lib
- *
- * @param {Object} args
- * @param {String} args.appKey
- * @param {String} args.cluster
- * @param {String} args.authEndpoint
- * @param {Object} [params]
- * @public
- * @returns {Promise} resolves when Pusher has connected
+ * @returns resolves when Pusher has connected
  */
-function init(args, params) {
+function init(args: Args, params?: unknown): Promise<void> {
     return new Promise((resolve) => {
         if (socket) {
             return resolve();
@@ -55,7 +84,7 @@ function init(args, params) {
         //     }
         // };
 
-        const options = {
+        const options: Options = {
             cluster: args.cluster,
             authEndpoint: args.authEndpoint,
         };
@@ -65,7 +94,6 @@ function init(args, params) {
         }
 
         socket = new Pusher(args.appKey, options);
-
         // If we want to pass params in our requests to api.php we'll need to add it to socket.config.auth.params
         // as per the documentation
         // (https://pusher.com/docs/channels/using_channels/connection#channels-options-parameter).
@@ -77,21 +105,21 @@ function init(args, params) {
         }
 
         // Listen for connection errors and log them
-        socket.connection.bind('error', (error) => {
+        socket?.connection.bind('error', (error: EventCallbackError) => {
             callSocketEventCallbacks('error', error);
         });
 
-        socket.connection.bind('connected', () => {
-            pusherSocketID = socket.connection.socket_id;
+        socket?.connection.bind('connected', () => {
+            pusherSocketID = socket?.connection.socket_id ?? '';
             callSocketEventCallbacks('connected');
             resolve();
         });
 
-        socket.connection.bind('disconnected', () => {
+        socket?.connection.bind('disconnected', () => {
             callSocketEventCallbacks('disconnected');
         });
 
-        socket.connection.bind('state_change', (states) => {
+        socket?.connection.bind('state_change', (states: States) => {
             callSocketEventCallbacks('state_change', states);
         });
     });
@@ -99,12 +127,8 @@ function init(args, params) {
 
 /**
  * Returns a Pusher channel for a channel name
- *
- * @param {String} channelName
- *
- * @returns {Channel}
  */
-function getChannel(channelName) {
+function getChannel(channelName: string): Channel | undefined {
     if (!socket) {
         return;
     }
@@ -114,19 +138,14 @@ function getChannel(channelName) {
 
 /**
  * Binds an event callback to a channel + eventName
- * @param {Pusher.Channel} channel
- * @param {String} eventName
- * @param {Function} [eventCallback]
- *
- * @private
  */
-function bindEventToChannel(channel, eventName, eventCallback = () => {}) {
+function bindEventToChannel(channel: Channel | undefined, eventName: PusherEventName, eventCallback: (data: PushJSON) => void = () => {}) {
     if (!eventName) {
         return;
     }
 
-    const chunkedDataEvents = {};
-    const callback = (eventData) => {
+    const chunkedDataEvents: Record<string, ChunkedDataEvents> = {};
+    const callback = (eventData: string | Record<string, unknown> | EventData) => {
         if (shouldForceOffline) {
             Log.info('[Pusher] Ignoring a Push event because shouldForceOffline = true');
             return;
@@ -134,7 +153,7 @@ function bindEventToChannel(channel, eventName, eventCallback = () => {}) {
 
         let data;
         try {
-            data = _.isObject(eventData) ? eventData : JSON.parse(eventData);
+            data = isObject(eventData) ? eventData : JSON.parse(eventData);
         } catch (err) {
             Log.alert('[Pusher] Unable to parse single JSON event data from Pusher', {error: err, eventData});
             return;
@@ -164,7 +183,7 @@ function bindEventToChannel(channel, eventName, eventCallback = () => {}) {
 
         // Only call the event callback if we've received the last packet and we don't have any holes in the complete
         // packet.
-        if (chunkedEvent.receivedFinal && chunkedEvent.chunks.length === _.keys(chunkedEvent.chunks).length) {
+        if (chunkedEvent.receivedFinal && chunkedEvent.chunks.length === Object.keys(chunkedEvent.chunks).length) {
             try {
                 eventCallback(JSON.parse(chunkedEvent.chunks.join('')));
             } catch (err) {
@@ -181,22 +200,14 @@ function bindEventToChannel(channel, eventName, eventCallback = () => {}) {
         }
     };
 
-    channel.bind(eventName, callback);
+    channel?.bind(eventName, callback);
 }
 
 /**
  * Subscribe to a channel and an event
- *
- * @param {String} channelName
- * @param {String} eventName
- * @param {Function} [eventCallback]
- * @param {Function} [onResubscribe] Callback to be called when reconnection happen
- *
- * @return {Promise}
- *
- * @public
+ * @param [onResubscribe] Callback to be called when reconnection happen
  */
-function subscribe(channelName, eventName, eventCallback = () => {}, onResubscribe = () => {}) {
+function subscribe(channelName: string, eventName: PusherEventName, eventCallback: (data: PushJSON) => void = () => {}, onResubscribe = () => {}): Promise<void> {
     return new Promise((resolve, reject) => {
         // We cannot call subscribe() before init(). Prevent any attempt to do this on dev.
         if (!socket) {
@@ -226,7 +237,7 @@ function subscribe(channelName, eventName, eventCallback = () => {}, onResubscri
                 onResubscribe();
             });
 
-            channel.bind('pusher:subscription_error', (data = {}) => {
+            channel.bind('pusher:subscription_error', (data: PusherSubscribtionErrorData = {}) => {
                 const {type, error, status} = data;
                 Log.hmmm('[Pusher] Issue authenticating with Pusher during subscribe attempt.', {
                     channelName,
@@ -245,12 +256,8 @@ function subscribe(channelName, eventName, eventCallback = () => {}, onResubscri
 
 /**
  * Unsubscribe from a channel and optionally a specific event
- *
- * @param {String} channelName
- * @param {String} [eventName]
- * @public
  */
-function unsubscribe(channelName, eventName = '') {
+function unsubscribe(channelName: string, eventName: PusherEventName = '') {
     const channel = getChannel(channelName);
 
     if (!channel) {
@@ -269,18 +276,14 @@ function unsubscribe(channelName, eventName = '') {
         Log.info('[Pusher] Unsubscribing from channel', false, {channelName});
 
         channel.unbind();
-        socket.unsubscribe(channelName);
+        socket?.unsubscribe(channelName);
     }
 }
 
 /**
  * Are we already in the process of subscribing to this channel?
- *
- * @param {String} channelName
- *
- * @returns {Boolean}
  */
-function isAlreadySubscribing(channelName) {
+function isAlreadySubscribing(channelName: string): boolean {
     if (!socket) {
         return false;
     }
@@ -291,12 +294,8 @@ function isAlreadySubscribing(channelName) {
 
 /**
  * Are we already subscribed to this channel?
- *
- * @param {String} channelName
- *
- * @returns {Boolean}
  */
-function isSubscribed(channelName) {
+function isSubscribed(channelName: string): boolean {
     if (!socket) {
         return false;
     }
@@ -307,12 +306,8 @@ function isSubscribed(channelName) {
 
 /**
  * Sends an event over a specific event/channel in pusher.
- *
- * @param {String} channelName
- * @param {String} eventName
- * @param {Object} payload
  */
-function sendEvent(channelName, eventName, payload) {
+function sendEvent(channelName: string, eventName: PusherEventName, payload: Record<string, unknown>) {
     // Check to see if we are subscribed to this channel before sending the event. Sending client events over channels
     // we are not subscribed too will throw errors and cause reconnection attempts. Subscriptions are not instant and
     // can happen later than we expect.
@@ -325,15 +320,13 @@ function sendEvent(channelName, eventName, payload) {
         return;
     }
 
-    socket.send_event(eventName, payload, channelName);
+    socket?.send_event(eventName, payload, channelName);
 }
 
 /**
  * Register a method that will be triggered when a socket event happens (like disconnecting)
- *
- * @param {Function} cb
  */
-function registerSocketEventCallback(cb) {
+function registerSocketEventCallback(cb: SocketEventCallback) {
     socketEventCallbacks.push(cb);
 }
 
@@ -341,10 +334,8 @@ function registerSocketEventCallback(cb) {
  * A custom authorizer allows us to take a more fine-grained approach to
  * authenticating Pusher. e.g. we can handle failed attempts to authorize
  * with an expired authToken and retry the attempt.
- *
- * @param {Function} authorizer
  */
-function registerCustomAuthorizer(authorizer) {
+function registerCustomAuthorizer(authorizer: ChannelAuthorizerGenerator) {
     customAuthorizer = authorizer;
 }
 
@@ -376,18 +367,13 @@ function reconnect() {
     socket.connect();
 }
 
-/**
- * @returns {String}
- */
-function getPusherSocketID() {
+function getPusherSocketID(): string {
     return pusherSocketID;
 }
 
 if (window) {
     /**
      * Pusher socket for debugging purposes
-     *
-     * @returns {Function}
      */
     window.getPusherInstance = () => socket;
 }
@@ -407,3 +393,5 @@ export {
     TYPE,
     getPusherSocketID,
 };
+
+export type {EventCallbackError, States, PushJSON};
diff --git a/src/libs/PusherConnectionManager.ts b/src/libs/PusherConnectionManager.ts
index 4ab08d6dc760..9b1f6ebe1b2a 100644
--- a/src/libs/PusherConnectionManager.ts
+++ b/src/libs/PusherConnectionManager.ts
@@ -1,11 +1,10 @@
-import {ValueOf} from 'type-fest';
+import {ChannelAuthorizationCallback} from 'pusher-js/with-encryption';
 import * as Pusher from './Pusher/pusher';
 import * as Session from './actions/Session';
 import Log from './Log';
 import CONST from '../CONST';
-
-type EventCallbackError = {type: ValueOf<typeof CONST.ERROR>; data: {code: number}};
-type CustomAuthorizerChannel = {name: string};
+import {SocketEventName} from './Pusher/library/types';
+import {EventCallbackError, States} from './Pusher/pusher';
 
 function init() {
     /**
@@ -14,30 +13,32 @@ function init() {
      * current valid token to generate the signed auth response
      * needed to subscribe to Pusher channels.
      */
-    Pusher.registerCustomAuthorizer((channel: CustomAuthorizerChannel) => ({
-        authorize: (socketID: string, callback: () => void) => {
-            Session.authenticatePusher(socketID, channel.name, callback);
+    Pusher.registerCustomAuthorizer((channel) => ({
+        authorize: (socketId: string, callback: ChannelAuthorizationCallback) => {
+            Session.authenticatePusher(socketId, channel.name, callback);
         },
     }));
 
-    Pusher.registerSocketEventCallback((eventName: string, error: EventCallbackError) => {
+    Pusher.registerSocketEventCallback((eventName: SocketEventName, error?: EventCallbackError | States) => {
         switch (eventName) {
             case 'error': {
-                const errorType = error?.type;
-                const code = error?.data?.code;
-                if (errorType === CONST.ERROR.PUSHER_ERROR && code === 1006) {
-                    // 1006 code happens when a websocket connection is closed. There may or may not be a reason attached indicating why the connection was closed.
-                    // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5
-                    Log.hmmm('[PusherConnectionManager] Channels Error 1006', {error});
-                } else if (errorType === CONST.ERROR.PUSHER_ERROR && code === 4201) {
-                    // This means the connection was closed because Pusher did not receive a reply from the client when it pinged them for a response
-                    // https://pusher.com/docs/channels/library_auth_reference/pusher-websockets-protocol/#4200-4299
-                    Log.hmmm('[PusherConnectionManager] Pong reply not received', {error});
-                } else if (errorType === CONST.ERROR.WEB_SOCKET_ERROR) {
-                    // It's not clear why some errors are wrapped in a WebSocketError type - this error could mean different things depending on the contents.
-                    Log.hmmm('[PusherConnectionManager] WebSocketError', {error});
-                } else {
-                    Log.alert(`${CONST.ERROR.ENSURE_BUGBOT} [PusherConnectionManager] Unknown error event`, {error});
+                if (error && 'type' in error) {
+                    const errorType = error?.type;
+                    const code = error?.data?.code;
+                    if (errorType === CONST.ERROR.PUSHER_ERROR && code === 1006) {
+                        // 1006 code happens when a websocket connection is closed. There may or may not be a reason attached indicating why the connection was closed.
+                        // https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5
+                        Log.hmmm('[PusherConnectionManager] Channels Error 1006', {error});
+                    } else if (errorType === CONST.ERROR.PUSHER_ERROR && code === 4201) {
+                        // This means the connection was closed because Pusher did not receive a reply from the client when it pinged them for a response
+                        // https://pusher.com/docs/channels/library_auth_reference/pusher-websockets-protocol/#4200-4299
+                        Log.hmmm('[PusherConnectionManager] Pong reply not received', {error});
+                    } else if (errorType === CONST.ERROR.WEB_SOCKET_ERROR) {
+                        // It's not clear why some errors are wrapped in a WebSocketError type - this error could mean different things depending on the contents.
+                        Log.hmmm('[PusherConnectionManager] WebSocketError', {error});
+                    } else {
+                        Log.alert(`${CONST.ERROR.ENSURE_BUGBOT} [PusherConnectionManager] Unknown error event`, {error});
+                    }
                 }
                 break;
             }
diff --git a/src/libs/PusherUtils.ts b/src/libs/PusherUtils.ts
index 5baa4b68d5f8..d47283f21bbf 100644
--- a/src/libs/PusherUtils.ts
+++ b/src/libs/PusherUtils.ts
@@ -4,9 +4,7 @@ import Log from './Log';
 import NetworkConnection from './NetworkConnection';
 import * as Pusher from './Pusher/pusher';
 import CONST from '../CONST';
-import {OnyxUpdateEvent, OnyxUpdatesFromServer} from '../types/onyx';
-
-type PushJSON = OnyxUpdateEvent[] | OnyxUpdatesFromServer;
+import {PushJSON} from './Pusher/pusher';
 
 type Callback = (data: OnyxUpdate[]) => Promise<void>;
 
diff --git a/src/libs/ReportActionComposeFocusManager.ts b/src/libs/ReportActionComposeFocusManager.ts
index ca4f9d77898b..65466fa4a204 100644
--- a/src/libs/ReportActionComposeFocusManager.ts
+++ b/src/libs/ReportActionComposeFocusManager.ts
@@ -1,5 +1,7 @@
 import React from 'react';
 import {TextInput} from 'react-native';
+import ROUTES from '../ROUTES';
+import Navigation from './Navigation/Navigation';
 
 type FocusCallback = () => void;
 
@@ -28,6 +30,11 @@ function onComposerFocus(callback: FocusCallback, isMainComposer = false) {
  * Request focus on the ReportActionComposer
  */
 function focus() {
+    /** Do not trigger the refocusing when the active route is not the report route, */
+    if (!Navigation.isActiveRoute(ROUTES.REPORT_WITH_ID.getRoute(Navigation.getTopmostReportId() ?? ''))) {
+        return;
+    }
+
     if (typeof focusCallback !== 'function') {
         if (typeof mainComposerFocusCallback !== 'function') {
             return;
diff --git a/src/libs/ReportActionsUtils.js b/src/libs/ReportActionsUtils.js
index 258582d9f653..fa1883dd9b98 100644
--- a/src/libs/ReportActionsUtils.js
+++ b/src/libs/ReportActionsUtils.js
@@ -68,6 +68,14 @@ function isDeletedParentAction(reportAction) {
     return lodashGet(reportAction, ['message', 0, 'isDeletedParentAction'], false) && lodashGet(reportAction, 'childVisibleActionCount', 0) > 0;
 }
 
+/**
+ * @param {Object} reportAction
+ * @returns {Boolean}
+ */
+function isReversedTransaction(reportAction) {
+    return lodashGet(reportAction, ['message', 0, 'isReversedTransaction'], false) && lodashGet(reportAction, 'childVisibleActionCount', 0) > 0;
+}
+
 /**
  * @param {Object} reportAction
  * @returns {Boolean}
@@ -352,7 +360,7 @@ function shouldReportActionBeVisible(reportAction, key) {
     // All other actions are displayed except thread parents, deleted, or non-pending actions
     const isDeleted = isDeletedAction(reportAction);
     const isPending = !!reportAction.pendingAction;
-    return !isDeleted || isPending || isDeletedParentAction(reportAction);
+    return !isDeleted || isPending || isDeletedParentAction(reportAction) || isReversedTransaction(reportAction);
 }
 
 /**
@@ -673,6 +681,7 @@ export {
     isTransactionThread,
     isSentMoneyReportAction,
     isDeletedParentAction,
+    isReversedTransaction,
     isReportPreviewAction,
     isModifiedExpenseAction,
     getIOUReportIDFromReportActionPreview,
diff --git a/src/libs/ReportUtils.js b/src/libs/ReportUtils.js
index b5fc0bff6ec7..0b7bbfd61461 100644
--- a/src/libs/ReportUtils.js
+++ b/src/libs/ReportUtils.js
@@ -1267,6 +1267,17 @@ function isWaitingForTaskCompleteFromAssignee(report, parentReportAction = {}) {
     return isTaskReport(report) && isReportManager(report) && isOpenTaskReport(report, parentReportAction);
 }
 
+/**
+ * Returns number of transactions that are nonReimbursable
+ *
+ * @param {Object|null} iouReportID
+ * @returns {Number}
+ */
+function hasNonReimbursableTransactions(iouReportID) {
+    const allTransactions = TransactionUtils.getAllReportTransactions(iouReportID);
+    return _.filter(allTransactions, (transaction) => transaction.reimbursable === false).length > 0;
+}
+
 /**
  * @param {Object} report
  * @param {Object} allReportsDict
@@ -1344,6 +1355,10 @@ function getMoneyRequestReportName(report, policy = undefined) {
         return `${payerPaidAmountMesssage} • ${Localize.translateLocal('iou.pending')}`;
     }
 
+    if (hasNonReimbursableTransactions(report.reportID)) {
+        return Localize.translateLocal('iou.payerSpentAmount', {payer: payerName, amount: formattedAmount});
+    }
+
     if (report.hasOutstandingIOU) {
         return Localize.translateLocal('iou.payerOwesAmount', {payer: payerName, amount: formattedAmount});
     }
@@ -1356,12 +1371,13 @@ function getMoneyRequestReportName(report, policy = undefined) {
  * into a flat object. Used for displaying transactions and sending them in API commands
  *
  * @param {Object} transaction
+ * @param {Object} createdDateFormat
  * @returns {Object}
  */
-function getTransactionDetails(transaction) {
+function getTransactionDetails(transaction, createdDateFormat = CONST.DATE.FNS_FORMAT_STRING) {
     const report = getReport(transaction.reportID);
     return {
-        created: TransactionUtils.getCreated(transaction),
+        created: TransactionUtils.getCreated(transaction, createdDateFormat),
         amount: TransactionUtils.getAmount(transaction, isExpenseReport(report)),
         currency: TransactionUtils.getCurrency(transaction),
         comment: TransactionUtils.getDescription(transaction),
@@ -1370,6 +1386,10 @@ function getTransactionDetails(transaction) {
         category: TransactionUtils.getCategory(transaction),
         billable: TransactionUtils.getBillable(transaction),
         tag: TransactionUtils.getTag(transaction),
+        mccGroup: TransactionUtils.getMCCGroup(transaction),
+        cardID: TransactionUtils.getCardID(transaction),
+        originalAmount: TransactionUtils.getOriginalAmount(transaction),
+        originalCurrency: TransactionUtils.getOriginalCurrency(transaction),
     };
 }
 
@@ -1474,7 +1494,11 @@ function hasMissingSmartscanFields(iouReportID) {
  * @returns {String}
  */
 function getTransactionReportName(reportAction) {
-    if (ReportActionsUtils.isDeletedParentAction(reportAction)) {
+    if (ReportActionsUtils.isReversedTransaction(reportAction)) {
+        return Localize.translateLocal('parentReportAction.reversedTransaction');
+    }
+
+    if (ReportActionsUtils.isDeletedAction(reportAction)) {
         return Localize.translateLocal('parentReportAction.deletedRequest');
     }
 
@@ -1512,6 +1536,20 @@ function getReportPreviewMessage(report, reportAction = {}, shouldConsiderReceip
         return reportActionMessage;
     }
 
+    if (!isIOUReport(report) && ReportActionsUtils.isSplitBillAction(reportAction)) {
+        // This covers group chats where the last action is a split bill action
+        const linkedTransaction = TransactionUtils.getLinkedTransaction(reportAction);
+        if (_.isEmpty(linkedTransaction)) {
+            return reportActionMessage;
+        }
+        if (TransactionUtils.isReceiptBeingScanned(linkedTransaction)) {
+            return Localize.translateLocal('iou.receiptScanning');
+        }
+        const {amount, currency, comment} = getTransactionDetails(linkedTransaction);
+        const formattedAmount = CurrencyUtils.convertToDisplayString(amount, currency);
+        return Localize.translateLocal('iou.didSplitAmount', {formattedAmount, comment});
+    }
+
     const totalAmount = getMoneyRequestTotal(report);
     const payerName = isExpenseReport(report) ? getPolicyName(report) : getDisplayNameForParticipant(report.managerID, true);
     const formattedAmount = CurrencyUtils.convertToDisplayString(totalAmount, report.currency);
@@ -1545,7 +1583,8 @@ function getReportPreviewMessage(report, reportAction = {}, shouldConsiderReceip
         return Localize.translateLocal('iou.waitingOnBankAccount', {submitterDisplayName});
     }
 
-    return Localize.translateLocal('iou.payerOwesAmount', {payer: payerName, amount: formattedAmount});
+    const containsNonReimbursable = hasNonReimbursableTransactions(report.reportID);
+    return Localize.translateLocal(containsNonReimbursable ? 'iou.payerSpentAmount' : 'iou.payerOwesAmount', {payer: payerName, amount: formattedAmount});
 }
 
 /**
@@ -2118,6 +2157,7 @@ function buildOptimisticIOUReport(payeeAccountID, payerAccountID, total, chatRep
         reportID: generateReportID(),
         state: CONST.REPORT.STATE.SUBMITTED,
         stateNum: isSendingMoney ? CONST.REPORT.STATE_NUM.SUBMITTED : CONST.REPORT.STATE_NUM.PROCESSING,
+        statusNum: isSendingMoney ? CONST.REPORT.STATUS.REIMBURSED : CONST.REPORT.STATE_NUM.PROCESSING,
         total,
 
         // We don't translate reportName because the server response is always in English
@@ -2410,6 +2450,7 @@ function buildOptimisticReportPreview(chatReport, iouReport, comment = '', trans
     const hasReceipt = TransactionUtils.hasReceipt(transaction);
     const isReceiptBeingScanned = hasReceipt && TransactionUtils.isReceiptBeingScanned(transaction);
     const message = getReportPreviewMessage(iouReport);
+    const created = DateUtils.getDBTime();
     return {
         reportActionID: NumberUtils.rand64(),
         reportID: chatReport.reportID,
@@ -2426,13 +2467,13 @@ function buildOptimisticReportPreview(chatReport, iouReport, comment = '', trans
                 type: CONST.REPORT.MESSAGE.TYPE.COMMENT,
             },
         ],
-        created: DateUtils.getDBTime(),
+        created,
         accountID: iouReport.managerID || 0,
         // The preview is initially whispered if created with a receipt, so the actor is the current user as well
         actorAccountID: hasReceipt ? currentUserAccountID : iouReport.managerID || 0,
         childMoneyRequestCount: 1,
         childLastMoneyRequestComment: comment,
-        childLastReceiptTransactionIDs: hasReceipt ? transaction.transactionID : '',
+        childRecentReceiptTransactionIDs: hasReceipt ? {[transaction.transactionID]: created} : [],
         whisperedToAccountIDs: isReceiptBeingScanned ? [currentUserAccountID] : [],
     };
 }
@@ -2491,8 +2532,9 @@ function buildOptimisticModifiedExpenseReportAction(transactionThread, oldTransa
  */
 function updateReportPreview(iouReport, reportPreviewAction, isPayRequest = false, comment = '', transaction = undefined) {
     const hasReceipt = TransactionUtils.hasReceipt(transaction);
-    const lastReceiptTransactionIDs = lodashGet(reportPreviewAction, 'childLastReceiptTransactionIDs', '');
-    const previousTransactionIDs = lastReceiptTransactionIDs.split(',').slice(0, 2);
+    const recentReceiptTransactions = lodashGet(reportPreviewAction, 'childRecentReceiptTransactionIDs', {});
+    const transactionsToKeep = TransactionUtils.getRecentTransactions(recentReceiptTransactions);
+    const previousTransactions = _.mapObject(recentReceiptTransactions, (value, key) => (_.contains(transactionsToKeep, key) ? value : null));
 
     const message = getReportPreviewMessage(iouReport, reportPreviewAction);
     return {
@@ -2508,7 +2550,12 @@ function updateReportPreview(iouReport, reportPreviewAction, isPayRequest = fals
         ],
         childLastMoneyRequestComment: comment || reportPreviewAction.childLastMoneyRequestComment,
         childMoneyRequestCount: reportPreviewAction.childMoneyRequestCount + (isPayRequest ? 0 : 1),
-        childLastReceiptTransactionIDs: hasReceipt ? [transaction.transactionID, ...previousTransactionIDs].join(',') : lastReceiptTransactionIDs,
+        childRecentReceiptTransactionIDs: hasReceipt
+            ? {
+                  [transaction.transactionID]: transaction.created,
+                  ...previousTransactions,
+              }
+            : recentReceiptTransactions,
         // As soon as we add a transaction without a receipt to the report, it will have ready money requests,
         // so we remove the whisper
         whisperedToAccountIDs: hasReceipt ? reportPreviewAction.whisperedToAccountIDs : [],
@@ -2566,6 +2613,7 @@ function buildOptimisticTaskReportAction(taskReportID, actionName, message = '')
  * @param {String} notificationPreference
  * @param {String} parentReportActionID
  * @param {String} parentReportID
+ * @param {String} welcomeMessage
  * @returns {Object}
  */
 function buildOptimisticChatReport(
@@ -2581,6 +2629,7 @@ function buildOptimisticChatReport(
     notificationPreference = CONST.REPORT.NOTIFICATION_PREFERENCE.ALWAYS,
     parentReportActionID = '',
     parentReportID = '',
+    welcomeMessage = '',
 ) {
     const currentTime = DateUtils.getDBTime();
     return {
@@ -2607,7 +2656,7 @@ function buildOptimisticChatReport(
         stateNum: 0,
         statusNum: 0,
         visibility,
-        welcomeMessage: '',
+        welcomeMessage,
         writeCapability,
     };
 }
@@ -2822,6 +2871,7 @@ function buildOptimisticTaskReport(ownerAccountID, assigneeAccountID = 0, parent
         policyID,
         stateNum: CONST.REPORT.STATE_NUM.OPEN,
         statusNum: CONST.REPORT.STATUS.OPEN,
+        notificationPreference: CONST.REPORT.NOTIFICATION_PREFERENCE.ALWAYS,
     };
 }
 
@@ -3385,8 +3435,12 @@ function getMoneyRequestOptions(report, reportParticipants) {
     // User created policy rooms and default rooms like #admins or #announce will always have the Split Bill option
     // unless there are no participants at all (e.g. #admins room for a policy with only 1 admin)
     // DM chats will have the Split Bill option only when there are at least 3 people in the chat.
-    // There is no Split Bill option for Workspace chats, IOU or Expense reports which are threads
-    if ((isChatRoom(report) && participants.length > 0) || (hasMultipleParticipants && !isPolicyExpenseChat(report) && !isMoneyRequestReport(report)) || isControlPolicyExpenseChat(report)) {
+    // There is no Split Bill option for IOU or Expense reports which are threads
+    if (
+        (isChatRoom(report) && participants.length > 0) ||
+        (hasMultipleParticipants && !isPolicyExpenseChat(report) && !isMoneyRequestReport(report)) ||
+        (isControlPolicyExpenseChat(report) && report.isOwnPolicyExpenseChat)
+    ) {
         return [CONST.IOU.MONEY_REQUEST_TYPE.SPLIT];
     }
 
@@ -3542,7 +3596,8 @@ function shouldDisableWriteActions(report) {
  * @returns {String}
  */
 function getOriginalReportID(reportID, reportAction) {
-    return isThreadFirstChat(reportAction, reportID) ? lodashGet(allReports, [`${ONYXKEYS.COLLECTION.REPORT}${reportID}`, 'parentReportID']) : reportID;
+    const currentReportAction = ReportActionsUtils.getReportAction(reportID, reportAction.reportActionID);
+    return isThreadFirstChat(reportAction, reportID) && _.isEmpty(currentReportAction) ? lodashGet(allReports, [`${ONYXKEYS.COLLECTION.REPORT}${reportID}`, 'parentReportID']) : reportID;
 }
 
 /**
@@ -3752,13 +3807,15 @@ function getParticipantsIDs(report) {
  * @returns {Object}
  */
 function getReportPreviewDisplayTransactions(reportPreviewAction) {
-    const transactionIDs = lodashGet(reportPreviewAction, ['childLastReceiptTransactionIDs'], '').split(',');
+    const transactionIDs = lodashGet(reportPreviewAction, ['childRecentReceiptTransactionIDs']);
     return _.reduce(
-        transactionIDs,
+        _.keys(transactionIDs),
         (transactions, transactionID) => {
-            const transaction = TransactionUtils.getTransaction(transactionID);
-            if (TransactionUtils.hasReceipt(transaction)) {
-                transactions.push(transaction);
+            if (transactionIDs[transactionID] !== null) {
+                const transaction = TransactionUtils.getTransaction(transactionID);
+                if (TransactionUtils.hasReceipt(transaction)) {
+                    transactions.push(transaction);
+                }
             }
             return transactions;
         },
@@ -3955,6 +4012,7 @@ export {
     areAllRequestsBeingSmartScanned,
     getReportPreviewDisplayTransactions,
     getTransactionsWithReceipts,
+    hasNonReimbursableTransactions,
     hasMissingSmartscanFields,
     getIOUReportActionDisplayMessage,
     isWaitingForTaskCompleteFromAssignee,
diff --git a/src/libs/SidebarUtils.js b/src/libs/SidebarUtils.js
index 7a32db660021..314a1d63760e 100644
--- a/src/libs/SidebarUtils.js
+++ b/src/libs/SidebarUtils.js
@@ -347,17 +347,17 @@ function getOptionData(report, reportActions, personalDetails, preferredLocale,
 
     if ((result.isChatRoom || result.isPolicyExpenseChat || result.isThread || result.isTaskReport) && !result.isArchivedRoom) {
         const lastAction = visibleReportActionItems[report.reportID];
-        if (lodashGet(lastAction, 'actionName', '') === CONST.REPORT.ACTIONS.TYPE.RENAMED) {
+        if (lastAction && lastAction.actionName === CONST.REPORT.ACTIONS.TYPE.RENAMED) {
             const newName = lodashGet(lastAction, 'originalMessage.newName', '');
             result.alternateText = Localize.translate(preferredLocale, 'newRoomPage.roomRenamedTo', {newName});
-        } else if (lodashGet(lastAction, 'actionName', '') === CONST.REPORT.ACTIONS.TYPE.TASKREOPENED) {
+        } else if (lastAction && lastAction.actionName === CONST.REPORT.ACTIONS.TYPE.TASKREOPENED) {
             result.alternateText = `${Localize.translate(preferredLocale, 'task.messages.reopened')}`;
-        } else if (lodashGet(lastAction, 'actionName', '') === CONST.REPORT.ACTIONS.TYPE.TASKCOMPLETED) {
+        } else if (lastAction && lastAction.actionName === CONST.REPORT.ACTIONS.TYPE.TASKCOMPLETED) {
             result.alternateText = `${Localize.translate(preferredLocale, 'task.messages.completed')}`;
-        } else if (lodashGet(lastAction, 'actionName', '') !== CONST.REPORT.ACTIONS.TYPE.REPORTPREVIEW && lastActorDisplayName && lastMessageTextFromReport) {
+        } else if (lastAction && lastAction.actionName !== CONST.REPORT.ACTIONS.TYPE.REPORTPREVIEW && lastActorDisplayName && lastMessageTextFromReport) {
             result.alternateText = `${lastActorDisplayName}: ${lastMessageText}`;
         } else {
-            result.alternateText = lastMessageTextFromReport.length > 0 ? lastMessageText : Localize.translate(preferredLocale, 'report.noActivityYet');
+            result.alternateText = lastAction && lastMessageTextFromReport.length > 0 ? lastMessageText : Localize.translate(preferredLocale, 'report.noActivityYet');
         }
     } else {
         if (!lastMessageText) {
diff --git a/src/libs/SuggestionUtils.js b/src/libs/SuggestionUtils.js
index aa2640d006c8..9c3e92799334 100644
--- a/src/libs/SuggestionUtils.js
+++ b/src/libs/SuggestionUtils.js
@@ -26,4 +26,22 @@ function trimLeadingSpace(str) {
     return str.slice(0, 1) === ' ' ? str.slice(1) : str;
 }
 
-export {getMaxArrowIndex, trimLeadingSpace};
+/**
+ * Checks if space is available to render large suggestion menu
+ * @param {Number} listHeight
+ * @param {Number} composerHeight
+ * @param {Number} totalSuggestions
+ * @returns {Boolean}
+ */
+function hasEnoughSpaceForLargeSuggestionMenu(listHeight, composerHeight, totalSuggestions) {
+    const maxSuggestions = CONST.AUTO_COMPLETE_SUGGESTER.MAX_AMOUNT_OF_VISIBLE_SUGGESTIONS_IN_CONTAINER;
+    const chatFooterHeight = CONST.CHAT_FOOTER_SECONDARY_ROW_HEIGHT + 2 * CONST.CHAT_FOOTER_SECONDARY_ROW_PADDING;
+    const availableHeight = listHeight - composerHeight - chatFooterHeight;
+    const menuHeight =
+        (!totalSuggestions || totalSuggestions > maxSuggestions ? maxSuggestions : totalSuggestions) * CONST.AUTO_COMPLETE_SUGGESTER.SUGGESTION_ROW_HEIGHT +
+        CONST.AUTO_COMPLETE_SUGGESTER.SUGGESTER_INNER_PADDING * 2;
+
+    return availableHeight > menuHeight;
+}
+
+export {getMaxArrowIndex, trimLeadingSpace, hasEnoughSpaceForLargeSuggestionMenu};
diff --git a/src/libs/TransactionUtils.ts b/src/libs/TransactionUtils.ts
index beb1f9c323d6..77fc4f04f99d 100644
--- a/src/libs/TransactionUtils.ts
+++ b/src/libs/TransactionUtils.ts
@@ -3,6 +3,7 @@ import {format, parseISO, isValid} from 'date-fns';
 import CONST from '../CONST';
 import ONYXKEYS from '../ONYXKEYS';
 import DateUtils from './DateUtils';
+import {isExpensifyCard} from './CardUtils';
 import * as NumberUtils from './NumberUtils';
 import {RecentWaypoint, ReportAction, Transaction} from '../types/onyx';
 import {Receipt, Comment, WaypointCollection} from '../types/onyx/Transaction';
@@ -58,16 +59,13 @@ function buildOptimisticTransaction(
         commentJSON.originalTransactionID = originalTransactionID;
     }
 
-    // For the SmartScan to run successfully, we need to pass the merchant field empty to the API
-    const defaultMerchant = !receipt || Object.keys(receipt).length === 0 ? CONST.TRANSACTION.DEFAULT_MERCHANT : '';
-
     return {
         transactionID,
         amount,
         currency,
         reportID,
         comment: commentJSON,
-        merchant: merchant || defaultMerchant,
+        merchant: merchant || CONST.TRANSACTION.DEFAULT_MERCHANT,
         created: created || DateUtils.getDBTime(),
         pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD,
         receipt,
@@ -82,21 +80,35 @@ function hasReceipt(transaction: Transaction | undefined | null): boolean {
     return !!transaction?.receipt?.state;
 }
 
-function areRequiredFieldsEmpty(transaction: Transaction): boolean {
-    return (
+function isMerchantMissing(transaction: Transaction) {
+    const isMerchantEmpty =
+        transaction.merchant === CONST.TRANSACTION.UNKNOWN_MERCHANT || transaction.merchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT || transaction.merchant === '';
+
+    const isModifiedMerchantEmpty =
+        !transaction.modifiedMerchant ||
         transaction.modifiedMerchant === CONST.TRANSACTION.UNKNOWN_MERCHANT ||
         transaction.modifiedMerchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT ||
-        (transaction.modifiedMerchant === '' &&
-            (transaction.merchant === CONST.TRANSACTION.UNKNOWN_MERCHANT || transaction.merchant === '' || transaction.merchant === CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT)) ||
-        (transaction.modifiedAmount === 0 && transaction.amount === 0) ||
-        (transaction.modifiedCreated === '' && transaction.created === '')
-    );
+        transaction.modifiedMerchant === '';
+
+    return isMerchantEmpty && isModifiedMerchantEmpty;
+}
+
+function isAmountMissing(transaction: Transaction) {
+    return transaction.amount === 0 && (!transaction.modifiedAmount || transaction.modifiedAmount === 0);
+}
+
+function isCreatedMissing(transaction: Transaction) {
+    return transaction.created === '' && (!transaction.created || transaction.modifiedCreated === '');
+}
+
+function areRequiredFieldsEmpty(transaction: Transaction): boolean {
+    return isMerchantMissing(transaction) || isAmountMissing(transaction) || isCreatedMissing(transaction);
 }
 
 /**
  * Given the edit made to the money request, return an updated transaction object.
  */
-function getUpdatedTransaction(transaction: Transaction, transactionChanges: TransactionChanges, isFromExpenseReport: boolean): Transaction {
+function getUpdatedTransaction(transaction: Transaction, transactionChanges: TransactionChanges, isFromExpenseReport: boolean, shouldUpdateReceiptState = true): Transaction {
     // Only changing the first level fields so no need for deep clone now
     const updatedTransaction = {...transaction};
     let shouldStopSmartscan = false;
@@ -143,7 +155,13 @@ function getUpdatedTransaction(transaction: Transaction, transactionChanges: Tra
         updatedTransaction.tag = transactionChanges.tag;
     }
 
-    if (shouldStopSmartscan && transaction?.receipt && Object.keys(transaction.receipt).length > 0 && transaction?.receipt?.state !== CONST.IOU.RECEIPT_STATE.OPEN) {
+    if (
+        shouldUpdateReceiptState &&
+        shouldStopSmartscan &&
+        transaction?.receipt &&
+        Object.keys(transaction.receipt).length > 0 &&
+        transaction?.receipt?.state !== CONST.IOU.RECEIPT_STATE.OPEN
+    ) {
         updatedTransaction.receipt.state = CONST.IOU.RECEIPT_STATE.OPEN;
     }
 
@@ -216,6 +234,21 @@ function getCurrency(transaction: Transaction): string {
     return transaction?.currency ?? CONST.CURRENCY.USD;
 }
 
+/**
+ * Return the original currency field from the transaction.
+ */
+function getOriginalCurrency(transaction: Transaction): string {
+    return transaction?.originalCurrency ?? '';
+}
+
+/**
+ * Return the absolute value of the original amount field from the transaction.
+ */
+function getOriginalAmount(transaction: Transaction): number {
+    const amount = transaction?.originalAmount ?? 0;
+    return Math.abs(amount);
+}
+
 /**
  * Return the merchant field from the transaction, return the modifiedMerchant if present.
  */
@@ -244,6 +277,13 @@ function getCategory(transaction: Transaction): string {
     return transaction?.category ?? '';
 }
 
+/**
+ * Return the cardID from the transaction.
+ */
+function getCardID(transaction: Transaction): number {
+    return transaction?.cardID ?? 0;
+}
+
 /**
  * Return the billable field from the transaction. This "billable" field has no "modified" complement.
  */
@@ -261,11 +301,11 @@ function getTag(transaction: Transaction): string {
 /**
  * Return the created field from the transaction, return the modifiedCreated if present.
  */
-function getCreated(transaction: Transaction): string {
+function getCreated(transaction: Transaction, dateFormat: string = CONST.DATE.FNS_FORMAT_STRING): string {
     const created = transaction?.modifiedCreated ? transaction.modifiedCreated : transaction?.created || '';
     const createdDate = parseISO(created);
     if (isValid(createdDate)) {
-        return format(createdDate, CONST.DATE.FNS_FORMAT_STRING);
+        return format(createdDate, dateFormat);
     }
 
     return '';
@@ -277,6 +317,36 @@ function isDistanceRequest(transaction: Transaction): boolean {
     return type === CONST.TRANSACTION.TYPE.CUSTOM_UNIT && customUnitName === CONST.CUSTOM_UNITS.NAME_DISTANCE;
 }
 
+/**
+ * Determine whether a transaction is made with an Expensify card.
+ */
+function isExpensifyCardTransaction(transaction: Transaction): boolean {
+    if (!transaction.cardID) {
+        return false;
+    }
+    return isExpensifyCard(transaction.cardID);
+}
+
+/**
+ * Check if the transaction status is set to Pending.
+ */
+function isPending(transaction: Transaction): boolean {
+    if (!transaction.status) {
+        return false;
+    }
+    return transaction.status === CONST.TRANSACTION.STATUS.PENDING;
+}
+
+/**
+ * Check if the transaction status is set to Posted.
+ */
+function isPosted(transaction: Transaction): boolean {
+    if (!transaction.status) {
+        return false;
+    }
+    return transaction.status === CONST.TRANSACTION.STATUS.POSTED;
+}
+
 function isReceiptBeingScanned(transaction: Transaction): boolean {
     return [CONST.IOU.RECEIPT_STATE.SCANREADY, CONST.IOU.RECEIPT_STATE.SCANNING].some((value) => value === transaction.receipt.state);
 }
@@ -374,6 +444,15 @@ function getValidWaypoints(waypoints: WaypointCollection, reArrangeIndexes = fal
     }, {});
 }
 
+/**
+ * Returns the most recent transactions in an object
+ */
+function getRecentTransactions(transactions: Record<string, string>, size = 2): string[] {
+    return Object.keys(transactions)
+        .sort((transactionID1, transactionID2) => (new Date(transactions[transactionID1]) < new Date(transactions[transactionID2]) ? 1 : -1))
+        .slice(0, size);
+}
+
 export {
     buildOptimisticTransaction,
     getUpdatedTransaction,
@@ -381,6 +460,9 @@ export {
     getDescription,
     getAmount,
     getCurrency,
+    getCardID,
+    getOriginalCurrency,
+    getOriginalAmount,
     getMerchant,
     getMCCGroup,
     getCreated,
@@ -395,8 +477,16 @@ export {
     isReceiptBeingScanned,
     getValidWaypoints,
     isDistanceRequest,
+    isExpensifyCardTransaction,
+    isPending,
+    isPosted,
     getWaypoints,
+    isAmountMissing,
+    isMerchantMissing,
+    isCreatedMissing,
+    areRequiredFieldsEmpty,
     hasMissingSmartscanFields,
     getWaypointIndex,
     waypointHasValidAddress,
+    getRecentTransactions,
 };
diff --git a/src/libs/UnreadIndicatorUpdater/updateUnread/index.website.js b/src/libs/UnreadIndicatorUpdater/updateUnread/index.website.js
index 244eaf805d10..4c829239ef14 100644
--- a/src/libs/UnreadIndicatorUpdater/updateUnread/index.website.js
+++ b/src/libs/UnreadIndicatorUpdater/updateUnread/index.website.js
@@ -3,6 +3,7 @@
  */
 import CONFIG from '../../../CONFIG';
 
+let unreadTotalCount = 0;
 /**
  * Set the page title on web
  *
@@ -10,7 +11,7 @@ import CONFIG from '../../../CONFIG';
  */
 function updateUnread(totalCount) {
     const hasUnread = totalCount !== 0;
-
+    unreadTotalCount = totalCount;
     // This setTimeout is required because due to how react rendering messes with the DOM, the document title can't be modified synchronously, and we must wait until all JS is done
     // running before setting the title.
     setTimeout(() => {
@@ -22,4 +23,8 @@ function updateUnread(totalCount) {
     }, 0);
 }
 
+window.addEventListener('popstate', () => {
+    updateUnread(unreadTotalCount);
+});
+
 export default updateUnread;
diff --git a/src/libs/actions/App.js b/src/libs/actions/App.js
index 7500af6d829e..a1d64154906c 100644
--- a/src/libs/actions/App.js
+++ b/src/libs/actions/App.js
@@ -44,6 +44,19 @@ Onyx.connect({
     callback: (val) => (preferredLocale = val),
 });
 
+let priorityMode;
+Onyx.connect({
+    key: ONYXKEYS.NVP_PRIORITY_MODE,
+    callback: (nextPriorityMode) => {
+        // When someone switches their priority mode we need to fetch all their chats because only #focus mode works with a subset of a user's chats. This is only possible via the OpenApp command.
+        if (nextPriorityMode === CONST.PRIORITY_MODE.DEFAULT && priorityMode === CONST.PRIORITY_MODE.GSD) {
+            // eslint-disable-next-line no-use-before-define
+            openApp();
+        }
+        priorityMode = nextPriorityMode;
+    },
+});
+
 let resolveIsReadyPromise;
 const isReadyToOpenApp = new Promise((resolve) => {
     resolveIsReadyPromise = resolve;
@@ -207,7 +220,8 @@ function getOnyxDataForOpenOrReconnect(isOpenApp = false) {
  */
 function openApp() {
     getPolicyParamsForOpenOrReconnect().then((policyParams) => {
-        API.read('OpenApp', policyParams, getOnyxDataForOpenOrReconnect(true));
+        const params = {enablePriorityModeFilter: true, ...policyParams};
+        API.read('OpenApp', params, getOnyxDataForOpenOrReconnect(true));
     });
 }
 
diff --git a/src/libs/actions/BankAccounts.js b/src/libs/actions/BankAccounts.js
deleted file mode 100644
index b1cb09a8a5e2..000000000000
--- a/src/libs/actions/BankAccounts.js
+++ /dev/null
@@ -1,441 +0,0 @@
-import Onyx from 'react-native-onyx';
-import CONST from '../../CONST';
-import * as API from '../API';
-import ONYXKEYS from '../../ONYXKEYS';
-import * as ErrorUtils from '../ErrorUtils';
-import * as PlaidDataProps from '../../pages/ReimbursementAccount/plaidDataPropTypes';
-import Navigation from '../Navigation/Navigation';
-import ROUTES from '../../ROUTES';
-import * as ReimbursementAccount from './ReimbursementAccount';
-
-export {
-    goToWithdrawalAccountSetupStep,
-    setBankAccountFormValidationErrors,
-    resetReimbursementAccount,
-    resetFreePlanBankAccount,
-    hideBankAccountErrors,
-    setWorkspaceIDForReimbursementAccount,
-    setBankAccountSubStep,
-    updateReimbursementAccountDraft,
-    requestResetFreePlanBankAccount,
-    cancelResetFreePlanBankAccount,
-} from './ReimbursementAccount';
-export {openPlaidBankAccountSelector, openPlaidBankLogin} from './Plaid';
-export {openOnfidoFlow, answerQuestionsForWallet, verifyIdentity, acceptWalletTerms} from './Wallet';
-
-function clearPlaid() {
-    Onyx.set(ONYXKEYS.PLAID_LINK_TOKEN, '');
-
-    return Onyx.set(ONYXKEYS.PLAID_DATA, PlaidDataProps.plaidDataDefaultProps);
-}
-
-function openPlaidView() {
-    clearPlaid().then(() => ReimbursementAccount.setBankAccountSubStep(CONST.BANK_ACCOUNT.SETUP_TYPE.PLAID));
-}
-
-/**
- * Open the personal bank account setup flow, with an optional exitReportID to redirect to once the flow is finished.
- * @param {String} exitReportID
- */
-function openPersonalBankAccountSetupView(exitReportID) {
-    clearPlaid().then(() => {
-        if (exitReportID) {
-            Onyx.merge(ONYXKEYS.PERSONAL_BANK_ACCOUNT, {exitReportID});
-        }
-        Navigation.navigate(ROUTES.SETTINGS_ADD_BANK_ACCOUNT);
-    });
-}
-
-function clearPersonalBankAccount() {
-    clearPlaid();
-    Onyx.set(ONYXKEYS.PERSONAL_BANK_ACCOUNT, {});
-}
-
-function clearOnfidoToken() {
-    Onyx.merge(ONYXKEYS.ONFIDO_TOKEN, '');
-}
-
-/**
- * Helper method to build the Onyx data required during setup of a Verified Business Bank Account
- *
- * @returns {Object}
- */
-function getVBBADataForOnyx() {
-    return {
-        optimisticData: [
-            {
-                onyxMethod: Onyx.METHOD.MERGE,
-                key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
-                value: {
-                    isLoading: true,
-                    errors: null,
-                },
-            },
-        ],
-        successData: [
-            {
-                onyxMethod: Onyx.METHOD.MERGE,
-                key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
-                value: {
-                    isLoading: false,
-                    errors: null,
-                },
-            },
-        ],
-        failureData: [
-            {
-                onyxMethod: Onyx.METHOD.MERGE,
-                key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
-                value: {
-                    isLoading: false,
-                    errors: ErrorUtils.getMicroSecondOnyxError('walletPage.addBankAccountFailure'),
-                },
-            },
-        ],
-    };
-}
-
-/**
- * Submit Bank Account step with Plaid data so php can perform some checks.
- *
- * @param {Number} bankAccountID
- * @param {Object} selectedPlaidBankAccount
- */
-function connectBankAccountWithPlaid(bankAccountID, selectedPlaidBankAccount) {
-    const commandName = 'ConnectBankAccountWithPlaid';
-
-    const parameters = {
-        bankAccountID,
-        routingNumber: selectedPlaidBankAccount.routingNumber,
-        accountNumber: selectedPlaidBankAccount.accountNumber,
-        bank: selectedPlaidBankAccount.bankName,
-        plaidAccountID: selectedPlaidBankAccount.plaidAccountID,
-        plaidAccessToken: selectedPlaidBankAccount.plaidAccessToken,
-    };
-
-    API.write(commandName, parameters, getVBBADataForOnyx());
-}
-
-/**
- * Adds a bank account via Plaid
- *
- * @param {Object} account
- * @TODO offline pattern for this command will have to be added later once the pattern B design doc is complete
- */
-function addPersonalBankAccount(account) {
-    const commandName = 'AddPersonalBankAccount';
-
-    const parameters = {
-        addressName: account.addressName,
-        routingNumber: account.routingNumber,
-        accountNumber: account.accountNumber,
-        isSavings: account.isSavings,
-        setupType: 'plaid',
-        bank: account.bankName,
-        plaidAccountID: account.plaidAccountID,
-        plaidAccessToken: account.plaidAccessToken,
-    };
-
-    const onyxData = {
-        optimisticData: [
-            {
-                onyxMethod: Onyx.METHOD.MERGE,
-                key: ONYXKEYS.PERSONAL_BANK_ACCOUNT,
-                value: {
-                    isLoading: true,
-                    errors: null,
-                    plaidAccountID: account.plaidAccountID,
-                },
-            },
-        ],
-        successData: [
-            {
-                onyxMethod: Onyx.METHOD.MERGE,
-                key: ONYXKEYS.PERSONAL_BANK_ACCOUNT,
-                value: {
-                    isLoading: false,
-                    errors: null,
-                    shouldShowSuccess: true,
-                },
-            },
-        ],
-        failureData: [
-            {
-                onyxMethod: Onyx.METHOD.MERGE,
-                key: ONYXKEYS.PERSONAL_BANK_ACCOUNT,
-                value: {
-                    isLoading: false,
-                    errors: ErrorUtils.getMicroSecondOnyxError('walletPage.addBankAccountFailure'),
-                },
-            },
-        ],
-    };
-
-    API.write(commandName, parameters, onyxData);
-}
-
-function deletePaymentBankAccount(bankAccountID) {
-    API.write(
-        'DeletePaymentBankAccount',
-        {
-            bankAccountID,
-        },
-        {
-            optimisticData: [
-                {
-                    onyxMethod: Onyx.METHOD.MERGE,
-                    key: `${ONYXKEYS.BANK_ACCOUNT_LIST}`,
-                    value: {[bankAccountID]: {pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE}},
-                },
-            ],
-
-            // Sometimes pusher updates aren't received when we close the App while still offline,
-            // so we are setting the bankAccount to null here to ensure that it gets cleared out once we come back online.
-            successData: [
-                {
-                    onyxMethod: Onyx.METHOD.MERGE,
-                    key: `${ONYXKEYS.BANK_ACCOUNT_LIST}`,
-                    value: {[bankAccountID]: null},
-                },
-            ],
-        },
-    );
-}
-
-/**
- * Update the user's personal information on the bank account in database.
- *
- * This action is called by the requestor step in the Verified Bank Account flow
- *
- * @param {Object} params
- *
- * @param {String} [params.dob]
- * @param {String} [params.firstName]
- * @param {String} [params.lastName]
- * @param {String} [params.requestorAddressStreet]
- * @param {String} [params.requestorAddressCity]
- * @param {String} [params.requestorAddressState]
- * @param {String} [params.requestorAddressZipCode]
- * @param {String} [params.ssnLast4]
- * @param {String} [params.isControllingOfficer]
- * @param {Object} [params.onfidoData]
- * @param {Boolean} [params.isOnfidoSetupComplete]
- */
-function updatePersonalInformationForBankAccount(params) {
-    API.write('UpdatePersonalInformationForBankAccount', params, getVBBADataForOnyx());
-}
-
-/**
- * @param {Number} bankAccountID
- * @param {String} validateCode
- */
-function validateBankAccount(bankAccountID, validateCode) {
-    API.write(
-        'ValidateBankAccountWithTransactions',
-        {
-            bankAccountID,
-            validateCode,
-        },
-        {
-            optimisticData: [
-                {
-                    onyxMethod: Onyx.METHOD.MERGE,
-                    key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
-                    value: {
-                        isLoading: true,
-                        errors: null,
-                    },
-                },
-            ],
-            successData: [
-                {
-                    onyxMethod: Onyx.METHOD.MERGE,
-                    key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
-                    value: {
-                        isLoading: false,
-                    },
-                },
-            ],
-            failureData: [
-                {
-                    onyxMethod: Onyx.METHOD.MERGE,
-                    key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
-                    value: {
-                        isLoading: false,
-                    },
-                },
-            ],
-        },
-    );
-}
-
-function openReimbursementAccountPage(stepToOpen, subStep, localCurrentStep) {
-    const onyxData = {
-        optimisticData: [
-            {
-                onyxMethod: Onyx.METHOD.MERGE,
-                key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
-                value: {
-                    isLoading: true,
-                },
-            },
-        ],
-        successData: [
-            {
-                onyxMethod: Onyx.METHOD.MERGE,
-                key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
-                value: {
-                    isLoading: false,
-                },
-            },
-        ],
-        failureData: [
-            {
-                onyxMethod: Onyx.METHOD.MERGE,
-                key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
-                value: {
-                    isLoading: false,
-                },
-            },
-        ],
-    };
-
-    const param = {
-        stepToOpen,
-        subStep,
-        localCurrentStep,
-    };
-
-    return API.read('OpenReimbursementAccountPage', param, onyxData);
-}
-
-/**
- * Updates the bank account in the database with the company step data
- *
- * @param {Object} bankAccount
- * @param {Number} [bankAccount.bankAccountID]
- *
- * Fields from BankAccount step
- * @param {String} [bankAccount.routingNumber]
- * @param {String} [bankAccount.accountNumber]
- * @param {String} [bankAccount.bankName]
- * @param {String} [bankAccount.plaidAccountID]
- * @param {String} [bankAccount.plaidAccessToken]
- * @param {Boolean} [bankAccount.isSavings]
- *
- * Fields from Company step
- * @param {String} [bankAccount.companyName]
- * @param {String} [bankAccount.addressStreet]
- * @param {String} [bankAccount.addressCity]
- * @param {String} [bankAccount.addressState]
- * @param {String} [bankAccount.addressZipCode]
- * @param {String} [bankAccount.companyPhone]
- * @param {String} [bankAccount.website]
- * @param {String} [bankAccount.companyTaxID]
- * @param {String} [bankAccount.incorporationType]
- * @param {String} [bankAccount.incorporationState]
- * @param {String} [bankAccount.incorporationDate]
- * @param {Boolean} [bankAccount.hasNoConnectionToCannabis]
- * @param {String} policyID
- */
-function updateCompanyInformationForBankAccount(bankAccount, policyID) {
-    API.write('UpdateCompanyInformationForBankAccount', {...bankAccount, policyID}, getVBBADataForOnyx());
-}
-
-/**
- * Add beneficial owners for the bank account, accept the ACH terms and conditions and verify the accuracy of the information provided
- *
- * @param {Object} params
- *
- * // ACH Contract Step
- * @param {Boolean} [params.ownsMoreThan25Percent]
- * @param {Boolean} [params.hasOtherBeneficialOwners]
- * @param {Boolean} [params.acceptTermsAndConditions]
- * @param {Boolean} [params.certifyTrueInformation]
- * @param {String}  [params.beneficialOwners]
- */
-function updateBeneficialOwnersForBankAccount(params) {
-    API.write('UpdateBeneficialOwnersForBankAccount', {...params}, getVBBADataForOnyx());
-}
-
-/**
- * Create the bank account with manually entered data.
- *
- * @param {number} [bankAccountID]
- * @param {String} [accountNumber]
- * @param {String} [routingNumber]
- * @param {String} [plaidMask]
- *
- */
-function connectBankAccountManually(bankAccountID, accountNumber, routingNumber, plaidMask) {
-    API.write(
-        'ConnectBankAccountManually',
-        {
-            bankAccountID,
-            accountNumber,
-            routingNumber,
-            plaidMask,
-        },
-        getVBBADataForOnyx(),
-    );
-}
-
-/**
- * Verify the user's identity via Onfido
- *
- * @param {Number} bankAccountID
- * @param {Object} onfidoData
- */
-function verifyIdentityForBankAccount(bankAccountID, onfidoData) {
-    API.write(
-        'VerifyIdentityForBankAccount',
-        {
-            bankAccountID,
-            onfidoData: JSON.stringify(onfidoData),
-        },
-        getVBBADataForOnyx(),
-    );
-}
-
-function openWorkspaceView() {
-    API.read('OpenWorkspaceView');
-}
-
-function handlePlaidError(bankAccountID, error, error_description, plaidRequestID) {
-    API.write('BankAccount_HandlePlaidError', {
-        bankAccountID,
-        error,
-        error_description,
-        plaidRequestID,
-    });
-}
-
-/**
- * Set the reimbursement account loading so that it happens right away, instead of when the API command is processed.
- *
- * @param {Boolean} isLoading
- */
-function setReimbursementAccountLoading(isLoading) {
-    Onyx.merge(ONYXKEYS.REIMBURSEMENT_ACCOUNT, {isLoading});
-}
-
-export {
-    addPersonalBankAccount,
-    clearOnfidoToken,
-    clearPersonalBankAccount,
-    clearPlaid,
-    openPlaidView,
-    connectBankAccountManually,
-    connectBankAccountWithPlaid,
-    deletePaymentBankAccount,
-    handlePlaidError,
-    openPersonalBankAccountSetupView,
-    openReimbursementAccountPage,
-    updateBeneficialOwnersForBankAccount,
-    updateCompanyInformationForBankAccount,
-    updatePersonalInformationForBankAccount,
-    openWorkspaceView,
-    validateBankAccount,
-    verifyIdentityForBankAccount,
-    setReimbursementAccountLoading,
-};
diff --git a/src/libs/actions/BankAccounts.ts b/src/libs/actions/BankAccounts.ts
new file mode 100644
index 000000000000..249d7de9293a
--- /dev/null
+++ b/src/libs/actions/BankAccounts.ts
@@ -0,0 +1,444 @@
+import Onyx from 'react-native-onyx';
+import CONST from '../../CONST';
+import * as API from '../API';
+import ONYXKEYS from '../../ONYXKEYS';
+import * as ErrorUtils from '../ErrorUtils';
+import * as PlaidDataProps from '../../pages/ReimbursementAccount/plaidDataPropTypes';
+import Navigation from '../Navigation/Navigation';
+import ROUTES from '../../ROUTES';
+import * as ReimbursementAccount from './ReimbursementAccount';
+import type PlaidBankAccount from '../../types/onyx/PlaidBankAccount';
+import type {ACHContractStepProps, BankAccountStepProps, CompanyStepProps, OnfidoData, ReimbursementAccountProps, RequestorStepProps} from '../../types/onyx/ReimbursementAccountDraft';
+import type {OnyxData} from '../../types/onyx/Request';
+import type {BankAccountStep, BankAccountSubStep} from '../../types/onyx/ReimbursementAccount';
+
+export {
+    goToWithdrawalAccountSetupStep,
+    setBankAccountFormValidationErrors,
+    resetReimbursementAccount,
+    resetFreePlanBankAccount,
+    hideBankAccountErrors,
+    setWorkspaceIDForReimbursementAccount,
+    setBankAccountSubStep,
+    updateReimbursementAccountDraft,
+    requestResetFreePlanBankAccount,
+    cancelResetFreePlanBankAccount,
+} from './ReimbursementAccount';
+export {openPlaidBankAccountSelector, openPlaidBankLogin} from './Plaid';
+export {openOnfidoFlow, answerQuestionsForWallet, verifyIdentity, acceptWalletTerms} from './Wallet';
+
+type BankAccountCompanyInformation = BankAccountStepProps & CompanyStepProps & ReimbursementAccountProps;
+
+type ReimbursementAccountStep = BankAccountStep | '';
+
+type ReimbursementAccountSubStep = BankAccountSubStep | '';
+
+function clearPlaid(): Promise<void> {
+    Onyx.set(ONYXKEYS.PLAID_LINK_TOKEN, '');
+
+    return Onyx.set(ONYXKEYS.PLAID_DATA, PlaidDataProps.plaidDataDefaultProps);
+}
+
+function openPlaidView() {
+    clearPlaid().then(() => ReimbursementAccount.setBankAccountSubStep(CONST.BANK_ACCOUNT.SETUP_TYPE.PLAID));
+}
+
+/**
+ * Open the personal bank account setup flow, with an optional exitReportID to redirect to once the flow is finished.
+ */
+function openPersonalBankAccountSetupView(exitReportID: string) {
+    clearPlaid().then(() => {
+        if (exitReportID) {
+            Onyx.merge(ONYXKEYS.PERSONAL_BANK_ACCOUNT, {exitReportID});
+        }
+        Navigation.navigate(ROUTES.SETTINGS_ADD_BANK_ACCOUNT);
+    });
+}
+
+function clearPersonalBankAccount() {
+    clearPlaid();
+    Onyx.set(ONYXKEYS.PERSONAL_BANK_ACCOUNT, {});
+}
+
+function clearOnfidoToken() {
+    Onyx.merge(ONYXKEYS.ONFIDO_TOKEN, '');
+}
+
+/**
+ * Helper method to build the Onyx data required during setup of a Verified Business Bank Account
+ */
+function getVBBADataForOnyx(currentStep?: BankAccountStep): OnyxData {
+    return {
+        optimisticData: [
+            {
+                onyxMethod: Onyx.METHOD.MERGE,
+                key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
+                value: {
+                    isLoading: true,
+                    errors: null,
+                },
+            },
+        ],
+        successData: [
+            {
+                onyxMethod: Onyx.METHOD.MERGE,
+                key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
+                value: {
+                    isLoading: false,
+                    errors: null,
+                    // When setting up a bank account, we save the draft form values in Onyx.
+                    // When we update the information for a step, the value of some fields that are returned from the API
+                    // can be different from the value that we stored as the draft in Onyx (i.e. the phone number is formatted).
+                    // This is why we store the current step used to call the API in order to update the corresponding draft data in Onyx.
+                    // If currentStep is undefined that means this step don't need to update the data of the draft in Onyx.
+                    draftStep: currentStep,
+                },
+            },
+        ],
+        failureData: [
+            {
+                onyxMethod: Onyx.METHOD.MERGE,
+                key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
+                value: {
+                    isLoading: false,
+                    errors: ErrorUtils.getMicroSecondOnyxError('walletPage.addBankAccountFailure'),
+                },
+            },
+        ],
+    };
+}
+
+/**
+ * Submit Bank Account step with Plaid data so php can perform some checks.
+ */
+function connectBankAccountWithPlaid(bankAccountID: number, selectedPlaidBankAccount: PlaidBankAccount) {
+    const commandName = 'ConnectBankAccountWithPlaid';
+
+    type ConnectBankAccountWithPlaidParams = {
+        bankAccountID: number;
+        routingNumber: string;
+        accountNumber: string;
+        bank?: string;
+        plaidAccountID: string;
+        plaidAccessToken: string;
+    };
+
+    const parameters: ConnectBankAccountWithPlaidParams = {
+        bankAccountID,
+        routingNumber: selectedPlaidBankAccount.routingNumber,
+        accountNumber: selectedPlaidBankAccount.accountNumber,
+        bank: selectedPlaidBankAccount.bankName,
+        plaidAccountID: selectedPlaidBankAccount.plaidAccountID,
+        plaidAccessToken: selectedPlaidBankAccount.plaidAccessToken,
+    };
+
+    API.write(commandName, parameters, getVBBADataForOnyx());
+}
+
+/**
+ * Adds a bank account via Plaid
+ *
+ * @TODO offline pattern for this command will have to be added later once the pattern B design doc is complete
+ */
+function addPersonalBankAccount(account: PlaidBankAccount) {
+    const commandName = 'AddPersonalBankAccount';
+
+    type AddPersonalBankAccountParams = {
+        addressName: string;
+        routingNumber: string;
+        accountNumber: string;
+        isSavings: boolean;
+        setupType: string;
+        bank?: string;
+        plaidAccountID: string;
+        plaidAccessToken: string;
+    };
+
+    const parameters: AddPersonalBankAccountParams = {
+        addressName: account.addressName,
+        routingNumber: account.routingNumber,
+        accountNumber: account.accountNumber,
+        isSavings: account.isSavings,
+        setupType: 'plaid',
+        bank: account.bankName,
+        plaidAccountID: account.plaidAccountID,
+        plaidAccessToken: account.plaidAccessToken,
+    };
+
+    const onyxData: OnyxData = {
+        optimisticData: [
+            {
+                onyxMethod: Onyx.METHOD.MERGE,
+                key: ONYXKEYS.PERSONAL_BANK_ACCOUNT,
+                value: {
+                    isLoading: true,
+                    errors: null,
+                    plaidAccountID: account.plaidAccountID,
+                },
+            },
+        ],
+        successData: [
+            {
+                onyxMethod: Onyx.METHOD.MERGE,
+                key: ONYXKEYS.PERSONAL_BANK_ACCOUNT,
+                value: {
+                    isLoading: false,
+                    errors: null,
+                    shouldShowSuccess: true,
+                },
+            },
+        ],
+        failureData: [
+            {
+                onyxMethod: Onyx.METHOD.MERGE,
+                key: ONYXKEYS.PERSONAL_BANK_ACCOUNT,
+                value: {
+                    isLoading: false,
+                    errors: ErrorUtils.getMicroSecondOnyxError('walletPage.addBankAccountFailure'),
+                },
+            },
+        ],
+    };
+
+    API.write(commandName, parameters, onyxData);
+}
+
+function deletePaymentBankAccount(bankAccountID: number) {
+    type DeletePaymentBankAccountParams = {bankAccountID: number};
+
+    const parameters: DeletePaymentBankAccountParams = {bankAccountID};
+
+    const onyxData: OnyxData = {
+        optimisticData: [
+            {
+                onyxMethod: Onyx.METHOD.MERGE,
+                key: `${ONYXKEYS.BANK_ACCOUNT_LIST}`,
+                value: {[bankAccountID]: {pendingAction: CONST.RED_BRICK_ROAD_PENDING_ACTION.DELETE}},
+            },
+        ],
+
+        // Sometimes pusher updates aren't received when we close the App while still offline,
+        // so we are setting the bankAccount to null here to ensure that it gets cleared out once we come back online.
+        successData: [
+            {
+                onyxMethod: Onyx.METHOD.MERGE,
+                key: `${ONYXKEYS.BANK_ACCOUNT_LIST}`,
+                value: {[bankAccountID]: null},
+            },
+        ],
+    };
+
+    API.write('DeletePaymentBankAccount', parameters, onyxData);
+}
+
+/**
+ * Update the user's personal information on the bank account in database.
+ *
+ * This action is called by the requestor step in the Verified Bank Account flow
+ */
+function updatePersonalInformationForBankAccount(params: RequestorStepProps) {
+    API.write('UpdatePersonalInformationForBankAccount', params, getVBBADataForOnyx(CONST.BANK_ACCOUNT.STEP.REQUESTOR));
+}
+
+function validateBankAccount(bankAccountID: number, validateCode: string) {
+    type ValidateBankAccountWithTransactionsParams = {
+        bankAccountID: number;
+        validateCode: string;
+    };
+
+    const parameters: ValidateBankAccountWithTransactionsParams = {
+        bankAccountID,
+        validateCode,
+    };
+
+    const onyxData: OnyxData = {
+        optimisticData: [
+            {
+                onyxMethod: Onyx.METHOD.MERGE,
+                key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
+                value: {
+                    isLoading: true,
+                    errors: null,
+                },
+            },
+        ],
+        successData: [
+            {
+                onyxMethod: Onyx.METHOD.MERGE,
+                key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
+                value: {
+                    isLoading: false,
+                },
+            },
+        ],
+        failureData: [
+            {
+                onyxMethod: Onyx.METHOD.MERGE,
+                key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
+                value: {
+                    isLoading: false,
+                },
+            },
+        ],
+    };
+
+    API.write('ValidateBankAccountWithTransactions', parameters, onyxData);
+}
+
+function clearReimbursementAccount() {
+    Onyx.set(ONYXKEYS.REIMBURSEMENT_ACCOUNT, null);
+}
+
+function openReimbursementAccountPage(stepToOpen: ReimbursementAccountStep, subStep: ReimbursementAccountSubStep, localCurrentStep: ReimbursementAccountStep) {
+    const onyxData: OnyxData = {
+        optimisticData: [
+            {
+                onyxMethod: Onyx.METHOD.MERGE,
+                key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
+                value: {
+                    isLoading: true,
+                },
+            },
+        ],
+        successData: [
+            {
+                onyxMethod: Onyx.METHOD.MERGE,
+                key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
+                value: {
+                    isLoading: false,
+                },
+            },
+        ],
+        failureData: [
+            {
+                onyxMethod: Onyx.METHOD.MERGE,
+                key: ONYXKEYS.REIMBURSEMENT_ACCOUNT,
+                value: {
+                    isLoading: false,
+                },
+            },
+        ],
+    };
+
+    type OpenReimbursementAccountPageParams = {
+        stepToOpen: ReimbursementAccountStep;
+        subStep: ReimbursementAccountSubStep;
+        localCurrentStep: ReimbursementAccountStep;
+    };
+
+    const parameters: OpenReimbursementAccountPageParams = {
+        stepToOpen,
+        subStep,
+        localCurrentStep,
+    };
+
+    return API.read('OpenReimbursementAccountPage', parameters, onyxData);
+}
+
+/**
+ * Updates the bank account in the database with the company step data
+ */
+function updateCompanyInformationForBankAccount(bankAccount: BankAccountCompanyInformation, policyID: string) {
+    type UpdateCompanyInformationForBankAccountParams = BankAccountCompanyInformation & {policyID: string};
+
+    const parameters: UpdateCompanyInformationForBankAccountParams = {...bankAccount, policyID};
+
+    API.write('UpdateCompanyInformationForBankAccount', parameters, getVBBADataForOnyx(CONST.BANK_ACCOUNT.STEP.COMPANY));
+}
+
+/**
+ * Add beneficial owners for the bank account, accept the ACH terms and conditions and verify the accuracy of the information provided
+ */
+function updateBeneficialOwnersForBankAccount(params: ACHContractStepProps) {
+    API.write('UpdateBeneficialOwnersForBankAccount', params, getVBBADataForOnyx());
+}
+
+/**
+ * Create the bank account with manually entered data.
+ *
+ */
+function connectBankAccountManually(bankAccountID: number, accountNumber?: string, routingNumber?: string, plaidMask?: string) {
+    type ConnectBankAccountManuallyParams = {
+        bankAccountID: number;
+        accountNumber?: string;
+        routingNumber?: string;
+        plaidMask?: string;
+    };
+
+    const parameters: ConnectBankAccountManuallyParams = {
+        bankAccountID,
+        accountNumber,
+        routingNumber,
+        plaidMask,
+    };
+
+    API.write('ConnectBankAccountManually', parameters, getVBBADataForOnyx(CONST.BANK_ACCOUNT.STEP.BANK_ACCOUNT));
+}
+
+/**
+ * Verify the user's identity via Onfido
+ */
+function verifyIdentityForBankAccount(bankAccountID: number, onfidoData: OnfidoData) {
+    type VerifyIdentityForBankAccountParams = {
+        bankAccountID: number;
+        onfidoData: string;
+    };
+
+    const parameters: VerifyIdentityForBankAccountParams = {
+        bankAccountID,
+        onfidoData: JSON.stringify(onfidoData),
+    };
+
+    API.write('VerifyIdentityForBankAccount', parameters, getVBBADataForOnyx());
+}
+
+function openWorkspaceView() {
+    API.read('OpenWorkspaceView', {}, {});
+}
+
+function handlePlaidError(bankAccountID: number, error: string, errorDescription: string, plaidRequestID: string) {
+    type BankAccountHandlePlaidErrorParams = {
+        bankAccountID: number;
+        error: string;
+        errorDescription: string;
+        plaidRequestID: string;
+    };
+
+    const parameters: BankAccountHandlePlaidErrorParams = {
+        bankAccountID,
+        error,
+        errorDescription,
+        plaidRequestID,
+    };
+
+    API.write('BankAccount_HandlePlaidError', parameters);
+}
+
+/**
+ * Set the reimbursement account loading so that it happens right away, instead of when the API command is processed.
+ */
+function setReimbursementAccountLoading(isLoading: boolean) {
+    Onyx.merge(ONYXKEYS.REIMBURSEMENT_ACCOUNT, {isLoading});
+}
+
+export {
+    addPersonalBankAccount,
+    clearOnfidoToken,
+    clearPersonalBankAccount,
+    clearPlaid,
+    openPlaidView,
+    connectBankAccountManually,
+    connectBankAccountWithPlaid,
+    deletePaymentBankAccount,
+    handlePlaidError,
+    openPersonalBankAccountSetupView,
+    clearReimbursementAccount,
+    openReimbursementAccountPage,
+    updateBeneficialOwnersForBankAccount,
+    updateCompanyInformationForBankAccount,
+    updatePersonalInformationForBankAccount,
+    openWorkspaceView,
+    validateBankAccount,
+    verifyIdentityForBankAccount,
+    setReimbursementAccountLoading,
+};
diff --git a/src/libs/actions/DemoActions.js b/src/libs/actions/DemoActions.js
new file mode 100644
index 000000000000..29c983c35262
--- /dev/null
+++ b/src/libs/actions/DemoActions.js
@@ -0,0 +1,70 @@
+import Config from 'react-native-config';
+import Onyx from 'react-native-onyx';
+import lodashGet from 'lodash/get';
+import * as API from '../API';
+import * as ReportUtils from '../ReportUtils';
+import Navigation from '../Navigation/Navigation';
+import ROUTES from '../../ROUTES';
+import ONYXKEYS from '../../ONYXKEYS';
+
+let currentUserEmail;
+Onyx.connect({
+    key: ONYXKEYS.SESSION,
+    callback: (val) => {
+        currentUserEmail = lodashGet(val, 'email', '');
+    },
+});
+
+function runMoney2020Demo() {
+    // Try to navigate to existing demo chat if it exists in Onyx
+    const money2020AccountID = Number(Config ? Config.EXPENSIFY_ACCOUNT_ID_MONEY2020 : 15864555);
+    const existingChatReport = ReportUtils.getChatByParticipants([money2020AccountID]);
+    if (existingChatReport) {
+        // We must call goBack() to remove the demo route from nav history
+        Navigation.goBack();
+        Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(existingChatReport.reportID));
+        return;
+    }
+
+    // We use makeRequestWithSideEffects here because we need to get the chat report ID to navigate to it after it's created
+    // eslint-disable-next-line rulesdir/no-api-side-effects-method
+    API.makeRequestWithSideEffects('CreateChatReport', {
+        emailList: `${currentUserEmail},money2020@expensify.com`,
+        activationConference: 'money2020',
+    }).then((response) => {
+        // If there's no response or no reportID in the response, navigate the user home so user doesn't get stuck.
+        if (!response || !response.reportID) {
+            Navigation.goBack();
+            Navigation.navigate(ROUTES.HOME);
+            return;
+        }
+
+        // Get reportID & navigate to it
+        // Note: We must call goBack() to remove the demo route from history
+        const chatReportID = response.reportID;
+        Navigation.goBack();
+        Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(chatReportID));
+    });
+}
+
+/**
+ * Runs code for specific demos, based on the provided URL
+ *
+ * @param {String} url - URL user is navigating to via deep link (or regular link in web)
+ */
+function runDemoByURL(url = '') {
+    const cleanUrl = (url || '').toLowerCase();
+
+    if (cleanUrl.endsWith(ROUTES.MONEY2020)) {
+        Onyx.set(ONYXKEYS.DEMO_INFO, {
+            money2020: {
+                isBeginningDemo: true,
+            },
+        });
+    } else {
+        // No demo is being run, so clear out demo info
+        Onyx.set(ONYXKEYS.DEMO_INFO, null);
+    }
+}
+
+export {runMoney2020Demo, runDemoByURL};
diff --git a/src/libs/actions/IOU.js b/src/libs/actions/IOU.js
index d5676672dd33..422dd8fbb03a 100644
--- a/src/libs/actions/IOU.js
+++ b/src/libs/actions/IOU.js
@@ -1,6 +1,7 @@
 import Onyx from 'react-native-onyx';
 import _ from 'underscore';
 import lodashGet from 'lodash/get';
+import lodashHas from 'lodash/has';
 import Str from 'expensify-common/lib/str';
 import {format} from 'date-fns';
 import CONST from '../../CONST';
@@ -53,6 +54,15 @@ Onyx.connect({
     },
 });
 
+let allDraftSplitTransactions;
+Onyx.connect({
+    key: ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT,
+    waitForCollectionCallback: true,
+    callback: (val) => {
+        allDraftSplitTransactions = val || {};
+    },
+});
+
 let allRecentlyUsedTags = {};
 Onyx.connect({
     key: ONYXKEYS.COLLECTION.POLICY_RECENTLY_USED_TAGS,
@@ -1055,6 +1065,7 @@ function createSplitsAndOnyxData(participants, currentUserLogin, currentUserAcco
         let oneOnOneChatReport;
         let isNewOneOnOneChatReport = false;
         let shouldCreateOptimisticPersonalDetails = false;
+        const personalDetailExists = lodashHas(allPersonalDetails, accountID);
 
         // If this is a split between two people only and the function
         // wasn't provided with an existing group chat report id
@@ -1063,11 +1074,11 @@ function createSplitsAndOnyxData(participants, currentUserLogin, currentUserAcco
         // entering code that creates optimistic personal details
         if ((!hasMultipleParticipants && !existingSplitChatReportID) || isOwnPolicyExpenseChat) {
             oneOnOneChatReport = splitChatReport;
-            shouldCreateOptimisticPersonalDetails = !existingSplitChatReport;
+            shouldCreateOptimisticPersonalDetails = !existingSplitChatReport && !personalDetailExists;
         } else {
             const existingChatReport = ReportUtils.getChatByParticipants([accountID]);
             isNewOneOnOneChatReport = !existingChatReport;
-            shouldCreateOptimisticPersonalDetails = isNewOneOnOneChatReport;
+            shouldCreateOptimisticPersonalDetails = isNewOneOnOneChatReport && !personalDetailExists;
             oneOnOneChatReport = existingChatReport || ReportUtils.buildOptimisticChatReport([accountID]);
         }
 
@@ -1294,7 +1305,18 @@ function startSplitBill(participants, currentUserLogin, currentUserAccountID, co
     const receiptObject = {state, source};
 
     // ReportID is -2 (aka "deleted") on the group transaction
-    const splitTransaction = TransactionUtils.buildOptimisticTransaction(0, CONST.CURRENCY.USD, CONST.REPORT.SPLIT_REPORTID, comment, '', '', '', '', receiptObject, filename);
+    const splitTransaction = TransactionUtils.buildOptimisticTransaction(
+        0,
+        CONST.CURRENCY.USD,
+        CONST.REPORT.SPLIT_REPORTID,
+        comment,
+        '',
+        '',
+        '',
+        CONST.TRANSACTION.PARTIAL_TRANSACTION_MERCHANT,
+        receiptObject,
+        filename,
+    );
 
     // Note: The created action must be optimistically generated before the IOU action so there's no chance that the created action appears after the IOU action in the chat
     const splitChatCreatedReportAction = ReportUtils.buildOptimisticCreatedReportAction(currentUserEmailForIOUSplit);
@@ -1410,7 +1432,7 @@ function startSplitBill(participants, currentUserLogin, currentUserAccountID, co
                         errors: ErrorUtils.getMicroSecondOnyxError('report.genericCreateReportFailureMessage'),
                     },
                     [splitIOUReportAction.reportActionID]: {
-                        errors: ErrorUtils.getMicroSecondOnyxError('report.genericCreateFailureMessage'),
+                        errors: ErrorUtils.getMicroSecondOnyxError('iou.error.genericCreateFailureMessage'),
                     },
                 },
             },
@@ -1489,6 +1511,237 @@ function startSplitBill(participants, currentUserLogin, currentUserAccountID, co
     Report.notifyNewAction(splitChatReport.chatReportID, currentUserAccountID);
 }
 
+/** Used for editing a split bill while it's still scanning or when SmartScan fails, it completes a split bill started by startSplitBill above.
+ *
+ * @param {number} chatReportID - The group chat or workspace reportID
+ * @param {Object} reportAction - The split action that lives in the chatReport above
+ * @param {Object} updatedTransaction - The updated **draft** split transaction
+ * @param {Number} sessionAccountID - accountID of the current user
+ * @param {String} sessionEmail - email of the current user
+ */
+function completeSplitBill(chatReportID, reportAction, updatedTransaction, sessionAccountID, sessionEmail) {
+    const currentUserEmailForIOUSplit = OptionsListUtils.addSMSDomainIfPhoneNumber(sessionEmail);
+    const {transactionID} = updatedTransaction;
+    const unmodifiedTransaction = allTransactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];
+
+    // Save optimistic updated transaction and action
+    const optimisticData = [
+        {
+            onyxMethod: Onyx.METHOD.MERGE,
+            key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`,
+            value: {
+                ...updatedTransaction,
+                receipt: {
+                    state: CONST.IOU.RECEIPT_STATE.OPEN,
+                },
+            },
+        },
+        {
+            onyxMethod: Onyx.METHOD.MERGE,
+            key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${chatReportID}`,
+            value: {
+                [reportAction.reportActionID]: {
+                    lastModified: DateUtils.getDBTime(),
+                    whisperedToAccountIDs: [],
+                },
+            },
+        },
+    ];
+
+    const successData = [
+        {
+            onyxMethod: Onyx.METHOD.MERGE,
+            key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`,
+            value: {pendingAction: null},
+        },
+        {
+            onyxMethod: Onyx.METHOD.MERGE,
+            key: `${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`,
+            value: null,
+        },
+    ];
+
+    const failureData = [
+        {
+            onyxMethod: Onyx.METHOD.MERGE,
+            key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`,
+            value: {
+                ...unmodifiedTransaction,
+                errors: ErrorUtils.getMicroSecondOnyxError('iou.error.genericCreateFailureMessage'),
+            },
+        },
+        {
+            onyxMethod: Onyx.METHOD.MERGE,
+            key: `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${chatReportID}`,
+            value: {
+                [reportAction.reportActionID]: {
+                    ...reportAction,
+                    errors: ErrorUtils.getMicroSecondOnyxError('iou.error.genericCreateFailureMessage'),
+                },
+            },
+        },
+    ];
+
+    const splitParticipants = updatedTransaction.comment.splits;
+    const {modifiedAmount: amount, modifiedCurrency: currency} = updatedTransaction;
+
+    // Exclude the current user when calculating the split amount, `calculateAmount` takes it into account
+    const splitAmount = IOUUtils.calculateAmount(splitParticipants.length - 1, amount, currency, false);
+
+    const splits = [{email: currentUserEmailForIOUSplit}];
+    _.each(splitParticipants, (participant) => {
+        // Skip creating the transaction for the current user
+        if (participant.email === currentUserEmailForIOUSplit) {
+            return;
+        }
+        const isPolicyExpenseChat = !_.isEmpty(participant.policyID);
+
+        if (!isPolicyExpenseChat) {
+            // In case this is still the optimistic accountID saved in the splits array, return early as we cannot know
+            // if there is an existing chat between the split creator and this participant
+            // Instead, we will rely on Auth generating the report IDs and the user won't see any optimistic chats or reports created
+            const participantPersonalDetails = allPersonalDetails[participant.accountID] || {};
+            if (!participantPersonalDetails || participantPersonalDetails.isOptimisticPersonalDetail) {
+                splits.push({
+                    email: participant.email,
+                });
+                return;
+            }
+        }
+
+        let oneOnOneChatReport;
+        let isNewOneOnOneChatReport = false;
+        if (isPolicyExpenseChat) {
+            // The workspace chat reportID is saved in the splits array when starting a split bill with a workspace
+            oneOnOneChatReport = allReports[`${ONYXKEYS.COLLECTION.REPORT}${participant.chatReportID}`];
+        } else {
+            const existingChatReport = ReportUtils.getChatByParticipants([participant.accountID]);
+            isNewOneOnOneChatReport = !existingChatReport;
+            oneOnOneChatReport = existingChatReport || ReportUtils.buildOptimisticChatReport([participant.accountID]);
+        }
+
+        let oneOnOneIOUReport = lodashGet(allReports, `${ONYXKEYS.COLLECTION.REPORT}${oneOnOneChatReport.iouReportID}`, undefined);
+        const shouldCreateNewOneOnOneIOUReport =
+            _.isUndefined(oneOnOneIOUReport) || (isPolicyExpenseChat && ReportUtils.isControlPolicyExpenseReport(oneOnOneIOUReport) && ReportUtils.isReportApproved(oneOnOneIOUReport));
+
+        if (shouldCreateNewOneOnOneIOUReport) {
+            oneOnOneIOUReport = isPolicyExpenseChat
+                ? ReportUtils.buildOptimisticExpenseReport(oneOnOneChatReport.reportID, participant.policyID, sessionAccountID, splitAmount, currency)
+                : ReportUtils.buildOptimisticIOUReport(sessionAccountID, participant.accountID, splitAmount, oneOnOneChatReport.reportID, currency);
+        } else if (isPolicyExpenseChat) {
+            // Because of the Expense reports are stored as negative values, we subtract the total from the amount
+            oneOnOneIOUReport.total -= splitAmount;
+        } else {
+            oneOnOneIOUReport = IOUUtils.updateIOUOwnerAndTotal(oneOnOneIOUReport, sessionAccountID, splitAmount, currency);
+        }
+
+        const oneOnOneTransaction = TransactionUtils.buildOptimisticTransaction(
+            isPolicyExpenseChat ? -splitAmount : splitAmount,
+            currency,
+            oneOnOneIOUReport.reportID,
+            updatedTransaction.comment.comment,
+            updatedTransaction.modifiedCreated,
+            CONST.IOU.MONEY_REQUEST_TYPE.SPLIT,
+            transactionID,
+            updatedTransaction.modifiedMerchant,
+            {...updatedTransaction.receipt, state: CONST.IOU.RECEIPT_STATE.OPEN},
+            updatedTransaction.filename,
+        );
+
+        const oneOnOneCreatedActionForChat = ReportUtils.buildOptimisticCreatedReportAction(currentUserEmailForIOUSplit);
+        const oneOnOneCreatedActionForIOU = ReportUtils.buildOptimisticCreatedReportAction(currentUserEmailForIOUSplit);
+        const oneOnOneIOUAction = ReportUtils.buildOptimisticIOUReportAction(
+            CONST.IOU.REPORT_ACTION_TYPE.CREATE,
+            splitAmount,
+            currency,
+            updatedTransaction.comment.comment,
+            [participant],
+            oneOnOneTransaction.transactionID,
+            '',
+            oneOnOneIOUReport.reportID,
+        );
+
+        let oneOnOneReportPreviewAction = ReportActionsUtils.getReportPreviewAction(oneOnOneChatReport.reportID, oneOnOneIOUReport.reportID);
+        if (oneOnOneReportPreviewAction) {
+            oneOnOneReportPreviewAction = ReportUtils.updateReportPreview(oneOnOneIOUReport, oneOnOneReportPreviewAction);
+        } else {
+            oneOnOneReportPreviewAction = ReportUtils.buildOptimisticReportPreview(oneOnOneChatReport, oneOnOneIOUReport, '', oneOnOneTransaction);
+        }
+
+        const [oneOnOneOptimisticData, oneOnOneSuccessData, oneOnOneFailureData] = buildOnyxDataForMoneyRequest(
+            oneOnOneChatReport,
+            oneOnOneIOUReport,
+            oneOnOneTransaction,
+            oneOnOneCreatedActionForChat,
+            oneOnOneCreatedActionForIOU,
+            oneOnOneIOUAction,
+            {},
+            oneOnOneReportPreviewAction,
+            {},
+            {},
+            isNewOneOnOneChatReport,
+            shouldCreateNewOneOnOneIOUReport,
+        );
+
+        splits.push({
+            email: participant.email,
+            accountID: participant.accountID,
+            policyID: participant.policyID,
+            iouReportID: oneOnOneIOUReport.reportID,
+            chatReportID: oneOnOneChatReport.reportID,
+            transactionID: oneOnOneTransaction.transactionID,
+            reportActionID: oneOnOneIOUAction.reportActionID,
+            createdChatReportActionID: oneOnOneCreatedActionForChat.reportActionID,
+            createdIOUReportActionID: oneOnOneCreatedActionForIOU.reportActionID,
+            reportPreviewReportActionID: oneOnOneReportPreviewAction.reportActionID,
+        });
+
+        optimisticData.push(...oneOnOneOptimisticData);
+        successData.push(...oneOnOneSuccessData);
+        failureData.push(...oneOnOneFailureData);
+    });
+
+    const {
+        amount: transactionAmount,
+        currency: transactionCurrency,
+        created: transactionCreated,
+        merchant: transactionMerchant,
+        comment: transactionComment,
+    } = ReportUtils.getTransactionDetails(updatedTransaction);
+
+    API.write(
+        'CompleteSplitBill',
+        {
+            transactionID,
+            amount: transactionAmount,
+            currency: transactionCurrency,
+            created: transactionCreated,
+            merchant: transactionMerchant,
+            comment: transactionComment,
+            splits: JSON.stringify(splits),
+        },
+        {optimisticData, successData, failureData},
+    );
+    Navigation.dismissModal(chatReportID);
+    Report.notifyNewAction(chatReportID, sessionAccountID);
+}
+
+/**
+ * @param {String} transactionID
+ * @param {Object} transactionChanges
+ */
+function setDraftSplitTransaction(transactionID, transactionChanges = {}) {
+    let draftSplitTransaction = allDraftSplitTransactions[`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`];
+
+    if (!draftSplitTransaction) {
+        draftSplitTransaction = allTransactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`];
+    }
+
+    const updatedTransaction = TransactionUtils.getUpdatedTransaction(draftSplitTransaction, transactionChanges, false, false);
+
+    Onyx.merge(`${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${transactionID}`, updatedTransaction);
+}
+
 /**
  * @param {String} transactionID
  * @param {Number} transactionThreadReportID
@@ -1535,7 +1788,8 @@ function editMoneyRequest(transactionID, transactionThreadReportID, transactionC
         updatedMoneyRequestReport.lastMessageHtml = lastMessage[0].html;
 
         // Update the last message of the chat report
-        const messageText = Localize.translateLocal('iou.payerOwesAmount', {
+        const hasNonReimbursableTransactions = ReportUtils.hasNonReimbursableTransactions(iouReport);
+        const messageText = Localize.translateLocal(hasNonReimbursableTransactions ? 'iou.payerSpentAmount' : 'iou.payerOwesAmount', {
             payer: updatedMoneyRequestReport.managerEmail,
             amount: CurrencyUtils.convertToDisplayString(updatedMoneyRequestReport.total, updatedMoneyRequestReport.currency),
         });
@@ -1755,7 +2009,8 @@ function deleteMoneyRequest(transactionID, reportAction, isSingleTransactionView
         updatedIOUReport.lastVisibleActionCreated = lastVisibleAction.created;
 
         updatedReportPreviewAction = {...reportPreviewAction};
-        const messageText = Localize.translateLocal('iou.payerOwesAmount', {
+        const hasNonReimbursableTransactions = ReportUtils.hasNonReimbursableTransactions(iouReport);
+        const messageText = Localize.translateLocal(hasNonReimbursableTransactions ? 'iou.payerSpentAmount' : 'iou.payerOwesAmount', {
             payer: updatedIOUReport.managerEmail,
             amount: CurrencyUtils.convertToDisplayString(updatedIOUReport.total, updatedIOUReport.currency),
         });
@@ -1936,7 +2191,7 @@ function getSendMoneyParams(report, amount, currency, comment, paymentMethodType
     }
     const optimisticIOUReport = ReportUtils.buildOptimisticIOUReport(recipientAccountID, managerID, amount, chatReport.reportID, currency, true);
 
-    const optimisticTransaction = TransactionUtils.buildOptimisticTransaction(amount * 100, currency, optimisticIOUReport.reportID, comment);
+    const optimisticTransaction = TransactionUtils.buildOptimisticTransaction(amount, currency, optimisticIOUReport.reportID, comment);
     const optimisticTransactionData = {
         onyxMethod: Onyx.METHOD.SET,
         key: `${ONYXKEYS.COLLECTION.TRANSACTION}${optimisticTransaction.transactionID}`,
@@ -2431,6 +2686,29 @@ function payMoneyRequest(paymentType, chatReport, iouReport) {
     Navigation.dismissModal(chatReport.reportID);
 }
 
+function detachReceipt(transactionID) {
+    const transaction = allTransactions[`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`] || {};
+    const newTransaction = {...transaction, filename: '', receipt: {}};
+
+    const optimisticData = [
+        {
+            onyxMethod: Onyx.METHOD.SET,
+            key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`,
+            value: newTransaction,
+        },
+    ];
+
+    const failureData = [
+        {
+            onyxMethod: Onyx.METHOD.MERGE,
+            key: `${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`,
+            value: transaction,
+        },
+    ];
+
+    API.write('DetachReceipt', {transactionID}, {optimisticData, failureData});
+}
+
 /**
  * @param {String} transactionID
  * @param {Object} receipt
@@ -2564,9 +2842,12 @@ function setMoneyRequestReceipt(receiptPath, receiptFilename) {
     Onyx.merge(ONYXKEYS.IOU, {receiptPath, receiptFilename, merchant: ''});
 }
 
-function createEmptyTransaction() {
+function setUpDistanceTransaction() {
     const transactionID = NumberUtils.rand64();
-    Onyx.merge(`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, {transactionID});
+    Onyx.merge(`${ONYXKEYS.COLLECTION.TRANSACTION}${transactionID}`, {
+        transactionID,
+        comment: {type: CONST.TRANSACTION.TYPE.CUSTOM_UNIT, customUnit: {name: CONST.CUSTOM_UNITS.NAME_DISTANCE}},
+    });
     Onyx.merge(ONYXKEYS.IOU, {transactionID});
 }
 
@@ -2637,7 +2918,9 @@ export {
     deleteMoneyRequest,
     splitBill,
     splitBillAndOpenReport,
+    setDraftSplitTransaction,
     startSplitBill,
+    completeSplitBill,
     requestMoney,
     sendMoneyElsewhere,
     approveMoneyRequest,
@@ -2659,9 +2942,10 @@ export {
     setMoneyRequestBillable,
     setMoneyRequestParticipants,
     setMoneyRequestReceipt,
-    createEmptyTransaction,
+    setUpDistanceTransaction,
     navigateToNextPage,
     updateDistanceRequest,
     replaceReceipt,
+    detachReceipt,
     getIOUReportID,
 };
diff --git a/src/libs/actions/InputFocus/index.desktop.ts b/src/libs/actions/InputFocus/index.desktop.ts
new file mode 100644
index 000000000000..b6cf1aba6138
--- /dev/null
+++ b/src/libs/actions/InputFocus/index.desktop.ts
@@ -0,0 +1,29 @@
+import Onyx from 'react-native-onyx';
+import ONYXKEYS from '../../../ONYXKEYS';
+import ReportActionComposeFocusManager from '../../ReportActionComposeFocusManager';
+
+function inputFocusChange(focus: boolean) {
+    Onyx.set(ONYXKEYS.INPUT_FOCUSED, focus);
+}
+
+let refSave: HTMLElement | undefined;
+function composerFocusKeepFocusOn(ref: HTMLElement, isFocused: boolean, modal: {willAlertModalBecomeVisible: boolean; isVisible: boolean}, onyxFocused: boolean) {
+    if (isFocused && !onyxFocused) {
+        inputFocusChange(true);
+        ref.focus();
+    }
+    if (isFocused) {
+        refSave = ref;
+    }
+    if (!isFocused && !onyxFocused && !modal.willAlertModalBecomeVisible && !modal.isVisible && refSave) {
+        if (!ReportActionComposeFocusManager.isFocused()) {
+            refSave.focus();
+        } else {
+            refSave = undefined;
+        }
+    }
+}
+
+const callback = (method: () => void) => method();
+
+export {composerFocusKeepFocusOn, inputFocusChange, callback};
diff --git a/src/libs/actions/InputFocus/index.ts b/src/libs/actions/InputFocus/index.ts
new file mode 100644
index 000000000000..1840b0625626
--- /dev/null
+++ b/src/libs/actions/InputFocus/index.ts
@@ -0,0 +1,5 @@
+function inputFocusChange() {}
+function composerFocusKeepFocusOn() {}
+const callback = () => {};
+
+export {composerFocusKeepFocusOn, inputFocusChange, callback};
diff --git a/src/libs/actions/InputFocus/index.website.ts b/src/libs/actions/InputFocus/index.website.ts
new file mode 100644
index 000000000000..7c044b169a03
--- /dev/null
+++ b/src/libs/actions/InputFocus/index.website.ts
@@ -0,0 +1,30 @@
+import Onyx from 'react-native-onyx';
+import ONYXKEYS from '../../../ONYXKEYS';
+import * as Browser from '../../Browser';
+import ReportActionComposeFocusManager from '../../ReportActionComposeFocusManager';
+
+function inputFocusChange(focus: boolean) {
+    Onyx.set(ONYXKEYS.INPUT_FOCUSED, focus);
+}
+
+let refSave: HTMLElement | undefined;
+function composerFocusKeepFocusOn(ref: HTMLElement, isFocused: boolean, modal: {willAlertModalBecomeVisible: boolean; isVisible: boolean}, onyxFocused: boolean) {
+    if (isFocused && !onyxFocused) {
+        inputFocusChange(true);
+        ref.focus();
+    }
+    if (isFocused) {
+        refSave = ref;
+    }
+    if (!isFocused && !onyxFocused && !modal.willAlertModalBecomeVisible && !modal.isVisible && refSave) {
+        if (!ReportActionComposeFocusManager.isFocused()) {
+            refSave.focus();
+        } else {
+            refSave = undefined;
+        }
+    }
+}
+
+const callback = (method: () => void) => !Browser.isMobile() && method();
+
+export {composerFocusKeepFocusOn, inputFocusChange, callback};
diff --git a/src/libs/actions/KeyboardShortcuts.js b/src/libs/actions/KeyboardShortcuts.js
deleted file mode 100644
index d66e362890b2..000000000000
--- a/src/libs/actions/KeyboardShortcuts.js
+++ /dev/null
@@ -1,31 +0,0 @@
-import Onyx from 'react-native-onyx';
-import ONYXKEYS from '../../ONYXKEYS';
-
-let isShortcutsModalOpen;
-Onyx.connect({
-    key: ONYXKEYS.IS_SHORTCUTS_MODAL_OPEN,
-    callback: (flag) => (isShortcutsModalOpen = flag),
-    initWithStoredValues: false,
-});
-
-/**
- * Set keyboard shortcuts flag to show modal
- */
-function showKeyboardShortcutModal() {
-    if (isShortcutsModalOpen) {
-        return;
-    }
-    Onyx.set(ONYXKEYS.IS_SHORTCUTS_MODAL_OPEN, true);
-}
-
-/**
- * Unset keyboard shortcuts flag to hide modal
- */
-function hideKeyboardShortcutModal() {
-    if (!isShortcutsModalOpen) {
-        return;
-    }
-    Onyx.set(ONYXKEYS.IS_SHORTCUTS_MODAL_OPEN, false);
-}
-
-export {showKeyboardShortcutModal, hideKeyboardShortcutModal};
diff --git a/src/libs/actions/ReimbursementAccount/index.js b/src/libs/actions/ReimbursementAccount/index.js
index 49ff30e7be8e..68774d0ba8b0 100644
--- a/src/libs/actions/ReimbursementAccount/index.js
+++ b/src/libs/actions/ReimbursementAccount/index.js
@@ -31,6 +31,7 @@ function setWorkspaceIDForReimbursementAccount(workspaceID) {
  */
 function updateReimbursementAccountDraft(bankAccountData) {
     Onyx.merge(ONYXKEYS.REIMBURSEMENT_ACCOUNT_DRAFT, bankAccountData);
+    Onyx.merge(ONYXKEYS.REIMBURSEMENT_ACCOUNT, {draftStep: undefined});
 }
 
 /**
diff --git a/src/libs/actions/ReimbursementAccount/resetFreePlanBankAccount.js b/src/libs/actions/ReimbursementAccount/resetFreePlanBankAccount.js
index edb169fc96aa..388010e99569 100644
--- a/src/libs/actions/ReimbursementAccount/resetFreePlanBankAccount.js
+++ b/src/libs/actions/ReimbursementAccount/resetFreePlanBankAccount.js
@@ -1,20 +1,20 @@
 import Onyx from 'react-native-onyx';
 import CONST from '../../../CONST';
 import ONYXKEYS from '../../../ONYXKEYS';
-import * as store from './store';
 import * as API from '../../API';
 import * as PlaidDataProps from '../../../pages/ReimbursementAccount/plaidDataPropTypes';
 import * as ReimbursementAccountProps from '../../../pages/ReimbursementAccount/reimbursementAccountPropTypes';
 
 /**
  * Reset user's reimbursement account. This will delete the bank account.
- * @param {number} bankAccountID
+ * @param {Number} bankAccountID
+ * @param {Object} session
  */
-function resetFreePlanBankAccount(bankAccountID) {
+function resetFreePlanBankAccount(bankAccountID, session) {
     if (!bankAccountID) {
         throw new Error('Missing bankAccountID when attempting to reset free plan bank account');
     }
-    if (!store.getCredentials() || !store.getCredentials().login) {
+    if (!session.email) {
         throw new Error('Missing credentials when attempting to reset free plan bank account');
     }
 
@@ -22,7 +22,7 @@ function resetFreePlanBankAccount(bankAccountID) {
         'RestartBankAccountSetup',
         {
             bankAccountID,
-            ownerEmail: store.getCredentials().login,
+            ownerEmail: session.email,
         },
         {
             optimisticData: [
diff --git a/src/libs/actions/Report.js b/src/libs/actions/Report.js
index 27a02b1fc75f..c56e9c567745 100644
--- a/src/libs/actions/Report.js
+++ b/src/libs/actions/Report.js
@@ -1,6 +1,7 @@
 import {InteractionManager} from 'react-native';
 import _ from 'underscore';
 import lodashGet from 'lodash/get';
+import lodashDebounce from 'lodash/debounce';
 import ExpensiMark from 'expensify-common/lib/ExpensiMark';
 import Onyx from 'react-native-onyx';
 import Str from 'expensify-common/lib/str';
@@ -1401,9 +1402,15 @@ function updateWriteCapabilityAndNavigate(report, newValue) {
 
 /**
  * Navigates to the 1:1 report with Concierge
+ *
+ * @param {Boolean} ignoreConciergeReportID - Flag to ignore conciergeChatReportID during navigation. The default behavior is to not ignore.
  */
-function navigateToConciergeChat() {
-    if (!conciergeChatReportID) {
+function navigateToConciergeChat(ignoreConciergeReportID = false) {
+    // If conciergeChatReportID contains a concierge report ID, we navigate to the concierge chat using the stored report ID.
+    // Otherwise, we would find the concierge chat and navigate to it.
+    // Now, when user performs sign-out and a sign-in again, conciergeChatReportID may contain a stale value.
+    // In order to prevent navigation to a stale value, we use ignoreConciergeReportID to forcefully find and navigate to concierge chat.
+    if (!conciergeChatReportID || ignoreConciergeReportID) {
         // In order to avoid creating concierge repeatedly,
         // we need to ensure that the server data has been successfully pulled
         Welcome.serverDataIsReadyPromise().then(() => {
@@ -1423,8 +1430,9 @@ function navigateToConciergeChat() {
  * @param {String} visibility
  * @param {Array<Number>} policyMembersAccountIDs
  * @param {String} writeCapability
+ * @param {String} welcomeMessage
  */
-function addPolicyReport(policyID, reportName, visibility, policyMembersAccountIDs, writeCapability = CONST.REPORT.WRITE_CAPABILITIES.ALL) {
+function addPolicyReport(policyID, reportName, visibility, policyMembersAccountIDs, writeCapability = CONST.REPORT.WRITE_CAPABILITIES.ALL, welcomeMessage = '') {
     // The participants include the current user (admin), and for restricted rooms, the policy members. Participants must not be empty.
     const members = visibility === CONST.REPORT.VISIBILITY.RESTRICTED ? policyMembersAccountIDs : [];
     const participants = _.unique([currentUserAccountID, ...members]);
@@ -1441,6 +1449,9 @@ function addPolicyReport(policyID, reportName, visibility, policyMembersAccountI
 
         // The room might contain all policy members so notifying always should be opt-in only.
         CONST.REPORT.NOTIFICATION_PREFERENCE.DAILY,
+        '',
+        '',
+        welcomeMessage,
     );
     const createdReportAction = ReportUtils.buildOptimisticCreatedReportAction(CONST.POLICY.OWNER_EMAIL_FAKE);
 
@@ -1505,6 +1516,7 @@ function addPolicyReport(policyID, reportName, visibility, policyMembersAccountI
             reportID: policyReport.reportID,
             createdReportActionID: createdReportAction.reportActionID,
             writeCapability,
+            welcomeMessage,
         },
         {optimisticData, successData, failureData},
     );
@@ -1877,7 +1889,6 @@ function toggleEmojiReaction(reportID, reportAction, reactionObject, existingRea
  * @param {Boolean} isAuthenticated
  */
 function openReportFromDeepLink(url, isAuthenticated) {
-    const route = ReportUtils.getRouteFromLink(url);
     const reportID = ReportUtils.getReportIDFromLink(url);
 
     if (reportID && !isAuthenticated) {
@@ -1896,11 +1907,16 @@ function openReportFromDeepLink(url, isAuthenticated) {
     // Navigate to the report after sign-in/sign-up.
     InteractionManager.runAfterInteractions(() => {
         Session.waitForUserSignIn().then(() => {
-            if (route === ROUTES.CONCIERGE) {
-                navigateToConciergeChat();
-                return;
-            }
-            Navigation.navigate(route, CONST.NAVIGATION.TYPE.PUSH);
+            Navigation.waitForProtectedRoutes()
+                .then(() => {
+                    const route = ReportUtils.getRouteFromLink(url);
+                    if (route === ROUTES.CONCIERGE) {
+                        navigateToConciergeChat(true);
+                        return;
+                    }
+                    Navigation.navigate(route, CONST.NAVIGATION.TYPE.PUSH);
+                })
+                .catch((error) => Log.warn(error.message));
         });
     });
 }
@@ -2211,7 +2227,63 @@ function savePrivateNotesDraft(reportID, note) {
     Onyx.merge(`${ONYXKEYS.COLLECTION.PRIVATE_NOTES_DRAFT}${reportID}`, note);
 }
 
+/**
+ * @private
+ * @param {string} searchInput
+ */
+function searchForReports(searchInput) {
+    // We do not try to make this request while offline because it sets a loading indicator optimistically
+    if (isNetworkOffline) {
+        Onyx.set(ONYXKEYS.IS_SEARCHING_FOR_REPORTS, false);
+        return;
+    }
+
+    API.read(
+        'SearchForReports',
+        {searchInput},
+        {
+            successData: [
+                {
+                    onyxMethod: Onyx.METHOD.MERGE,
+                    key: ONYXKEYS.IS_SEARCHING_FOR_REPORTS,
+                    value: false,
+                },
+            ],
+            failureData: [
+                {
+                    onyxMethod: Onyx.METHOD.MERGE,
+                    key: ONYXKEYS.IS_SEARCHING_FOR_REPORTS,
+                    value: false,
+                },
+            ],
+        },
+    );
+}
+
+/**
+ * @private
+ * @param {string} searchInput
+ */
+const debouncedSearchInServer = lodashDebounce(searchForReports, CONST.TIMING.SEARCH_FOR_REPORTS_DEBOUNCE_TIME, {leading: false});
+
+/**
+ * @param {string} searchInput
+ */
+function searchInServer(searchInput) {
+    if (isNetworkOffline) {
+        Onyx.set(ONYXKEYS.IS_SEARCHING_FOR_REPORTS, false);
+        return;
+    }
+
+    // Why not set this in optimistic data? It won't run until the API request happens and while the API request is debounced
+    // we want to show the loading state right away. Otherwise, we will see a flashing UI where the client options are sorted and
+    // tell the user there are no options, then we start searching, and tell them there are no options again.
+    Onyx.set(ONYXKEYS.IS_SEARCHING_FOR_REPORTS, true);
+    debouncedSearchInServer(searchInput);
+}
+
 export {
+    searchInServer,
     addComment,
     addAttachment,
     reconnect,
diff --git a/src/libs/actions/Session/index.js b/src/libs/actions/Session/index.js
index 117a092c3875..3b623a42689d 100644
--- a/src/libs/actions/Session/index.js
+++ b/src/libs/actions/Session/index.js
@@ -316,7 +316,7 @@ function signInWithShortLivedAuthToken(email, authToken) {
     // If the user is signing in with a different account from the current app, should not pass the auto-generated login as it may be tied to the old account.
     // scene 1: the user is transitioning to newDot from a different account on oldDot.
     // scene 2: the user is transitioning to desktop app from a different account on web app.
-    const oldPartnerUserID = credentials.login === email ? credentials.autoGeneratedLogin : '';
+    const oldPartnerUserID = credentials.login === email && credentials.autoGeneratedLogin ? credentials.autoGeneratedLogin : '';
     API.read('SignInWithShortLivedAuthToken', {authToken, oldPartnerUserID, skipReauthentication: true}, {optimisticData, successData, failureData});
 }
 
@@ -541,6 +541,10 @@ function clearAccountMessages() {
     });
 }
 
+function setAccountError(error) {
+    Onyx.merge(ONYXKEYS.ACCOUNT, {errors: ErrorUtils.getMicroSecondOnyxError(error)});
+}
+
 // It's necessary to throttle requests to reauthenticate since calling this multiple times will cause Pusher to
 // reconnect each time when we only need to reconnect once. This way, if an authToken is expired and we try to
 // subscribe to a bunch of channels at once we will only reauthenticate and force reconnect Pusher once.
@@ -807,6 +811,7 @@ export {
     unlinkLogin,
     clearSignInData,
     clearAccountMessages,
+    setAccountError,
     authenticatePusher,
     reauthenticatePusher,
     invalidateCredentials,
diff --git a/src/libs/actions/Timing.js b/src/libs/actions/Timing.ts
similarity index 76%
rename from src/libs/actions/Timing.js
rename to src/libs/actions/Timing.ts
index 2be2cdc6fa63..13f40bab87c9 100644
--- a/src/libs/actions/Timing.js
+++ b/src/libs/actions/Timing.ts
@@ -4,15 +4,20 @@ import Firebase from '../Firebase';
 import * as API from '../API';
 import Log from '../Log';
 
-let timestampData = {};
+type TimestampData = {
+    startTime: number;
+    shouldUseFirebase: boolean;
+};
+
+let timestampData: Record<string, TimestampData> = {};
 
 /**
  * Start a performance timing measurement
  *
- * @param {String} eventName
- * @param {Boolean} shouldUseFirebase - adds an additional trace in Firebase
+ * @param eventName
+ * @param shouldUseFirebase - adds an additional trace in Firebase
  */
-function start(eventName, shouldUseFirebase = false) {
+function start(eventName: string, shouldUseFirebase = false) {
     timestampData[eventName] = {startTime: Date.now(), shouldUseFirebase};
 
     if (!shouldUseFirebase) {
@@ -25,11 +30,11 @@ function start(eventName, shouldUseFirebase = false) {
 /**
  * End performance timing. Measure the time between event start/end in milliseconds, and push to Grafana
  *
- * @param {String} eventName - event name used as timestamp key
- * @param {String} [secondaryName] - optional secondary event name, passed to grafana
- * @param {number} [maxExecutionTime] - optional amount of time (ms) to wait before logging a warn
+ * @param eventName - event name used as timestamp key
+ * @param [secondaryName] - optional secondary event name, passed to grafana
+ * @param [maxExecutionTime] - optional amount of time (ms) to wait before logging a warn
  */
-function end(eventName, secondaryName = '', maxExecutionTime = 0) {
+function end(eventName: string, secondaryName = '', maxExecutionTime = 0) {
     if (!timestampData[eventName]) {
         return;
     }
diff --git a/src/libs/fileDownload/FileUtils.js b/src/libs/fileDownload/FileUtils.js
index e508d096128d..ba06b80f7c43 100644
--- a/src/libs/fileDownload/FileUtils.js
+++ b/src/libs/fileDownload/FileUtils.js
@@ -48,6 +48,27 @@ function showPermissionErrorAlert() {
     ]);
 }
 
+/**
+ * Inform the users when they need to grant camera access and guide them to settings
+ */
+function showCameraPermissionsAlert() {
+    Alert.alert(
+        Localize.translateLocal('attachmentPicker.cameraPermissionRequired'),
+        Localize.translateLocal('attachmentPicker.expensifyDoesntHaveAccessToCamera'),
+        [
+            {
+                text: Localize.translateLocal('common.cancel'),
+                style: 'cancel',
+            },
+            {
+                text: Localize.translateLocal('common.settings'),
+                onPress: () => Linking.openSettings(),
+            },
+        ],
+        {cancelable: false},
+    );
+}
+
 /**
  * Generate a random file name with timestamp and file extension
  * @param {String} url
@@ -170,4 +191,55 @@ const readFileAsync = (path, fileName) =>
             });
     });
 
-export {showGeneralErrorAlert, showSuccessAlert, showPermissionErrorAlert, splitExtensionFromFileName, getAttachmentName, getFileType, cleanFileName, appendTimeToFileName, readFileAsync};
+/**
+ * Converts a base64 encoded image string to a File instance.
+ * Adds a `uri` property to the File instance for accessing the blob as a URI.
+ *
+ * @param {string} base64 - The base64 encoded image string.
+ * @param {string} filename - Desired filename for the File instance.
+ * @returns {File} The File instance created from the base64 string with an additional `uri` property.
+ *
+ * @example
+ * const base64Image = "data:image/png;base64,..."; // your base64 encoded image
+ * const imageFile = base64ToFile(base64Image, "example.png");
+ * console.log(imageFile.uri); // Blob URI
+ */
+function base64ToFile(base64, filename) {
+    // Decode the base64 string
+    const byteString = atob(base64.split(',')[1]);
+
+    // Get the mime type from the base64 string
+    const mimeString = base64.split(',')[0].split(':')[1].split(';')[0];
+
+    // Convert byte string to Uint8Array
+    const arrayBuffer = new ArrayBuffer(byteString.length);
+    const uint8Array = new Uint8Array(arrayBuffer);
+    for (let i = 0; i < byteString.length; i++) {
+        uint8Array[i] = byteString.charCodeAt(i);
+    }
+
+    // Create a blob from the Uint8Array
+    const blob = new Blob([uint8Array], {type: mimeString});
+
+    // Create a File instance from the Blob
+    const file = new File([blob], filename, {type: mimeString, lastModified: Date.now()});
+
+    // Add a uri property to the File instance for accessing the blob as a URI
+    file.uri = URL.createObjectURL(blob);
+
+    return file;
+}
+
+export {
+    showGeneralErrorAlert,
+    showSuccessAlert,
+    showPermissionErrorAlert,
+    showCameraPermissionsAlert,
+    splitExtensionFromFileName,
+    getAttachmentName,
+    getFileType,
+    cleanFileName,
+    appendTimeToFileName,
+    readFileAsync,
+    base64ToFile,
+};
diff --git a/src/libs/localFileDownload/index.android.js b/src/libs/localFileDownload/index.android.ts
similarity index 88%
rename from src/libs/localFileDownload/index.android.js
rename to src/libs/localFileDownload/index.android.ts
index b3e39e7a7a53..ad13b5c5cfa7 100644
--- a/src/libs/localFileDownload/index.android.js
+++ b/src/libs/localFileDownload/index.android.ts
@@ -1,15 +1,13 @@
 import RNFetchBlob from 'react-native-blob-util';
 import * as FileUtils from '../fileDownload/FileUtils';
+import LocalFileDownload from './types';
 
 /**
  * Writes a local file to the app's internal directory with the given fileName
  * and textContent, so we're able to copy it to the Android public download dir.
  * After the file is copied, it is removed from the internal dir.
- *
- * @param {String} fileName
- * @param {String} textContent
  */
-export default function localFileDownload(fileName, textContent) {
+const localFileDownload: LocalFileDownload = (fileName, textContent) => {
     const newFileName = FileUtils.appendTimeToFileName(fileName);
     const dir = RNFetchBlob.fs.dirs.DocumentDir;
     const path = `${dir}/${newFileName}.txt`;
@@ -34,4 +32,6 @@ export default function localFileDownload(fileName, textContent) {
                 RNFetchBlob.fs.unlink(path);
             });
     });
-}
+};
+
+export default localFileDownload;
diff --git a/src/libs/localFileDownload/index.ios.js b/src/libs/localFileDownload/index.ios.ts
similarity index 82%
rename from src/libs/localFileDownload/index.ios.js
rename to src/libs/localFileDownload/index.ios.ts
index 1241f5a535db..3597ea5f6d3c 100644
--- a/src/libs/localFileDownload/index.ios.js
+++ b/src/libs/localFileDownload/index.ios.ts
@@ -1,16 +1,14 @@
 import {Share} from 'react-native';
 import RNFetchBlob from 'react-native-blob-util';
 import * as FileUtils from '../fileDownload/FileUtils';
+import LocalFileDownload from './types';
 
 /**
  * Writes a local file to the app's internal directory with the given fileName
  * and textContent, so we're able to share it using iOS' share API.
  * After the file is shared, it is removed from the internal dir.
- *
- * @param {String} fileName
- * @param {String} textContent
  */
-export default function localFileDownload(fileName, textContent) {
+const localFileDownload: LocalFileDownload = (fileName, textContent) => {
     const newFileName = FileUtils.appendTimeToFileName(fileName);
     const dir = RNFetchBlob.fs.dirs.DocumentDir;
     const path = `${dir}/${newFileName}.txt`;
@@ -20,4 +18,6 @@ export default function localFileDownload(fileName, textContent) {
             RNFetchBlob.fs.unlink(path);
         });
     });
-}
+};
+
+export default localFileDownload;
diff --git a/src/libs/localFileDownload/index.js b/src/libs/localFileDownload/index.ts
similarity index 77%
rename from src/libs/localFileDownload/index.js
rename to src/libs/localFileDownload/index.ts
index 427928834c9c..7b9b4973d5c1 100644
--- a/src/libs/localFileDownload/index.js
+++ b/src/libs/localFileDownload/index.ts
@@ -1,18 +1,18 @@
 import * as FileUtils from '../fileDownload/FileUtils';
+import LocalFileDownload from './types';
 
 /**
  * Creates a Blob with the given fileName and textContent, then dynamically
  * creates a temporary anchor, just to programmatically click it, so the file
  * is downloaded by the browser.
- *
- * @param {String} fileName
- * @param {String} textContent
  */
-export default function localFileDownload(fileName, textContent) {
+const localFileDownload: LocalFileDownload = (fileName, textContent) => {
     const blob = new Blob([textContent], {type: 'text/plain'});
     const url = URL.createObjectURL(blob);
     const link = document.createElement('a');
     link.download = FileUtils.appendTimeToFileName(`${fileName}.txt`);
     link.href = url;
     link.click();
-}
+};
+
+export default localFileDownload;
diff --git a/src/libs/localFileDownload/types.ts b/src/libs/localFileDownload/types.ts
new file mode 100644
index 000000000000..2086e2334d39
--- /dev/null
+++ b/src/libs/localFileDownload/types.ts
@@ -0,0 +1,3 @@
+type LocalFileDownload = (fileName: string, textContent: string) => void;
+
+export default LocalFileDownload;
diff --git a/src/pages/ConciergePage.js b/src/pages/ConciergePage.js
index e8509024b469..cfd452f0c952 100644
--- a/src/pages/ConciergePage.js
+++ b/src/pages/ConciergePage.js
@@ -32,8 +32,10 @@ function ConciergePage(props) {
     useFocusEffect(() => {
         if (_.has(props.session, 'authToken')) {
             // Pop the concierge loading page before opening the concierge report.
-            Navigation.goBack(ROUTES.HOME);
-            Report.navigateToConciergeChat();
+            Navigation.isNavigationReady().then(() => {
+                Navigation.goBack(ROUTES.HOME);
+                Report.navigateToConciergeChat();
+            });
         } else {
             Navigation.navigate();
         }
diff --git a/src/pages/DemoSetupPage.js b/src/pages/DemoSetupPage.js
index 5d4b99a0daf9..5432bea0c806 100644
--- a/src/pages/DemoSetupPage.js
+++ b/src/pages/DemoSetupPage.js
@@ -1,9 +1,11 @@
-import React from 'react';
+import React, {useCallback} from 'react';
 import PropTypes from 'prop-types';
 import {useFocusEffect} from '@react-navigation/native';
 import FullScreenLoadingIndicator from '../components/FullscreenLoadingIndicator';
 import Navigation from '../libs/Navigation/Navigation';
 import ROUTES from '../ROUTES';
+import CONST from '../CONST';
+import * as DemoActions from '../libs/actions/DemoActions';
 
 const propTypes = {
     /** Navigation route context info provided by react navigation */
@@ -18,12 +20,16 @@ const propTypes = {
  * route that led the user here. Now, it's just used to route the user home so we
  * don't show them a "Hmm... It's not here" message (which looks broken).
  */
-function DemoSetupPage() {
-    useFocusEffect(() => {
-        Navigation.isNavigationReady().then(() => {
-            Navigation.goBack(ROUTES.HOME);
-        });
-    });
+function DemoSetupPage(props) {
+    useFocusEffect(
+        useCallback(() => {
+            if (props.route.name === CONST.DEMO_PAGES.MONEY2020) {
+                DemoActions.runMoney2020Demo();
+            } else {
+                Navigation.goBack(ROUTES.HOME);
+            }
+        }, [props.route.name]),
+    );
 
     return <FullScreenLoadingIndicator />;
 }
diff --git a/src/pages/DetailsPage.js b/src/pages/DetailsPage.js
index 2f8d42c686a9..e4a1b763cd62 100755
--- a/src/pages/DetailsPage.js
+++ b/src/pages/DetailsPage.js
@@ -48,13 +48,10 @@ const propTypes = {
     /** Route params */
     route: matchType.isRequired,
 
-    /** Login list for the user that is signed in */
-    loginList: PropTypes.shape({
-        /** Date login was validated, used to show info indicator status */
-        validatedDate: PropTypes.string,
-
-        /** Field-specific server side errors keyed by microtime */
-        errorFields: PropTypes.objectOf(PropTypes.objectOf(PropTypes.string)),
+    /** Session info for the currently logged in user. */
+    session: PropTypes.shape({
+        /** Currently logged in user accountID */
+        accountID: PropTypes.number,
     }),
 
     ...withLocalizePropTypes,
@@ -63,7 +60,9 @@ const propTypes = {
 const defaultProps = {
     // When opening someone else's profile (via deep link) before login, this is empty
     personalDetails: {},
-    loginList: {},
+    session: {
+        accountID: 0,
+    },
 };
 
 /**
@@ -123,7 +122,7 @@ function DetailsPage(props) {
     const phoneNumber = getPhoneNumber(details);
     const phoneOrEmail = isSMSLogin ? getPhoneNumber(details) : details.login;
 
-    const isCurrentUser = _.keys(props.loginList).includes(details.login);
+    const isCurrentUser = props.session.accountID === details.accountID;
 
     return (
         <ScreenWrapper testID={DetailsPage.displayName}>
@@ -225,8 +224,8 @@ export default compose(
         personalDetails: {
             key: ONYXKEYS.PERSONAL_DETAILS_LIST,
         },
-        loginList: {
-            key: ONYXKEYS.LOGIN_LIST,
+        session: {
+            key: ONYXKEYS.SESSION,
         },
     }),
 )(DetailsPage);
diff --git a/src/pages/EditRequestAmountPage.js b/src/pages/EditRequestAmountPage.js
index 9f72c9afbc23..d65fdafb3b59 100644
--- a/src/pages/EditRequestAmountPage.js
+++ b/src/pages/EditRequestAmountPage.js
@@ -1,13 +1,11 @@
 import React, {useCallback, useRef} from 'react';
-import {InteractionManager} from 'react-native';
 import {useFocusEffect} from '@react-navigation/native';
 import PropTypes from 'prop-types';
+import CONST from '../CONST';
+import useLocalize from '../hooks/useLocalize';
 import ScreenWrapper from '../components/ScreenWrapper';
 import HeaderWithBackButton from '../components/HeaderWithBackButton';
-import Navigation from '../libs/Navigation/Navigation';
-import useLocalize from '../hooks/useLocalize';
 import MoneyRequestAmountForm from './iou/steps/MoneyRequestAmountForm';
-import ROUTES from '../ROUTES';
 
 const propTypes = {
     /** Transaction default amount value */
@@ -19,36 +17,25 @@ const propTypes = {
     /** Callback to fire when the Save button is pressed  */
     onSubmit: PropTypes.func.isRequired,
 
-    /** reportID for the transaction thread */
-    reportID: PropTypes.string.isRequired,
+    /** Callback to fire when we press on the currency  */
+    onNavigateToCurrency: PropTypes.func.isRequired,
 };
 
-function EditRequestAmountPage({defaultAmount, defaultCurrency, onSubmit, reportID}) {
+function EditRequestAmountPage({defaultAmount, defaultCurrency, onNavigateToCurrency, onSubmit}) {
     const {translate} = useLocalize();
-    const textInput = useRef(null);
 
-    const focusTextInput = () => {
-        // Component may not be initialized due to navigation transitions
-        // Wait until interactions are complete before trying to focus
-        InteractionManager.runAfterInteractions(() => {
-            // Focus text input
-            if (!textInput.current) {
-                return;
-            }
-
-            textInput.current.focus();
-        });
-    };
-
-    const navigateToCurrencySelectionPage = () => {
-        // Remove query from the route and encode it.
-        const activeRoute = encodeURIComponent(Navigation.getActiveRoute().replace(/\?.*/, ''));
-        Navigation.navigate(ROUTES.EDIT_CURRENCY_REQUEST.getRoute(reportID, defaultCurrency, activeRoute));
-    };
+    const textInput = useRef(null);
+    const focusTimeoutRef = useRef(null);
 
     useFocusEffect(
         useCallback(() => {
-            focusTextInput();
+            focusTimeoutRef.current = setTimeout(() => textInput.current && textInput.current.focus(), CONST.ANIMATED_TRANSITION);
+            return () => {
+                if (!focusTimeoutRef.current) {
+                    return;
+                }
+                clearTimeout(focusTimeoutRef.current);
+            };
         }, []),
     );
 
@@ -64,7 +51,7 @@ function EditRequestAmountPage({defaultAmount, defaultCurrency, onSubmit, report
                 currency={defaultCurrency}
                 amount={defaultAmount}
                 ref={(e) => (textInput.current = e)}
-                onCurrencyButtonPress={navigateToCurrencySelectionPage}
+                onCurrencyButtonPress={onNavigateToCurrency}
                 onSubmitButtonPress={onSubmit}
             />
         </ScreenWrapper>
diff --git a/src/pages/EditRequestCreatedPage.js b/src/pages/EditRequestCreatedPage.js
index 9edce7350400..d326e9115afc 100644
--- a/src/pages/EditRequestCreatedPage.js
+++ b/src/pages/EditRequestCreatedPage.js
@@ -2,11 +2,11 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import ScreenWrapper from '../components/ScreenWrapper';
 import HeaderWithBackButton from '../components/HeaderWithBackButton';
-import Form from '../components/Form';
 import ONYXKEYS from '../ONYXKEYS';
 import styles from '../styles/styles';
 import useLocalize from '../hooks/useLocalize';
 import NewDatePicker from '../components/NewDatePicker';
+import FormProvider from '../components/Form/FormProvider';
 
 const propTypes = {
     /** Transaction defailt created value */
@@ -26,7 +26,7 @@ function EditRequestCreatedPage({defaultCreated, onSubmit}) {
             testID={EditRequestCreatedPage.displayName}
         >
             <HeaderWithBackButton title={translate('common.date')} />
-            <Form
+            <FormProvider
                 style={[styles.flexGrow1, styles.ph5]}
                 formID={ONYXKEYS.FORMS.MONEY_REQUEST_DATE_FORM}
                 onSubmit={onSubmit}
@@ -39,7 +39,7 @@ function EditRequestCreatedPage({defaultCreated, onSubmit}) {
                     defaultValue={defaultCreated}
                     maxDate={new Date()}
                 />
-            </Form>
+            </FormProvider>
         </ScreenWrapper>
     );
 }
diff --git a/src/pages/EditRequestPage.js b/src/pages/EditRequestPage.js
index 28e70dc1a47e..a85f490bbb42 100644
--- a/src/pages/EditRequestPage.js
+++ b/src/pages/EditRequestPage.js
@@ -5,6 +5,7 @@ import lodashValues from 'lodash/values';
 import {withOnyx} from 'react-native-onyx';
 import CONST from '../CONST';
 import ONYXKEYS from '../ONYXKEYS';
+import ROUTES from '../ROUTES';
 import compose from '../libs/compose';
 import Navigation from '../libs/Navigation/Navigation';
 import * as ReportActionsUtils from '../libs/ReportActionsUtils';
@@ -30,6 +31,7 @@ import EditRequestCategoryPage from './EditRequestCategoryPage';
 import EditRequestTagPage from './EditRequestTagPage';
 import categoryPropTypes from '../components/categoryPropTypes';
 import ScreenWrapper from '../components/ScreenWrapper';
+import transactionPropTypes from '../components/transactionPropTypes';
 
 const propTypes = {
     /** Route from navigation */
@@ -75,6 +77,9 @@ const propTypes = {
     /** Collection of tags attached to a policy */
     policyTags: tagPropTypes,
 
+    /** The original transaction that is being edited */
+    transaction: transactionPropTypes,
+
     ...withCurrentUserPersonalDetailsPropTypes,
 };
 
@@ -88,10 +93,12 @@ const defaultProps = {
     },
     policyCategories: {},
     policyTags: {},
+    transaction: {},
 };
 
 function EditRequestPage({betas, report, route, parentReport, policy, session, policyCategories, policyTags, parentReportActions, transaction}) {
-    const parentReportAction = parentReportActions[report.parentReportActionID];
+    const parentReportActionID = lodashGet(report, 'parentReportActionID', '0');
+    const parentReportAction = lodashGet(parentReportActions, parentReportActionID);
     const {
         amount: transactionAmount,
         currency: transactionCurrency,
@@ -199,6 +206,10 @@ function EditRequestPage({betas, report, route, parentReport, policy, session, p
                         currency: defaultCurrency,
                     });
                 }}
+                onNavigateToCurrency={() => {
+                    const activeRoute = encodeURIComponent(Navigation.getActiveRoute().replace(/\?.*/, ''));
+                    Navigation.navigate(ROUTES.EDIT_CURRENCY_REQUEST.getRoute(report.reportID, defaultCurrency, activeRoute));
+                }}
             />
         );
     }
@@ -321,7 +332,8 @@ export default compose(
     withOnyx({
         transaction: {
             key: ({report, parentReportActions}) => {
-                const parentReportAction = lodashGet(parentReportActions, [report.parentReportActionID]);
+                const parentReportActionID = lodashGet(report, 'parentReportActionID', '0');
+                const parentReportAction = lodashGet(parentReportActions, parentReportActionID);
                 return `${ONYXKEYS.COLLECTION.TRANSACTION}${lodashGet(parentReportAction, 'originalMessage.IOUTransactionID', 0)}`;
             },
         },
diff --git a/src/pages/EditRequestReceiptPage.js b/src/pages/EditRequestReceiptPage.js
index 6744f027b404..54ed5a8897a4 100644
--- a/src/pages/EditRequestReceiptPage.js
+++ b/src/pages/EditRequestReceiptPage.js
@@ -1,5 +1,6 @@
 import React, {useState} from 'react';
 import PropTypes from 'prop-types';
+import {View} from 'react-native';
 import ScreenWrapper from '../components/ScreenWrapper';
 import HeaderWithBackButton from '../components/HeaderWithBackButton';
 import Navigation from '../libs/Navigation/Navigation';
@@ -40,17 +41,21 @@ function EditRequestReceiptPage({route, transactionID}) {
             testID={EditRequestReceiptPage.displayName}
             headerGapStyles={isDraggingOver ? [styles.receiptDropHeaderGap] : []}
         >
-            <DragAndDropProvider setIsDraggingOver={setIsDraggingOver}>
-                <HeaderWithBackButton
-                    title={translate('common.receipt')}
-                    onBackButtonPress={Navigation.goBack}
-                />
-                <ReceiptSelector
-                    route={route}
-                    transactionID={transactionID}
-                    isInTabNavigator={false}
-                />
-            </DragAndDropProvider>
+            {({safeAreaPaddingBottomStyle}) => (
+                <DragAndDropProvider setIsDraggingOver={setIsDraggingOver}>
+                    <View style={[styles.flex1, safeAreaPaddingBottomStyle]}>
+                        <HeaderWithBackButton
+                            title={translate('common.receipt')}
+                            onBackButtonPress={Navigation.goBack}
+                        />
+                        <ReceiptSelector
+                            route={route}
+                            transactionID={transactionID}
+                            isInTabNavigator={false}
+                        />
+                    </View>
+                </DragAndDropProvider>
+            )}
         </ScreenWrapper>
     );
 }
diff --git a/src/pages/EditSplitBillPage.js b/src/pages/EditSplitBillPage.js
new file mode 100644
index 000000000000..d10803cd40ea
--- /dev/null
+++ b/src/pages/EditSplitBillPage.js
@@ -0,0 +1,161 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import lodashGet from 'lodash/get';
+import {withOnyx} from 'react-native-onyx';
+import CONST from '../CONST';
+import ROUTES from '../ROUTES';
+import ONYXKEYS from '../ONYXKEYS';
+import compose from '../libs/compose';
+import transactionPropTypes from '../components/transactionPropTypes';
+import * as ReportUtils from '../libs/ReportUtils';
+import * as IOU from '../libs/actions/IOU';
+import * as CurrencyUtils from '../libs/CurrencyUtils';
+import Navigation from '../libs/Navigation/Navigation';
+import FullPageNotFoundView from '../components/BlockingViews/FullPageNotFoundView';
+import EditRequestDescriptionPage from './EditRequestDescriptionPage';
+import EditRequestMerchantPage from './EditRequestMerchantPage';
+import EditRequestCreatedPage from './EditRequestCreatedPage';
+import EditRequestAmountPage from './EditRequestAmountPage';
+
+const propTypes = {
+    /** Route from navigation */
+    route: PropTypes.shape({
+        /** Params from the route */
+        params: PropTypes.shape({
+            /** The transaction field we are editing */
+            field: PropTypes.string,
+
+            /** The chat reportID of the split */
+            reportID: PropTypes.string,
+
+            /** reportActionID of the split action */
+            reportActionID: PropTypes.string,
+        }),
+    }).isRequired,
+
+    /** The current transaction */
+    transaction: transactionPropTypes.isRequired,
+
+    /** The draft transaction that holds data to be persisted on the current transaction */
+    draftTransaction: transactionPropTypes,
+};
+
+const defaultProps = {
+    draftTransaction: undefined,
+};
+
+function EditSplitBillPage({route, transaction, draftTransaction}) {
+    const fieldToEdit = lodashGet(route, ['params', 'field'], '');
+    const reportID = lodashGet(route, ['params', 'reportID'], '');
+    const reportActionID = lodashGet(route, ['params', 'reportActionID'], '');
+
+    const {
+        amount: transactionAmount,
+        currency: transactionCurrency,
+        comment: transactionDescription,
+        merchant: transactionMerchant,
+        created: transactionCreated,
+    } = draftTransaction ? ReportUtils.getTransactionDetails(draftTransaction) : ReportUtils.getTransactionDetails(transaction);
+
+    const defaultCurrency = lodashGet(route, 'params.currency', '') || transactionCurrency;
+
+    function navigateBackToSplitDetails() {
+        Navigation.navigate(ROUTES.SPLIT_BILL_DETAILS.getRoute(reportID, reportActionID));
+    }
+
+    function setDraftSplitTransaction(transactionChanges) {
+        IOU.setDraftSplitTransaction(transaction.transactionID, transactionChanges);
+        navigateBackToSplitDetails();
+    }
+
+    if (fieldToEdit === CONST.EDIT_REQUEST_FIELD.DESCRIPTION) {
+        return (
+            <EditRequestDescriptionPage
+                defaultDescription={transactionDescription}
+                onSubmit={(transactionChanges) => {
+                    setDraftSplitTransaction({
+                        comment: transactionChanges.comment.trim(),
+                    });
+                }}
+            />
+        );
+    }
+
+    if (fieldToEdit === CONST.EDIT_REQUEST_FIELD.DATE) {
+        return (
+            <EditRequestCreatedPage
+                defaultCreated={transactionCreated}
+                defaultAmount={transactionAmount}
+                reportID={reportID}
+                onSubmit={(transactionChanges) => {
+                    setDraftSplitTransaction({
+                        created: transactionChanges.created,
+                    });
+                }}
+            />
+        );
+    }
+
+    if (fieldToEdit === CONST.EDIT_REQUEST_FIELD.AMOUNT) {
+        return (
+            <EditRequestAmountPage
+                defaultAmount={transactionAmount}
+                defaultCurrency={defaultCurrency}
+                reportID={reportID}
+                isEdittingSplitBill
+                onSubmit={(transactionChanges) => {
+                    const amount = CurrencyUtils.convertToBackendAmount(Number.parseFloat(transactionChanges));
+
+                    setDraftSplitTransaction({
+                        amount,
+                        currency: defaultCurrency,
+                    });
+                }}
+                onNavigateToCurrency={() => {
+                    const activeRoute = encodeURIComponent(Navigation.getActiveRoute().replace(/\?.*/, ''));
+                    Navigation.navigate(ROUTES.EDIT_SPLIT_BILL_CURRENCY.getRoute(reportID, reportActionID, defaultCurrency, activeRoute));
+                }}
+            />
+        );
+    }
+
+    if (fieldToEdit === CONST.EDIT_REQUEST_FIELD.MERCHANT) {
+        return (
+            <EditRequestMerchantPage
+                defaultMerchant={transactionMerchant}
+                onSubmit={(transactionChanges) => {
+                    setDraftSplitTransaction({merchant: transactionChanges.merchant.trim()});
+                }}
+            />
+        );
+    }
+
+    return <FullPageNotFoundView shouldShow />;
+}
+
+EditSplitBillPage.displayName = 'EditSplitBillPage';
+EditSplitBillPage.propTypes = propTypes;
+EditSplitBillPage.defaultProps = defaultProps;
+export default compose(
+    withOnyx({
+        reportActions: {
+            key: ({route}) => `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${route.params.reportID}`,
+            canEvict: false,
+        },
+    }),
+    // eslint-disable-next-line rulesdir/no-multiple-onyx-in-file
+    withOnyx({
+        transaction: {
+            key: ({route, reportActions}) => {
+                const reportAction = reportActions[`${route.params.reportActionID.toString()}`];
+                return `${ONYXKEYS.COLLECTION.TRANSACTION}${lodashGet(reportAction, 'originalMessage.IOUTransactionID', 0)}`;
+            },
+        },
+        draftTransaction: {
+            key: ({route, reportActions}) => {
+                const reportAction = reportActions[`${route.params.reportActionID.toString()}`];
+                return `${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${lodashGet(reportAction, 'originalMessage.IOUTransactionID', 0)}`;
+            },
+        },
+    }),
+)(EditSplitBillPage);
diff --git a/src/pages/EnablePayments/AdditionalDetailsStep.js b/src/pages/EnablePayments/AdditionalDetailsStep.js
index bd068ad9abcc..13091ab3f845 100644
--- a/src/pages/EnablePayments/AdditionalDetailsStep.js
+++ b/src/pages/EnablePayments/AdditionalDetailsStep.js
@@ -23,7 +23,6 @@ import DatePicker from '../../components/DatePicker';
 import Form from '../../components/Form';
 import withCurrentUserPersonalDetails, {withCurrentUserPersonalDetailsPropTypes, withCurrentUserPersonalDetailsDefaultProps} from '../../components/withCurrentUserPersonalDetails';
 import * as PersonalDetails from '../../libs/actions/PersonalDetails';
-import OfflineIndicator from '../../components/OfflineIndicator';
 
 const propTypes = {
     ...withLocalizePropTypes,
@@ -148,6 +147,7 @@ function AdditionalDetailsStep({walletAdditionalDetails, translate, currentUserP
     if (!_.isEmpty(walletAdditionalDetails.questions)) {
         return (
             <ScreenWrapper
+                shouldShowOfflineIndicator={false}
                 style={[styles.flex1, styles.pt0]}
                 keyboardAvoidingViewBehavior="height"
                 testID={AdditionalDetailsStep.displayName}
@@ -243,7 +243,6 @@ function AdditionalDetailsStep({walletAdditionalDetails, translate, currentUserP
                         maxLength={shouldAskForFullSSN ? 9 : 4}
                         keyboardType={CONST.KEYBOARD_TYPE.NUMBER_PAD}
                     />
-                    <OfflineIndicator containerStyles={[styles.mh5, styles.mb3]} />
                 </Form>
             </View>
         </>
diff --git a/src/pages/EnablePayments/EnablePaymentsPage.js b/src/pages/EnablePayments/EnablePaymentsPage.js
index f7ef2a174208..3f179e309a98 100644
--- a/src/pages/EnablePayments/EnablePaymentsPage.js
+++ b/src/pages/EnablePayments/EnablePaymentsPage.js
@@ -47,6 +47,7 @@ function EnablePaymentsPage({userWallet}) {
 
     return (
         <ScreenWrapper
+            shouldShowOfflineIndicator={userWallet.currentStep !== CONST.WALLET.STEP.ONFIDO}
             includeSafeAreaPaddingBottom={false}
             testID={EnablePaymentsPage.displayName}
         >
diff --git a/src/pages/KeyboardShortcutsPage.js b/src/pages/KeyboardShortcutsPage.js
new file mode 100644
index 000000000000..8ac26301e9fb
--- /dev/null
+++ b/src/pages/KeyboardShortcutsPage.js
@@ -0,0 +1,61 @@
+import React from 'react';
+import {View, ScrollView} from 'react-native';
+import _ from 'underscore';
+import HeaderWithBackButton from '../components/HeaderWithBackButton';
+import ScreenWrapper from '../components/ScreenWrapper';
+import Text from '../components/Text';
+import styles from '../styles/styles';
+import CONST from '../CONST';
+import useLocalize from '../hooks/useLocalize';
+import KeyboardShortcut from '../libs/KeyboardShortcut';
+import MenuItem from '../components/MenuItem';
+
+function KeyboardShortcutsPage() {
+    const {translate} = useLocalize();
+    const shortcuts = _.chain(CONST.KEYBOARD_SHORTCUTS)
+        .filter((shortcut) => !_.isEmpty(shortcut.descriptionKey))
+        .map((shortcut) => {
+            const platformAdjustedModifiers = KeyboardShortcut.getPlatformEquivalentForKeys(shortcut.modifiers);
+            return {
+                displayName: KeyboardShortcut.getDisplayName(shortcut.shortcutKey, platformAdjustedModifiers),
+                descriptionKey: shortcut.descriptionKey,
+            };
+        })
+        .value();
+
+    /**
+     * Render the information of a single shortcut
+     * @param {Object} shortcut
+     * @param {String} shortcut.displayName
+     * @param {String} shortcut.descriptionKey
+     * @returns {React.Component}
+     */
+    const renderShortcut = (shortcut) => (
+        <MenuItem
+            key={shortcut.displayName}
+            title={shortcut.displayName}
+            description={translate(`keyboardShortcutsPage.shortcuts.${shortcut.descriptionKey}`)}
+            wrapperStyle={styles.ph0}
+            interactive={false}
+        />
+    );
+
+    return (
+        <ScreenWrapper
+            includeSafeAreaPaddingBottom={false}
+            testID={KeyboardShortcutsPage.displayName}
+        >
+            <HeaderWithBackButton title={translate('keyboardShortcutsPage.title')} />
+            <ScrollView contentContainerStyle={styles.flexGrow1}>
+                <View style={[styles.ph5, styles.pv3]}>
+                    <Text style={[styles.mb3, styles.baseFontStyle]}>{translate('keyboardShortcutsPage.subtitle')}</Text>
+                    {_.map(shortcuts, renderShortcut)}
+                </View>
+            </ScrollView>
+        </ScreenWrapper>
+    );
+}
+
+KeyboardShortcutsPage.displayName = 'KeyboardShortcutsPage';
+
+export default KeyboardShortcutsPage;
diff --git a/src/pages/LogInWithShortLivedAuthTokenPage.js b/src/pages/LogInWithShortLivedAuthTokenPage.js
index 62eff262611d..875cdf7e8072 100644
--- a/src/pages/LogInWithShortLivedAuthTokenPage.js
+++ b/src/pages/LogInWithShortLivedAuthTokenPage.js
@@ -12,8 +12,7 @@ import themeColors from '../styles/themes/default';
 import Icon from '../components/Icon';
 import * as Expensicons from '../components/Icon/Expensicons';
 import * as Illustrations from '../components/Icon/Illustrations';
-import withLocalize, {withLocalizePropTypes} from '../components/withLocalize';
-import compose from '../libs/compose';
+import useLocalize from '../hooks/useLocalize';
 import TextLink from '../components/TextLink';
 import ONYXKEYS from '../ONYXKEYS';
 
@@ -33,8 +32,6 @@ const propTypes = {
         }),
     }).isRequired,
 
-    ...withLocalizePropTypes,
-
     /** The details about the account that the user is signing in with */
     account: PropTypes.shape({
         /** Whether a sign is loading */
@@ -49,15 +46,26 @@ const defaultProps = {
 };
 
 function LogInWithShortLivedAuthTokenPage(props) {
+    const {translate} = useLocalize();
+
     useEffect(() => {
         const email = lodashGet(props, 'route.params.email', '');
 
         // We have to check for both shortLivedAuthToken and shortLivedToken, as the old mobile app uses shortLivedToken, and is not being actively updated.
         const shortLivedAuthToken = lodashGet(props, 'route.params.shortLivedAuthToken', '') || lodashGet(props, 'route.params.shortLivedToken', '');
-        if (shortLivedAuthToken) {
+
+        // Try to authenticate using the shortLivedToken if we're not already trying to load the accounts
+        if (shortLivedAuthToken && !props.account.isLoading) {
             Session.signInWithShortLivedAuthToken(email, shortLivedAuthToken);
             return;
         }
+
+        // If an error is returned as part of the route, ensure we set it in the onyxData for the account
+        const error = lodashGet(props, 'route.params.error', '');
+        if (error) {
+            Session.setAccountError(error);
+        }
+
         const exitTo = lodashGet(props, 'route.params.exitTo', '');
         if (exitTo) {
             Navigation.isNavigationReady().then(() => {
@@ -82,10 +90,18 @@ function LogInWithShortLivedAuthTokenPage(props) {
                         src={Illustrations.RocketBlue}
                     />
                 </View>
-                <Text style={[styles.textHeadline, styles.textXXLarge]}>{props.translate('deeplinkWrapper.launching')}</Text>
+                <Text style={[styles.textHeadline, styles.textXXLarge]}>{translate('deeplinkWrapper.launching')}</Text>
                 <View style={styles.mt2}>
                     <Text style={[styles.fontSizeNormal, styles.textAlignCenter]}>
-                        {props.translate('deeplinkWrapper.expired')} <TextLink onPress={() => Navigation.navigate()}>{props.translate('deeplinkWrapper.signIn')}</TextLink>
+                        {translate('deeplinkWrapper.expired')}{' '}
+                        <TextLink
+                            onPress={() => {
+                                Session.clearSignInData();
+                                Navigation.navigate();
+                            }}
+                        >
+                            {translate('deeplinkWrapper.signIn')}
+                        </TextLink>
                     </Text>
                 </View>
             </View>
@@ -105,9 +121,7 @@ LogInWithShortLivedAuthTokenPage.propTypes = propTypes;
 LogInWithShortLivedAuthTokenPage.defaultProps = defaultProps;
 LogInWithShortLivedAuthTokenPage.displayName = 'LogInWithShortLivedAuthTokenPage';
 
-export default compose(
-    withLocalize,
-    withOnyx({
-        account: {key: ONYXKEYS.ACCOUNT},
-    }),
-)(LogInWithShortLivedAuthTokenPage);
+export default withOnyx({
+    account: {key: ONYXKEYS.ACCOUNT},
+    session: {key: ONYXKEYS.SESSION},
+})(LogInWithShortLivedAuthTokenPage);
diff --git a/src/pages/NewChatPage.js b/src/pages/NewChatPage.js
index 565f36d69e54..64bff8655403 100755
--- a/src/pages/NewChatPage.js
+++ b/src/pages/NewChatPage.js
@@ -1,5 +1,5 @@
 import _ from 'underscore';
-import React, {useState, useEffect, useMemo} from 'react';
+import React, {useState, useEffect, useMemo, useCallback} from 'react';
 import {View} from 'react-native';
 import PropTypes from 'prop-types';
 import {withOnyx} from 'react-native-onyx';
@@ -20,6 +20,7 @@ import compose from '../libs/compose';
 import personalDetailsPropType from './personalDetailsPropType';
 import reportPropTypes from './reportPropTypes';
 import variables from '../styles/variables';
+import useNetwork from '../hooks/useNetwork';
 
 const propTypes = {
     /** Beta features list */
@@ -34,22 +35,27 @@ const propTypes = {
     ...windowDimensionsPropTypes,
 
     ...withLocalizePropTypes,
+
+    /** Whether we are searching for reports in the server */
+    isSearchingForReports: PropTypes.bool,
 };
 
 const defaultProps = {
     betas: [],
     personalDetails: {},
     reports: {},
+    isSearchingForReports: false,
 };
 
 const excludedGroupEmails = _.without(CONST.EXPENSIFY_EMAILS, CONST.EMAIL.CONCIERGE);
 
-function NewChatPage({betas, isGroupChat, personalDetails, reports, translate}) {
+function NewChatPage({betas, isGroupChat, personalDetails, reports, translate, isSearchingForReports}) {
     const [searchTerm, setSearchTerm] = useState('');
     const [filteredRecentReports, setFilteredRecentReports] = useState([]);
     const [filteredPersonalDetails, setFilteredPersonalDetails] = useState([]);
     const [filteredUserToInvite, setFilteredUserToInvite] = useState();
     const [selectedOptions, setSelectedOptions] = useState([]);
+    const {isOffline} = useNetwork();
 
     const maxParticipantsReached = selectedOptions.length === CONST.REPORT.MAXIMUM_PARTICIPANTS;
     const headerMessage = OptionsListUtils.getHeaderMessage(
@@ -167,6 +173,13 @@ function NewChatPage({betas, isGroupChat, personalDetails, reports, translate})
         // eslint-disable-next-line react-hooks/exhaustive-deps
     }, [reports, personalDetails, searchTerm]);
 
+    // When search term updates we will fetch any reports
+    const setSearchTermAndSearchInServer = useCallback((text = '') => {
+        if (text.length) {
+            Report.searchInServer(text);
+        }
+        setSearchTerm(text);
+    }, []);
     return (
         <ScreenWrapper
             shouldEnableKeyboardAvoidingView={false}
@@ -195,16 +208,18 @@ function NewChatPage({betas, isGroupChat, personalDetails, reports, translate})
                             selectedOptions={selectedOptions}
                             value={searchTerm}
                             onSelectRow={(option) => createChat(option)}
-                            onChangeText={setSearchTerm}
+                            onChangeText={setSearchTermAndSearchInServer}
                             headerMessage={headerMessage}
                             boldStyle
                             shouldPreventDefaultFocusOnSelectRow={!Browser.isMobile()}
                             shouldShowOptions={isOptionsDataReady}
                             shouldShowConfirmButton
                             confirmButtonText={selectedOptions.length > 1 ? translate('newChatPage.createGroup') : translate('newChatPage.createChat')}
+                            textInputAlert={isOffline ? `${translate('common.youAppearToBeOffline')} ${translate('search.resultsAreLimited')}` : ''}
                             onConfirmSelection={createGroup}
                             textInputLabel={translate('optionsSelector.nameEmailOrPhoneNumber')}
                             safeAreaPaddingBottomStyle={safeAreaPaddingBottomStyle}
+                            isLoadingNewOptions={isSearchingForReports}
                         />
                     </View>
                 </KeyboardAvoidingView>
@@ -230,5 +245,9 @@ export default compose(
         betas: {
             key: ONYXKEYS.BETAS,
         },
+        isSearchingForReports: {
+            key: ONYXKEYS.IS_SEARCHING_FOR_REPORTS,
+            initWithStoredValues: false,
+        },
     }),
 )(NewChatPage);
diff --git a/src/pages/ProfilePage.js b/src/pages/ProfilePage.js
index 3df72deccefd..8e0ed04ab94a 100755
--- a/src/pages/ProfilePage.js
+++ b/src/pages/ProfilePage.js
@@ -58,23 +58,25 @@ const propTypes = {
     /** Route params */
     route: matchType.isRequired,
 
-    /** Login list for the user that is signed in */
-    loginList: PropTypes.shape({
-        /** Phone/Email associated with user */
-        partnerUserID: PropTypes.string,
-    }),
-
     /** Indicates whether the app is loading initial data */
     isLoadingReportData: PropTypes.bool,
 
+    /** Session info for the currently logged in user. */
+    session: PropTypes.shape({
+        /** Currently logged in user accountID */
+        accountID: PropTypes.number,
+    }),
+
     ...withLocalizePropTypes,
 };
 
 const defaultProps = {
     // When opening someone else's profile (via deep link) before login, this is empty
     personalDetails: {},
-    loginList: {},
     isLoadingReportData: true,
+    session: {
+        accountID: 0,
+    },
 };
 
 /**
@@ -122,7 +124,7 @@ function ProfilePage(props) {
     const phoneNumber = getPhoneNumber(details);
     const phoneOrEmail = isSMSLogin ? getPhoneNumber(details) : login;
 
-    const isCurrentUser = _.keys(props.loginList).includes(login);
+    const isCurrentUser = props.session.accountID === accountID;
     const hasMinimumDetails = !_.isEmpty(details.avatar);
     const isLoading = lodashGet(details, 'isLoading', false) || _.isEmpty(details) || props.isLoadingReportData;
 
@@ -290,9 +292,6 @@ export default compose(
         personalDetails: {
             key: ONYXKEYS.PERSONAL_DETAILS_LIST,
         },
-        loginList: {
-            key: ONYXKEYS.LOGIN_LIST,
-        },
         isLoadingReportData: {
             key: ONYXKEYS.IS_LOADING_REPORT_DATA,
         },
diff --git a/src/pages/ReimbursementAccount/AddressForm.js b/src/pages/ReimbursementAccount/AddressForm.js
index d8fbc0290136..5ddea09c6f4e 100644
--- a/src/pages/ReimbursementAccount/AddressForm.js
+++ b/src/pages/ReimbursementAccount/AddressForm.js
@@ -145,6 +145,7 @@ function AddressForm(props) {
                 errorText={props.errors.zipCode ? props.translate('bankAccount.error.zipCode') : ''}
                 maxLength={CONST.BANK_ACCOUNT.MAX_LENGTH.ZIP_CODE}
                 hint={props.translate('common.zipCodeExampleFormat', {zipSampleFormat: CONST.COUNTRY_ZIP_REGEX_DATA.US.samples})}
+                containerStyles={[styles.mt2]}
             />
         </>
     );
diff --git a/src/pages/ReimbursementAccount/ReimbursementAccountPage.js b/src/pages/ReimbursementAccount/ReimbursementAccountPage.js
index c6f53c2474f4..a99e3d7332a0 100644
--- a/src/pages/ReimbursementAccount/ReimbursementAccountPage.js
+++ b/src/pages/ReimbursementAccount/ReimbursementAccountPage.js
@@ -105,10 +105,12 @@ class ReimbursementAccountPage extends React.Component {
         this.goBack = this.goBack.bind(this);
         this.requestorStepRef = React.createRef();
 
-        // The first time we open this page, the props.reimbursementAccount has not been loaded from the server.
-        // Calculating shouldShowContinueSetupButton on the default data doesn't make sense, and we should recalculate
+        // The first time we open this page, props.reimbursementAccount is either not available in Onyx
+        // or only partial data loaded where props.reimbursementAccount.achData.currentStep is not available
+        // Calculating shouldShowContinueSetupButton on first page open doesn't make sense, and we should recalculate
         // it once we get the response from the server the first time in componentDidUpdate.
-        const hasACHDataBeenLoaded = this.props.reimbursementAccount !== ReimbursementAccountProps.reimbursementAccountDefaultProps;
+        const hasACHDataBeenLoaded =
+            this.props.reimbursementAccount !== ReimbursementAccountProps.reimbursementAccountDefaultProps && _.has(this.props.reimbursementAccount, 'achData.currentStep');
         this.state = {
             hasACHDataBeenLoaded,
             shouldShowContinueSetupButton: hasACHDataBeenLoaded ? this.getShouldShowContinueSetupButtonInitialValue() : false,
@@ -157,6 +159,12 @@ class ReimbursementAccountPage extends React.Component {
             return;
         }
 
+        // Update the data that is returned from back-end to draft value
+        const draftStep = this.props.reimbursementAccount.draftStep;
+        if (draftStep) {
+            BankAccounts.updateReimbursementAccountDraft(this.getBankAccountFields(this.getFieldsForStep(draftStep)));
+        }
+
         const currentStepRouteParam = this.getStepToOpenFromRouteParams();
         if (currentStepRouteParam === currentStep) {
             // The route is showing the correct step, no need to update the route param or clear errors.
@@ -177,6 +185,46 @@ class ReimbursementAccountPage extends React.Component {
         Navigation.navigate(ROUTES.BANK_ACCOUNT_WITH_STEP_TO_OPEN.getRoute(this.getRouteForCurrentStep(currentStep), policyId, backTo));
     }
 
+    componentWillUnmount() {
+        BankAccounts.clearReimbursementAccount();
+    }
+
+    getFieldsForStep(step) {
+        switch (step) {
+            case CONST.BANK_ACCOUNT.STEP.BANK_ACCOUNT:
+                return ['routingNumber', 'accountNumber', 'bankName', 'plaidAccountID', 'plaidAccessToken', 'isSavings'];
+            case CONST.BANK_ACCOUNT.STEP.COMPANY:
+                return [
+                    'companyName',
+                    'addressStreet',
+                    'addressZipCode',
+                    'addressCity',
+                    'addressState',
+                    'companyPhone',
+                    'website',
+                    'companyTaxID',
+                    'incorporationType',
+                    'incorporationDate',
+                    'incorporationState',
+                ];
+            case CONST.BANK_ACCOUNT.STEP.REQUESTOR:
+                return ['firstName', 'lastName', 'dob', 'ssnLast4', 'requestorAddressStreet', 'requestorAddressCity', 'requestorAddressState', 'requestorAddressZipCode'];
+            default:
+                return [];
+        }
+    }
+
+    /**
+     * @param {Array} fieldNames
+     *
+     * @returns {*}
+     */
+    getBankAccountFields(fieldNames) {
+        return {
+            ..._.pick(lodashGet(this.props.reimbursementAccount, 'achData'), ...fieldNames),
+        };
+    }
+
     /*
      * Calculates the state used to show the "Continue with setup" view. If a bank account setup is already in progress and
      * no specific further step was passed in the url we'll show the workspace bank account reset modal if the user wishes to start over
diff --git a/src/pages/ReimbursementAccount/RequestorOnfidoStep.js b/src/pages/ReimbursementAccount/RequestorOnfidoStep.js
index 72e3850aabd0..3405ad2d80f8 100644
--- a/src/pages/ReimbursementAccount/RequestorOnfidoStep.js
+++ b/src/pages/ReimbursementAccount/RequestorOnfidoStep.js
@@ -4,10 +4,8 @@ import {withOnyx} from 'react-native-onyx';
 import PropTypes from 'prop-types';
 import lodashGet from 'lodash/get';
 import styles from '../../styles/styles';
-import withLocalize from '../../components/withLocalize';
 import * as BankAccounts from '../../libs/actions/BankAccounts';
 import Onfido from '../../components/Onfido';
-import compose from '../../libs/compose';
 import ONYXKEYS from '../../ONYXKEYS';
 import Growl from '../../libs/Growl';
 import CONST from '../../CONST';
@@ -15,6 +13,7 @@ import FullPageOfflineBlockingView from '../../components/BlockingViews/FullPage
 import StepPropTypes from './StepPropTypes';
 import HeaderWithBackButton from '../../components/HeaderWithBackButton';
 import ScreenWrapper from '../../components/ScreenWrapper';
+import useLocalize from '../../hooks/useLocalize';
 
 const propTypes = {
     ...StepPropTypes,
@@ -27,65 +26,62 @@ const defaultProps = {
     onfidoToken: null,
 };
 
-class RequestorOnfidoStep extends React.Component {
-    constructor(props) {
-        super(props);
-        this.submit = this.submit.bind(this);
-    }
+const HEADER_STEP_COUNTER = {step: 3, total: 5};
+const ONFIDO_ERROR_DISPLAY_DURATION = 10000;
 
-    submit(onfidoData) {
-        BankAccounts.verifyIdentityForBankAccount(lodashGet(this.props.reimbursementAccount, 'achData.bankAccountID') || 0, onfidoData);
+function RequestorOnfidoStep({onBackButtonPress, reimbursementAccount, onfidoToken}) {
+    const {translate} = useLocalize();
 
+    const submitOnfidoData = (onfidoData) => {
+        BankAccounts.verifyIdentityForBankAccount(lodashGet(reimbursementAccount, 'achData.bankAccountID', 0), onfidoData);
         BankAccounts.updateReimbursementAccountDraft({isOnfidoSetupComplete: true});
-    }
+    };
 
-    render() {
-        return (
-            <ScreenWrapper
-                includeSafeAreaPaddingBottom={false}
-                shouldShowOfflineIndicator={false}
-                testID={RequestorOnfidoStep.displayName}
-            >
-                <HeaderWithBackButton
-                    title={this.props.translate('requestorStep.headerTitle')}
-                    stepCounter={{step: 3, total: 5}}
-                    shouldShowGetAssistanceButton
-                    guidesCallTaskID={CONST.GUIDES_CALL_TASK_IDS.WORKSPACE_BANK_ACCOUNT}
-                    onBackButtonPress={this.props.onBackButtonPress}
-                />
-                <FullPageOfflineBlockingView>
-                    <ScrollView contentContainerStyle={styles.flex1}>
-                        <Onfido
-                            sdkToken={this.props.onfidoToken}
-                            onUserExit={() => {
-                                BankAccounts.clearOnfidoToken();
-                                BankAccounts.goToWithdrawalAccountSetupStep(CONST.BANK_ACCOUNT.STEP.REQUESTOR);
-                            }}
-                            onError={() => {
-                                // In case of any unexpected error we log it to the server, show a growl, and return the user back to the requestor step so they can try again.
-                                Growl.error(this.props.translate('onfidoStep.genericError'), 10000);
-                                BankAccounts.clearOnfidoToken();
-                                BankAccounts.goToWithdrawalAccountSetupStep(CONST.BANK_ACCOUNT.STEP.REQUESTOR);
-                            }}
-                            onSuccess={(onfidoData) => {
-                                this.submit(onfidoData);
-                            }}
-                        />
-                    </ScrollView>
-                </FullPageOfflineBlockingView>
-            </ScreenWrapper>
-        );
-    }
+    const handleOnfidoError = () => {
+        // In case of any unexpected error we log it to the server, show a growl, and return the user back to the requestor step so they can try again.
+        Growl.error(translate('onfidoStep.genericError'), ONFIDO_ERROR_DISPLAY_DURATION);
+        BankAccounts.clearOnfidoToken();
+        BankAccounts.goToWithdrawalAccountSetupStep(CONST.BANK_ACCOUNT.STEP.REQUESTOR);
+    };
+
+    const handleOnfidoUserExit = () => {
+        BankAccounts.clearOnfidoToken();
+        BankAccounts.goToWithdrawalAccountSetupStep(CONST.BANK_ACCOUNT.STEP.REQUESTOR);
+    };
+
+    return (
+        <ScreenWrapper
+            includeSafeAreaPaddingBottom={false}
+            shouldShowOfflineIndicator={false}
+            testID={RequestorOnfidoStep.displayName}
+        >
+            <HeaderWithBackButton
+                title={translate('requestorStep.headerTitle')}
+                stepCounter={HEADER_STEP_COUNTER}
+                shouldShowGetAssistanceButton
+                guidesCallTaskID={CONST.GUIDES_CALL_TASK_IDS.WORKSPACE_BANK_ACCOUNT}
+                onBackButtonPress={onBackButtonPress}
+            />
+            <FullPageOfflineBlockingView>
+                <ScrollView contentContainerStyle={styles.flex1}>
+                    <Onfido
+                        sdkToken={onfidoToken}
+                        onUserExit={handleOnfidoUserExit}
+                        onError={handleOnfidoError}
+                        onSuccess={submitOnfidoData}
+                    />
+                </ScrollView>
+            </FullPageOfflineBlockingView>
+        </ScreenWrapper>
+    );
 }
 
+RequestorOnfidoStep.displayName = 'RequestorOnfidoStep';
 RequestorOnfidoStep.propTypes = propTypes;
 RequestorOnfidoStep.defaultProps = defaultProps;
 
-export default compose(
-    withLocalize,
-    withOnyx({
-        onfidoToken: {
-            key: ONYXKEYS.ONFIDO_TOKEN,
-        },
-    }),
-)(RequestorOnfidoStep);
+export default withOnyx({
+    onfidoToken: {
+        key: ONYXKEYS.ONFIDO_TOKEN,
+    },
+})(RequestorOnfidoStep);
diff --git a/src/pages/ReimbursementAccount/ValidationStep.js b/src/pages/ReimbursementAccount/ValidationStep.js
index 851c4a4b2496..a63916db0784 100644
--- a/src/pages/ReimbursementAccount/ValidationStep.js
+++ b/src/pages/ReimbursementAccount/ValidationStep.js
@@ -51,23 +51,38 @@ const defaultProps = {
     },
 };
 
-class ValidationStep extends React.Component {
-    constructor(props) {
-        super(props);
+/**
+ * Filter input for validation amount
+ * Anything that isn't a number is returned as an empty string
+ * Any dollar amount (e.g. 1.12) will be returned as 112
+ *
+ * @param {String} amount field input
+ * @returns {String}
+ */
+const filterInput = (amount) => {
+    let value = amount ? amount.toString().trim() : '';
+    if (value === '' || _.isNaN(Number(value)) || !Math.abs(Str.fromUSDToNumber(value))) {
+        return '';
+    }
 
-        this.submit = this.submit.bind(this);
-        this.validate = this.validate.bind(this);
+    // If the user enters the values in dollars, convert it to the respective cents amount
+    if (_.contains(value, '.')) {
+        value = Str.fromUSDToNumber(value);
     }
 
+    return value;
+};
+
+function ValidationStep({reimbursementAccount, translate, onBackButtonPress, account}) {
     /**
      * @param {Object} values - form input values passed by the Form component
      * @returns {Object}
      */
-    validate(values) {
+    const validate = (values) => {
         const errors = {};
 
         _.each(values, (value, key) => {
-            const filteredValue = typeof value === 'string' ? this.filterInput(value) : value;
+            const filteredValue = typeof value === 'string' ? filterInput(value) : value;
             if (ValidationUtils.isRequiredFulfilled(filteredValue)) {
                 return;
             }
@@ -75,160 +90,136 @@ class ValidationStep extends React.Component {
         });
 
         return errors;
-    }
+    };
 
     /**
      * @param {Object} values - form input values passed by the Form component
      */
-    submit(values) {
-        const amount1 = this.filterInput(values.amount1);
-        const amount2 = this.filterInput(values.amount2);
-        const amount3 = this.filterInput(values.amount3);
+    const submit = (values) => {
+        const amount1 = filterInput(values.amount1);
+        const amount2 = filterInput(values.amount2);
+        const amount3 = filterInput(values.amount3);
 
         const validateCode = [amount1, amount2, amount3].join(',');
 
         // Send valid amounts to BankAccountAPI::validateBankAccount in Web-Expensify
-        const bankaccountID = lodashGet(this.props.reimbursementAccount, 'achData.bankAccountID');
+        const bankaccountID = lodashGet(reimbursementAccount, 'achData.bankAccountID');
         BankAccounts.validateBankAccount(bankaccountID, validateCode);
-    }
+    };
 
-    /**
-     * Filter input for validation amount
-     * Anything that isn't a number is returned as an empty string
-     * Any dollar amount (e.g. 1.12) will be returned as 112
-     *
-     * @param {String} amount field input
-     *
-     * @returns {String}
-     */
-    filterInput(amount) {
-        let value = amount ? amount.toString().trim() : '';
-        if (value === '' || _.isNaN(Number(value)) || !Math.abs(Str.fromUSDToNumber(value))) {
-            return '';
-        }
-
-        // If the user enters the values in dollars, convert it to the respective cents amount
-        if (_.contains(value, '.')) {
-            value = Str.fromUSDToNumber(value);
-        }
-
-        return value;
+    const state = lodashGet(reimbursementAccount, 'achData.state');
+
+    // If a user tries to navigate directly to the validate page we'll show them the EnableStep
+    if (state === BankAccount.STATE.OPEN) {
+        return <EnableStep />;
     }
 
-    render() {
-        const state = lodashGet(this.props.reimbursementAccount, 'achData.state');
-
-        // If a user tries to navigate directly to the validate page we'll show them the EnableStep
-        if (state === BankAccount.STATE.OPEN) {
-            return <EnableStep />;
-        }
-
-        const maxAttemptsReached = lodashGet(this.props.reimbursementAccount, 'maxAttemptsReached');
-        const isVerifying = !maxAttemptsReached && state === BankAccount.STATE.VERIFYING;
-        const requiresTwoFactorAuth = lodashGet(this.props, 'account.requiresTwoFactorAuth');
-
-        return (
-            <ScreenWrapper
-                style={[styles.flex1, styles.justifyContentBetween]}
-                includeSafeAreaPaddingBottom={false}
-                testID={ValidationStep.displayName}
-            >
-                <HeaderWithBackButton
-                    title={isVerifying ? this.props.translate('validationStep.headerTitle') : this.props.translate('workspace.common.testTransactions')}
-                    stepCounter={isVerifying ? undefined : {step: 5, total: 5}}
-                    onBackButtonPress={this.props.onBackButtonPress}
-                    shouldShowGetAssistanceButton
-                    guidesCallTaskID={CONST.GUIDES_CALL_TASK_IDS.WORKSPACE_BANK_ACCOUNT}
-                />
-                {maxAttemptsReached && (
-                    <View style={[styles.m5, styles.flex1]}>
-                        <Text>
-                            {this.props.translate('validationStep.maxAttemptsReached')} {this.props.translate('common.please')}{' '}
-                            <TextLink onPress={Report.navigateToConciergeChat}>{this.props.translate('common.contactUs')}</TextLink>.
-                        </Text>
+    const maxAttemptsReached = lodashGet(reimbursementAccount, 'maxAttemptsReached');
+    const isVerifying = !maxAttemptsReached && state === BankAccount.STATE.VERIFYING;
+    const requiresTwoFactorAuth = lodashGet(account, 'requiresTwoFactorAuth');
+
+    return (
+        <ScreenWrapper
+            style={[styles.flex1, styles.justifyContentBetween]}
+            includeSafeAreaPaddingBottom={false}
+            testID={ValidationStep.displayName}
+        >
+            <HeaderWithBackButton
+                title={isVerifying ? translate('validationStep.headerTitle') : translate('workspace.common.testTransactions')}
+                stepCounter={isVerifying ? undefined : {step: 5, total: 5}}
+                onBackButtonPress={onBackButtonPress}
+                shouldShowGetAssistanceButton
+                guidesCallTaskID={CONST.GUIDES_CALL_TASK_IDS.WORKSPACE_BANK_ACCOUNT}
+            />
+            {maxAttemptsReached && (
+                <View style={[styles.m5, styles.flex1]}>
+                    <Text>
+                        {translate('validationStep.maxAttemptsReached')} {translate('common.please')}{' '}
+                        <TextLink onPress={Report.navigateToConciergeChat}>{translate('common.contactUs')}</TextLink>.
+                    </Text>
+                </View>
+            )}
+            {!maxAttemptsReached && state === BankAccount.STATE.PENDING && (
+                <Form
+                    formID={ONYXKEYS.REIMBURSEMENT_ACCOUNT}
+                    submitButtonText={translate('validationStep.buttonText')}
+                    onSubmit={submit}
+                    validate={validate}
+                    style={[styles.mh5, styles.flexGrow1]}
+                >
+                    <View style={[styles.mb2]}>
+                        <Text style={[styles.mb5]}>{translate('validationStep.description')}</Text>
+                        <Text style={[styles.mb2]}>{translate('validationStep.descriptionCTA')}</Text>
                     </View>
-                )}
-                {!maxAttemptsReached && state === BankAccount.STATE.PENDING && (
-                    <Form
-                        formID={ONYXKEYS.REIMBURSEMENT_ACCOUNT}
-                        submitButtonText={this.props.translate('validationStep.buttonText')}
-                        onSubmit={this.submit}
-                        validate={this.validate}
-                        style={[styles.mh5, styles.flexGrow1]}
-                    >
-                        <View style={[styles.mb2]}>
-                            <Text style={[styles.mb5]}>{this.props.translate('validationStep.description')}</Text>
-                            <Text style={[styles.mb2]}>{this.props.translate('validationStep.descriptionCTA')}</Text>
-                        </View>
-                        <View style={[styles.mv5]}>
-                            <TextInput
-                                inputID="amount1"
-                                shouldSaveDraft
-                                containerStyles={[styles.mb1]}
-                                placeholder="1.52"
-                                keyboardType="decimal-pad"
-                                accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT}
-                            />
-                            <TextInput
-                                inputID="amount2"
-                                shouldSaveDraft
-                                containerStyles={[styles.mb1]}
-                                placeholder="1.53"
-                                keyboardType="decimal-pad"
-                                accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT}
-                            />
-                            <TextInput
-                                shouldSaveDraft
-                                inputID="amount3"
-                                containerStyles={[styles.mb1]}
-                                placeholder="1.54"
-                                keyboardType="decimal-pad"
-                                accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT}
-                            />
+                    <View style={[styles.mv5]}>
+                        <TextInput
+                            inputID="amount1"
+                            shouldSaveDraft
+                            containerStyles={[styles.mb1]}
+                            placeholder="1.52"
+                            keyboardType="decimal-pad"
+                            accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT}
+                        />
+                        <TextInput
+                            inputID="amount2"
+                            shouldSaveDraft
+                            containerStyles={[styles.mb1]}
+                            placeholder="1.53"
+                            keyboardType="decimal-pad"
+                            accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT}
+                        />
+                        <TextInput
+                            shouldSaveDraft
+                            inputID="amount3"
+                            containerStyles={[styles.mb1]}
+                            placeholder="1.54"
+                            keyboardType="decimal-pad"
+                            accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT}
+                        />
+                    </View>
+                    {!requiresTwoFactorAuth && (
+                        <View style={[styles.mln5, styles.mrn5]}>
+                            <Enable2FAPrompt />
                         </View>
-                        {!requiresTwoFactorAuth && (
-                            <View style={[styles.mln5, styles.mrn5]}>
-                                <Enable2FAPrompt />
-                            </View>
-                        )}
-                    </Form>
-                )}
-                {isVerifying && (
-                    <ScrollView style={[styles.flex1]}>
-                        <Section
-                            title={this.props.translate('workspace.bankAccount.letsFinishInChat')}
-                            icon={Illustrations.ConciergeBubble}
-                        >
-                            <Text>{this.props.translate('validationStep.letsChatText')}</Text>
-                            <Button
-                                text={this.props.translate('validationStep.letsChatCTA')}
-                                onPress={Report.navigateToConciergeChat}
-                                icon={Expensicons.ChatBubble}
-                                style={[styles.mt4]}
-                                iconStyles={[styles.buttonCTAIcon]}
-                                shouldShowRightIcon
-                                large
-                                success
-                            />
-                            <MenuItem
-                                title={this.props.translate('workspace.bankAccount.noLetsStartOver')}
-                                icon={Expensicons.RotateLeft}
-                                onPress={BankAccounts.requestResetFreePlanBankAccount}
-                                shouldShowRightIcon
-                                wrapperStyle={[styles.cardMenuItem, styles.mv3]}
-                            />
-                        </Section>
-                        {this.props.reimbursementAccount.shouldShowResetModal && <WorkspaceResetBankAccountModal reimbursementAccount={this.props.reimbursementAccount} />}
-                        {!requiresTwoFactorAuth && <Enable2FAPrompt />}
-                    </ScrollView>
-                )}
-            </ScreenWrapper>
-        );
-    }
+                    )}
+                </Form>
+            )}
+            {isVerifying && (
+                <ScrollView style={[styles.flex1]}>
+                    <Section
+                        title={translate('workspace.bankAccount.letsFinishInChat')}
+                        icon={Illustrations.ConciergeBubble}
+                    >
+                        <Text>{translate('validationStep.letsChatText')}</Text>
+                        <Button
+                            text={translate('validationStep.letsChatCTA')}
+                            onPress={Report.navigateToConciergeChat}
+                            icon={Expensicons.ChatBubble}
+                            style={[styles.mt4]}
+                            iconStyles={[styles.buttonCTAIcon]}
+                            shouldShowRightIcon
+                            large
+                            success
+                        />
+                        <MenuItem
+                            title={translate('workspace.bankAccount.noLetsStartOver')}
+                            icon={Expensicons.RotateLeft}
+                            onPress={BankAccounts.requestResetFreePlanBankAccount}
+                            shouldShowRightIcon
+                            wrapperStyle={[styles.cardMenuItem, styles.mv3]}
+                        />
+                    </Section>
+                    {reimbursementAccount.shouldShowResetModal && <WorkspaceResetBankAccountModal reimbursementAccount={reimbursementAccount} />}
+                    {!requiresTwoFactorAuth && <Enable2FAPrompt />}
+                </ScrollView>
+            )}
+        </ScreenWrapper>
+    );
 }
 
 ValidationStep.propTypes = propTypes;
 ValidationStep.defaultProps = defaultProps;
+ValidationStep.displayName = 'ValidationStep';
 
 export default compose(
     withLocalize,
diff --git a/src/pages/SearchPage.js b/src/pages/SearchPage.js
index 141f4e841853..272fb30de858 100755
--- a/src/pages/SearchPage.js
+++ b/src/pages/SearchPage.js
@@ -20,6 +20,8 @@ import compose from '../libs/compose';
 import personalDetailsPropType from './personalDetailsPropType';
 import reportPropTypes from './reportPropTypes';
 import Performance from '../libs/Performance';
+import networkPropTypes from '../components/networkPropTypes';
+import {withNetwork} from '../components/OnyxProvider';
 
 const propTypes = {
     /* Onyx Props */
@@ -37,12 +39,20 @@ const propTypes = {
     ...windowDimensionsPropTypes,
 
     ...withLocalizePropTypes,
+
+    /** Network info */
+    network: networkPropTypes,
+
+    /** Whether we are searching for reports in the server */
+    isSearchingForReports: PropTypes.bool,
 };
 
 const defaultProps = {
     betas: [],
     personalDetails: {},
     reports: {},
+    network: {},
+    isSearchingForReports: false,
 };
 
 class SearchPage extends Component {
@@ -75,6 +85,10 @@ class SearchPage extends Component {
     }
 
     onChangeText(searchValue = '') {
+        if (searchValue.length) {
+            Report.searchInServer(searchValue);
+        }
+
         this.setState({searchValue}, this.debouncedUpdateOptions);
     }
 
@@ -187,9 +201,13 @@ class SearchPage extends Component {
                                 showTitleTooltip
                                 shouldShowOptions={didScreenTransitionEnd && isOptionsDataReady}
                                 textInputLabel={this.props.translate('optionsSelector.nameEmailOrPhoneNumber')}
+                                textInputAlert={
+                                    this.props.network.isOffline ? `${this.props.translate('common.youAppearToBeOffline')} ${this.props.translate('search.resultsAreLimited')}` : ''
+                                }
                                 onLayout={this.searchRendered}
                                 safeAreaPaddingBottomStyle={safeAreaPaddingBottomStyle}
                                 autoFocus
+                                isLoadingNewOptions={this.props.isSearchingForReports}
                             />
                         </View>
                     </>
@@ -205,6 +223,7 @@ SearchPage.defaultProps = defaultProps;
 export default compose(
     withLocalize,
     withWindowDimensions,
+    withNetwork(),
     withOnyx({
         reports: {
             key: ONYXKEYS.COLLECTION.REPORT,
@@ -215,5 +234,9 @@ export default compose(
         betas: {
             key: ONYXKEYS.BETAS,
         },
+        isSearchingForReports: {
+            key: ONYXKEYS.IS_SEARCHING_FOR_REPORTS,
+            initWithStoredValues: false,
+        },
     }),
 )(SearchPage);
diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js
index 4e48a965b095..d7f8c3605564 100644
--- a/src/pages/home/HeaderView.js
+++ b/src/pages/home/HeaderView.js
@@ -23,11 +23,11 @@ import participantPropTypes from '../../components/participantPropTypes';
 import withLocalize, {withLocalizePropTypes} from '../../components/withLocalize';
 import withWindowDimensions, {windowDimensionsPropTypes} from '../../components/withWindowDimensions';
 import * as OptionsListUtils from '../../libs/OptionsListUtils';
+import * as HeaderUtils from '../../libs/HeaderUtils';
 import * as ReportActionsUtils from '../../libs/ReportActionsUtils';
 import * as ReportUtils from '../../libs/ReportUtils';
 import * as Link from '../../libs/actions/Link';
 import * as Report from '../../libs/actions/Report';
-import * as Session from '../../libs/actions/Session';
 import * as Task from '../../libs/actions/Task';
 import compose from '../../libs/compose';
 import styles from '../../styles/styles';
@@ -100,7 +100,6 @@ function HeaderView(props) {
         if (ReportUtils.isCompletedTaskReport(props.report) && canModifyTask) {
             threeDotMenuItems.push({
                 icon: Expensicons.Checkmark,
-                iconFill: themeColors.icon,
                 text: props.translate('task.markAsIncomplete'),
                 onSelected: () => Task.reopenTask(props.report),
             });
@@ -110,7 +109,6 @@ function HeaderView(props) {
         if (props.report.stateNum !== CONST.REPORT.STATE_NUM.SUBMITTED && props.report.statusNum !== CONST.REPORT.STATUS.CLOSED && canModifyTask) {
             threeDotMenuItems.push({
                 icon: Expensicons.Trashcan,
-                iconFill: themeColors.icon,
                 text: props.translate('common.cancel'),
                 onSelected: () => Task.cancelTask(props.report.reportID, props.report.reportName, props.report.stateNum, props.report.statusNum),
             });
@@ -121,40 +119,23 @@ function HeaderView(props) {
         if (props.report.notificationPreference === CONST.REPORT.NOTIFICATION_PREFERENCE.HIDDEN) {
             threeDotMenuItems.push({
                 icon: Expensicons.ChatBubbles,
-                iconFill: themeColors.icon,
                 text: props.translate('common.joinThread'),
                 onSelected: () => Report.updateNotificationPreference(props.report.reportID, props.report.notificationPreference, CONST.REPORT.NOTIFICATION_PREFERENCE.ALWAYS, false),
             });
         } else if (props.report.notificationPreference.length) {
             threeDotMenuItems.push({
                 icon: Expensicons.ChatBubbles,
-                iconFill: themeColors.icon,
                 text: props.translate('common.leaveThread'),
                 onSelected: () => Report.leaveRoom(props.report.reportID),
             });
         }
     }
 
-    if (!props.report.isPinned) {
-        threeDotMenuItems.push({
-            icon: Expensicons.Pin,
-            iconFill: themeColors.icon,
-            text: props.translate('common.pin'),
-            onSelected: Session.checkIfActionIsAllowed(() => Report.togglePinnedState(props.report.reportID, props.report.isPinned)),
-        });
-    } else {
-        threeDotMenuItems.push({
-            icon: Expensicons.Pin,
-            iconFill: themeColors.icon,
-            text: props.translate('common.unPin'),
-            onSelected: Session.checkIfActionIsAllowed(() => Report.togglePinnedState(props.report.reportID, props.report.isPinned)),
-        });
-    }
+    threeDotMenuItems.push(HeaderUtils.getPinMenuItem(props.report));
 
     if (isConcierge && props.guideCalendarLink) {
         threeDotMenuItems.push({
             icon: Expensicons.Phone,
-            iconFill: themeColors.icon,
             text: props.translate('videoChatButtonAndMenu.tooltip'),
             onSelected: () => {
                 Link.openExternalLink(props.guideCalendarLink);
@@ -163,7 +144,6 @@ function HeaderView(props) {
     } else if (!isAutomatedExpensifyAccount && !isTaskReport && !isArchivedRoom) {
         threeDotMenuItems.push({
             icon: ZoomIcon,
-            iconFill: themeColors.icon,
             text: props.translate('videoChatButtonAndMenu.zoom'),
             onSelected: () => {
                 Link.openExternalLink(CONST.NEW_ZOOM_MEETING_URL);
@@ -171,7 +151,6 @@ function HeaderView(props) {
         });
         threeDotMenuItems.push({
             icon: GoogleMeetIcon,
-            iconFill: themeColors.icon,
             text: props.translate('videoChatButtonAndMenu.googleMeet'),
             onSelected: () => {
                 Link.openExternalLink(CONST.NEW_GOOGLE_MEET_MEETING_URL);
diff --git a/src/pages/home/ReportScreen.js b/src/pages/home/ReportScreen.js
index 78f6edcf7dd3..51981d5fe80e 100644
--- a/src/pages/home/ReportScreen.js
+++ b/src/pages/home/ReportScreen.js
@@ -156,6 +156,7 @@ function ReportScreen({
     const prevReport = usePrevious(report);
     const prevUserLeavingStatus = usePrevious(userLeavingStatus);
     const [isBannerVisible, setIsBannerVisible] = useState(true);
+    const [listHeight, setListHeight] = useState(0);
 
     const reportID = getReportID(route);
     const {addWorkspaceRoomOrChatPendingAction, addWorkspaceRoomOrChatErrors} = ReportUtils.getReportOfflinePendingActionAndErrors(report);
@@ -171,7 +172,6 @@ function ReportScreen({
     const isLoading = !reportID || !isSidebarLoaded || _.isEmpty(personalDetails);
 
     const parentReportAction = ReportActionsUtils.getParentReportAction(report);
-    const isDeletedParentAction = ReportActionsUtils.isDeletedParentAction(parentReportAction);
     const isSingleTransactionView = ReportUtils.isMoneyRequest(report);
 
     const policy = policies[`${ONYXKEYS.COLLECTION.POLICY}${report.policyID}`] || {};
@@ -188,7 +188,7 @@ function ReportScreen({
         />
     );
 
-    if (isSingleTransactionView && !isDeletedParentAction) {
+    if (isSingleTransactionView) {
         headerView = (
             <MoneyRequestHeader
                 report={report}
@@ -351,7 +351,8 @@ function ReportScreen({
         }
     }, [report, didSubscribeToReportLeavingEvents, reportID]);
 
-    const onListLayout = useCallback(() => {
+    const onListLayout = useCallback((e) => {
+        setListHeight((prev) => lodashGet(e, 'nativeEvent.layout.height', prev));
         if (!markReadyForHydration) {
             return;
         }
@@ -438,6 +439,8 @@ function ReportScreen({
                                         isComposerFullSize={isComposerFullSize}
                                         onSubmitComment={onSubmitComment}
                                         policies={policies}
+                                        listHeight={listHeight}
+                                        personalDetails={personalDetails}
                                     />
                                 ) : (
                                     <ReportFooter isReportReadyForDisplay={false} />
diff --git a/src/pages/home/report/ReportActionCompose/ComposerWithSuggestions.js b/src/pages/home/report/ReportActionCompose/ComposerWithSuggestions.js
index faa710d2cd6b..849db381a549 100644
--- a/src/pages/home/report/ReportActionCompose/ComposerWithSuggestions.js
+++ b/src/pages/home/report/ReportActionCompose/ComposerWithSuggestions.js
@@ -22,6 +22,7 @@ import usePrevious from '../../../../hooks/usePrevious';
 import * as EmojiUtils from '../../../../libs/EmojiUtils';
 import * as User from '../../../../libs/actions/User';
 import * as ReportUtils from '../../../../libs/ReportUtils';
+import * as SuggestionUtils from '../../../../libs/SuggestionUtils';
 import * as ReportActionsUtils from '../../../../libs/ReportActionsUtils';
 import canFocusInputOnScreenFocus from '../../../../libs/canFocusInputOnScreenFocus';
 import SilentCommentUpdater from './SilentCommentUpdater';
@@ -33,6 +34,7 @@ import withKeyboardState from '../../../../components/withKeyboardState';
 import {propTypes, defaultProps} from './composerWithSuggestionsProps';
 import focusWithDelay from '../../../../libs/focusWithDelay';
 import useDebounce from '../../../../hooks/useDebounce';
+import * as InputFocus from '../../../../libs/actions/InputFocus';
 
 const {RNTextInputReset} = NativeModules;
 
@@ -93,11 +95,13 @@ function ComposerWithSuggestions({
     handleSendMessage,
     shouldShowComposeInput,
     measureParentContainer,
+    listHeight,
     // Refs
     suggestionsRef,
     animatedRef,
     forwardedRef,
     isNextModalWillOpenRef,
+    editFocused,
 }) {
     const {preferredLocale} = useLocalize();
     const isFocused = useIsFocused();
@@ -133,6 +137,11 @@ function ComposerWithSuggestions({
 
     // A flag to indicate whether the onScroll callback is likely triggered by a layout change (caused by text change) or not
     const isScrollLikelyLayoutTriggered = useRef(false);
+    const suggestions = lodashGet(suggestionsRef, 'current.getSuggestions', () => [])();
+
+    const hasEnoughSpaceForLargeSuggestion = SuggestionUtils.hasEnoughSpaceForLargeSuggestionMenu(listHeight, composerHeight, suggestions.length);
+
+    const isAutoSuggestionPickerLarge = !isSmallScreenWidth || (isSmallScreenWidth && hasEnoughSpaceForLargeSuggestion);
 
     /**
      * Update frequently used emojis list. We debounce this method in the constructor so that UpdateFrequentlyUsedEmojis
@@ -373,6 +382,7 @@ function ComposerWithSuggestions({
         if (!suggestionsRef.current) {
             return false;
         }
+        InputFocus.inputFocusChange(false);
         return suggestionsRef.current.setShouldBlockSuggestionCalc(false);
     }, [suggestionsRef]);
 
@@ -479,9 +489,12 @@ function ComposerWithSuggestions({
             return;
         }
 
+        if (editFocused) {
+            InputFocus.inputFocusChange(false);
+            return;
+        }
         focus();
-    }, [focus, prevIsFocused, prevIsModalVisible, isFocused, modal.isVisible, isNextModalWillOpenRef]);
-
+    }, [focus, prevIsFocused, editFocused, prevIsModalVisible, isFocused, modal.isVisible, isNextModalWillOpenRef]);
     useEffect(() => {
         if (value.length === 0) {
             return;
@@ -552,6 +565,7 @@ function ComposerWithSuggestions({
                 updateComment={updateComment}
                 composerHeight={composerHeight}
                 measureParentContainer={measureParentContainer}
+                isAutoSuggestionPickerLarge={isAutoSuggestionPickerLarge}
                 // Input
                 value={value}
                 setValue={setValue}
@@ -591,6 +605,9 @@ export default compose(
             key: ONYXKEYS.PREFERRED_EMOJI_SKIN_TONE,
             selector: EmojiUtils.getPreferredSkinToneIndex,
         },
+        editFocused: {
+            key: ONYXKEYS.INPUT_FOCUSED,
+        },
         parentReportActions: {
             key: ({report}) => `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${report.parentReportID}`,
             canEvict: false,
diff --git a/src/pages/home/report/ReportActionCompose/ReportActionCompose.js b/src/pages/home/report/ReportActionCompose/ReportActionCompose.js
index b43400287269..dd4d51653546 100644
--- a/src/pages/home/report/ReportActionCompose/ReportActionCompose.js
+++ b/src/pages/home/report/ReportActionCompose/ReportActionCompose.js
@@ -61,6 +61,9 @@ const propTypes = {
     /** Whether user interactions should be disabled */
     disabled: PropTypes.bool,
 
+    /** Height of the list which the composer is part of */
+    listHeight: PropTypes.number,
+
     // The NVP describing a user's block status
     blockedFromConcierge: PropTypes.shape({
         // The date that the user will be unblocked
@@ -86,6 +89,7 @@ const defaultProps = {
     isComposerFullSize: false,
     pendingAction: null,
     shouldShowComposeInput: true,
+    listHeight: 0,
     isReportReadyForDisplay: true,
     ...withCurrentUserPersonalDetailsDefaultProps,
 };
@@ -108,6 +112,7 @@ function ReportActionCompose({
     report,
     reportID,
     reportActions,
+    listHeight,
     shouldShowComposeInput,
     isReportReadyForDisplay,
 }) {
@@ -408,6 +413,7 @@ function ReportActionCompose({
                                     onFocus={onFocus}
                                     onBlur={onBlur}
                                     measureParentContainer={measureContainer}
+                                    listHeight={listHeight}
                                 />
                                 <ReportDropUI
                                     onDrop={(e) => {
diff --git a/src/pages/home/report/ReportActionCompose/SuggestionEmoji.js b/src/pages/home/report/ReportActionCompose/SuggestionEmoji.js
index 8ffed01f1068..857b7d5e52c2 100644
--- a/src/pages/home/report/ReportActionCompose/SuggestionEmoji.js
+++ b/src/pages/home/report/ReportActionCompose/SuggestionEmoji.js
@@ -199,6 +199,8 @@ function SuggestionEmoji({
         [shouldBlockCalc],
     );
 
+    const getSuggestions = useCallback(() => suggestionValues.suggestedEmojis, [suggestionValues]);
+
     useImperativeHandle(
         forwardedRef,
         () => ({
@@ -207,8 +209,9 @@ function SuggestionEmoji({
             triggerHotkeyActions,
             setShouldBlockSuggestionCalc,
             updateShouldShowSuggestionMenuToFalse,
+            getSuggestions,
         }),
-        [onSelectionChange, resetSuggestions, setShouldBlockSuggestionCalc, triggerHotkeyActions, updateShouldShowSuggestionMenuToFalse],
+        [onSelectionChange, resetSuggestions, setShouldBlockSuggestionCalc, triggerHotkeyActions, updateShouldShowSuggestionMenuToFalse, getSuggestions],
     );
 
     if (!isEmojiSuggestionsMenuVisible) {
diff --git a/src/pages/home/report/ReportActionCompose/SuggestionMention.js b/src/pages/home/report/ReportActionCompose/SuggestionMention.js
index 6c08b68cdc78..84bee9c80c7f 100644
--- a/src/pages/home/report/ReportActionCompose/SuggestionMention.js
+++ b/src/pages/home/report/ReportActionCompose/SuggestionMention.js
@@ -256,6 +256,8 @@ function SuggestionMention({
         setSuggestionValues((prevState) => ({...prevState, suggestedMentions: []}));
     }, []);
 
+    const getSuggestions = useCallback(() => suggestionValues.suggestedMentions, [suggestionValues]);
+
     useImperativeHandle(
         forwardedRef,
         () => ({
@@ -263,8 +265,9 @@ function SuggestionMention({
             triggerHotkeyActions,
             setShouldBlockSuggestionCalc,
             updateShouldShowSuggestionMenuToFalse,
+            getSuggestions,
         }),
-        [resetSuggestions, setShouldBlockSuggestionCalc, triggerHotkeyActions, updateShouldShowSuggestionMenuToFalse],
+        [resetSuggestions, setShouldBlockSuggestionCalc, triggerHotkeyActions, updateShouldShowSuggestionMenuToFalse, getSuggestions],
     );
 
     if (!isMentionSuggestionsMenuVisible) {
diff --git a/src/pages/home/report/ReportActionCompose/Suggestions.js b/src/pages/home/report/ReportActionCompose/Suggestions.js
index 0e98e69d31d1..60c31efb1446 100644
--- a/src/pages/home/report/ReportActionCompose/Suggestions.js
+++ b/src/pages/home/report/ReportActionCompose/Suggestions.js
@@ -2,7 +2,6 @@ import React, {useRef, useCallback, useImperativeHandle} from 'react';
 import PropTypes from 'prop-types';
 import SuggestionMention from './SuggestionMention';
 import SuggestionEmoji from './SuggestionEmoji';
-import useWindowDimensions from '../../../../hooks/useWindowDimensions';
 import * as SuggestionProps from './suggestionProps';
 
 const propTypes = {
@@ -12,11 +11,15 @@ const propTypes = {
     /** Function to clear the input */
     resetKeyboardInput: PropTypes.func.isRequired,
 
+    /** Is auto suggestion picker large */
+    isAutoSuggestionPickerLarge: PropTypes.bool,
+
     ...SuggestionProps.baseProps,
 };
 
 const defaultProps = {
     forwardedRef: null,
+    isAutoSuggestionPickerLarge: true,
 };
 
 /**
@@ -25,10 +28,24 @@ const defaultProps = {
  *
  * @returns {React.Component}
  */
-function Suggestions({isComposerFullSize, value, setValue, selection, setSelection, updateComment, composerHeight, forwardedRef, resetKeyboardInput, measureParentContainer}) {
+function Suggestions({
+    isComposerFullSize,
+    value,
+    setValue,
+    selection,
+    setSelection,
+    updateComment,
+    composerHeight,
+    forwardedRef,
+    resetKeyboardInput,
+    measureParentContainer,
+    isAutoSuggestionPickerLarge,
+}) {
     const suggestionEmojiRef = useRef(null);
     const suggestionMentionRef = useRef(null);
 
+    const getSuggestions = useCallback(() => suggestionEmojiRef.current.getSuggestions() || suggestionMentionRef.current.getSuggestions(), []);
+
     /**
      * Clean data related to EmojiSuggestions
      */
@@ -71,16 +88,11 @@ function Suggestions({isComposerFullSize, value, setValue, selection, setSelecti
             triggerHotkeyActions,
             updateShouldShowSuggestionMenuToFalse,
             setShouldBlockSuggestionCalc,
+            getSuggestions,
         }),
-        [onSelectionChange, resetSuggestions, setShouldBlockSuggestionCalc, triggerHotkeyActions, updateShouldShowSuggestionMenuToFalse],
+        [onSelectionChange, resetSuggestions, setShouldBlockSuggestionCalc, triggerHotkeyActions, updateShouldShowSuggestionMenuToFalse, getSuggestions],
     );
 
-    const {windowHeight, isSmallScreenWidth} = useWindowDimensions();
-
-    // the larger composerHeight the less space for EmojiPicker, Pixel 2 has pretty small screen and this value equal 5.3
-    const hasEnoughSpaceForLargeSuggestion = windowHeight / composerHeight >= 6.8;
-    const isAutoSuggestionPickerLarge = !isSmallScreenWidth || (isSmallScreenWidth && hasEnoughSpaceForLargeSuggestion);
-
     const baseProps = {
         value,
         setValue,
diff --git a/src/pages/home/report/ReportActionItemMessageEdit.js b/src/pages/home/report/ReportActionItemMessageEdit.js
index cb756ee40491..f76f884dca52 100644
--- a/src/pages/home/report/ReportActionItemMessageEdit.js
+++ b/src/pages/home/report/ReportActionItemMessageEdit.js
@@ -35,6 +35,9 @@ import useReportScrollManager from '../../../hooks/useReportScrollManager';
 import * as EmojiPickerAction from '../../../libs/actions/EmojiPickerAction';
 import focusWithDelay from '../../../libs/focusWithDelay';
 import * as Browser from '../../../libs/Browser';
+import * as InputFocus from '../../../libs/actions/InputFocus';
+import onyxSubscribe from '../../../libs/onyxSubscribe';
+import ONYXKEYS from '../../../ONYXKEYS';
 
 const propTypes = {
     /** All the data of the action */
@@ -111,6 +114,8 @@ function ReportActionItemMessageEdit(props) {
     const [selection, setSelection] = useState(getInitialSelection());
     const [isFocused, setIsFocused] = useState(false);
     const [hasExceededMaxCommentLength, setHasExceededMaxCommentLength] = useState(false);
+    const [modal, setModal] = useState(false);
+    const [onyxFocused, setOnyxFocused] = useState(false);
 
     const textInputRef = useRef(null);
     const isFocusedRef = useRef(false);
@@ -128,6 +133,36 @@ function ReportActionItemMessageEdit(props) {
         isFocusedRef.current = isFocused;
     }, [isFocused]);
 
+    useEffect(() => {
+        InputFocus.composerFocusKeepFocusOn(textInputRef.current, isFocused, modal, onyxFocused);
+    }, [isFocused, modal, onyxFocused]);
+
+    useEffect(() => {
+        const unsubscribeOnyxModal = onyxSubscribe({
+            key: ONYXKEYS.MODAL,
+            callback: (modalArg) => {
+                if (_.isNull(modalArg)) {
+                    return;
+                }
+                setModal(modalArg);
+            },
+        });
+
+        const unsubscribeOnyxFocused = onyxSubscribe({
+            key: ONYXKEYS.INPUT_FOCUSED,
+            callback: (modalArg) => {
+                if (_.isNull(modalArg)) {
+                    return;
+                }
+                setOnyxFocused(modalArg);
+            },
+        });
+        return () => {
+            unsubscribeOnyxModal();
+            unsubscribeOnyxFocused();
+        };
+    }, []);
+
     // We consider the report action active if it's focused, its emoji picker is open or its context menu is open
     const isActive = useCallback(
         () => isFocusedRef.current || EmojiPickerAction.isActive(props.action.reportActionID) || ReportActionContextMenu.isActiveReportAction(props.action.reportActionID),
@@ -211,16 +246,16 @@ function ReportActionItemMessageEdit(props) {
                 }
             }
             emojisPresentBefore.current = emojis;
-            setDraft((prevDraft) => {
-                if (newDraftInput !== newDraft) {
-                    const remainder = ComposerUtils.getCommonSuffixLength(prevDraft, newDraft);
-                    setSelection({
-                        start: newDraft.length - remainder,
-                        end: newDraft.length - remainder,
-                    });
-                }
-                return newDraft;
-            });
+
+            setDraft(newDraft);
+
+            if (newDraftInput !== newDraft) {
+                const remainder = ComposerUtils.getCommonSuffixLength(newDraftInput, newDraft);
+                setSelection({
+                    start: newDraft.length - remainder,
+                    end: newDraft.length - remainder,
+                });
+            }
 
             // This component is rendered only when draft is set to a non-empty string. In order to prevent component
             // unmount when user deletes content of textarea, we set previous message instead of empty string.
@@ -238,6 +273,8 @@ function ReportActionItemMessageEdit(props) {
      * Delete the draft of the comment being edited. This will take the comment out of "edit mode" with the old content.
      */
     const deleteDraft = useCallback(() => {
+        InputFocus.callback(() => setIsFocused(false));
+        InputFocus.inputFocusChange(false);
         debouncedSaveDraft.cancel();
         Report.saveReportActionDraft(props.reportID, props.action, '');
 
diff --git a/src/pages/home/report/ReportAttachments.js b/src/pages/home/report/ReportAttachments.js
index 4146be0d3971..5f194d10bce3 100644
--- a/src/pages/home/report/ReportAttachments.js
+++ b/src/pages/home/report/ReportAttachments.js
@@ -30,7 +30,7 @@ function ReportAttachments(props) {
             defaultOpen
             report={report}
             source={source}
-            onModalHide={() => Navigation.dismissModal(reportID)}
+            onModalHide={() => Navigation.dismissModal()}
             onCarouselAttachmentChange={(attachment) => {
                 const route = ROUTES.REPORT_ATTACHMENTS.getRoute(reportID, attachment.source);
                 Navigation.navigate(route);
diff --git a/src/pages/home/report/ReportFooter.js b/src/pages/home/report/ReportFooter.js
index 04e444a73c6b..2237e6448504 100644
--- a/src/pages/home/report/ReportFooter.js
+++ b/src/pages/home/report/ReportFooter.js
@@ -18,6 +18,7 @@ import reportActionPropTypes from './reportActionPropTypes';
 import reportPropTypes from '../../reportPropTypes';
 import * as ReportUtils from '../../../libs/ReportUtils';
 import * as Session from '../../../libs/actions/Session';
+import participantPropTypes from '../../../components/participantPropTypes';
 
 const propTypes = {
     /** Report object for the current report */
@@ -32,12 +33,18 @@ const propTypes = {
     /** The pending action when we are adding a chat */
     pendingAction: PropTypes.string,
 
+    /** Personal details of all the users */
+    personalDetails: PropTypes.objectOf(participantPropTypes),
+
     /** Whether the composer input should be shown */
     shouldShowComposeInput: PropTypes.bool,
 
     /** Whether user interactions should be disabled */
     shouldDisableCompose: PropTypes.bool,
 
+    /** Height of the list which the composer is part of */
+    listHeight: PropTypes.number,
+
     /** Whetjer the report is ready for display */
     isReportReadyForDisplay: PropTypes.bool,
 
@@ -49,8 +56,10 @@ const defaultProps = {
     reportActions: [],
     onSubmitComment: () => {},
     pendingAction: null,
+    personalDetails: {},
     shouldShowComposeInput: true,
     shouldDisableCompose: false,
+    listHeight: 0,
     isReportReadyForDisplay: true,
 };
 
@@ -71,6 +80,7 @@ function ReportFooter(props) {
                         <AnonymousReportFooter
                             report={props.report}
                             isSmallSizeLayout={isSmallSizeLayout}
+                            personalDetails={props.personalDetails}
                         />
                     )}
                     {isArchivedRoom && <ArchivedReportFooter report={props.report} />}
@@ -90,6 +100,7 @@ function ReportFooter(props) {
                             pendingAction={props.pendingAction}
                             isComposerFullSize={props.isComposerFullSize}
                             disabled={props.shouldDisableCompose}
+                            listHeight={props.listHeight}
                             isReportReadyForDisplay={props.isReportReadyForDisplay}
                         />
                     </SwipeableView>
@@ -105,7 +116,9 @@ ReportFooter.defaultProps = defaultProps;
 export default compose(
     withWindowDimensions,
     withOnyx({
-        shouldShowComposeInput: {key: ONYXKEYS.SHOULD_SHOW_COMPOSE_INPUT},
-        initialValue: false,
+        shouldShowComposeInput: {
+            key: ONYXKEYS.SHOULD_SHOW_COMPOSE_INPUT,
+            initialValue: false,
+        },
     }),
 )(ReportFooter);
diff --git a/src/pages/home/sidebar/SidebarLinks.js b/src/pages/home/sidebar/SidebarLinks.js
index 6b232cf31f40..d3ff3070466f 100644
--- a/src/pages/home/sidebar/SidebarLinks.js
+++ b/src/pages/home/sidebar/SidebarLinks.js
@@ -70,7 +70,7 @@ function SidebarLinks({onLinkClick, insets, optionListItems, isLoading, priority
         const unsubscribeOnyxModal = onyxSubscribe({
             key: ONYXKEYS.MODAL,
             callback: (modalArg) => {
-                if (_.isNull(modalArg)) {
+                if (_.isNull(modalArg) || typeof modalArg !== 'object') {
                     return;
                 }
                 modal.current = modalArg;
diff --git a/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.js b/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.js
index 80fd1d39239d..c87d4f06e1f4 100644
--- a/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.js
+++ b/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.js
@@ -62,6 +62,13 @@ const propTypes = {
 
     /** Forwarded ref to FloatingActionButtonAndPopover */
     innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
+
+    /** Information about any currently running demos */
+    demoInfo: PropTypes.shape({
+        money2020: PropTypes.shape({
+            isBeginningDemo: PropTypes.bool,
+        }),
+    }),
 };
 const defaultProps = {
     onHideCreateMenu: () => {},
@@ -70,6 +77,7 @@ const defaultProps = {
     betas: [],
     isLoading: false,
     innerRef: null,
+    demoInfo: {},
 };
 
 /**
@@ -152,6 +160,9 @@ function FloatingActionButtonAndPopover(props) {
         if (currentRoute && ![NAVIGATORS.CENTRAL_PANE_NAVIGATOR, SCREENS.HOME].includes(currentRoute.name)) {
             return;
         }
+        if (lodashGet(props.demoInfo, 'money2020.isBeginningDemo', false)) {
+            return;
+        }
         Welcome.show({routes, showCreateMenu});
         // eslint-disable-next-line react-hooks/exhaustive-deps
     }, [props.isLoading]);
@@ -262,6 +273,9 @@ export default compose(
         isLoading: {
             key: ONYXKEYS.IS_LOADING_REPORT_DATA,
         },
+        demoInfo: {
+            key: ONYXKEYS.DEMO_INFO,
+        },
     }),
 )(
     forwardRef((props, ref) => (
diff --git a/src/pages/iou/MoneyRequestDatePage.js b/src/pages/iou/MoneyRequestDatePage.js
index 65654aa8098a..fdf7b3a0fb30 100644
--- a/src/pages/iou/MoneyRequestDatePage.js
+++ b/src/pages/iou/MoneyRequestDatePage.js
@@ -5,7 +5,6 @@ import _ from 'underscore';
 import lodashGet from 'lodash/get';
 import ScreenWrapper from '../../components/ScreenWrapper';
 import HeaderWithBackButton from '../../components/HeaderWithBackButton';
-import Form from '../../components/Form';
 import ONYXKEYS from '../../ONYXKEYS';
 import styles from '../../styles/styles';
 import Navigation from '../../libs/Navigation/Navigation';
@@ -16,6 +15,7 @@ import NewDatePicker from '../../components/NewDatePicker';
 import useLocalize from '../../hooks/useLocalize';
 import CONST from '../../CONST';
 import {iouPropTypes, iouDefaultProps} from './propTypes';
+import FormProvider from '../../components/Form/FormProvider';
 
 const propTypes = {
     /** Onyx Props */
@@ -91,7 +91,7 @@ function MoneyRequestDatePage({iou, route, selectedTab}) {
                 title={translate('common.date')}
                 onBackButtonPress={() => navigateBack()}
             />
-            <Form
+            <FormProvider
                 style={[styles.flexGrow1, styles.ph5]}
                 formID={ONYXKEYS.FORMS.MONEY_REQUEST_DATE_FORM}
                 onSubmit={(value) => updateDate(value)}
@@ -104,7 +104,7 @@ function MoneyRequestDatePage({iou, route, selectedTab}) {
                     defaultValue={iou.created}
                     maxDate={new Date()}
                 />
-            </Form>
+            </FormProvider>
         </ScreenWrapper>
     );
 }
diff --git a/src/pages/iou/NewDistanceRequestPage.js b/src/pages/iou/NewDistanceRequestPage.js
index 562ea66453a1..c6ac7d72d5f8 100644
--- a/src/pages/iou/NewDistanceRequestPage.js
+++ b/src/pages/iou/NewDistanceRequestPage.js
@@ -49,7 +49,7 @@ function NewDistanceRequestPage({iou, report, route}) {
         if (iou.transactionID) {
             return;
         }
-        IOU.createEmptyTransaction();
+        IOU.setUpDistanceTransaction();
     }, [iou.transactionID]);
 
     return (
diff --git a/src/pages/iou/ReceiptSelector/NavigationAwareCamera.js b/src/pages/iou/ReceiptSelector/NavigationAwareCamera.js
index d1f7a3db63d3..e9cb81003979 100644
--- a/src/pages/iou/ReceiptSelector/NavigationAwareCamera.js
+++ b/src/pages/iou/ReceiptSelector/NavigationAwareCamera.js
@@ -1,60 +1,75 @@
-import React, {useEffect, useState} from 'react';
-import {Camera} from 'react-native-vision-camera';
-import {useNavigation} from '@react-navigation/native';
+import React, {useEffect, useRef} from 'react';
+import Webcam from 'react-webcam';
+import {useIsFocused} from '@react-navigation/native';
 import PropTypes from 'prop-types';
-import refPropTypes from '../../../components/refPropTypes';
+import {View} from 'react-native';
 
 const propTypes = {
-    /* The index of the tab that contains this camera */
-    cameraTabIndex: PropTypes.number.isRequired,
+    /* Flag to turn on/off the torch/flashlight - if available */
+    torchOn: PropTypes.bool,
 
-    /* Forwarded ref */
-    forwardedRef: refPropTypes.isRequired,
+    /* Callback function when media stream becomes available - user granted camera permissions and camera starts to work */
+    onUserMedia: PropTypes.func,
+
+    /* Callback function passing torch/flashlight capability as bool param of the browser */
+    onTorchAvailability: PropTypes.func,
+};
+
+const defaultProps = {
+    onUserMedia: undefined,
+    onTorchAvailability: undefined,
+    torchOn: false,
 };
 
 // Wraps a camera that will only be active when the tab is focused or as soon as it starts to become focused.
-function NavigationAwareCamera({cameraTabIndex, forwardedRef, ...props}) {
-    // Get navigation to get initial isFocused value (only needed once during init!)
-    const navigation = useNavigation();
-    const [isCameraActive, setIsCameraActive] = useState(navigation.isFocused());
-
-    // Note: The useEffect can be removed once VisionCamera V3 is used.
-    // Its only needed for android, because there is a native cameraX android bug. With out this flow would break the camera:
-    // 1. Open camera tab
-    // 2. Take a picture
-    // 3. Go back from the opened screen
-    // 4. The camera is not working anymore
+const NavigationAwareCamera = React.forwardRef(({torchOn, onTorchAvailability, ...props}, ref) => {
+    const trackRef = useRef(null);
+    const isCameraActive = useIsFocused();
+
+    const handleOnUserMedia = (stream) => {
+        if (props.onUserMedia) {
+            props.onUserMedia(stream);
+        }
+
+        const [track] = stream.getVideoTracks();
+        const capabilities = track.getCapabilities();
+        if (capabilities.torch) {
+            trackRef.current = track;
+        }
+        if (onTorchAvailability) {
+            onTorchAvailability(!!capabilities.torch);
+        }
+    };
+
     useEffect(() => {
-        const removeBlurListener = navigation.addListener('blur', () => {
-            setIsCameraActive(false);
-        });
-        const removeFocusListener = navigation.addListener('focus', () => {
-            setIsCameraActive(true);
-        });
+        if (!trackRef.current) {
+            return;
+        }
 
-        return () => {
-            removeBlurListener();
-            removeFocusListener();
-        };
-    }, [navigation]);
+        trackRef.current.applyConstraints({
+            advanced: [{torch: torchOn}],
+        });
+    }, [torchOn]);
 
+    if (!isCameraActive) {
+        return null;
+    }
     return (
-        <Camera
-            ref={forwardedRef}
-            // eslint-disable-next-line react/jsx-props-no-spreading
-            {...props}
-            isActive={isCameraActive}
-        />
+        <View>
+            <Webcam
+                audio={false}
+                screenshotFormat="image/png"
+                // eslint-disable-next-line react/jsx-props-no-spreading
+                {...props}
+                ref={ref}
+                onUserMedia={handleOnUserMedia}
+            />
+        </View>
     );
-}
+});
 
 NavigationAwareCamera.propTypes = propTypes;
 NavigationAwareCamera.displayName = 'NavigationAwareCamera';
+NavigationAwareCamera.defaultProps = defaultProps;
 
-export default React.forwardRef((props, ref) => (
-    <NavigationAwareCamera
-        // eslint-disable-next-line react/jsx-props-no-spreading
-        {...props}
-        forwardedRef={ref}
-    />
-));
+export default NavigationAwareCamera;
diff --git a/src/pages/iou/ReceiptSelector/TabNavigationAwareCamera.js b/src/pages/iou/ReceiptSelector/NavigationAwareCamera.native.js
similarity index 65%
rename from src/pages/iou/ReceiptSelector/TabNavigationAwareCamera.js
rename to src/pages/iou/ReceiptSelector/NavigationAwareCamera.native.js
index 744a10376237..9fb420791539 100644
--- a/src/pages/iou/ReceiptSelector/TabNavigationAwareCamera.js
+++ b/src/pages/iou/ReceiptSelector/NavigationAwareCamera.native.js
@@ -3,28 +3,33 @@ import {Camera} from 'react-native-vision-camera';
 import {useTabAnimation} from '@react-navigation/material-top-tabs';
 import {useNavigation} from '@react-navigation/native';
 import PropTypes from 'prop-types';
-import refPropTypes from '../../../components/refPropTypes';
 
 const propTypes = {
     /* The index of the tab that contains this camera */
     cameraTabIndex: PropTypes.number.isRequired,
 
-    /* Forwarded ref */
-    forwardedRef: refPropTypes.isRequired,
+    /* Whether we're in a tab navigator */
+    isInTabNavigator: PropTypes.bool.isRequired,
 };
 
 // Wraps a camera that will only be active when the tab is focused or as soon as it starts to become focused.
-function TabNavigationAwareCamera({cameraTabIndex, forwardedRef, ...props}) {
+const NavigationAwareCamera = React.forwardRef(({cameraTabIndex, isInTabNavigator, ...props}, ref) => {
     // Get navigation to get initial isFocused value (only needed once during init!)
     const navigation = useNavigation();
     const [isCameraActive, setIsCameraActive] = useState(navigation.isFocused());
 
-    // Get the animation value from the tab navigator. Its a value between 0 and the
-    // number of pages we render in the tab navigator. When we even just slightly start to scroll to the camera page,
-    // (value is e.g. 0.001 on animation start) we want to activate the camera, so its as fast as possible active.
-    const tabPositionAnimation = useTabAnimation();
+    // Retrieve the animation value from the tab navigator, which ranges from 0 to the total number of pages displayed.
+    // Even a minimal scroll towards the camera page (e.g., a value of 0.001 at start) should activate the camera for immediate responsiveness.
+
+    // STOP!!!!!!! This is not a pattern to be followed! We are conditionally rendering this hook becase when used in the edit flow we'll never be inside a tab navigator.
+    // eslint-disable-next-line react-hooks/rules-of-hooks
+    const tabPositionAnimation = isInTabNavigator ? useTabAnimation() : null;
 
     useEffect(() => {
+        if (!isInTabNavigator) {
+            return;
+        }
+
         const listenerId = tabPositionAnimation.addListener(({value}) => {
             // Activate camera as soon the index is animating towards the `cameraTabIndex`
             setIsCameraActive(value > cameraTabIndex - 1 && value < cameraTabIndex + 1);
@@ -33,7 +38,7 @@ function TabNavigationAwareCamera({cameraTabIndex, forwardedRef, ...props}) {
         return () => {
             tabPositionAnimation.removeListener(listenerId);
         };
-    }, [cameraTabIndex, tabPositionAnimation]);
+    }, [cameraTabIndex, tabPositionAnimation, isInTabNavigator]);
 
     // Note: The useEffect can be removed once VisionCamera V3 is used.
     // Its only needed for android, because there is a native cameraX android bug. With out this flow would break the camera:
@@ -57,21 +62,15 @@ function TabNavigationAwareCamera({cameraTabIndex, forwardedRef, ...props}) {
 
     return (
         <Camera
-            ref={forwardedRef}
+            ref={ref}
             // eslint-disable-next-line react/jsx-props-no-spreading
             {...props}
             isActive={isCameraActive}
         />
     );
-}
+});
 
-TabNavigationAwareCamera.propTypes = propTypes;
-TabNavigationAwareCamera.displayName = 'TabNavigationAwareCamera';
+NavigationAwareCamera.propTypes = propTypes;
+NavigationAwareCamera.displayName = 'NavigationAwareCamera';
 
-export default React.forwardRef((props, ref) => (
-    <TabNavigationAwareCamera
-        // eslint-disable-next-line react/jsx-props-no-spreading
-        {...props}
-        forwardedRef={ref}
-    />
-));
+export default NavigationAwareCamera;
diff --git a/src/pages/iou/ReceiptSelector/index.js b/src/pages/iou/ReceiptSelector/index.js
index b4cf75801a3f..fba792029914 100644
--- a/src/pages/iou/ReceiptSelector/index.js
+++ b/src/pages/iou/ReceiptSelector/index.js
@@ -1,5 +1,5 @@
-import {View, Text, PanResponder, PixelRatio} from 'react-native';
-import React, {useContext, useRef, useState} from 'react';
+import {View, Text, PixelRatio, ActivityIndicator, PanResponder} from 'react-native';
+import React, {useCallback, useContext, useReducer, useRef, useState} from 'react';
 import lodashGet from 'lodash/get';
 import _ from 'underscore';
 import PropTypes from 'prop-types';
@@ -21,6 +21,14 @@ import {DragAndDropContext} from '../../../components/DragAndDrop/Provider';
 import {iouPropTypes, iouDefaultProps} from '../propTypes';
 import * as FileUtils from '../../../libs/fileDownload/FileUtils';
 import Navigation from '../../../libs/Navigation/Navigation';
+import * as Expensicons from '../../../components/Icon/Expensicons';
+import Icon from '../../../components/Icon';
+import themeColors from '../../../styles/themes/default';
+import Shutter from '../../../../assets/images/shutter.svg';
+import NavigationAwareCamera from './NavigationAwareCamera';
+import * as Browser from '../../../libs/Browser';
+import Hand from '../../../../assets/images/hand.svg';
+import PressableWithFeedback from '../../../components/Pressable/PressableWithFeedback';
 
 const propTypes = {
     /** The report on which the request is initiated on */
@@ -59,16 +67,24 @@ const defaultProps = {
     isInTabNavigator: true,
 };
 
-function ReceiptSelector(props) {
-    const iouType = lodashGet(props.route, 'params.iouType', '');
+function ReceiptSelector({route, transactionID, iou, report}) {
+    const iouType = lodashGet(route, 'params.iouType', '');
+
+    // Grouping related states
     const [isAttachmentInvalid, setIsAttachmentInvalid] = useState(false);
     const [attachmentInvalidReasonTitle, setAttachmentInvalidReasonTitle] = useState('');
     const [attachmentInvalidReason, setAttachmentValidReason] = useState('');
+
     const [receiptImageTopPosition, setReceiptImageTopPosition] = useState(0);
     const {isSmallScreenWidth} = useWindowDimensions();
     const {translate} = useLocalize();
     const {isDraggingOver} = useContext(DragAndDropContext);
 
+    const [cameraPermissionState, setCameraPermissionState] = useState('prompt');
+    const [isFlashLightOn, toggleFlashlight] = useReducer((state) => !state, false);
+    const [isTorchAvailable, setIsTorchAvailable] = useState(true);
+    const cameraRef = useRef(null);
+
     const hideReciptModal = () => {
         setIsAttachmentInvalid(false);
     };
@@ -108,10 +124,10 @@ function ReceiptSelector(props) {
     /**
      * Sets the Receipt objects and navigates the user to the next page
      * @param {Object} file
-     * @param {Object} iou
-     * @param {Object} report
+     * @param {Object} iouObject
+     * @param {Object} reportObject
      */
-    const setReceiptAndNavigate = (file, iou, report) => {
+    const setReceiptAndNavigate = (file, iouObject, reportObject) => {
         if (!validateReceipt(file)) {
             return;
         }
@@ -119,15 +135,34 @@ function ReceiptSelector(props) {
         const filePath = URL.createObjectURL(file);
         IOU.setMoneyRequestReceipt(filePath, file.name);
 
-        if (props.transactionID) {
-            IOU.replaceReceipt(props.transactionID, file, filePath);
+        if (transactionID) {
+            IOU.replaceReceipt(transactionID, file, filePath);
             Navigation.dismissModal();
             return;
         }
 
-        IOU.navigateToNextPage(iou, iouType, report, props.route.path);
+        IOU.navigateToNextPage(iouObject, iouType, reportObject, route.path);
     };
 
+    const capturePhoto = useCallback(() => {
+        if (!cameraRef.current.getScreenshot) {
+            return;
+        }
+        const imageBase64 = cameraRef.current.getScreenshot();
+        const filename = `receipt_${Date.now()}.png`;
+        const imageFile = FileUtils.base64ToFile(imageBase64, filename);
+        const filePath = URL.createObjectURL(imageFile);
+        IOU.setMoneyRequestReceipt(filePath, imageFile.name);
+
+        if (transactionID) {
+            IOU.replaceReceipt(transactionID, imageFile, filePath);
+            Navigation.dismissModal();
+            return;
+        }
+
+        IOU.navigateToNextPage(iou, iouType, report, route.path);
+    }, [cameraRef, iou, report, iouType, transactionID, route.path]);
+
     const panResponder = useRef(
         PanResponder.create({
             onMoveShouldSetPanResponder: () => true,
@@ -135,59 +170,146 @@ function ReceiptSelector(props) {
         }),
     ).current;
 
-    return (
-        <View style={[styles.uploadReceiptView(isSmallScreenWidth)]}>
-            {!isDraggingOver ? (
-                <>
-                    <View
-                        onLayout={({nativeEvent}) => {
-                            setReceiptImageTopPosition(PixelRatio.roundToNearestPixel(nativeEvent.layout.top));
-                        }}
-                    >
-                        <ReceiptUpload
-                            width={CONST.RECEIPT.ICON_SIZE}
-                            height={CONST.RECEIPT.ICON_SIZE}
+    const mobileCameraView = () => (
+        <>
+            <View style={[styles.cameraView]}>
+                {(cameraPermissionState === 'prompt' || !cameraPermissionState) && (
+                    <ActivityIndicator
+                        size={CONST.ACTIVITY_INDICATOR_SIZE.LARGE}
+                        style={[styles.flex1]}
+                        color={themeColors.textSupporting}
+                    />
+                )}
+                {cameraPermissionState === 'denied' && (
+                    <View style={[styles.flex1, styles.permissionView]}>
+                        <Icon
+                            src={Hand}
+                            width={CONST.RECEIPT.HAND_ICON_WIDTH}
+                            height={CONST.RECEIPT.HAND_ICON_HEIGHT}
+                            style={[styles.pb5]}
                         />
+                        <Text style={[styles.textReceiptUpload]}>{translate('receipt.takePhoto')}</Text>
+                        <Text style={[styles.subTextReceiptUpload]}>{translate('receipt.cameraAccess')}</Text>
                     </View>
-                    <View
-                        style={styles.receiptViewTextContainer}
-                        // eslint-disable-next-line react/jsx-props-no-spreading
-                        {...panResponder.panHandlers}
-                    >
-                        <Text style={[styles.textReceiptUpload]}>{translate('receipt.upload')}</Text>
-                        <Text style={[styles.subTextReceiptUpload]}>
-                            {isSmallScreenWidth ? translate('receipt.chooseReceipt') : translate('receipt.dragReceiptBeforeEmail')}
-                            <CopyTextToClipboard
-                                text={CONST.EMAIL.RECEIPTS}
-                                textStyles={[styles.textBlue]}
-                            />
-                            {isSmallScreenWidth ? null : translate('receipt.dragReceiptAfterEmail')}
-                        </Text>
-                    </View>
-                    <AttachmentPicker>
-                        {({openPicker}) => (
-                            <Button
-                                medium
-                                success
-                                text={translate('receipt.chooseFile')}
-                                accessibilityLabel={translate('receipt.chooseFile')}
-                                style={[styles.p9]}
-                                onPress={() => {
-                                    openPicker({
-                                        onPicked: (file) => {
-                                            setReceiptAndNavigate(file, props.iou, props.report);
-                                        },
-                                    });
-                                }}
+                )}
+                <NavigationAwareCamera
+                    onUserMedia={() => setCameraPermissionState('granted')}
+                    onUserMediaError={() => setCameraPermissionState('denied')}
+                    style={{...styles.videoContainer, display: cameraPermissionState !== 'granted' ? 'none' : 'block'}}
+                    ref={cameraRef}
+                    screenshotFormat="image/png"
+                    videoConstraints={{facingMode: {exact: 'environment'}}}
+                    torchOn={isFlashLightOn}
+                    onTorchAvailability={setIsTorchAvailable}
+                    forceScreenshotSourceSize
+                />
+            </View>
+
+            <View style={[styles.flexRow, styles.justifyContentAround, styles.alignItemsCenter, styles.pv3]}>
+                <AttachmentPicker>
+                    {({openPicker}) => (
+                        <PressableWithFeedback
+                            accessibilityLabel={translate('receipt.chooseFile')}
+                            accessibilityRole={CONST.ACCESSIBILITY_ROLE.BUTTON}
+                            onPress={() => {
+                                openPicker({
+                                    onPicked: (file) => {
+                                        setReceiptAndNavigate(file, iou, report);
+                                    },
+                                });
+                            }}
+                        >
+                            <Icon
+                                height={32}
+                                width={32}
+                                src={Expensicons.Gallery}
+                                fill={themeColors.textSupporting}
                             />
-                        )}
-                    </AttachmentPicker>
-                </>
-            ) : null}
+                        </PressableWithFeedback>
+                    )}
+                </AttachmentPicker>
+                <PressableWithFeedback
+                    accessibilityRole={CONST.ACCESSIBILITY_ROLE.BUTTON}
+                    accessibilityLabel={translate('receipt.shutter')}
+                    style={[styles.alignItemsCenter]}
+                    onPress={capturePhoto}
+                >
+                    <Shutter
+                        width={CONST.RECEIPT.SHUTTER_SIZE}
+                        height={CONST.RECEIPT.SHUTTER_SIZE}
+                    />
+                </PressableWithFeedback>
+                <PressableWithFeedback
+                    accessibilityRole={CONST.ACCESSIBILITY_ROLE.BUTTON}
+                    accessibilityLabel={translate('receipt.flash')}
+                    style={[styles.alignItemsEnd, !isTorchAvailable && styles.opacity0]}
+                    onPress={toggleFlashlight}
+                    disabled={!isTorchAvailable}
+                >
+                    <Icon
+                        height={32}
+                        width={32}
+                        src={Expensicons.Bolt}
+                        fill={isFlashLightOn ? themeColors.iconHovered : themeColors.textSupporting}
+                    />
+                </PressableWithFeedback>
+            </View>
+        </>
+    );
+
+    const desktopUploadView = () => (
+        <>
+            <View onLayout={({nativeEvent}) => setReceiptImageTopPosition(PixelRatio.roundToNearestPixel(nativeEvent.layout.top))}>
+                <ReceiptUpload
+                    width={CONST.RECEIPT.ICON_SIZE}
+                    height={CONST.RECEIPT.ICON_SIZE}
+                />
+            </View>
+
+            <View
+                style={styles.receiptViewTextContainer}
+                // eslint-disable-next-line react/jsx-props-no-spreading
+                {...panResponder.panHandlers}
+            >
+                <Text style={[styles.textReceiptUpload]}>{translate('receipt.upload')}</Text>
+                <Text style={[styles.subTextReceiptUpload]}>
+                    {isSmallScreenWidth ? translate('receipt.chooseReceipt') : translate('receipt.dragReceiptBeforeEmail')}
+                    <CopyTextToClipboard
+                        text={CONST.EMAIL.RECEIPTS}
+                        textStyles={[styles.textBlue]}
+                    />
+                    {isSmallScreenWidth ? null : translate('receipt.dragReceiptAfterEmail')}
+                </Text>
+            </View>
+
+            <AttachmentPicker>
+                {({openPicker}) => (
+                    <Button
+                        medium
+                        success
+                        text={translate('receipt.chooseFile')}
+                        accessibilityLabel={translate('receipt.chooseFile')}
+                        style={[styles.p9]}
+                        onPress={() => {
+                            openPicker({
+                                onPicked: (file) => {
+                                    setReceiptAndNavigate(file, iou, report);
+                                },
+                            });
+                        }}
+                    />
+                )}
+            </AttachmentPicker>
+        </>
+    );
+
+    return (
+        <View style={[styles.flex1, !Browser.isMobile() && styles.uploadReceiptView(isSmallScreenWidth)]}>
+            {!isDraggingOver && (Browser.isMobile() ? mobileCameraView() : desktopUploadView())}
             <ReceiptDropUI
                 onDrop={(e) => {
                     const file = lodashGet(e, ['dataTransfer', 'files', 0]);
-                    setReceiptAndNavigate(file, props.iou, props.report);
+                    setReceiptAndNavigate(file, iou, report);
                 }}
                 receiptImageTopPosition={receiptImageTopPosition}
             />
diff --git a/src/pages/iou/ReceiptSelector/index.native.js b/src/pages/iou/ReceiptSelector/index.native.js
index d509fbce176d..6503d488e805 100644
--- a/src/pages/iou/ReceiptSelector/index.native.js
+++ b/src/pages/iou/ReceiptSelector/index.native.js
@@ -1,14 +1,14 @@
-import {ActivityIndicator, Alert, AppState, Linking, Text, View} from 'react-native';
+import {ActivityIndicator, Alert, AppState, Text, View} from 'react-native';
 import React, {useCallback, useEffect, useRef, useState} from 'react';
 import {useCameraDevices} from 'react-native-vision-camera';
 import lodashGet from 'lodash/get';
 import PropTypes from 'prop-types';
-import {launchImageLibrary} from 'react-native-image-picker';
 import {withOnyx} from 'react-native-onyx';
 import {RESULTS} from 'react-native-permissions';
 import PressableWithFeedback from '../../../components/Pressable/PressableWithFeedback';
 import Icon from '../../../components/Icon';
 import * as Expensicons from '../../../components/Icon/Expensicons';
+import AttachmentPicker from '../../../components/AttachmentPicker';
 import styles from '../../../styles/styles';
 import Shutter from '../../../../assets/images/shutter.svg';
 import Hand from '../../../../assets/images/hand.svg';
@@ -25,7 +25,6 @@ import {iouPropTypes, iouDefaultProps} from '../propTypes';
 import NavigationAwareCamera from './NavigationAwareCamera';
 import Navigation from '../../../libs/Navigation/Navigation';
 import * as FileUtils from '../../../libs/fileDownload/FileUtils';
-import TabNavigationAwareCamera from './TabNavigationAwareCamera';
 
 const propTypes = {
     /** React Navigation route */
@@ -63,31 +62,6 @@ const defaultProps = {
     isInTabNavigator: true,
 };
 
-/**
- * See https://github.com/react-native-image-picker/react-native-image-picker/#options
- * for ImagePicker configuration options
- */
-const imagePickerOptions = {
-    includeBase64: false,
-    saveToPhotos: false,
-    selectionLimit: 1,
-    includeExtra: false,
-};
-
-/**
- * Return imagePickerOptions based on the type
- * @param {String} type
- * @returns {Object}
- */
-function getImagePickerOptions(type) {
-    // mediaType property is one of the ImagePicker configuration to restrict types'
-    const mediaType = type === CONST.ATTACHMENT_PICKER_TYPE.IMAGE ? 'photo' : 'mixed';
-    return {
-        mediaType,
-        ...imagePickerOptions,
-    };
-}
-
 function ReceiptSelector({route, report, iou, transactionID, isInTabNavigator}) {
     const devices = useCameraDevices('wide-angle-camera');
     const device = devices.back;
@@ -101,8 +75,6 @@ function ReceiptSelector({route, report, iou, transactionID, isInTabNavigator})
 
     const {translate} = useLocalize();
 
-    const CameraComponent = isInTabNavigator ? TabNavigationAwareCamera : NavigationAwareCamera;
-
     useEffect(() => {
         const refreshCameraPermissionStatus = () => {
             CameraPermission.getCameraPermissionStatus()
@@ -127,35 +99,6 @@ function ReceiptSelector({route, report, iou, transactionID, isInTabNavigator})
         };
     }, []);
 
-    /**
-     * Inform the users when they need to grant camera access and guide them to settings
-     */
-    const showPermissionsAlert = () => {
-        Alert.alert(
-            translate('attachmentPicker.cameraPermissionRequired'),
-            translate('attachmentPicker.expensifyDoesntHaveAccessToCamera'),
-            [
-                {
-                    text: translate('common.cancel'),
-                    style: 'cancel',
-                },
-                {
-                    text: translate('common.settings'),
-                    onPress: () => Linking.openSettings(),
-                },
-            ],
-            {cancelable: false},
-        );
-    };
-
-    /**
-     * A generic handling when we don't know the exact reason for an error
-     *
-     */
-    const showGeneralAlert = () => {
-        Alert.alert(translate('attachmentPicker.attachmentError'), translate('attachmentPicker.errorWhileSelectingAttachment'));
-    };
-
     const askForPermissions = () => {
         // There's no way we can check for the BLOCKED status without requesting the permission first
         // https://github.com/zoontek/react-native-permissions/blob/a836e114ce3a180b2b23916292c79841a267d828/README.md?plain=1#L670
@@ -164,7 +107,7 @@ function ReceiptSelector({route, report, iou, transactionID, isInTabNavigator})
                 setCameraPermissionStatus(status);
 
                 if (status === RESULTS.BLOCKED) {
-                    showPermissionsAlert();
+                    FileUtils.showCameraPermissionsAlert();
                 }
             })
             .catch(() => {
@@ -172,36 +115,6 @@ function ReceiptSelector({route, report, iou, transactionID, isInTabNavigator})
             });
     };
 
-    /**
-     * Common image picker handling
-     *
-     * @param {function} imagePickerFunc - RNImagePicker.launchCamera or RNImagePicker.launchImageLibrary
-     * @returns {Promise}
-     */
-    const showImagePicker = (imagePickerFunc) =>
-        new Promise((resolve, reject) => {
-            imagePickerFunc(getImagePickerOptions(CONST.ATTACHMENT_PICKER_TYPE.IMAGE), (response) => {
-                if (response.didCancel) {
-                    // When the user cancelled resolve with no attachment
-                    return resolve();
-                }
-                if (response.errorCode) {
-                    switch (response.errorCode) {
-                        case 'permission':
-                            showPermissionsAlert();
-                            return resolve();
-                        default:
-                            showGeneralAlert();
-                            break;
-                    }
-
-                    return reject(new Error(`Error during attachment selection: ${response.errorMessage}`));
-                }
-
-                return resolve(response.assets);
-            });
-        });
-
     const takePhoto = useCallback(() => {
         const showCameraAlert = () => {
             Alert.alert(translate('receipt.cameraErrorTitle'), translate('receipt.cameraErrorMessage'));
@@ -274,48 +187,49 @@ function ReceiptSelector({route, report, iou, transactionID, isInTabNavigator})
                 </View>
             )}
             {cameraPermissionStatus === RESULTS.GRANTED && device != null && (
-                <CameraComponent
+                <NavigationAwareCamera
                     ref={camera}
                     device={device}
                     style={[styles.cameraView]}
                     zoom={device.neutralZoom}
                     photo
                     cameraTabIndex={pageIndex}
+                    isInTabNavigator={isInTabNavigator}
                 />
             )}
             <View style={[styles.flexRow, styles.justifyContentAround, styles.alignItemsCenter, styles.pv3]}>
-                <PressableWithFeedback
-                    accessibilityRole={CONST.ACCESSIBILITY_ROLE.BUTTON}
-                    accessibilityLabel={translate('receipt.gallery')}
-                    style={[styles.alignItemsStart]}
-                    onPress={() => {
-                        showImagePicker(launchImageLibrary)
-                            .then((receiptImage) => {
-                                const filePath = receiptImage[0].uri;
-                                IOU.setMoneyRequestReceipt(filePath, receiptImage[0].fileName);
-
-                                if (transactionID) {
-                                    FileUtils.readFileAsync(filePath, receiptImage[0].fileName).then((receipt) => {
-                                        IOU.replaceReceipt(transactionID, receipt, filePath);
-                                    });
-                                    Navigation.dismissModal();
-                                    return;
-                                }
-
-                                IOU.navigateToNextPage(iou, iouType, report, route.path);
-                            })
-                            .catch(() => {
-                                Log.info('User did not select an image from gallery');
-                            });
-                    }}
-                >
-                    <Icon
-                        height={32}
-                        width={32}
-                        src={Expensicons.Gallery}
-                        fill={themeColors.textSupporting}
-                    />
-                </PressableWithFeedback>
+                <AttachmentPicker shouldHideCameraOption>
+                    {({openPicker}) => (
+                        <PressableWithFeedback
+                            accessibilityRole={CONST.ACCESSIBILITY_ROLE.BUTTON}
+                            accessibilityLabel={translate('receipt.gallery')}
+                            style={[styles.alignItemsStart]}
+                            onPress={() => {
+                                openPicker({
+                                    onPicked: (file) => {
+                                        const filePath = file.uri;
+                                        IOU.setMoneyRequestReceipt(filePath, file.name);
+
+                                        if (transactionID) {
+                                            IOU.replaceReceipt(transactionID, file, filePath);
+                                            Navigation.dismissModal();
+                                            return;
+                                        }
+
+                                        IOU.navigateToNextPage(iou, iouType, report, route.path);
+                                    },
+                                });
+                            }}
+                        >
+                            <Icon
+                                height={32}
+                                width={32}
+                                src={Expensicons.Gallery}
+                                fill={themeColors.textSupporting}
+                            />
+                        </PressableWithFeedback>
+                    )}
+                </AttachmentPicker>
                 <PressableWithFeedback
                     accessibilityRole={CONST.ACCESSIBILITY_ROLE.BUTTON}
                     accessibilityLabel={translate('receipt.shutter')}
diff --git a/src/pages/iou/SplitBillDetailsPage.js b/src/pages/iou/SplitBillDetailsPage.js
index 4b5037c5eca3..e29fc8ce017e 100644
--- a/src/pages/iou/SplitBillDetailsPage.js
+++ b/src/pages/iou/SplitBillDetailsPage.js
@@ -1,26 +1,28 @@
-import React from 'react';
+import React, {useCallback} from 'react';
 import _ from 'underscore';
-import lodashGet from 'lodash/get';
 import {View} from 'react-native';
 import PropTypes from 'prop-types';
+import lodashGet from 'lodash/get';
 import {withOnyx} from 'react-native-onyx';
 import styles from '../../styles/styles';
 import ONYXKEYS from '../../ONYXKEYS';
+import CONST from '../../CONST';
 import * as OptionsListUtils from '../../libs/OptionsListUtils';
-import ScreenWrapper from '../../components/ScreenWrapper';
-import MoneyRequestConfirmationList from '../../components/MoneyRequestConfirmationList';
 import personalDetailsPropType from '../personalDetailsPropType';
-import withLocalize, {withLocalizePropTypes} from '../../components/withLocalize';
 import compose from '../../libs/compose';
 import reportActionPropTypes from '../home/report/reportActionPropTypes';
 import reportPropTypes from '../reportPropTypes';
+import transactionPropTypes from '../../components/transactionPropTypes';
 import withReportAndReportActionOrNotFound from '../home/report/withReportAndReportActionOrNotFound';
-import FullPageNotFoundView from '../../components/BlockingViews/FullPageNotFoundView';
-import CONST from '../../CONST';
-import HeaderWithBackButton from '../../components/HeaderWithBackButton';
 import * as TransactionUtils from '../../libs/TransactionUtils';
 import * as ReportUtils from '../../libs/ReportUtils';
+import * as IOU from '../../libs/actions/IOU';
+import ScreenWrapper from '../../components/ScreenWrapper';
+import MoneyRequestConfirmationList from '../../components/MoneyRequestConfirmationList';
+import FullPageNotFoundView from '../../components/BlockingViews/FullPageNotFoundView';
+import HeaderWithBackButton from '../../components/HeaderWithBackButton';
 import MoneyRequestHeaderStatusBar from '../../components/MoneyRequestHeaderStatusBar';
+import useLocalize from '../../hooks/useLocalize';
 
 const propTypes = {
     /* Onyx Props */
@@ -34,6 +36,12 @@ const propTypes = {
     /** Array of report actions for this report */
     reportActions: PropTypes.shape(reportActionPropTypes),
 
+    /** The current transaction */
+    transaction: transactionPropTypes.isRequired,
+
+    /** The draft transaction that holds data to be persisited on the current transaction */
+    draftTransaction: transactionPropTypes,
+
     /** Route params */
     route: PropTypes.shape({
         params: PropTypes.shape({
@@ -45,17 +53,26 @@ const propTypes = {
         }),
     }).isRequired,
 
-    ...withLocalizePropTypes,
+    /** Session info for the currently logged in user. */
+    session: PropTypes.shape({
+        /** Currently logged in user accountID */
+        accountID: PropTypes.number,
+
+        /** Currently logged in user email */
+        email: PropTypes.string,
+    }).isRequired,
 };
 
 const defaultProps = {
     personalDetails: {},
     reportActions: {},
+    draftTransaction: undefined,
 };
 
 function SplitBillDetailsPage(props) {
+    const {reportID} = props.report;
+    const {translate} = useLocalize();
     const reportAction = props.reportActions[`${props.route.params.reportActionID.toString()}`];
-    const transaction = TransactionUtils.getLinkedTransaction(reportAction);
     const participantAccountIDs = reportAction.originalMessage.participantAccountIDs;
 
     // In case this is workspace split bill, we manually add the workspace as the second participant of the split bill
@@ -71,25 +88,40 @@ function SplitBillDetailsPage(props) {
     }
     const payeePersonalDetails = props.personalDetails[reportAction.actorAccountID];
     const participantsExcludingPayee = _.filter(participants, (participant) => participant.accountID !== reportAction.actorAccountID);
+
+    const isScanning = TransactionUtils.hasReceipt(props.transaction) && TransactionUtils.isReceiptBeingScanned(props.transaction);
+    const hasSmartScanFailed = TransactionUtils.hasReceipt(props.transaction) && props.transaction.receipt.state === CONST.IOU.RECEIPT_STATE.SCANFAILED;
+    const isEditingSplitBill = props.session.accountID === reportAction.actorAccountID && TransactionUtils.areRequiredFieldsEmpty(props.transaction);
+
     const {
         amount: splitAmount,
         currency: splitCurrency,
+        comment: splitComment,
         merchant: splitMerchant,
         created: splitCreated,
-        comment: splitComment,
         category: splitCategory,
-    } = ReportUtils.getTransactionDetails(transaction);
-    const isScanning = TransactionUtils.hasReceipt(transaction) && TransactionUtils.isReceiptBeingScanned(transaction);
+    } = isEditingSplitBill && props.draftTransaction ? ReportUtils.getTransactionDetails(props.draftTransaction) : ReportUtils.getTransactionDetails(props.transaction);
+
+    const onConfirm = useCallback(
+        () => IOU.completeSplitBill(reportID, reportAction, props.draftTransaction, props.session.accountID, props.session.email),
+        [reportID, reportAction, props.draftTransaction, props.session.accountID, props.session.email],
+    );
 
     return (
         <ScreenWrapper testID={SplitBillDetailsPage.displayName}>
-            <FullPageNotFoundView shouldShow={_.isEmpty(props.report) || _.isEmpty(reportAction)}>
-                <HeaderWithBackButton title={props.translate('common.details')} />
+            <FullPageNotFoundView shouldShow={_.isEmpty(reportID) || _.isEmpty(reportAction) || _.isEmpty(props.transaction)}>
+                <HeaderWithBackButton title={translate('common.details')} />
                 <View
                     pointerEvents="box-none"
                     style={[styles.containerWithSpaceBetween]}
                 >
-                    {isScanning && <MoneyRequestHeaderStatusBar />}
+                    {isScanning && (
+                        <MoneyRequestHeaderStatusBar
+                            title={translate('iou.receiptStatusTitle')}
+                            description={translate('iou.receiptStatusText')}
+                            shouldShowBorderBottom
+                        />
+                    )}
                     {Boolean(participants.length) && (
                         <MoneyRequestConfirmationList
                             hasMultipleParticipants
@@ -102,12 +134,17 @@ function SplitBillDetailsPage(props) {
                             iouMerchant={splitMerchant}
                             iouCategory={splitCategory}
                             iouType={CONST.IOU.MONEY_REQUEST_TYPE.SPLIT}
-                            isReadOnly
-                            receiptPath={transaction.receipt && transaction.receipt.source}
-                            receiptFilename={transaction.filename}
+                            isReadOnly={!isEditingSplitBill}
+                            shouldShowSmartScanFields
+                            receiptPath={props.transaction.receipt && props.transaction.receipt.source}
+                            receiptFilename={props.transaction.filename}
                             shouldShowFooter={false}
-                            isScanning={isScanning}
-                            reportID={lodashGet(props.report, 'reportID', '')}
+                            isEditingSplitBill={isEditingSplitBill}
+                            hasSmartScanFailed={hasSmartScanFailed}
+                            reportID={reportID}
+                            reportActionID={reportAction.reportActionID}
+                            transactionID={props.transaction.transactionID}
+                            onConfirm={onConfirm}
                         />
                     )}
                 </View>
@@ -121,11 +158,35 @@ SplitBillDetailsPage.defaultProps = defaultProps;
 SplitBillDetailsPage.displayName = 'SplitBillDetailsPage';
 
 export default compose(
-    withLocalize,
     withReportAndReportActionOrNotFound,
     withOnyx({
+        report: {
+            key: ({route}) => `${ONYXKEYS.COLLECTION.REPORT}${route.params.reportID}`,
+        },
+        reportActions: {
+            key: ({route}) => `${ONYXKEYS.COLLECTION.REPORT_ACTIONS}${route.params.reportID}`,
+            canEvict: false,
+        },
         personalDetails: {
             key: ONYXKEYS.PERSONAL_DETAILS_LIST,
         },
+        session: {
+            key: ONYXKEYS.SESSION,
+        },
+    }),
+    // eslint-disable-next-line rulesdir/no-multiple-onyx-in-file
+    withOnyx({
+        transaction: {
+            key: ({route, reportActions}) => {
+                const reportAction = reportActions[`${route.params.reportActionID.toString()}`];
+                return `${ONYXKEYS.COLLECTION.TRANSACTION}${lodashGet(reportAction, 'originalMessage.IOUTransactionID', 0)}`;
+            },
+        },
+        draftTransaction: {
+            key: ({route, reportActions}) => {
+                const reportAction = reportActions[`${route.params.reportActionID.toString()}`];
+                return `${ONYXKEYS.COLLECTION.SPLIT_TRANSACTION_DRAFT}${lodashGet(reportAction, 'originalMessage.IOUTransactionID', 0)}`;
+            },
+        },
     }),
 )(SplitBillDetailsPage);
diff --git a/src/pages/iou/propTypes/index.js b/src/pages/iou/propTypes/index.js
index 586f8424a2c2..d41b4cbf1724 100644
--- a/src/pages/iou/propTypes/index.js
+++ b/src/pages/iou/propTypes/index.js
@@ -21,6 +21,9 @@ const iouPropTypes = PropTypes.shape({
     /** The category name */
     category: PropTypes.string,
 
+    /** Whether the request is billable */
+    billable: PropTypes.bool,
+
     /** The tag */
     tag: PropTypes.string,
 
@@ -42,6 +45,7 @@ const iouDefaultProps = {
     merchant: '',
     category: '',
     tag: '',
+    billable: false,
     created: '',
     participants: [],
     receiptPath: '',
diff --git a/src/pages/iou/steps/MoneyRequestConfirmPage.js b/src/pages/iou/steps/MoneyRequestConfirmPage.js
index d007e168de79..46367e275af4 100644
--- a/src/pages/iou/steps/MoneyRequestConfirmPage.js
+++ b/src/pages/iou/steps/MoneyRequestConfirmPage.js
@@ -1,5 +1,5 @@
 import React, {useCallback, useEffect, useMemo, useRef} from 'react';
-import {ScrollView, View} from 'react-native';
+import {View} from 'react-native';
 import PropTypes from 'prop-types';
 import {withOnyx} from 'react-native-onyx';
 import _ from 'underscore';
@@ -25,7 +25,6 @@ import * as FileUtils from '../../../libs/fileDownload/FileUtils';
 import * as Policy from '../../../libs/actions/Policy';
 import useNetwork from '../../../hooks/useNetwork';
 import useWindowDimensions from '../../../hooks/useWindowDimensions';
-import * as StyleUtils from '../../../styles/StyleUtils';
 import {iouPropTypes, iouDefaultProps} from '../propTypes';
 import * as Expensicons from '../../../components/Icon/Expensicons';
 
@@ -62,10 +61,11 @@ const defaultProps = {
 
 function MoneyRequestConfirmPage(props) {
     const {isOffline} = useNetwork();
-    const {windowHeight, windowWidth} = useWindowDimensions();
+    const {windowWidth} = useWindowDimensions();
     const prevMoneyRequestId = useRef(props.iou.id);
     const iouType = useRef(lodashGet(props.route, 'params.iouType', ''));
     const isDistanceRequest = MoneyRequestUtils.isDistanceRequest(iouType.current, props.selectedTab);
+    const isScanRequest = MoneyRequestUtils.isScanRequest(props.selectedTab);
     const reportID = useRef(lodashGet(props.route, 'params.reportID', ''));
     const participants = useMemo(
         () =>
@@ -304,6 +304,10 @@ function MoneyRequestConfirmPage(props) {
             return props.translate('iou.split');
         }
 
+        if (iouType.current === CONST.IOU.MONEY_REQUEST_TYPE.SEND) {
+            return props.translate('common.send');
+        }
+
         return props.translate('tabSelector.manual');
     };
 
@@ -327,58 +331,47 @@ function MoneyRequestConfirmPage(props) {
                             },
                         ]}
                     />
-                    {/*
-                     * The MoneyRequestConfirmationList component uses a SectionList which uses a VirtualizedList internally.
-                     * VirtualizedList cannot be directly nested within ScrollViews of the same orientation.
-                     * To work around this, we wrap the MoneyRequestConfirmationList component with a horizontal ScrollView.
-                     */}
-                    <ScrollView contentContainerStyle={[styles.flexGrow1]}>
-                        <ScrollView
-                            horizontal
-                            contentContainerStyle={[styles.flex1, styles.flexColumn]}
-                        >
-                            <MoneyRequestConfirmationList
-                                transactionID={props.iou.transactionID}
-                                hasMultipleParticipants={iouType.current === CONST.IOU.MONEY_REQUEST_TYPE.SPLIT}
-                                selectedParticipants={participants}
-                                iouAmount={props.iou.amount}
-                                iouComment={props.iou.comment}
-                                iouCurrencyCode={props.iou.currency}
-                                iouIsBillable={props.iou.billable}
-                                onToggleBillable={IOU.setMoneyRequestBillable}
-                                iouCategory={props.iou.category}
-                                iouTag={props.iou.tag}
-                                onConfirm={createTransaction}
-                                onSendMoney={sendMoney}
-                                onSelectParticipant={(option) => {
-                                    const newParticipants = _.map(props.iou.participants, (participant) => {
-                                        if (participant.accountID === option.accountID) {
-                                            return {...participant, selected: !participant.selected};
-                                        }
-                                        return participant;
-                                    });
-                                    IOU.setMoneyRequestParticipants(newParticipants);
-                                }}
-                                receiptPath={props.iou.receiptPath}
-                                receiptFilename={props.iou.receiptFilename}
-                                iouType={iouType.current}
-                                reportID={reportID.current}
-                                isPolicyExpenseChat={isPolicyExpenseChat}
-                                // The participants can only be modified when the action is initiated from directly within a group chat and not the floating-action-button.
-                                // This is because when there is a group of people, say they are on a trip, and you have some shared expenses with some of the people,
-                                // but not all of them (maybe someone skipped out on dinner). Then it's nice to be able to select/deselect people from the group chat bill
-                                // split rather than forcing the user to create a new group, just for that expense. The reportID is empty, when the action was initiated from
-                                // the floating-action-button (since it is something that exists outside the context of a report).
-                                canModifyParticipants={!_.isEmpty(reportID.current)}
-                                policyID={props.report.policyID}
-                                bankAccountRoute={ReportUtils.getBankAccountRoute(props.report)}
-                                iouMerchant={props.iou.merchant}
-                                iouCreated={props.iou.created}
-                                isDistanceRequest={isDistanceRequest}
-                                listStyles={[StyleUtils.getMaximumHeight(windowHeight / 3)]}
-                            />
-                        </ScrollView>
-                    </ScrollView>
+                    <MoneyRequestConfirmationList
+                        transactionID={props.iou.transactionID}
+                        hasMultipleParticipants={iouType.current === CONST.IOU.MONEY_REQUEST_TYPE.SPLIT}
+                        selectedParticipants={participants}
+                        iouAmount={props.iou.amount}
+                        iouComment={props.iou.comment}
+                        iouCurrencyCode={props.iou.currency}
+                        iouIsBillable={props.iou.billable}
+                        onToggleBillable={IOU.setMoneyRequestBillable}
+                        iouCategory={props.iou.category}
+                        iouTag={props.iou.tag}
+                        onConfirm={createTransaction}
+                        onSendMoney={sendMoney}
+                        onSelectParticipant={(option) => {
+                            const newParticipants = _.map(props.iou.participants, (participant) => {
+                                if (participant.accountID === option.accountID) {
+                                    return {...participant, selected: !participant.selected};
+                                }
+                                return participant;
+                            });
+                            IOU.setMoneyRequestParticipants(newParticipants);
+                        }}
+                        receiptPath={props.iou.receiptPath}
+                        receiptFilename={props.iou.receiptFilename}
+                        iouType={iouType.current}
+                        reportID={reportID.current}
+                        isPolicyExpenseChat={isPolicyExpenseChat}
+                        // The participants can only be modified when the action is initiated from directly within a group chat and not the floating-action-button.
+                        // This is because when there is a group of people, say they are on a trip, and you have some shared expenses with some of the people,
+                        // but not all of them (maybe someone skipped out on dinner). Then it's nice to be able to select/deselect people from the group chat bill
+                        // split rather than forcing the user to create a new group, just for that expense. The reportID is empty, when the action was initiated from
+                        // the floating-action-button (since it is something that exists outside the context of a report).
+                        canModifyParticipants={!_.isEmpty(reportID.current)}
+                        policyID={props.report.policyID}
+                        bankAccountRoute={ReportUtils.getBankAccountRoute(props.report)}
+                        iouMerchant={props.iou.merchant}
+                        iouCreated={props.iou.created}
+                        isScanRequest={isScanRequest}
+                        isDistanceRequest={isDistanceRequest}
+                        shouldShowSmartScanFields={_.isEmpty(props.iou.receiptPath)}
+                    />
                 </View>
             )}
         </ScreenWrapper>
diff --git a/src/pages/iou/steps/MoneyRequstParticipantsPage/MoneyRequestParticipantsPage.js b/src/pages/iou/steps/MoneyRequstParticipantsPage/MoneyRequestParticipantsPage.js
index bd3ea8a50402..25e41ba78556 100644
--- a/src/pages/iou/steps/MoneyRequstParticipantsPage/MoneyRequestParticipantsPage.js
+++ b/src/pages/iou/steps/MoneyRequstParticipantsPage/MoneyRequestParticipantsPage.js
@@ -50,6 +50,7 @@ function MoneyRequestParticipantsPage({iou, selectedTab, route}) {
     const iouType = useRef(lodashGet(route, 'params.iouType', ''));
     const reportID = useRef(lodashGet(route, 'params.reportID', ''));
     const isDistanceRequest = MoneyRequestUtils.isDistanceRequest(iouType.current, selectedTab);
+    const isSendRequest = iouType.current === CONST.IOU.MONEY_REQUEST_TYPE.SEND;
     const isScanRequest = MoneyRequestUtils.isScanRequest(selectedTab);
     const isSplitRequest = iou.id === CONST.IOU.MONEY_REQUEST_TYPE.SPLIT;
     const [headerTitle, setHeaderTitle] = useState();
@@ -60,8 +61,13 @@ function MoneyRequestParticipantsPage({iou, selectedTab, route}) {
             return;
         }
 
+        if (isSendRequest) {
+            setHeaderTitle(translate('common.send'));
+            return;
+        }
+
         setHeaderTitle(_.isEmpty(iou.participants) ? translate('tabSelector.manual') : translate('iou.split'));
-    }, [iou.participants, isDistanceRequest, translate]);
+    }, [iou.participants, isDistanceRequest, isSendRequest, translate]);
 
     const navigateToConfirmationStep = (moneyRequestType) => {
         IOU.setMoneyRequestId(moneyRequestType);
diff --git a/src/pages/iou/steps/MoneyRequstParticipantsPage/MoneyRequestParticipantsSelector.js b/src/pages/iou/steps/MoneyRequstParticipantsPage/MoneyRequestParticipantsSelector.js
index bedca1a10c35..547d2b7c363a 100755
--- a/src/pages/iou/steps/MoneyRequstParticipantsPage/MoneyRequestParticipantsSelector.js
+++ b/src/pages/iou/steps/MoneyRequstParticipantsPage/MoneyRequestParticipantsSelector.js
@@ -240,7 +240,7 @@ function MoneyRequestParticipantsSelector({
     // the app from crashing on native when you try to do this, we'll going to hide the button if you have a workspace and other participants
     const hasPolicyExpenseChatParticipant = _.some(participants, (participant) => participant.isPolicyExpenseChat);
     const shouldShowConfirmButton = !(participants.length > 1 && hasPolicyExpenseChatParticipant);
-    const isAllowedToSplit = !isDistanceRequest;
+    const isAllowedToSplit = !isDistanceRequest && iouType !== CONST.IOU.MONEY_REQUEST_TYPE.SEND;
 
     return (
         <View style={[styles.flex1, styles.w100, participants.length > 0 ? safeAreaPaddingBottomStyle : {}]}>
diff --git a/src/pages/settings/AboutPage/AboutPage.js b/src/pages/settings/AboutPage/AboutPage.js
index 78a300a38057..25b6197f87f8 100644
--- a/src/pages/settings/AboutPage/AboutPage.js
+++ b/src/pages/settings/AboutPage/AboutPage.js
@@ -21,7 +21,6 @@ import * as Link from '../../../libs/actions/Link';
 import compose from '../../../libs/compose';
 import * as ReportActionContextMenu from '../../home/report/ContextMenu/ReportActionContextMenu';
 import {CONTEXT_MENU_TYPES} from '../../home/report/ContextMenu/ContextMenuActions';
-import * as KeyboardShortcuts from '../../../libs/actions/KeyboardShortcuts';
 import * as Environment from '../../../libs/Environment/Environment';
 
 const propTypes = {
@@ -53,7 +52,9 @@ function AboutPage(props) {
         {
             translationKey: 'initialSettingsPage.aboutPage.viewKeyboardShortcuts',
             icon: Expensicons.Keyboard,
-            action: KeyboardShortcuts.showKeyboardShortcutModal,
+            action: () => {
+                Navigation.navigate(ROUTES.KEYBOARD_SHORTCUTS);
+            },
         },
         {
             translationKey: 'initialSettingsPage.aboutPage.viewTheCode',
diff --git a/src/pages/settings/Profile/PersonalDetails/DateOfBirthPage.js b/src/pages/settings/Profile/PersonalDetails/DateOfBirthPage.js
index 886a3949766d..68d81d64c604 100644
--- a/src/pages/settings/Profile/PersonalDetails/DateOfBirthPage.js
+++ b/src/pages/settings/Profile/PersonalDetails/DateOfBirthPage.js
@@ -6,7 +6,6 @@ import {subYears} from 'date-fns';
 import CONST from '../../../../CONST';
 import ONYXKEYS from '../../../../ONYXKEYS';
 import ROUTES from '../../../../ROUTES';
-import Form from '../../../../components/Form';
 import HeaderWithBackButton from '../../../../components/HeaderWithBackButton';
 import NewDatePicker from '../../../../components/NewDatePicker';
 import ScreenWrapper from '../../../../components/ScreenWrapper';
@@ -18,6 +17,7 @@ import compose from '../../../../libs/compose';
 import styles from '../../../../styles/styles';
 import usePrivatePersonalDetails from '../../../../hooks/usePrivatePersonalDetails';
 import FullscreenLoadingIndicator from '../../../../components/FullscreenLoadingIndicator';
+import FormProvider from '../../../../components/Form/FormProvider';
 
 const propTypes = {
     /* Onyx Props */
@@ -72,7 +72,7 @@ function DateOfBirthPage({translate, privatePersonalDetails}) {
             {isLoadingPersonalDetails ? (
                 <FullscreenLoadingIndicator style={[styles.flex1, styles.pRelative]} />
             ) : (
-                <Form
+                <FormProvider
                     style={[styles.flexGrow1, styles.ph5]}
                     formID={ONYXKEYS.FORMS.DATE_OF_BIRTH_FORM}
                     validate={validate}
@@ -87,7 +87,7 @@ function DateOfBirthPage({translate, privatePersonalDetails}) {
                         minDate={subYears(new Date(), CONST.DATE_BIRTH.MAX_AGE)}
                         maxDate={subYears(new Date(), CONST.DATE_BIRTH.MIN_AGE)}
                     />
-                </Form>
+                </FormProvider>
             )}
         </ScreenWrapper>
     );
diff --git a/src/pages/settings/Report/NotificationPreferencePage.js b/src/pages/settings/Report/NotificationPreferencePage.js
index 7dc9ff7773de..64e6bdfb4b5b 100644
--- a/src/pages/settings/Report/NotificationPreferencePage.js
+++ b/src/pages/settings/Report/NotificationPreferencePage.js
@@ -3,8 +3,6 @@ import _ from 'underscore';
 import ScreenWrapper from '../../../components/ScreenWrapper';
 import HeaderWithBackButton from '../../../components/HeaderWithBackButton';
 import withLocalize, {withLocalizePropTypes} from '../../../components/withLocalize';
-import styles from '../../../styles/styles';
-import OptionsList from '../../../components/OptionsList';
 import Navigation from '../../../libs/Navigation/Navigation';
 import compose from '../../../libs/compose';
 import withReportOrNotFound from '../../home/report/withReportOrNotFound';
@@ -14,8 +12,7 @@ import ROUTES from '../../../ROUTES';
 import CONST from '../../../CONST';
 import * as Report from '../../../libs/actions/Report';
 import * as ReportUtils from '../../../libs/ReportUtils';
-import * as Expensicons from '../../../components/Icon/Expensicons';
-import themeColors from '../../../styles/themes/default';
+import SelectionList from '../../../components/SelectionList';
 
 const propTypes = {
     ...withLocalizePropTypes,
@@ -23,7 +20,6 @@ const propTypes = {
     /** The report for which we are setting notification preferences */
     report: reportPropTypes.isRequired,
 };
-const greenCheckmark = {src: Expensicons.Checkmark, color: themeColors.success};
 
 function NotificationPreferencePage(props) {
     const shouldDisableNotificationPreferences = ReportUtils.isArchivedRoom(props.report);
@@ -33,12 +29,7 @@ function NotificationPreferencePage(props) {
             value: preference,
             text: props.translate(`notificationPreferencesPage.notificationPreferences.${preference}`),
             keyForList: preference,
-
-            // Include the green checkmark icon to indicate the currently selected value
-            customIcon: preference === props.report.notificationPreference ? greenCheckmark : null,
-
-            // This property will make the currently selected value have bold text
-            boldStyle: preference === props.report.notificationPreference,
+            isSelected: preference === props.report.notificationPreference,
         }),
     );
 
@@ -52,18 +43,10 @@ function NotificationPreferencePage(props) {
                     title={props.translate('notificationPreferencesPage.header')}
                     onBackButtonPress={() => Navigation.goBack(ROUTES.REPORT_SETTINGS.getRoute(props.report.reportID))}
                 />
-                <OptionsList
+                <SelectionList
                     sections={[{data: notificationPreferenceOptions}]}
                     onSelectRow={(option) => Report.updateNotificationPreference(props.report.reportID, props.report.notificationPreference, option.value, true)}
-                    hideSectionHeaders
-                    optionHoveredStyle={{
-                        ...styles.hoveredComponentBG,
-                        ...styles.mhn5,
-                        ...styles.ph5,
-                    }}
-                    shouldHaveOptionSeparator
-                    shouldDisableRowInnerPadding
-                    contentContainerStyles={[styles.ph5]}
+                    initiallyFocusedOptionKey={_.find(notificationPreferenceOptions, (locale) => locale.isSelected).keyForList}
                 />
             </FullPageNotFoundView>
         </ScreenWrapper>
diff --git a/src/pages/settings/Report/WriteCapabilityPage.js b/src/pages/settings/Report/WriteCapabilityPage.js
index 9c4814902117..1558d98a830a 100644
--- a/src/pages/settings/Report/WriteCapabilityPage.js
+++ b/src/pages/settings/Report/WriteCapabilityPage.js
@@ -6,20 +6,17 @@ import CONST from '../../../CONST';
 import ScreenWrapper from '../../../components/ScreenWrapper';
 import HeaderWithBackButton from '../../../components/HeaderWithBackButton';
 import withLocalize, {withLocalizePropTypes} from '../../../components/withLocalize';
-import styles from '../../../styles/styles';
-import OptionsList from '../../../components/OptionsList';
 import Navigation from '../../../libs/Navigation/Navigation';
 import compose from '../../../libs/compose';
 import withReportOrNotFound from '../../home/report/withReportOrNotFound';
 import reportPropTypes from '../../reportPropTypes';
 import ROUTES from '../../../ROUTES';
 import * as Report from '../../../libs/actions/Report';
-import * as Expensicons from '../../../components/Icon/Expensicons';
-import themeColors from '../../../styles/themes/default';
 import * as ReportUtils from '../../../libs/ReportUtils';
 import FullPageNotFoundView from '../../../components/BlockingViews/FullPageNotFoundView';
 import * as PolicyUtils from '../../../libs/PolicyUtils';
 import {policyPropTypes, policyDefaultProps} from '../../workspace/withPolicy';
+import SelectionList from '../../../components/SelectionList';
 
 const propTypes = {
     ...withLocalizePropTypes,
@@ -33,19 +30,12 @@ const defaultProps = {
     ...policyDefaultProps,
 };
 
-const greenCheckmark = {src: Expensicons.Checkmark, color: themeColors.success};
-
 function WriteCapabilityPage(props) {
     const writeCapabilityOptions = _.map(CONST.REPORT.WRITE_CAPABILITIES, (value) => ({
         value,
         text: props.translate(`writeCapabilityPage.writeCapability.${value}`),
         keyForList: value,
-
-        // Include the green checkmark icon to indicate the currently selected value
-        customIcon: value === (props.report.writeCapability || CONST.REPORT.WRITE_CAPABILITIES.ALL) ? greenCheckmark : null,
-
-        // This property will make the currently selected value have bold text
-        boldStyle: value === (props.report.writeCapability || CONST.REPORT.WRITE_CAPABILITIES.ALL),
+        isSelected: value === (props.report.writeCapability || CONST.REPORT.WRITE_CAPABILITIES.ALL),
     }));
 
     const isAbleToEdit = !ReportUtils.isAdminRoom(props.report) && PolicyUtils.isPolicyAdmin(props.policy) && !ReportUtils.isArchivedRoom(props.report);
@@ -61,18 +51,10 @@ function WriteCapabilityPage(props) {
                     shouldShowBackButton
                     onBackButtonPress={() => Navigation.goBack(ROUTES.REPORT_SETTINGS.getRoute(props.report.reportID))}
                 />
-                <OptionsList
+                <SelectionList
                     sections={[{data: writeCapabilityOptions}]}
                     onSelectRow={(option) => Report.updateWriteCapabilityAndNavigate(props.report, option.value)}
-                    hideSectionHeaders
-                    optionHoveredStyle={{
-                        ...styles.hoveredComponentBG,
-                        ...styles.mhn5,
-                        ...styles.ph5,
-                    }}
-                    shouldHaveOptionSeparator
-                    shouldDisableRowInnerPadding
-                    contentContainerStyles={[styles.ph5]}
+                    initiallyFocusedOptionKey={_.find(writeCapabilityOptions, (locale) => locale.isSelected).keyForList}
                 />
             </FullPageNotFoundView>
         </ScreenWrapper>
diff --git a/src/pages/settings/Security/TwoFactorAuth/Steps/VerifyStep.js b/src/pages/settings/Security/TwoFactorAuth/Steps/VerifyStep.js
index 7783b6c58ace..560a395e6844 100644
--- a/src/pages/settings/Security/TwoFactorAuth/Steps/VerifyStep.js
+++ b/src/pages/settings/Security/TwoFactorAuth/Steps/VerifyStep.js
@@ -39,6 +39,9 @@ function VerifyStep({account, session}) {
 
     useEffect(() => {
         Session.clearAccountMessages();
+        return () => {
+            Session.clearAccountMessages();
+        };
     }, []);
 
     useEffect(() => {
diff --git a/src/pages/settings/Wallet/PaymentMethodList.js b/src/pages/settings/Wallet/PaymentMethodList.js
index d757db370b05..2943fa9544ae 100644
--- a/src/pages/settings/Wallet/PaymentMethodList.js
+++ b/src/pages/settings/Wallet/PaymentMethodList.js
@@ -22,6 +22,11 @@ import FormAlertWrapper from '../../../components/FormAlertWrapper';
 import OfflineWithFeedback from '../../../components/OfflineWithFeedback';
 import * as PaymentMethods from '../../../libs/actions/PaymentMethods';
 import Log from '../../../libs/Log';
+import stylePropTypes from '../../../styles/stylePropTypes';
+import Navigation from '../../../libs/Navigation/Navigation';
+import ROUTES from '../../../ROUTES';
+import getBankIcon from '../../../components/Icon/BankIcons';
+import assignedCardPropTypes from './assignedCardPropTypes';
 
 const propTypes = {
     /** What to do when a menu item is pressed */
@@ -30,12 +35,24 @@ const propTypes = {
     /** List of bank accounts */
     bankAccountList: PropTypes.objectOf(bankAccountPropTypes),
 
+    /** List of assigned cards */
+    cardList: PropTypes.objectOf(assignedCardPropTypes),
+
     /** List of user's cards */
     fundList: PropTypes.objectOf(cardPropTypes),
 
+    /** Whether the add bank account button should be shown on the list */
+    shouldShowAddBankAccount: PropTypes.bool,
+
     /** Whether the add Payment button be shown on the list */
     shouldShowAddPaymentMethodButton: PropTypes.bool,
 
+    /** Whether the assigned cards should be shown on the list */
+    shouldShowAssignedCards: PropTypes.bool,
+
+    /** Whether the empty list message should be shown when the list is empty */
+    shouldShowEmptyListMessage: PropTypes.bool,
+
     /** Are we loading payment methods? */
     isLoadingPaymentMethods: PropTypes.bool,
 
@@ -69,18 +86,28 @@ const propTypes = {
     /** React ref being forwarded to the PaymentMethodList Button */
     buttonRef: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),
 
+    /** To enable/disable scrolling */
+    shouldEnableScroll: PropTypes.bool,
+
+    /** List container style */
+    style: stylePropTypes,
+
     ...withLocalizePropTypes,
 };
 
 const defaultProps = {
     bankAccountList: {},
+    cardList: {},
     fundList: null,
     userWallet: {
         walletLinkedAccountID: 0,
         walletLinkedAccountType: '',
     },
     isLoadingPaymentMethods: true,
+    shouldShowAddBankAccount: true,
     shouldShowAddPaymentMethodButton: true,
+    shouldShowAssignedCards: false,
+    shouldShowEmptyListMessage: true,
     filterType: '',
     actionPaymentMethodType: '',
     activePaymentMethodID: '',
@@ -88,6 +115,8 @@ const defaultProps = {
     listHeaderComponent: null,
     buttonRef: () => {},
     onListContentSizeChange: () => {},
+    shouldEnableScroll: true,
+    style: {},
 };
 
 /**
@@ -143,11 +172,46 @@ function shouldShowDefaultBadge(filteredPaymentMethods, isDefault = false) {
 function isPaymentMethodActive(actionPaymentMethodType, activePaymentMethodID, paymentMethod) {
     return paymentMethod.accountType === actionPaymentMethodType && paymentMethod.methodID === activePaymentMethodID;
 }
-function PaymentMethodList(props) {
-    const {actionPaymentMethodType, activePaymentMethodID, bankAccountList, fundList, filterType, network, onPress, shouldShowSelectedState, selectedMethodID, translate} = props;
-
+function PaymentMethodList({
+    actionPaymentMethodType,
+    activePaymentMethodID,
+    bankAccountList,
+    buttonRef,
+    cardList,
+    fundList,
+    filterType,
+    isLoadingPaymentMethods,
+    listHeaderComponent,
+    network,
+    onListContentSizeChange,
+    onPress,
+    shouldEnableScroll,
+    shouldShowSelectedState,
+    shouldShowAddPaymentMethodButton,
+    shouldShowAddBankAccount,
+    shouldShowEmptyListMessage,
+    shouldShowAssignedCards,
+    selectedMethodID,
+    style,
+    translate,
+}) {
     const filteredPaymentMethods = useMemo(() => {
         const paymentCardList = fundList || {};
+
+        if (shouldShowAssignedCards) {
+            const assignedCards = _.filter(cardList, (card) => CONST.EXPENSIFY_CARD.ACTIVE_STATES.includes(card.state));
+            return _.map(assignedCards, (card) => {
+                const icon = getBankIcon(card.bank);
+                return {
+                    key: card.key,
+                    title: translate('walletPage.expensifyCard'),
+                    description: card.domainName,
+                    onPress: () => Navigation.navigate(ROUTES.SETTINGS_WALLET_DOMAINCARDS.getRoute(card.domainName)),
+                    ...icon,
+                };
+            });
+        }
+
         // Hide any billing cards that are not P2P debit cards for now because you cannot make them your default method, or delete them
         const filteredCardList = _.filter(paymentCardList, (card) => card.accountData.additionalData.isP2PDebitCard);
         let combinedPaymentMethods = PaymentUtils.formatPaymentMethods(bankAccountList, filteredCardList);
@@ -174,14 +238,26 @@ function PaymentMethodList(props) {
         }));
 
         return combinedPaymentMethods;
-    }, [actionPaymentMethodType, activePaymentMethodID, bankAccountList, filterType, network, onPress, fundList]);
+    }, [fundList, shouldShowAssignedCards, bankAccountList, filterType, network.isOffline, cardList, translate, actionPaymentMethodType, activePaymentMethodID, onPress]);
 
     /**
      * Render placeholder when there are no payments methods
      *
      * @return {React.Component}
      */
-    const renderListEmptyComponent = useCallback(() => <Text style={[styles.popoverMenuItem]}>{translate('paymentMethodList.addFirstPaymentMethod')}</Text>, [translate]);
+    const renderListEmptyComponent = () => <Text style={[styles.popoverMenuItem]}>{translate('paymentMethodList.addFirstPaymentMethod')}</Text>;
+
+    const renderListFooterComponent = useCallback(
+        () => (
+            <MenuItem
+                onPress={onPress}
+                title={translate('walletPage.addBankAccount')}
+                icon={Expensicons.Plus}
+                wrapperStyle={styles.paymentMethod}
+            />
+        ),
+        [onPress, translate],
+    );
 
     /**
      * Create a menuItem for each passed paymentMethod
@@ -209,13 +285,14 @@ function PaymentMethodList(props) {
                     iconHeight={item.iconSize}
                     iconWidth={item.iconSize}
                     badgeText={shouldShowDefaultBadge(filteredPaymentMethods, item.isDefault) ? translate('paymentMethodList.defaultPaymentMethod') : null}
-                    wrapperStyle={item.wrapperStyle}
+                    wrapperStyle={styles.paymentMethod}
+                    shouldShowRightIcon={shouldShowAssignedCards}
                     shouldShowSelectedState={shouldShowSelectedState}
                     isSelected={selectedMethodID === item.methodID}
                 />
             </OfflineWithFeedback>
         ),
-        [shouldShowSelectedState, selectedMethodID, filteredPaymentMethods, translate],
+        [filteredPaymentMethods, translate, shouldShowAssignedCards, shouldShowSelectedState, selectedMethodID],
     );
 
     return (
@@ -224,25 +301,28 @@ function PaymentMethodList(props) {
                 data={filteredPaymentMethods}
                 renderItem={renderItem}
                 keyExtractor={(item) => item.key}
-                ListEmptyComponent={renderListEmptyComponent(translate)}
-                ListHeaderComponent={props.listHeaderComponent}
-                onContentSizeChange={props.onListContentSizeChange}
+                ListEmptyComponent={shouldShowEmptyListMessage ? renderListEmptyComponent : null}
+                ListHeaderComponent={listHeaderComponent}
+                ListFooterComponent={shouldShowAddBankAccount ? renderListFooterComponent : null}
+                onContentSizeChange={onListContentSizeChange}
+                scrollEnabled={shouldEnableScroll}
+                style={style}
             />
-            {props.shouldShowAddPaymentMethodButton && (
+            {shouldShowAddPaymentMethodButton && (
                 <FormAlertWrapper>
                     {(isOffline) => (
                         <Button
                             text={translate('paymentMethodList.addPaymentMethod')}
                             icon={Expensicons.CreditCard}
-                            onPress={props.onPress}
-                            isDisabled={props.isLoadingPaymentMethods || isOffline}
+                            onPress={onPress}
+                            isDisabled={isLoadingPaymentMethods || isOffline}
                             style={[styles.mh4, styles.buttonCTA]}
                             iconStyles={[styles.buttonCTAIcon]}
                             key="addPaymentMethodButton"
                             success
                             shouldShowRightIcon
                             large
-                            ref={props.buttonRef}
+                            ref={buttonRef}
                         />
                     )}
                 </FormAlertWrapper>
@@ -262,6 +342,9 @@ export default compose(
         bankAccountList: {
             key: ONYXKEYS.BANK_ACCOUNT_LIST,
         },
+        cardList: {
+            key: ONYXKEYS.CARD_LIST,
+        },
         fundList: {
             key: ONYXKEYS.FUND_LIST,
         },
diff --git a/src/pages/settings/Wallet/WalletEmptyState.js b/src/pages/settings/Wallet/WalletEmptyState.js
new file mode 100644
index 000000000000..adfd2cf49cee
--- /dev/null
+++ b/src/pages/settings/Wallet/WalletEmptyState.js
@@ -0,0 +1,62 @@
+import React from 'react';
+import PropTypes from 'prop-types';
+import IllustratedHeaderPageLayout from '../../../components/IllustratedHeaderPageLayout';
+import useLocalize from '../../../hooks/useLocalize';
+import * as LottieAnimations from '../../../components/LottieAnimations';
+import Button from '../../../components/Button';
+import Navigation from '../../../libs/Navigation/Navigation';
+import ROUTES from '../../../ROUTES';
+import * as Illustrations from '../../../components/Icon/Illustrations';
+import FeatureList from '../../../components/FeatureList';
+import themeColors from '../../../styles/themes/default';
+
+const propTypes = {
+    /** The function that is called when a menu item is pressed */
+    onAddPaymentMethod: PropTypes.func.isRequired,
+};
+
+const WALLET_FEATURES = [
+    {
+        icon: Illustrations.MoneyIntoWallet,
+        translationKey: 'walletPage.getPaidBackFaster',
+    },
+    {
+        icon: Illustrations.OpenSafe,
+        translationKey: 'walletPage.secureAccessToYourMoney',
+    },
+    {
+        icon: Illustrations.HandEarth,
+        translationKey: 'walletPage.receiveMoney',
+    },
+];
+
+function WalletEmptyState({onAddPaymentMethod}) {
+    const {translate} = useLocalize();
+    return (
+        <IllustratedHeaderPageLayout
+            backgroundColor={themeColors.walletPageBG}
+            illustration={LottieAnimations.FastMoney}
+            onBackButtonPress={() => Navigation.goBack(ROUTES.SETTINGS)}
+            title={translate('common.wallet')}
+            footer={
+                <Button
+                    accessibilityLabel={translate('paymentMethodList.addPaymentMethod')}
+                    success
+                    text={translate('paymentMethodList.addPaymentMethod')}
+                    onPress={onAddPaymentMethod}
+                />
+            }
+        >
+            <FeatureList
+                menuItems={WALLET_FEATURES}
+                headline="walletPage.getPaidFaster"
+                description="walletPage.addPaymentMethod"
+            />
+        </IllustratedHeaderPageLayout>
+    );
+}
+
+WalletEmptyState.displayName = 'WalletEmptyState';
+WalletEmptyState.propTypes = propTypes;
+
+export default WalletEmptyState;
diff --git a/src/pages/settings/Wallet/WalletPage/BaseWalletPage.js b/src/pages/settings/Wallet/WalletPage/WalletPage.js
similarity index 50%
rename from src/pages/settings/Wallet/WalletPage/BaseWalletPage.js
rename to src/pages/settings/Wallet/WalletPage/WalletPage.js
index 2b53f96df010..ec9ff537189e 100644
--- a/src/pages/settings/Wallet/WalletPage/BaseWalletPage.js
+++ b/src/pages/settings/Wallet/WalletPage/WalletPage.js
@@ -1,18 +1,17 @@
 import React, {useCallback, useEffect, useState, useRef} from 'react';
-import {ActivityIndicator, View, InteractionManager} from 'react-native';
+import {ActivityIndicator, View, InteractionManager, ScrollView} from 'react-native';
 import {withOnyx} from 'react-native-onyx';
 import _ from 'underscore';
 import PaymentMethodList from '../PaymentMethodList';
 import ROUTES from '../../../../ROUTES';
 import HeaderWithBackButton from '../../../../components/HeaderWithBackButton';
 import ScreenWrapper from '../../../../components/ScreenWrapper';
-import Navigation from '../../../../libs/Navigation/Navigation';
+import Navigation, {navigationRef} from '../../../../libs/Navigation/Navigation';
 import styles from '../../../../styles/styles';
 import compose from '../../../../libs/compose';
 import * as BankAccounts from '../../../../libs/actions/BankAccounts';
 import Popover from '../../../../components/Popover';
 import MenuItem from '../../../../components/MenuItem';
-import Text from '../../../../components/Text';
 import * as PaymentMethods from '../../../../libs/actions/PaymentMethods';
 import getClickedTargetLocation from '../../../../libs/getClickedTargetLocation';
 import CurrentWalletBalance from '../../../../components/CurrentWalletBalance';
@@ -32,8 +31,11 @@ import themeColors from '../../../../styles/themes/default';
 import variables from '../../../../styles/variables';
 import useLocalize from '../../../../hooks/useLocalize';
 import useWindowDimensions from '../../../../hooks/useWindowDimensions';
+import WalletEmptyState from '../WalletEmptyState';
+import * as Illustrations from '../../../../components/Icon/Illustrations';
+import WalletSection from '../../../../components/WalletSection';
 
-function BaseWalletPage(props) {
+function WalletPage({bankAccountList, betas, cardList, fundList, isLoadingPaymentMethods, network, shouldListenForResize, userWallet, walletTerms}) {
     const {translate} = useLocalize();
     const {isSmallScreenWidth, windowWidth} = useWindowDimensions();
     const [shouldShowAddPaymentMenu, setShouldShowAddPaymentMenu] = useState(false);
@@ -58,13 +60,18 @@ function BaseWalletPage(props) {
     });
     const [showConfirmDeleteContent, setShowConfirmDeleteContent] = useState(false);
 
+    const hasBankAccount = !_.isEmpty(bankAccountList) || !_.isEmpty(fundList);
+    const hasWallet = userWallet.walletLinkedAccountID > 0;
+    const hasAssignedCard = !_.isEmpty(cardList);
+    const shouldShowEmptyState = !hasBankAccount && !hasWallet && !hasAssignedCard;
+
     const updateShouldShowLoadingSpinner = useCallback(() => {
         // In order to prevent a loop, only update state of the spinner if there is a change
-        const showLoadingSpinner = props.isLoadingPaymentMethods || false;
+        const showLoadingSpinner = isLoadingPaymentMethods || false;
         if (showLoadingSpinner !== shouldShowLoadingSpinner) {
-            setShouldShowLoadingSpinner(props.isLoadingPaymentMethods && !props.network.isOffline);
+            setShouldShowLoadingSpinner(isLoadingPaymentMethods && !network.isOffline);
         }
-    }, [props.isLoadingPaymentMethods, props.network.isOffline, shouldShowLoadingSpinner]);
+    }, [isLoadingPaymentMethods, network.isOffline, shouldShowLoadingSpinner]);
 
     const debounceSetShouldShowLoadingSpinner = _.debounce(updateShouldShowLoadingSpinner, CONST.TIMING.SHOW_LOADING_SPINNER_DEBOUNCE_TIME);
 
@@ -82,13 +89,12 @@ function BaseWalletPage(props) {
 
         setAnchorPosition({
             anchorPositionTop: position.top + position.height + variables.addPaymentPopoverTopSpacing,
-
-            // We want the position to be 13px to the right of the left border
-            anchorPositionRight: windowWidth - position.right + variables.addPaymentPopoverRightSpacing,
-            anchorPositionHorizontal: position.x,
+            // We want the position to be 23px to the right of the left border
+            anchorPositionRight: windowWidth - position.right - variables.addBankAccountLeftSpacing,
+            anchorPositionHorizontal: position.x + (shouldShowEmptyState ? -variables.addPaymentMethodLeftSpacing : variables.addBankAccountLeftSpacing),
             anchorPositionVertical: position.y,
         });
-    }, [windowWidth]);
+    }, [shouldShowEmptyState, windowWidth]);
 
     const getSelectedPaymentMethodID = useCallback(() => {
         if (paymentMethod.selectedPaymentMethodType === CONST.PAYMENT_METHODS.BANK_ACCOUNT) {
@@ -207,9 +213,9 @@ function BaseWalletPage(props) {
     }, [setShouldShowDefaultDeleteMenu, setShowConfirmDeleteContent]);
 
     const makeDefaultPaymentMethod = useCallback(() => {
-        const paymentCardList = props.fundList || {};
+        const paymentCardList = fundList || {};
         // Find the previous default payment method so we can revert if the MakeDefaultPaymentMethod command errors
-        const paymentMethods = PaymentUtils.formatPaymentMethods(props.bankAccountList, paymentCardList);
+        const paymentMethods = PaymentUtils.formatPaymentMethods(bankAccountList, paymentCardList);
 
         const previousPaymentMethod = _.find(paymentMethods, (method) => method.isDefault);
         const currentPaymentMethod = _.find(paymentMethods, (method) => method.methodID === paymentMethod.methodID);
@@ -223,8 +229,8 @@ function BaseWalletPage(props) {
         paymentMethod.selectedPaymentMethod.bankAccountID,
         paymentMethod.selectedPaymentMethod.fundID,
         paymentMethod.selectedPaymentMethodType,
-        props.bankAccountList,
-        props.fundList,
+        bankAccountList,
+        fundList,
     ]);
 
     const deletePaymentMethod = useCallback(() => {
@@ -239,87 +245,32 @@ function BaseWalletPage(props) {
         Navigation.navigate(ROUTES.SETTINGS_WALLET_TRANSFER_BALANCE);
     };
 
-    const listHeaderComponent = useCallback(
-        () => (
-            <>
-                {Permissions.canUseWallet(props.betas) && (
-                    <>
-                        <View style={[styles.mv5]}>
-                            {shouldShowLoadingSpinner ? (
-                                <ActivityIndicator
-                                    color={themeColors.spinner}
-                                    size="large"
-                                />
-                            ) : (
-                                <OfflineWithFeedback
-                                    pendingAction={CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD}
-                                    errors={props.walletTerms.errors}
-                                    onClose={PaymentMethods.clearWalletTermsError}
-                                    errorRowStyles={[styles.ml10, styles.mr2]}
-                                >
-                                    <CurrentWalletBalance />
-                                </OfflineWithFeedback>
-                            )}
-                        </View>
-                        {props.userWallet.currentBalance > 0 && (
-                            <View style={styles.mb3}>
-                                <KYCWall
-                                    onSuccessfulKYC={navigateToTransferBalancePage}
-                                    enablePaymentsRoute={ROUTES.SETTINGS_ENABLE_PAYMENTS}
-                                    addBankAccountRoute={ROUTES.SETTINGS_ADD_BANK_ACCOUNT}
-                                    addDebitCardRoute={ROUTES.SETTINGS_ADD_DEBIT_CARD}
-                                    anchorAlignment={{
-                                        horizontal: CONST.MODAL.ANCHOR_ORIGIN_HORIZONTAL.LEFT,
-                                        vertical: CONST.MODAL.ANCHOR_ORIGIN_VERTICAL.TOP,
-                                    }}
-                                >
-                                    {(triggerKYCFlow, buttonRef) => (
-                                        <MenuItem
-                                            ref={buttonRef}
-                                            title={translate('common.transferBalance')}
-                                            icon={Expensicons.Transfer}
-                                            onPress={triggerKYCFlow}
-                                            shouldShowRightIcon
-                                            disabled={props.network.isOffline}
-                                        />
-                                    )}
-                                </KYCWall>
-                            </View>
-                        )}
-                    </>
-                )}
-                <Text style={[styles.ph5, styles.textLabelSupporting, styles.mb1]}>{translate('walletPage.paymentMethodsTitle')}</Text>
-            </>
-        ),
-        [props.betas, props.network.isOffline, props.userWallet.currentBalance, props.walletTerms.errors, shouldShowLoadingSpinner, translate],
-    );
-
     useEffect(() => {
         PaymentMethods.openWalletPage();
     }, []);
 
     useEffect(() => {
         // If the user was previously offline, skip debouncing showing the loader
-        if (!props.network.isOffline) {
+        if (!network.isOffline) {
             updateShouldShowLoadingSpinner();
         } else {
             debounceSetShouldShowLoadingSpinner();
         }
-    }, [props.network.isOffline, debounceSetShouldShowLoadingSpinner, updateShouldShowLoadingSpinner]);
+    }, [network.isOffline, debounceSetShouldShowLoadingSpinner, updateShouldShowLoadingSpinner]);
 
     useEffect(() => {
-        if (props.network.isOffline) {
+        if (network.isOffline) {
             return;
         }
         PaymentMethods.openWalletPage();
-    }, [props.network.isOffline]);
+    }, [network.isOffline]);
 
     useEffect(() => {
-        if (!props.shouldListenForResize) {
+        if (!shouldListenForResize) {
             return;
         }
         setMenuPosition();
-    }, [props.shouldListenForResize, setMenuPosition]);
+    }, [shouldListenForResize, setMenuPosition]);
 
     useEffect(() => {
         if (!shouldShowDefaultDeleteMenu) {
@@ -329,9 +280,9 @@ function BaseWalletPage(props) {
         // We should reset selected payment method state values and close corresponding modals if the selected payment method is deleted
         let shouldResetPaymentMethodData = false;
 
-        if (paymentMethod.selectedPaymentMethodType === CONST.PAYMENT_METHODS.BANK_ACCOUNT && _.isEmpty(props.bankAccountList[paymentMethod.methodID])) {
+        if (paymentMethod.selectedPaymentMethodType === CONST.PAYMENT_METHODS.BANK_ACCOUNT && _.isEmpty(bankAccountList[paymentMethod.methodID])) {
             shouldResetPaymentMethodData = true;
-        } else if (paymentMethod.selectedPaymentMethodType === CONST.PAYMENT_METHODS.DEBIT_CARD && _.isEmpty(props.fundList[paymentMethod.methodID])) {
+        } else if (paymentMethod.selectedPaymentMethodType === CONST.PAYMENT_METHODS.DEBIT_CARD && _.isEmpty(fundList[paymentMethod.methodID])) {
             shouldResetPaymentMethodData = true;
         }
         if (shouldResetPaymentMethodData) {
@@ -340,42 +291,193 @@ function BaseWalletPage(props) {
                 hideDefaultDeleteMenu();
             }
         }
-    }, [hideDefaultDeleteMenu, paymentMethod.methodID, paymentMethod.selectedPaymentMethodType, props.bankAccountList, props.fundList, shouldShowDefaultDeleteMenu]);
+    }, [hideDefaultDeleteMenu, paymentMethod.methodID, paymentMethod.selectedPaymentMethodType, bankAccountList, fundList, shouldShowDefaultDeleteMenu]);
+
+    useEffect(() => {
+        if (!shouldShowEmptyState) {
+            return;
+        }
+        navigationRef.setParams({backgroundColor: themeColors.walletPageBG});
+    }, [shouldShowEmptyState]);
 
     const shouldShowMakeDefaultButton =
         !paymentMethod.isSelectedPaymentMethodDefault &&
-        Permissions.canUseWallet(props.betas) &&
+        Permissions.canUseWallet(betas) &&
         !(paymentMethod.formattedSelectedPaymentMethod.type === CONST.PAYMENT_METHODS.BANK_ACCOUNT && paymentMethod.selectedPaymentMethod.type === CONST.BANK_ACCOUNT.TYPE.BUSINESS);
 
     // Determines whether or not the modal popup is mounted from the bottom of the screen instead of the side mount on Web or Desktop screens
     const isPopoverBottomMount = anchorPosition.anchorPositionTop === 0 || isSmallScreenWidth;
 
     return (
-        <ScreenWrapper testID={BaseWalletPage.displayName}>
-            <HeaderWithBackButton
-                title={translate('common.wallet')}
-                onBackButtonPress={() => Navigation.goBack(ROUTES.SETTINGS)}
-            />
-            <View style={[styles.flex1, styles.mb4]}>
-                <OfflineWithFeedback
-                    style={styles.flex1}
-                    contentContainerStyle={styles.flex1}
-                    onClose={() => PaymentMethods.clearWalletError()}
-                    errors={props.userWallet.errors}
-                    errorRowStyles={[styles.ph6]}
-                >
-                    <PaymentMethodList
-                        onPress={paymentMethodPressed}
-                        style={[styles.flex4]}
-                        isAddPaymentMenuActive={shouldShowAddPaymentMenu}
-                        actionPaymentMethodType={shouldShowDefaultDeleteMenu ? paymentMethod.selectedPaymentMethodType : ''}
-                        activePaymentMethodID={shouldShowDefaultDeleteMenu ? getSelectedPaymentMethodID() : ''}
-                        listHeaderComponent={listHeaderComponent}
-                        buttonRef={addPaymentMethodAnchorRef}
-                        onListContentSizeChange={shouldShowAddPaymentMenu || shouldShowDefaultDeleteMenu ? setMenuPosition : () => {}}
+        <>
+            {shouldShowEmptyState ? (
+                <WalletEmptyState onAddPaymentMethod={paymentMethodPressed} />
+            ) : (
+                <ScreenWrapper testID={WalletPage.displayName}>
+                    <HeaderWithBackButton
+                        title={translate('common.wallet')}
+                        onBackButtonPress={() => Navigation.goBack(ROUTES.SETTINGS)}
                     />
-                </OfflineWithFeedback>
-            </View>
+                    <View style={[styles.flex1, styles.mb4]}>
+                        <ScrollView>
+                            <OfflineWithFeedback
+                                style={styles.flex1}
+                                contentContainerStyle={styles.flex1}
+                                onClose={PaymentMethods.clearWalletError}
+                                errors={userWallet.errors}
+                                errorRowStyles={[styles.ph6]}
+                            >
+                                {hasWallet && (
+                                    <WalletSection
+                                        icon={Illustrations.MoneyIntoWallet}
+                                        subtitle={translate('walletPage.sendAndReceiveMoney')}
+                                        title={translate('walletPage.expensifyWallet')}
+                                    >
+                                        <>
+                                            {shouldShowLoadingSpinner ? (
+                                                <ActivityIndicator
+                                                    color={themeColors.spinner}
+                                                    size={CONST.ACTIVITY_INDICATOR_SIZE.LARGE}
+                                                    style={[styles.mt7, styles.mb5]}
+                                                />
+                                            ) : (
+                                                <OfflineWithFeedback
+                                                    pendingAction={CONST.RED_BRICK_ROAD_PENDING_ACTION.ADD}
+                                                    errors={walletTerms.errors}
+                                                    onClose={PaymentMethods.clearWalletTermsError}
+                                                    errorRowStyles={[styles.ml10, styles.mr2]}
+                                                    style={[styles.mt7, styles.mb5]}
+                                                >
+                                                    <CurrentWalletBalance balanceStyles={[styles.walletBalance]} />
+                                                </OfflineWithFeedback>
+                                            )}
+                                            <KYCWall
+                                                onSuccessfulKYC={navigateToTransferBalancePage}
+                                                enablePaymentsRoute={ROUTES.SETTINGS_ENABLE_PAYMENTS}
+                                                addBankAccountRoute={ROUTES.SETTINGS_ADD_BANK_ACCOUNT}
+                                                addDebitCardRoute={ROUTES.SETTINGS_ADD_DEBIT_CARD}
+                                                popoverPlacement="bottom"
+                                            >
+                                                {(triggerKYCFlow, buttonRef) => (
+                                                    <MenuItem
+                                                        ref={buttonRef}
+                                                        title={translate('common.transferBalance')}
+                                                        icon={Expensicons.Transfer}
+                                                        onPress={triggerKYCFlow}
+                                                        shouldShowRightIcon
+                                                        disabled={network.isOffline}
+                                                        wrapperStyle={styles.transferBalance}
+                                                    />
+                                                )}
+                                            </KYCWall>
+                                        </>
+                                    </WalletSection>
+                                )}
+                                {hasAssignedCard ? (
+                                    <WalletSection
+                                        icon={Illustrations.CreditCardsNew}
+                                        subtitle={translate('walletPage.assignedCardsDescription')}
+                                        title={translate('walletPage.assignedCards')}
+                                    >
+                                        <PaymentMethodList
+                                            shouldShowAddBankAccount={false}
+                                            shouldShowAddPaymentMethodButton={false}
+                                            shouldShowAssignedCards
+                                            shouldShowEmptyListMessage={false}
+                                            onPress={paymentMethodPressed}
+                                            style={styles.mt5}
+                                            isAddPaymentMenuActive={shouldShowAddPaymentMenu}
+                                            actionPaymentMethodType={shouldShowDefaultDeleteMenu ? paymentMethod.selectedPaymentMethodType : ''}
+                                            activePaymentMethodID={shouldShowDefaultDeleteMenu ? getSelectedPaymentMethodID() : ''}
+                                            buttonRef={addPaymentMethodAnchorRef}
+                                            onListContentSizeChange={shouldShowAddPaymentMenu || shouldShowDefaultDeleteMenu ? setMenuPosition : () => {}}
+                                        />
+                                    </WalletSection>
+                                ) : null}
+                                <WalletSection
+                                    icon={Illustrations.BankArrow}
+                                    subtitle={translate('walletPage.addBankAccountToSendAndReceive')}
+                                    title={translate('walletPage.bankAccounts')}
+                                >
+                                    <PaymentMethodList
+                                        shouldShowAddPaymentMethodButton={false}
+                                        shouldShowEmptyListMessage={false}
+                                        onPress={paymentMethodPressed}
+                                        isAddPaymentMenuActive={shouldShowAddPaymentMenu}
+                                        actionPaymentMethodType={shouldShowDefaultDeleteMenu ? paymentMethod.selectedPaymentMethodType : ''}
+                                        activePaymentMethodID={shouldShowDefaultDeleteMenu ? getSelectedPaymentMethodID() : ''}
+                                        buttonRef={addPaymentMethodAnchorRef}
+                                        onListContentSizeChange={shouldShowAddPaymentMenu || shouldShowDefaultDeleteMenu ? setMenuPosition : () => {}}
+                                        shouldEnableScroll={false}
+                                        style={styles.mt5}
+                                    />
+                                </WalletSection>
+                            </OfflineWithFeedback>
+                        </ScrollView>
+                    </View>
+                    <Popover
+                        isVisible={shouldShowDefaultDeleteMenu}
+                        onClose={hideDefaultDeleteMenu}
+                        anchorPosition={{
+                            top: anchorPosition.anchorPositionTop,
+                            right: anchorPosition.anchorPositionRight,
+                        }}
+                        withoutOverlay
+                        anchorRef={paymentMethodButtonRef}
+                        onModalHide={resetSelectedPaymentMethodData}
+                    >
+                        {!showConfirmDeleteContent ? (
+                            <View style={[styles.m5, !isSmallScreenWidth ? styles.sidebarPopover : '']}>
+                                {isPopoverBottomMount && (
+                                    <MenuItem
+                                        title={paymentMethod.formattedSelectedPaymentMethod.title || ''}
+                                        icon={paymentMethod.formattedSelectedPaymentMethod.icon}
+                                        description={paymentMethod.formattedSelectedPaymentMethod.description}
+                                        wrapperStyle={[styles.pv0, styles.ph0, styles.mb4]}
+                                        interactive={false}
+                                    />
+                                )}
+                                {shouldShowMakeDefaultButton && (
+                                    <Button
+                                        onPress={() => {
+                                            makeDefaultPaymentMethod();
+                                            setShouldShowDefaultDeleteMenu(false);
+                                        }}
+                                        text={translate('walletPage.setDefaultConfirmation')}
+                                    />
+                                )}
+                                <Button
+                                    onPress={() => {
+                                        setShowConfirmDeleteContent(true);
+                                    }}
+                                    style={[shouldShowMakeDefaultButton ? styles.mt4 : {}]}
+                                    text={translate('common.delete')}
+                                    danger
+                                />
+                            </View>
+                        ) : (
+                            <ConfirmContent
+                                onConfirm={() => {
+                                    deletePaymentMethod();
+                                    hideDefaultDeleteMenu();
+                                }}
+                                onCancel={hideDefaultDeleteMenu}
+                                contentStyles={!isSmallScreenWidth ? [styles.sidebarPopover, styles.willChangeTransform] : undefined}
+                                title={translate('walletPage.deleteAccount')}
+                                prompt={translate('walletPage.deleteConfirmation')}
+                                confirmText={translate('common.delete')}
+                                cancelText={translate('common.cancel')}
+                                anchorPosition={{
+                                    top: anchorPosition.anchorPositionTop,
+                                    right: anchorPosition.anchorPositionRight,
+                                }}
+                                shouldShowCancelButton
+                                danger
+                            />
+                        )}
+                    </Popover>
+                </ScreenWrapper>
+            )}
             <AddPaymentMethodMenu
                 isVisible={shouldShowAddPaymentMenu}
                 onClose={hideAddPaymentMenu}
@@ -386,74 +488,13 @@ function BaseWalletPage(props) {
                 onItemSelected={(method) => addPaymentMethodTypePressed(method)}
                 anchorRef={addPaymentMethodAnchorRef}
             />
-            <Popover
-                isVisible={shouldShowDefaultDeleteMenu}
-                onClose={hideDefaultDeleteMenu}
-                anchorPosition={{
-                    top: anchorPosition.anchorPositionTop,
-                    right: anchorPosition.anchorPositionRight,
-                }}
-                withoutOverlay
-                anchorRef={paymentMethodButtonRef}
-                onModalHide={resetSelectedPaymentMethodData}
-            >
-                {!showConfirmDeleteContent ? (
-                    <View style={[styles.m5, !isSmallScreenWidth ? styles.sidebarPopover : '']}>
-                        {isPopoverBottomMount && (
-                            <MenuItem
-                                title={paymentMethod.formattedSelectedPaymentMethod.title || ''}
-                                icon={paymentMethod.formattedSelectedPaymentMethod.icon}
-                                description={paymentMethod.formattedSelectedPaymentMethod.description}
-                                wrapperStyle={[styles.pv0, styles.ph0, styles.mb4]}
-                                interactive={false}
-                            />
-                        )}
-                        {shouldShowMakeDefaultButton && (
-                            <Button
-                                onPress={() => {
-                                    makeDefaultPaymentMethod();
-                                    setShouldShowDefaultDeleteMenu(false);
-                                }}
-                                text={translate('walletPage.setDefaultConfirmation')}
-                            />
-                        )}
-                        <Button
-                            onPress={() => {
-                                setShowConfirmDeleteContent(true);
-                            }}
-                            style={[shouldShowMakeDefaultButton ? styles.mt4 : {}]}
-                            text={translate('common.delete')}
-                            danger
-                        />
-                    </View>
-                ) : (
-                    <ConfirmContent
-                        onConfirm={() => {
-                            deletePaymentMethod();
-                            hideDefaultDeleteMenu();
-                        }}
-                        onCancel={hideDefaultDeleteMenu}
-                        contentStyles={!isSmallScreenWidth ? [styles.sidebarPopover, styles.willChangeTransform] : undefined}
-                        title={translate('walletPage.deleteAccount')}
-                        prompt={translate('walletPage.deleteConfirmation')}
-                        confirmText={translate('common.delete')}
-                        cancelText={translate('common.cancel')}
-                        anchorPosition={{
-                            top: anchorPosition.anchorPositionTop,
-                            right: anchorPosition.anchorPositionRight,
-                        }}
-                        shouldShowCancelButton
-                        danger
-                    />
-                )}
-            </Popover>
-        </ScreenWrapper>
+        </>
     );
 }
 
-BaseWalletPage.propTypes = propTypes;
-BaseWalletPage.defaultProps = defaultProps;
-BaseWalletPage.displayName = 'BaseWalletPage';
+WalletPage.propTypes = propTypes;
+WalletPage.defaultProps = defaultProps;
+WalletPage.displayName = 'WalletPage';
 
 export default compose(
     withNetwork(),
@@ -461,6 +502,9 @@ export default compose(
         betas: {
             key: ONYXKEYS.BETAS,
         },
+        cardList: {
+            key: ONYXKEYS.CARD_LIST,
+        },
         walletTransfer: {
             key: ONYXKEYS.WALLET_TRANSFER,
         },
@@ -480,4 +524,4 @@ export default compose(
             key: ONYXKEYS.IS_LOADING_PAYMENT_METHODS,
         },
     }),
-)(BaseWalletPage);
+)(WalletPage);
diff --git a/src/pages/settings/Wallet/WalletPage/index.js b/src/pages/settings/Wallet/WalletPage/index.js
index 23a3b44d0801..4e2777f00ae8 100644
--- a/src/pages/settings/Wallet/WalletPage/index.js
+++ b/src/pages/settings/Wallet/WalletPage/index.js
@@ -1,10 +1,10 @@
 import React from 'react';
-import BaseWalletPage from './BaseWalletPage';
+import WalletPage from './WalletPage';
 
-function WalletPage() {
-    return <BaseWalletPage shouldListenForResize />;
+function WalletPageComponent() {
+    return <WalletPage shouldListenForResize />;
 }
 
-WalletPage.displayName = 'WalletPage';
+WalletPageComponent.displayName = 'WalletPage';
 
-export default WalletPage;
+export default WalletPageComponent;
diff --git a/src/pages/settings/Wallet/WalletPage/index.native.js b/src/pages/settings/Wallet/WalletPage/index.native.js
index d8e291e66aa6..79b626e6e709 100644
--- a/src/pages/settings/Wallet/WalletPage/index.native.js
+++ b/src/pages/settings/Wallet/WalletPage/index.native.js
@@ -1,3 +1,3 @@
-import BaseWalletPage from './BaseWalletPage';
+import WalletPage from './WalletPage';
 
-export default BaseWalletPage;
+export default WalletPage;
diff --git a/src/pages/settings/Wallet/WalletPage/walletPagePropTypes.js b/src/pages/settings/Wallet/WalletPage/walletPagePropTypes.js
index cdfe19cbf2b4..3c411d7984e4 100644
--- a/src/pages/settings/Wallet/WalletPage/walletPagePropTypes.js
+++ b/src/pages/settings/Wallet/WalletPage/walletPagePropTypes.js
@@ -44,6 +44,7 @@ const defaultProps = {
     shouldListenForResize: false,
     userWallet: {},
     bankAccountList: {},
+    cardList: {},
     fundList: null,
     walletTerms: {},
 };
diff --git a/src/pages/settings/Wallet/assignedCardPropTypes.js b/src/pages/settings/Wallet/assignedCardPropTypes.js
index 06779e473579..e45b57a05d31 100644
--- a/src/pages/settings/Wallet/assignedCardPropTypes.js
+++ b/src/pages/settings/Wallet/assignedCardPropTypes.js
@@ -8,14 +8,11 @@ const assignedCardPropTypes = PropTypes.shape({
     bank: PropTypes.string,
     availableSpend: PropTypes.number,
     domainName: PropTypes.string,
-    lastFourPAN: PropTypes.string,
-    cardName: PropTypes.string,
+    maskedPan: PropTypes.string,
     isVirtual: PropTypes.bool,
     fraud: PropTypes.oneOf([CONST.EXPENSIFY_CARD.FRAUD_TYPES.DOMAIN, CONST.EXPENSIFY_CARD.FRAUD_TYPES.USER, CONST.EXPENSIFY_CARD.FRAUD_TYPES.NONE]),
     cardholderFirstName: PropTypes.string,
     cardholderLastName: PropTypes.string,
-    errors: PropTypes.objectOf(PropTypes.string),
-    isLoading: PropTypes.bool,
 });
 
 export default assignedCardPropTypes;
diff --git a/src/pages/signin/ChooseSSOOrMagicCode.js b/src/pages/signin/ChooseSSOOrMagicCode.js
new file mode 100644
index 000000000000..32f0776cdbc9
--- /dev/null
+++ b/src/pages/signin/ChooseSSOOrMagicCode.js
@@ -0,0 +1,108 @@
+import React from 'react';
+import {View} from 'react-native';
+import {withOnyx} from 'react-native-onyx';
+import PropTypes from 'prop-types';
+import _ from 'underscore';
+import styles from '../../styles/styles';
+import ONYXKEYS from '../../ONYXKEYS';
+import Text from '../../components/Text';
+import Button from '../../components/Button';
+import * as Session from '../../libs/actions/Session';
+import ChangeExpensifyLoginLink from './ChangeExpensifyLoginLink';
+import Terms from './Terms';
+import CONST from '../../CONST';
+import ROUTES from '../../ROUTES';
+import Navigation from '../../libs/Navigation/Navigation';
+import * as ErrorUtils from '../../libs/ErrorUtils';
+import useLocalize from '../../hooks/useLocalize';
+import useNetwork from '../../hooks/useNetwork';
+import useWindowDimensions from '../../hooks/useWindowDimensions';
+import FormHelpMessage from '../../components/FormHelpMessage';
+
+const propTypes = {
+    /* Onyx Props */
+
+    /** The credentials of the logged in person */
+    credentials: PropTypes.shape({
+        /** The email/phone the user logged in with */
+        login: PropTypes.string,
+    }),
+
+    /** The details about the account that the user is signing in with */
+    account: PropTypes.shape({
+        /** Whether or not a sign on form is loading (being submitted) */
+        isLoading: PropTypes.bool,
+
+        /** Form that is being loaded */
+        loadingForm: PropTypes.oneOf(_.values(CONST.FORMS)),
+
+        /** Whether this account has 2FA enabled or not */
+        requiresTwoFactorAuth: PropTypes.bool,
+
+        /** Server-side errors in the submitted authentication code */
+        errors: PropTypes.objectOf(PropTypes.string),
+    }),
+
+    /** Function that returns whether the user is using SAML or magic codes to log in */
+    setIsUsingMagicCode: PropTypes.func.isRequired,
+};
+
+const defaultProps = {
+    credentials: {},
+    account: {},
+};
+
+function ChooseSSOOrMagicCode({credentials, account, setIsUsingMagicCode}) {
+    const {translate} = useLocalize();
+    const {isOffline} = useNetwork();
+    const {isSmallScreenWidth} = useWindowDimensions();
+
+    return (
+        <>
+            <View>
+                <Text style={[styles.loginHeroBody, styles.mb5, styles.textNormal, !isSmallScreenWidth ? styles.textAlignLeft : {}]}>{translate('samlSignIn.welcomeSAMLEnabled')}</Text>
+                <Button
+                    isDisabled={isOffline}
+                    success
+                    style={[styles.mv3]}
+                    text={translate('samlSignIn.useSingleSignOn')}
+                    isLoading={account.isLoading}
+                    onPress={() => {
+                        Navigation.navigate(ROUTES.SAML_SIGN_IN);
+                    }}
+                />
+
+                <View style={[styles.mt5]}>
+                    <Text style={[styles.loginHeroBody, styles.mb5, styles.textNormal, !isSmallScreenWidth ? styles.textAlignLeft : {}]}>
+                        {translate('samlSignIn.orContinueWithMagicCode')}
+                    </Text>
+                </View>
+
+                <Button
+                    isDisabled={isOffline}
+                    style={[styles.mv3]}
+                    text={translate('samlSignIn.useMagicCode')}
+                    isLoading={account.isLoading && account.loadingForm === (account.requiresTwoFactorAuth ? CONST.FORMS.VALIDATE_TFA_CODE_FORM : CONST.FORMS.VALIDATE_CODE_FORM)}
+                    onPress={() => {
+                        Session.resendValidateCode(credentials.login);
+                        setIsUsingMagicCode(true);
+                    }}
+                />
+                {Boolean(account) && !_.isEmpty(account.errors) && <FormHelpMessage message={ErrorUtils.getLatestErrorMessage(account)} />}
+                <ChangeExpensifyLoginLink onPress={() => Session.clearSignInData()} />
+            </View>
+            <View style={[styles.mt5, styles.signInPageWelcomeTextContainer]}>
+                <Terms />
+            </View>
+        </>
+    );
+}
+
+ChooseSSOOrMagicCode.propTypes = propTypes;
+ChooseSSOOrMagicCode.defaultProps = defaultProps;
+ChooseSSOOrMagicCode.displayName = 'ChooseSSOOrMagicCode';
+
+export default withOnyx({
+    credentials: {key: ONYXKEYS.CREDENTIALS},
+    account: {key: ONYXKEYS.ACCOUNT},
+})(ChooseSSOOrMagicCode);
diff --git a/src/pages/signin/LoginForm/BaseLoginForm.js b/src/pages/signin/LoginForm/BaseLoginForm.js
index 9c9cc2d1f3c5..3576f92be31f 100644
--- a/src/pages/signin/LoginForm/BaseLoginForm.js
+++ b/src/pages/signin/LoginForm/BaseLoginForm.js
@@ -63,6 +63,9 @@ const propTypes = {
     /** Props to detect online status */
     network: networkPropTypes.isRequired,
 
+    /** Whether or not the sign in page is being rendered in the RHP modal */
+    isInModal: PropTypes.bool,
+
     ...windowDimensionsPropTypes,
 
     ...withLocalizePropTypes,
@@ -77,6 +80,7 @@ const defaultProps = {
     closeAccount: {},
     blurOnSubmit: false,
     innerRef: () => {},
+    isInModal: false,
 };
 
 function LoginForm(props) {
@@ -159,13 +163,19 @@ function LoginForm(props) {
     useEffect(() => {
         // Just call clearAccountMessages on the login page (home route), because when the user is in the transition route and not yet authenticated,
         // this component will also be mounted, resetting account.isLoading will cause the app to briefly display the session expiration page.
-        if (props.isFocused) {
+        if (props.isFocused && props.isVisible) {
             Session.clearAccountMessages();
         }
         if (!canFocusInputOnScreenFocus() || !input.current || !props.isVisible) {
             return;
         }
-        input.current.focus();
+        let focusTimeout;
+        if (props.isInModal) {
+            focusTimeout = setTimeout(() => input.current.focus(), CONST.ANIMATED_TRANSITION);
+        } else {
+            input.current.focus();
+        }
+        return () => clearTimeout(focusTimeout);
         // eslint-disable-next-line react-hooks/exhaustive-deps -- we just want to call this function when component is mounted
     }, []);
 
diff --git a/src/pages/signin/SAMLSignInPage/index.js b/src/pages/signin/SAMLSignInPage/index.js
new file mode 100644
index 000000000000..23ce9b93b8cc
--- /dev/null
+++ b/src/pages/signin/SAMLSignInPage/index.js
@@ -0,0 +1,66 @@
+import React, {useEffect} from 'react';
+import {withOnyx} from 'react-native-onyx';
+import {View} from 'react-native';
+import PropTypes from 'prop-types';
+import ONYXKEYS from '../../../ONYXKEYS';
+import CONFIG from '../../../CONFIG';
+import Icon from '../../../components/Icon';
+import Text from '../../../components/Text';
+import * as Expensicons from '../../../components/Icon/Expensicons';
+import * as Illustrations from '../../../components/Icon/Illustrations';
+import styles from '../../../styles/styles';
+import themeColors from '../../../styles/themes/default';
+import useLocalize from '../../../hooks/useLocalize';
+
+const propTypes = {
+    /** The credentials of the logged in person */
+    credentials: PropTypes.shape({
+        /** The email/phone the user logged in with */
+        login: PropTypes.string,
+    }),
+};
+
+const defaultProps = {
+    credentials: {},
+};
+
+function SAMLSignInPage({credentials}) {
+    const {translate} = useLocalize();
+
+    useEffect(() => {
+        window.open(`${CONFIG.EXPENSIFY.SAML_URL}?email=${credentials.login}&referer=${CONFIG.EXPENSIFY.EXPENSIFY_CASH_REFERER}`, '_self');
+    }, [credentials.login]);
+
+    return (
+        <View style={styles.deeplinkWrapperContainer}>
+            <View style={styles.deeplinkWrapperMessage}>
+                <View style={styles.mb2}>
+                    <Icon
+                        width={200}
+                        height={164}
+                        src={Illustrations.RocketBlue}
+                    />
+                </View>
+                <Text style={[styles.textHeadline, styles.textXXLarge, styles.textAlignCenter]}>{translate('samlSignIn.launching')}</Text>
+                <View style={[styles.mt2, styles.mh2, styles.fontSizeNormal, styles.textAlignCenter]}>
+                    <Text style={[styles.textAlignCenter]}>{translate('samlSignIn.oneMoment')}</Text>
+                </View>
+            </View>
+            <View style={styles.deeplinkWrapperFooter}>
+                <Icon
+                    width={154}
+                    height={34}
+                    fill={themeColors.success}
+                    src={Expensicons.ExpensifyWordmark}
+                />
+            </View>
+        </View>
+    );
+}
+
+SAMLSignInPage.propTypes = propTypes;
+SAMLSignInPage.defaultProps = defaultProps;
+
+export default withOnyx({
+    credentials: {key: ONYXKEYS.CREDENTIALS},
+})(SAMLSignInPage);
diff --git a/src/pages/signin/SignInHeroImage.js b/src/pages/signin/SignInHeroImage.js
index e67497a20e15..6d53aa25e9af 100644
--- a/src/pages/signin/SignInHeroImage.js
+++ b/src/pages/signin/SignInHeroImage.js
@@ -1,5 +1,5 @@
 import React from 'react';
-import Lottie from 'lottie-react-native';
+import Lottie from '../../components/Lottie';
 import * as LottieAnimations from '../../components/LottieAnimations';
 import withWindowDimensions, {windowDimensionsPropTypes} from '../../components/withWindowDimensions';
 import styles from '../../styles/styles';
diff --git a/src/pages/signin/SignInPage.js b/src/pages/signin/SignInPage.js
index 41fa724f580c..8aae45c279c6 100644
--- a/src/pages/signin/SignInPage.js
+++ b/src/pages/signin/SignInPage.js
@@ -19,7 +19,13 @@ import * as StyleUtils from '../../styles/StyleUtils';
 import useLocalize from '../../hooks/useLocalize';
 import useWindowDimensions from '../../hooks/useWindowDimensions';
 import Log from '../../libs/Log';
+import getPlatform from '../../libs/getPlatform';
+import CONST from '../../CONST';
+import Navigation from '../../libs/Navigation/Navigation';
+import ROUTES from '../../ROUTES';
+import ChooseSSOOrMagicCode from './ChooseSSOOrMagicCode';
 import * as ActiveClientManager from '../../libs/ActiveClientManager';
+import * as Session from '../../libs/actions/Session';
 
 const propTypes = {
     /** The details about the account that the user is signing in with */
@@ -38,6 +44,18 @@ const propTypes = {
 
         /** Is this account having trouble receiving emails */
         hasEmailDeliveryFailure: PropTypes.bool,
+
+        /** Whether or not a sign on form is loading (being submitted) */
+        isLoading: PropTypes.bool,
+
+        /** Form that is being loaded */
+        loadingForm: PropTypes.oneOf(_.values(CONST.FORMS)),
+
+        /** Whether or not the user has SAML enabled on their account */
+        isSAMLEnabled: PropTypes.bool,
+
+        /** Whether or not SAML is required on the account */
+        isSAMLRequired: PropTypes.bool,
     }),
 
     /** The credentials of the person signing in */
@@ -64,23 +82,50 @@ const defaultProps = {
 /**
  * @param {Boolean} hasLogin
  * @param {Boolean} hasValidateCode
+ * @param {Object} account
  * @param {Boolean} isPrimaryLogin
- * @param {Boolean} isAccountValidated
+ * @param {Boolean} isUsingMagicCode
+ * @param {Boolean} hasInitiatedSAMLLogin
  * @param {Boolean} hasEmailDeliveryFailure
  * @returns {Object}
  */
-function getRenderOptions({hasLogin, hasValidateCode, hasAccount, isPrimaryLogin, isAccountValidated, hasEmailDeliveryFailure, isClientTheLeader}) {
+function getRenderOptions({hasLogin, hasValidateCode, account, isPrimaryLogin, isUsingMagicCode, hasInitiatedSAMLLogin, isClientTheLeader}) {
+    const hasAccount = !_.isEmpty(account);
+    const isSAMLEnabled = Boolean(account.isSAMLEnabled);
+    const isSAMLRequired = Boolean(account.isSAMLRequired);
+    const hasEmailDeliveryFailure = Boolean(account.hasEmailDeliveryFailure);
+
+    // SAML is temporarily restricted to users on the beta or to users signing in on web and mweb
+    let shouldShowChooseSSOOrMagicCode = false;
+    let shouldInitiateSAMLLogin = false;
+    const platform = getPlatform();
+    if (platform === CONST.PLATFORM.WEB || platform === CONST.PLATFORM.DESKTOP) {
+        // True if the user has SAML required and we haven't already initiated SAML for their account
+        shouldInitiateSAMLLogin = hasAccount && hasLogin && isSAMLRequired && !hasInitiatedSAMLLogin && account.isLoading;
+        shouldShowChooseSSOOrMagicCode = hasAccount && hasLogin && isSAMLEnabled && !isSAMLRequired && !isUsingMagicCode;
+    }
+
+    // SAML required users may reload the login page after having already entered their login details, in which
+    // case we want to clear their sign in data so they don't end up in an infinite loop redirecting back to their
+    // SSO provider's login page
+    if (hasLogin && isSAMLRequired && !shouldInitiateSAMLLogin && !hasInitiatedSAMLLogin && !account.isLoading) {
+        Session.clearSignInData();
+    }
+
     const shouldShowLoginForm = isClientTheLeader && !hasLogin && !hasValidateCode;
-    const shouldShowEmailDeliveryFailurePage = hasLogin && hasEmailDeliveryFailure;
-    const isUnvalidatedSecondaryLogin = hasLogin && !isPrimaryLogin && !isAccountValidated && !hasEmailDeliveryFailure;
-    const shouldShowValidateCodeForm = hasAccount && (hasLogin || hasValidateCode) && !isUnvalidatedSecondaryLogin && !hasEmailDeliveryFailure;
-    const shouldShowWelcomeHeader = shouldShowLoginForm || shouldShowValidateCodeForm || isUnvalidatedSecondaryLogin;
-    const shouldShowWelcomeText = shouldShowLoginForm || shouldShowValidateCodeForm || !isClientTheLeader;
+    const shouldShowEmailDeliveryFailurePage = hasLogin && hasEmailDeliveryFailure && !shouldShowChooseSSOOrMagicCode && !shouldInitiateSAMLLogin;
+    const isUnvalidatedSecondaryLogin = hasLogin && !isPrimaryLogin && !account.validated && !hasEmailDeliveryFailure;
+    const shouldShowValidateCodeForm =
+        hasAccount && (hasLogin || hasValidateCode) && !isUnvalidatedSecondaryLogin && !hasEmailDeliveryFailure && !shouldShowChooseSSOOrMagicCode && !isSAMLRequired;
+    const shouldShowWelcomeHeader = shouldShowLoginForm || shouldShowValidateCodeForm || shouldShowChooseSSOOrMagicCode || isUnvalidatedSecondaryLogin;
+    const shouldShowWelcomeText = shouldShowLoginForm || shouldShowValidateCodeForm || shouldShowChooseSSOOrMagicCode || !isClientTheLeader;
     return {
         shouldShowLoginForm,
         shouldShowEmailDeliveryFailurePage,
         shouldShowUnlinkLoginForm: isUnvalidatedSecondaryLogin,
         shouldShowValidateCodeForm,
+        shouldShowChooseSSOOrMagicCode,
+        shouldInitiateSAMLLogin,
         shouldShowWelcomeHeader,
         shouldShowWelcomeText,
     };
@@ -96,24 +141,44 @@ function SignInPage({credentials, account, isInModal, activeClients}) {
      * and we need it here since welcome text(`welcomeText`) also depends on it */
     const [isUsingRecoveryCode, setIsUsingRecoveryCode] = useState(false);
 
+    /** This state is needed to keep track of whether the user has opted to use magic codes
+     * instead of signing in via SAML when SAML is enabled and not required */
+    const [isUsingMagicCode, setIsUsingMagicCode] = useState(false);
+
+    /** This state is needed to keep track of whether the user has been directed to their SSO provider's login page and
+     *  if we need to clear their sign in details so they can enter a login */
+    const [hasInitiatedSAMLLogin, setHasInitiatedSAMLLogin] = useState(false);
+
+    const isClientTheLeader = activeClients && ActiveClientManager.isClientTheLeader();
+
     useEffect(() => Performance.measureTTI(), []);
     useEffect(() => {
         App.setLocale(Localize.getDevicePreferredLocale());
     }, []);
 
-    const isClientTheLeader = activeClients && ActiveClientManager.isClientTheLeader();
+    const {
+        shouldShowLoginForm,
+        shouldShowEmailDeliveryFailurePage,
+        shouldShowUnlinkLoginForm,
+        shouldShowValidateCodeForm,
+        shouldShowChooseSSOOrMagicCode,
+        shouldInitiateSAMLLogin,
+        shouldShowWelcomeHeader,
+        shouldShowWelcomeText,
+    } = getRenderOptions({
+        hasLogin: Boolean(credentials.login),
+        hasValidateCode: Boolean(credentials.validateCode),
+        account,
+        isPrimaryLogin: !account.primaryLogin || account.primaryLogin === credentials.login,
+        isUsingMagicCode,
+        hasInitiatedSAMLLogin,
+        isClientTheLeader,
+    });
 
-    const {shouldShowLoginForm, shouldShowEmailDeliveryFailurePage, shouldShowUnlinkLoginForm, shouldShowValidateCodeForm, shouldShowWelcomeHeader, shouldShowWelcomeText} = getRenderOptions(
-        {
-            hasLogin: Boolean(credentials.login),
-            hasValidateCode: Boolean(credentials.validateCode),
-            hasAccount: !_.isEmpty(account),
-            isPrimaryLogin: !account.primaryLogin || account.primaryLogin === credentials.login,
-            isAccountValidated: Boolean(account.validated),
-            hasEmailDeliveryFailure: Boolean(account.hasEmailDeliveryFailure),
-            isClientTheLeader,
-        },
-    );
+    if (shouldInitiateSAMLLogin) {
+        setHasInitiatedSAMLLogin(true);
+        Navigation.isNavigationReady().then(() => Navigation.navigate(ROUTES.SAML_SIGN_IN));
+    }
 
     let welcomeHeader = '';
     let welcomeText = '';
@@ -147,14 +212,14 @@ function SignInPage({credentials, account, isInModal, activeClients}) {
                     : translate('welcomeText.newFaceEnterMagicCode', {login: userLoginToDisplay});
             }
         }
-    } else if (shouldShowUnlinkLoginForm || shouldShowEmailDeliveryFailurePage) {
+    } else if (shouldShowUnlinkLoginForm || shouldShowEmailDeliveryFailurePage || shouldShowChooseSSOOrMagicCode) {
         welcomeHeader = shouldShowSmallScreen ? headerText : translate('welcomeText.welcomeBack');
 
         // Don't show any welcome text if we're showing the user the email delivery failed view
-        if (shouldShowEmailDeliveryFailurePage) {
+        if (shouldShowEmailDeliveryFailurePage || shouldShowChooseSSOOrMagicCode) {
             welcomeText = '';
         }
-    } else {
+    } else if (!shouldInitiateSAMLLogin) {
         Log.warn('SignInPage in unexpected state!');
     }
 
@@ -173,6 +238,7 @@ function SignInPage({credentials, account, isInModal, activeClients}) {
                 {/* LoginForm must use the isVisible prop. This keeps it mounted, but visually hidden
                     so that password managers can access the values. Conditionally rendering this component will break this feature. */}
                 <LoginForm
+                    isInModal={isInModal}
                     isVisible={shouldShowLoginForm}
                     blurOnSubmit={account.validated === false}
                     scrollPageToTop={signInPageLayoutRef.current && signInPageLayoutRef.current.scrollPageToTop}
@@ -181,9 +247,11 @@ function SignInPage({credentials, account, isInModal, activeClients}) {
                     <ValidateCodeForm
                         isUsingRecoveryCode={isUsingRecoveryCode}
                         setIsUsingRecoveryCode={setIsUsingRecoveryCode}
+                        setIsUsingMagicCode={setIsUsingMagicCode}
                     />
                 )}
                 {shouldShowUnlinkLoginForm && <UnlinkLoginForm />}
+                {shouldShowChooseSSOOrMagicCode && <ChooseSSOOrMagicCode setIsUsingMagicCode={setIsUsingMagicCode} />}
                 {shouldShowEmailDeliveryFailurePage && <EmailDeliveryFailurePage />}
             </SignInPageLayout>
         </View>
diff --git a/src/pages/signin/SignInPageLayout/Footer.js b/src/pages/signin/SignInPageLayout/Footer.js
index 62733f3cec9e..2fb5e45db760 100644
--- a/src/pages/signin/SignInPageLayout/Footer.js
+++ b/src/pages/signin/SignInPageLayout/Footer.js
@@ -10,8 +10,6 @@ import variables from '../../../styles/variables';
 import * as Expensicons from '../../../components/Icon/Expensicons';
 import TextLink from '../../../components/TextLink';
 import withLocalize, {withLocalizePropTypes} from '../../../components/withLocalize';
-import withWindowDimensions, {windowDimensionsPropTypes} from '../../../components/withWindowDimensions';
-import compose from '../../../libs/compose';
 import Licenses from '../Licenses';
 import Socials from '../Socials';
 import Hoverable from '../../../components/Hoverable';
@@ -20,12 +18,14 @@ import * as Session from '../../../libs/actions/Session';
 import SignInGradient from '../../../../assets/images/home-fade-gradient--mobile.svg';
 
 const propTypes = {
-    ...windowDimensionsPropTypes,
     ...withLocalizePropTypes,
     scrollPageToTop: PropTypes.func.isRequired,
+    shouldShowSmallScreen: PropTypes.bool,
 };
 
-const defaultProps = {};
+const defaultProps = {
+    shouldShowSmallScreen: false,
+};
 
 const navigateHome = (scrollPageToTop) => {
     scrollPageToTop();
@@ -150,7 +150,7 @@ const columns = ({scrollPageToTop}) => [
 ];
 
 function Footer(props) {
-    const isVertical = props.isSmallScreenWidth;
+    const isVertical = props.shouldShowSmallScreen;
     const imageDirection = isVertical ? styles.flexRow : styles.flexColumn;
     const imageStyle = isVertical ? styles.pr0 : styles.alignSelfCenter;
     const columnDirection = isVertical ? styles.flexColumn : styles.flexRow;
@@ -225,4 +225,4 @@ Footer.propTypes = propTypes;
 Footer.displayName = 'Footer';
 Footer.defaultProps = defaultProps;
 
-export default compose(withLocalize, withWindowDimensions)(Footer);
+export default withLocalize(Footer);
diff --git a/src/pages/signin/SignInPageLayout/index.js b/src/pages/signin/SignInPageLayout/index.js
index 1f70364c307b..fdc88b6ede9e 100644
--- a/src/pages/signin/SignInPageLayout/index.js
+++ b/src/pages/signin/SignInPageLayout/index.js
@@ -170,7 +170,10 @@ function SignInPageLayout(props) {
                         </SignInPageContent>
                     </View>
                     <View style={[styles.flex0]}>
-                        <Footer scrollPageToTop={scrollPageToTop} />
+                        <Footer
+                            scrollPageToTop={scrollPageToTop}
+                            shouldShowSmallScreen
+                        />
                     </View>
                 </ScrollView>
             )}
diff --git a/src/pages/signin/ValidateCodeForm/BaseValidateCodeForm.js b/src/pages/signin/ValidateCodeForm/BaseValidateCodeForm.js
index d4ed0c45d28c..dc100fffe4f1 100755
--- a/src/pages/signin/ValidateCodeForm/BaseValidateCodeForm.js
+++ b/src/pages/signin/ValidateCodeForm/BaseValidateCodeForm.js
@@ -38,6 +38,12 @@ const propTypes = {
 
         /** Whether or not a sign on form is loading (being submitted) */
         isLoading: PropTypes.bool,
+
+        /** Whether or not the user has SAML enabled on their account */
+        isSAMLEnabled: PropTypes.bool,
+
+        /** Whether or not SAML is required on the account */
+        isSAMLRequired: PropTypes.bool,
     }),
 
     /** The credentials of the person signing in */
@@ -64,6 +70,9 @@ const propTypes = {
     /** Function to change `isUsingRecoveryCode` state when user toggles between 2fa code and recovery code */
     setIsUsingRecoveryCode: PropTypes.func.isRequired,
 
+    /** Function to change `isUsingMagicCode` state when the user goes back to the login page */
+    setIsUsingMagicCode: PropTypes.func.isRequired,
+
     ...withLocalizePropTypes,
 };
 
@@ -92,6 +101,8 @@ function BaseValidateCodeForm(props) {
     const hasError = Boolean(props.account) && !_.isEmpty(props.account.errors);
     const isLoadingResendValidationForm = props.account.loadingForm === CONST.FORMS.RESEND_VALIDATE_CODE_FORM;
     const shouldDisableResendValidateCode = props.network.isOffline || props.account.isLoading;
+    const isValidateCodeFormSubmitting =
+        props.account.isLoading && props.account.loadingForm === (props.account.requiresTwoFactorAuth ? CONST.FORMS.VALIDATE_TFA_CODE_FORM : CONST.FORMS.VALIDATE_CODE_FORM);
 
     useEffect(() => {
         if (!(inputValidateCodeRef.current && hasError && (props.session.autoAuthState === CONST.AUTO_AUTH_STATE.FAILED || props.account.isLoading))) {
@@ -197,6 +208,8 @@ function BaseValidateCodeForm(props) {
      * Clears local and Onyx sign in states
      */
     const clearSignInData = () => {
+        // Reset the user's preference for signing in with SAML versus magic codes
+        props.setIsUsingMagicCode(false);
         clearLocalSignInData();
         Session.clearSignInData();
     };
@@ -327,6 +340,7 @@ function BaseValidateCodeForm(props) {
                         underlayColor={themeColors.componentBG}
                         hoverDimmingValue={1}
                         pressDimmingValue={0.2}
+                        disabled={isValidateCodeFormSubmitting}
                         accessibilityRole={CONST.ACCESSIBILITY_ROLE.BUTTON}
                         accessibilityLabel={props.isUsingRecoveryCode ? props.translate('recoveryCodeForm.use2fa') : props.translate('recoveryCodeForm.useRecoveryCode')}
                     >
@@ -379,9 +393,7 @@ function BaseValidateCodeForm(props) {
                     success
                     style={[styles.mv3]}
                     text={props.translate('common.signIn')}
-                    isLoading={
-                        props.account.isLoading && props.account.loadingForm === (props.account.requiresTwoFactorAuth ? CONST.FORMS.VALIDATE_TFA_CODE_FORM : CONST.FORMS.VALIDATE_CODE_FORM)
-                    }
+                    isLoading={isValidateCodeFormSubmitting}
                     onPress={validateAndSubmitForm}
                 />
                 <ChangeExpensifyLoginLink onPress={clearSignInData} />
diff --git a/src/pages/tasks/NewTaskDetailsPage.js b/src/pages/tasks/NewTaskDetailsPage.js
index b7fd3900e1f3..668a61526198 100644
--- a/src/pages/tasks/NewTaskDetailsPage.js
+++ b/src/pages/tasks/NewTaskDetailsPage.js
@@ -1,4 +1,4 @@
-import React, {useEffect, useRef, useState} from 'react';
+import React, {useEffect, useState} from 'react';
 import {View} from 'react-native';
 import {withOnyx} from 'react-native-onyx';
 import PropTypes from 'prop-types';
@@ -17,6 +17,7 @@ import ROUTES from '../../ROUTES';
 import * as Task from '../../libs/actions/Task';
 import CONST from '../../CONST';
 import * as Browser from '../../libs/Browser';
+import useAutoFocusInput from '../../hooks/useAutoFocusInput';
 
 const propTypes = {
     /** Beta features list */
@@ -37,10 +38,11 @@ const defaultProps = {
 };
 
 function NewTaskDetailsPage(props) {
-    const inputRef = useRef();
     const [taskTitle, setTaskTitle] = useState(props.task.title);
     const [taskDescription, setTaskDescription] = useState(props.task.description || '');
 
+    const {inputCallbackRef} = useAutoFocusInput();
+
     useEffect(() => {
         setTaskTitle(props.task.title);
         setTaskDescription(props.task.description || '');
@@ -74,7 +76,6 @@ function NewTaskDetailsPage(props) {
     }
     return (
         <ScreenWrapper
-            onEntryTransitionEnd={() => inputRef.current && inputRef.current.focus()}
             includeSafeAreaPaddingBottom={false}
             shouldEnableMaxHeight
             testID={NewTaskDetailsPage.displayName}
@@ -95,7 +96,7 @@ function NewTaskDetailsPage(props) {
             >
                 <View style={styles.mb5}>
                     <TextInput
-                        ref={(el) => (inputRef.current = el)}
+                        ref={inputCallbackRef}
                         accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT}
                         inputID="taskTitle"
                         label={props.translate('task.title')}
diff --git a/src/pages/tasks/TaskAssigneeSelectorModal.js b/src/pages/tasks/TaskAssigneeSelectorModal.js
index 4ec00df0661c..bfa3ac884e4a 100644
--- a/src/pages/tasks/TaskAssigneeSelectorModal.js
+++ b/src/pages/tasks/TaskAssigneeSelectorModal.js
@@ -201,9 +201,9 @@ function TaskAssigneeSelectorModal(props) {
         }
     };
 
-    const isOpen = ReportUtils.isOpenTaskReport(props.task.report);
-    const canModifyTask = Task.canModifyTask(props.task.report, props.currentUserPersonalDetails.accountID);
-    const isTaskNonEditable = report && ReportUtils.isTaskReport(props.task.report) && (!canModifyTask || !isOpen);
+    const isOpen = ReportUtils.isOpenTaskReport(report);
+    const canModifyTask = Task.canModifyTask(report, props.currentUserPersonalDetails.accountID);
+    const isTaskNonEditable = ReportUtils.isTaskReport(report) && (!canModifyTask || !isOpen);
 
     return (
         <ScreenWrapper
diff --git a/src/pages/workspace/WorkspaceInvitePage.js b/src/pages/workspace/WorkspaceInvitePage.js
index e7bbd9657e8b..3a47ed0c95f4 100644
--- a/src/pages/workspace/WorkspaceInvitePage.js
+++ b/src/pages/workspace/WorkspaceInvitePage.js
@@ -67,7 +67,7 @@ function WorkspaceInvitePage(props) {
     const [searchTerm, setSearchTerm] = useState('');
     const [selectedOptions, setSelectedOptions] = useState([]);
     const [personalDetails, setPersonalDetails] = useState([]);
-    const [userToInvite, setUserToInvite] = useState(null);
+    const [usersToInvite, setUsersToInvite] = useState([]);
     const openWorkspaceInvitePage = () => {
         const policyMemberEmailsToAccountIDs = PolicyUtils.getMemberAccountIDsForWorkspace(props.policyMembers, props.personalDetails);
         Policy.openWorkspaceInvitePage(props.route.params.policyID, _.keys(policyMemberEmailsToAccountIDs));
@@ -84,19 +84,56 @@ function WorkspaceInvitePage(props) {
     const excludedUsers = useMemo(() => PolicyUtils.getIneligibleInvitees(props.policyMembers, props.personalDetails), [props.policyMembers, props.personalDetails]);
 
     useEffect(() => {
-        const inviteOptions = OptionsListUtils.getMemberInviteOptions(props.personalDetails, props.betas, searchTerm, excludedUsers);
-
-        // Update selectedOptions with the latest personalDetails and policyMembers information
-        const detailsMap = {};
-        _.forEach(inviteOptions.personalDetails, (detail) => (detailsMap[detail.login] = OptionsListUtils.formatMemberForList(detail)));
-        const newSelectedOptions = [];
-        _.forEach(selectedOptions, (option) => {
-            newSelectedOptions.push(_.has(detailsMap, option.login) ? {...detailsMap[option.login], isSelected: true} : option);
+        let emails = _.compact(
+            searchTerm
+                .trim()
+                .replace(/\s*,\s*/g, ',')
+                .split(','),
+        );
+
+        if (emails.length === 0) {
+            emails = [''];
+        }
+
+        const newUsersToInviteDict = {};
+        const newPersonalDetailsDict = {};
+        const newSelectedOptionsDict = {};
+
+        _.each(emails, (email) => {
+            const inviteOptions = OptionsListUtils.getMemberInviteOptions(props.personalDetails, props.betas, email, excludedUsers);
+
+            // Update selectedOptions with the latest personalDetails and policyMembers information
+            const detailsMap = {};
+            _.each(inviteOptions.personalDetails, (detail) => (detailsMap[detail.login] = OptionsListUtils.formatMemberForList(detail)));
+
+            const newSelectedOptions = [];
+            _.each(selectedOptions, (option) => {
+                newSelectedOptions.push(_.has(detailsMap, option.login) ? {...detailsMap[option.login], isSelected: true} : option);
+            });
+
+            const userToInvite = inviteOptions.userToInvite;
+
+            // Only add the user to the invites list if it is valid
+            if (userToInvite) {
+                newUsersToInviteDict[userToInvite.accountID] = userToInvite;
+            }
+
+            // Add all personal details to the new dict
+            _.each(inviteOptions.personalDetails, (details) => {
+                newPersonalDetailsDict[details.accountID] = details;
+            });
+
+            // Add all selected options to the new dict
+            _.each(newSelectedOptions, (option) => {
+                newSelectedOptionsDict[option.accountID] = option;
+            });
         });
 
-        setUserToInvite(inviteOptions.userToInvite);
-        setPersonalDetails(inviteOptions.personalDetails);
-        setSelectedOptions(newSelectedOptions);
+        // Strip out dictionary keys and update arrays
+        setUsersToInvite(_.values(newUsersToInviteDict));
+        setPersonalDetails(_.values(newPersonalDetailsDict));
+        setSelectedOptions(_.values(newSelectedOptionsDict));
+
         // eslint-disable-next-line react-hooks/exhaustive-deps -- we don't want to recalculate when selectedOptions change
     }, [props.personalDetails, props.policyMembers, props.betas, searchTerm, excludedUsers]);
 
@@ -116,7 +153,6 @@ function WorkspaceInvitePage(props) {
         const selectedLogins = _.map(selectedOptions, ({login}) => login);
         const personalDetailsWithoutSelected = _.filter(personalDetails, ({login}) => !_.contains(selectedLogins, login));
         const personalDetailsFormatted = _.map(personalDetailsWithoutSelected, OptionsListUtils.formatMemberForList);
-        const hasUnselectedUserToInvite = userToInvite && !_.contains(selectedLogins, userToInvite.login);
 
         sections.push({
             title: translate('common.contacts'),
@@ -126,14 +162,18 @@ function WorkspaceInvitePage(props) {
         });
         indexOffset += personalDetailsFormatted.length;
 
-        if (hasUnselectedUserToInvite) {
-            sections.push({
-                title: undefined,
-                data: [OptionsListUtils.formatMemberForList(userToInvite)],
-                shouldShow: true,
-                indexOffset,
-            });
-        }
+        _.each(usersToInvite, (userToInvite) => {
+            const hasUnselectedUserToInvite = !_.contains(selectedLogins, userToInvite.login);
+
+            if (hasUnselectedUserToInvite) {
+                sections.push({
+                    title: undefined,
+                    data: [OptionsListUtils.formatMemberForList(userToInvite)],
+                    shouldShow: true,
+                    indexOffset: indexOffset++,
+                });
+            }
+        });
 
         return sections;
     };
@@ -188,14 +228,14 @@ function WorkspaceInvitePage(props) {
 
     const headerMessage = useMemo(() => {
         const searchValue = searchTerm.trim().toLowerCase();
-        if (!userToInvite && CONST.EXPENSIFY_EMAILS.includes(searchValue)) {
+        if (usersToInvite.length === 0 && CONST.EXPENSIFY_EMAILS.includes(searchValue)) {
             return translate('messages.errorMessageInvalidEmail');
         }
-        if (!userToInvite && excludedUsers.includes(searchValue)) {
+        if (usersToInvite.length === 0 && excludedUsers.includes(searchValue)) {
             return translate('messages.userIsAlreadyMemberOfWorkspace', {login: searchValue, workspace: policyName});
         }
-        return OptionsListUtils.getHeaderMessage(personalDetails.length !== 0, Boolean(userToInvite), searchValue);
-    }, [excludedUsers, translate, searchTerm, policyName, userToInvite, personalDetails]);
+        return OptionsListUtils.getHeaderMessage(personalDetails.length !== 0, usersToInvite.length > 0, searchValue);
+    }, [excludedUsers, translate, searchTerm, policyName, usersToInvite, personalDetails]);
 
     return (
         <ScreenWrapper
diff --git a/src/pages/workspace/WorkspaceNewRoomPage.js b/src/pages/workspace/WorkspaceNewRoomPage.js
index e1fbab65486b..da0bf845cc81 100644
--- a/src/pages/workspace/WorkspaceNewRoomPage.js
+++ b/src/pages/workspace/WorkspaceNewRoomPage.js
@@ -1,4 +1,4 @@
-import React, {useState, useCallback, useMemo, useRef} from 'react';
+import React, {useState, useEffect, useCallback, useMemo, useRef} from 'react';
 import {View} from 'react-native';
 import _ from 'underscore';
 import {withOnyx} from 'react-native-onyx';
@@ -9,12 +9,12 @@ import * as App from '../../libs/actions/App';
 import useLocalize from '../../hooks/useLocalize';
 import styles from '../../styles/styles';
 import RoomNameInput from '../../components/RoomNameInput';
-import Picker from '../../components/Picker';
 import KeyboardAvoidingView from '../../components/KeyboardAvoidingView';
 import ScreenWrapper from '../../components/ScreenWrapper';
 import ONYXKEYS from '../../ONYXKEYS';
 import CONST from '../../CONST';
 import Text from '../../components/Text';
+import TextInput from '../../components/TextInput';
 import Permissions from '../../libs/Permissions';
 import * as ErrorUtils from '../../libs/ErrorUtils';
 import * as ValidationUtils from '../../libs/ValidationUtils';
@@ -26,6 +26,7 @@ import FullPageNotFoundView from '../../components/BlockingViews/FullPageNotFoun
 import compose from '../../libs/compose';
 import variables from '../../styles/variables';
 import useDelayedInputFocus from '../../hooks/useDelayedInputFocus';
+import ValuePicker from '../../components/ValuePicker';
 
 const propTypes = {
     /** All reports shared with the user */
@@ -73,6 +74,7 @@ function WorkspaceNewRoomPage(props) {
     const {translate} = useLocalize();
     const [visibility, setVisibility] = useState(CONST.REPORT.VISIBILITY.RESTRICTED);
     const [policyID, setPolicyID] = useState(null);
+    const [writeCapability, setWriteCapability] = useState(CONST.REPORT.WRITE_CAPABILITIES.ALL);
     const visibilityDescription = useMemo(() => translate(`newRoomPage.${visibility}Description`), [translate, visibility]);
     const isPolicyAdmin = useMemo(() => {
         if (!policyID) {
@@ -87,9 +89,17 @@ function WorkspaceNewRoomPage(props) {
      */
     const submit = (values) => {
         const policyMembers = _.map(_.keys(props.allPolicyMembers[`${ONYXKEYS.COLLECTION.POLICY_MEMBERS}${values.policyID}`]), (accountID) => Number(accountID));
-        Report.addPolicyReport(values.policyID, values.roomName, values.visibility, policyMembers, values.writeCapability);
+        Report.addPolicyReport(policyID, values.roomName, visibility, policyMembers, writeCapability, values.welcomeMessage);
     };
 
+    useEffect(() => {
+        if (isPolicyAdmin) {
+            return;
+        }
+
+        setWriteCapability(CONST.REPORT.WRITE_CAPABILITIES.ALL);
+    }, [isPolicyAdmin]);
+
     /**
      * @param {Object} values - form input values passed by the Form component
      * @returns {Boolean}
@@ -166,8 +176,8 @@ function WorkspaceNewRoomPage(props) {
             >
                 {({insets}) => (
                     <KeyboardAvoidingView
-                        style={{height: '100%'}}
-                        behavior="height"
+                        style={styles.h100}
+                        behavior="padding"
                         // Offset is needed as KeyboardAvoidingView in nested inside of TabNavigator instead of wrapping whole screen.
                         // This is because when wrapping whole screen the screen was freezing when changing Tabs.
                         keyboardVerticalOffset={variables.contentHeaderHeight + variables.tabSelectorButtonHeight + variables.tabSelectorButtonPadding + insets.top}
@@ -175,7 +185,6 @@ function WorkspaceNewRoomPage(props) {
                         <Form
                             formID={ONYXKEYS.FORMS.NEW_ROOM_FORM}
                             submitButtonText={translate('newRoomPage.createRoom')}
-                            scrollContextEnabled
                             style={[styles.mh5, styles.flexGrow1]}
                             validate={validate}
                             onSubmit={submit}
@@ -190,32 +199,46 @@ function WorkspaceNewRoomPage(props) {
                                     autoFocus
                                 />
                             </View>
-                            <View style={styles.mb2}>
-                                <Picker
+                            <View style={styles.mb5}>
+                                <TextInput
+                                    inputID="welcomeMessage"
+                                    label={translate('welcomeMessagePage.welcomeMessageOptional')}
+                                    accessibilityLabel={translate('welcomeMessagePage.welcomeMessageOptional')}
+                                    accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT}
+                                    autoGrowHeight
+                                    maxLength={CONST.MAX_COMMENT_LENGTH}
+                                    autoCapitalize="none"
+                                    textAlignVertical="top"
+                                    containerStyles={[styles.autoGrowHeightMultilineInput]}
+                                />
+                            </View>
+                            <View style={[styles.mhn5]}>
+                                <ValuePicker
                                     inputID="policyID"
                                     label={translate('workspace.common.workspace')}
-                                    placeholder={{value: '', label: translate('newRoomPage.selectAWorkspace')}}
+                                    placeholder={translate('newRoomPage.selectAWorkspace')}
                                     items={workspaceOptions}
                                     onValueChange={setPolicyID}
                                 />
                             </View>
                             {isPolicyAdmin && (
-                                <View style={styles.mb2}>
-                                    <Picker
+                                <View style={styles.mhn5}>
+                                    <ValuePicker
                                         inputID="writeCapability"
                                         label={translate('writeCapabilityPage.label')}
                                         items={writeCapabilityOptions}
-                                        defaultValue={CONST.REPORT.WRITE_CAPABILITIES.ALL}
+                                        value={writeCapability}
+                                        onValueChange={setWriteCapability}
                                     />
                                 </View>
                             )}
-                            <View style={styles.mb2}>
-                                <Picker
+                            <View style={[styles.mb1, styles.mhn5]}>
+                                <ValuePicker
                                     inputID="visibility"
                                     label={translate('newRoomPage.visibility')}
                                     items={visibilityOptions}
                                     onValueChange={setVisibility}
-                                    defaultValue={CONST.REPORT.VISIBILITY.RESTRICTED}
+                                    value={visibility}
                                 />
                             </View>
                             <Text style={[styles.textLabel, styles.colorMuted]}>{visibilityDescription}</Text>
diff --git a/src/pages/workspace/WorkspaceResetBankAccountModal.js b/src/pages/workspace/WorkspaceResetBankAccountModal.js
index d790a2503185..ff7bcb51e939 100644
--- a/src/pages/workspace/WorkspaceResetBankAccountModal.js
+++ b/src/pages/workspace/WorkspaceResetBankAccountModal.js
@@ -1,45 +1,53 @@
 import lodashGet from 'lodash/get';
 import React from 'react';
+import PropTypes from 'prop-types';
+import {withOnyx} from 'react-native-onyx';
 import ConfirmModal from '../../components/ConfirmModal';
 import * as BankAccounts from '../../libs/actions/BankAccounts';
-import withLocalize, {withLocalizePropTypes} from '../../components/withLocalize';
 import * as ReimbursementAccountProps from '../ReimbursementAccount/reimbursementAccountPropTypes';
 import Text from '../../components/Text';
 import styles from '../../styles/styles';
 import BankAccount from '../../libs/models/BankAccount';
+import ONYXKEYS from '../../ONYXKEYS';
+import useLocalize from '../../hooks/useLocalize';
 
 const propTypes = {
     /** Reimbursement account data */
     reimbursementAccount: ReimbursementAccountProps.reimbursementAccountPropTypes.isRequired,
 
-    ...withLocalizePropTypes,
+    /** Session info for the currently logged in user. */
+    session: PropTypes.shape({
+        /** Currently logged in user email */
+        email: PropTypes.string,
+    }).isRequired,
 };
 
-function WorkspaceResetBankAccountModal(props) {
-    const achData = lodashGet(props.reimbursementAccount, 'achData') || {};
+function WorkspaceResetBankAccountModal({reimbursementAccount, session}) {
+    const {translate} = useLocalize();
+    const achData = lodashGet(reimbursementAccount, 'achData') || {};
     const isInOpenState = achData.state === BankAccount.STATE.OPEN;
     const bankAccountID = achData.bankAccountID;
     const bankShortName = `${achData.addressName || ''} ${(achData.accountNumber || '').slice(-4)}`;
 
     return (
         <ConfirmModal
-            title={props.translate('workspace.bankAccount.areYouSure')}
-            confirmText={isInOpenState ? props.translate('workspace.bankAccount.yesDisconnectMyBankAccount') : props.translate('workspace.bankAccount.yesStartOver')}
-            cancelText={props.translate('common.cancel')}
+            title={translate('workspace.bankAccount.areYouSure')}
+            confirmText={isInOpenState ? translate('workspace.bankAccount.yesDisconnectMyBankAccount') : translate('workspace.bankAccount.yesStartOver')}
+            cancelText={translate('common.cancel')}
             prompt={
                 isInOpenState ? (
                     <Text>
-                        <Text>{props.translate('workspace.bankAccount.disconnectYour')}</Text>
+                        <Text>{translate('workspace.bankAccount.disconnectYour')}</Text>
                         <Text style={styles.textStrong}>{bankShortName}</Text>
-                        <Text>{props.translate('workspace.bankAccount.bankAccountAnyTransactions')}</Text>
+                        <Text>{translate('workspace.bankAccount.bankAccountAnyTransactions')}</Text>
                     </Text>
                 ) : (
-                    props.translate('workspace.bankAccount.clearProgress')
+                    translate('workspace.bankAccount.clearProgress')
                 )
             }
             danger
             onCancel={BankAccounts.cancelResetFreePlanBankAccount}
-            onConfirm={() => BankAccounts.resetFreePlanBankAccount(bankAccountID)}
+            onConfirm={() => BankAccounts.resetFreePlanBankAccount(bankAccountID, session)}
             shouldShowCancelButton
             isVisible
         />
@@ -49,4 +57,8 @@ function WorkspaceResetBankAccountModal(props) {
 WorkspaceResetBankAccountModal.displayName = 'WorkspaceResetBankAccountModal';
 WorkspaceResetBankAccountModal.propTypes = propTypes;
 
-export default withLocalize(WorkspaceResetBankAccountModal);
+export default withOnyx({
+    session: {
+        key: ONYXKEYS.SESSION,
+    },
+})(WorkspaceResetBankAccountModal);
diff --git a/src/pages/workspace/WorkspaceSettingsCurrencyPage.js b/src/pages/workspace/WorkspaceSettingsCurrencyPage.js
new file mode 100644
index 000000000000..9c757b730cef
--- /dev/null
+++ b/src/pages/workspace/WorkspaceSettingsCurrencyPage.js
@@ -0,0 +1,114 @@
+import React, {useState, useCallback} from 'react';
+import _ from 'underscore';
+import {withOnyx} from 'react-native-onyx';
+import PropTypes from 'prop-types';
+import useLocalize from '../../hooks/useLocalize';
+import ScreenWrapper from '../../components/ScreenWrapper';
+import HeaderWithBackButton from '../../components/HeaderWithBackButton';
+import SelectionList from '../../components/SelectionList';
+import Navigation from '../../libs/Navigation/Navigation';
+import ROUTES from '../../ROUTES';
+import compose from '../../libs/compose';
+import ONYXKEYS from '../../ONYXKEYS';
+import withPolicy, {policyDefaultProps, policyPropTypes} from './withPolicy';
+import * as Policy from '../../libs/actions/Policy';
+import * as PolicyUtils from '../../libs/PolicyUtils';
+import FullPageNotFoundView from '../../components/BlockingViews/FullPageNotFoundView';
+
+const propTypes = {
+    /** Constant, list of available currencies */
+    currencyList: PropTypes.objectOf(
+        PropTypes.shape({
+            /** Symbol of the currency */
+            symbol: PropTypes.string.isRequired,
+        }),
+    ),
+    ...policyPropTypes,
+};
+
+const defaultProps = {
+    currencyList: {},
+    ...policyDefaultProps,
+};
+
+const getDisplayText = (currencyCode, currencySymbol) => `${currencyCode} - ${currencySymbol}`;
+
+function WorkspaceSettingsCurrencyPage({currencyList, policy}) {
+    const {translate} = useLocalize();
+    const [searchText, setSearchText] = useState('');
+    const trimmedText = searchText.trim().toLowerCase();
+    const currencyListKeys = _.keys(currencyList);
+
+    const filteredItems = _.filter(currencyListKeys, (currencyCode) => {
+        const currency = currencyList[currencyCode];
+        return getDisplayText(currencyCode, currency.symbol).toLowerCase().includes(trimmedText);
+    });
+
+    let initiallyFocusedOptionKey;
+
+    const currencyItems = _.map(filteredItems, (currencyCode) => {
+        const currency = currencyList[currencyCode];
+        const isSelected = policy.outputCurrency === currencyCode;
+
+        if (isSelected) {
+            initiallyFocusedOptionKey = currencyCode;
+        }
+
+        return {
+            text: getDisplayText(currencyCode, currency.symbol),
+            keyForList: currencyCode,
+            isSelected,
+        };
+    });
+
+    const sections = [{data: currencyItems, indexOffset: 0}];
+
+    const headerMessage = searchText.trim() && !currencyItems.length ? translate('common.noResultsFound') : '';
+
+    const onBackButtonPress = useCallback(() => Navigation.goBack(ROUTES.WORKSPACE_SETTINGS.getRoute(policy.id)), [policy.id]);
+
+    const onSelectCurrency = (item) => {
+        Policy.updateGeneralSettings(policy.id, policy.name, item.keyForList);
+        Navigation.goBack(ROUTES.WORKSPACE_SETTINGS.getRoute(policy.id));
+    };
+
+    return (
+        <ScreenWrapper
+            includeSafeAreaPaddingBottom={false}
+            testID={WorkspaceSettingsCurrencyPage.displayName}
+        >
+            <FullPageNotFoundView
+                onBackButtonPress={() => Navigation.goBack(ROUTES.SETTINGS_WORKSPACES)}
+                shouldShow={_.isEmpty(policy) || !PolicyUtils.isPolicyAdmin(policy) || PolicyUtils.isPendingDeletePolicy(policy)}
+                subtitleKey={_.isEmpty(policy) ? undefined : 'workspace.common.notAuthorized'}
+            >
+                <HeaderWithBackButton
+                    title={translate('workspace.editor.currencyInputLabel')}
+                    onBackButtonPress={onBackButtonPress}
+                />
+
+                <SelectionList
+                    sections={sections}
+                    textInputLabel={translate('workspace.editor.currencyInputLabel')}
+                    textInputValue={searchText}
+                    onChangeText={setSearchText}
+                    onSelectRow={onSelectCurrency}
+                    headerMessage={headerMessage}
+                    initiallyFocusedOptionKey={initiallyFocusedOptionKey}
+                    showScrollIndicator
+                />
+            </FullPageNotFoundView>
+        </ScreenWrapper>
+    );
+}
+
+WorkspaceSettingsCurrencyPage.displayName = 'WorkspaceSettingsCurrencyPage';
+WorkspaceSettingsCurrencyPage.propTypes = propTypes;
+WorkspaceSettingsCurrencyPage.defaultProps = defaultProps;
+
+export default compose(
+    withPolicy,
+    withOnyx({
+        currencyList: {key: ONYXKEYS.CURRENCY_LIST},
+    }),
+)(WorkspaceSettingsCurrencyPage);
diff --git a/src/pages/workspace/WorkspaceSettingsPage.js b/src/pages/workspace/WorkspaceSettingsPage.js
index 0f1f6c283a6b..fd975ebc9247 100644
--- a/src/pages/workspace/WorkspaceSettingsPage.js
+++ b/src/pages/workspace/WorkspaceSettingsPage.js
@@ -1,18 +1,16 @@
-import React, {useCallback, useMemo} from 'react';
+import React, {useCallback} from 'react';
 import {Keyboard, View} from 'react-native';
 import {withOnyx} from 'react-native-onyx';
 import PropTypes from 'prop-types';
 import _ from 'underscore';
 import lodashGet from 'lodash/get';
 import ONYXKEYS from '../../ONYXKEYS';
-import withLocalize, {withLocalizePropTypes} from '../../components/withLocalize';
 import styles from '../../styles/styles';
 import compose from '../../libs/compose';
 import * as Policy from '../../libs/actions/Policy';
 import * as Expensicons from '../../components/Icon/Expensicons';
 import AvatarWithImagePicker from '../../components/AvatarWithImagePicker';
 import CONST from '../../CONST';
-import Picker from '../../components/Picker';
 import TextInput from '../../components/TextInput';
 import WorkspacePageWithSections from './WorkspacePageWithSections';
 import withPolicy, {policyPropTypes, policyDefaultProps} from './withPolicy';
@@ -25,17 +23,29 @@ import Avatar from '../../components/Avatar';
 import Navigation from '../../libs/Navigation/Navigation';
 import ROUTES from '../../ROUTES';
 import withWindowDimensions, {windowDimensionsPropTypes} from '../../components/withWindowDimensions';
+import MenuItemWithTopDescription from '../../components/MenuItemWithTopDescription';
+import Text from '../../components/Text';
+import useLocalize from '../../hooks/useLocalize';
 
 const propTypes = {
-    // The currency list constant object from Onyx
+    /** Constant, list of available currencies */
     currencyList: PropTypes.objectOf(
         PropTypes.shape({
-            // Symbol for the currency
-            symbol: PropTypes.string,
+            /** Symbol of the currency */
+            symbol: PropTypes.string.isRequired,
         }),
     ),
+
+    /** The route object passed to this page from the navigator */
+    route: PropTypes.shape({
+        /** Each parameter passed via the URL */
+        params: PropTypes.shape({
+            /** The policyID that is being configured */
+            policyID: PropTypes.string.isRequired,
+        }).isRequired,
+    }).isRequired,
+
     ...policyPropTypes,
-    ...withLocalizePropTypes,
     ...windowDimensionsPropTypes,
 };
 
@@ -44,26 +54,22 @@ const defaultProps = {
     ...policyDefaultProps,
 };
 
-function WorkspaceSettingsPage(props) {
-    const currencyItems = useMemo(() => {
-        const currencyListKeys = _.keys(props.currencyList);
-        return _.map(currencyListKeys, (currencyCode) => ({
-            value: currencyCode,
-            label: `${currencyCode} - ${props.currencyList[currencyCode].symbol}`,
-        }));
-    }, [props.currencyList]);
+function WorkspaceSettingsPage({policy, currencyList, windowWidth, route}) {
+    const {translate} = useLocalize();
+
+    const formattedCurrency = !_.isEmpty(policy) && !_.isEmpty(currencyList) ? `${policy.outputCurrency} - ${currencyList[policy.outputCurrency].symbol}` : '';
 
     const submit = useCallback(
         (values) => {
-            if (props.policy.isPolicyUpdating) {
+            if (policy.isPolicyUpdating) {
                 return;
             }
-            const outputCurrency = values.currency;
-            Policy.updateGeneralSettings(props.policy.id, values.name.trim(), outputCurrency);
+
+            Policy.updateGeneralSettings(policy.id, values.name.trim(), policy.outputCurrency);
             Keyboard.dismiss();
-            Navigation.goBack(ROUTES.WORKSPACE_INITIAL.getRoute(props.policy.id));
+            Navigation.goBack(ROUTES.WORKSPACE_INITIAL.getRoute(policy.id));
         },
-        [props.policy.id, props.policy.isPolicyUpdating],
+        [policy.id, policy.isPolicyUpdating, policy.outputCurrency],
     );
 
     const validate = useCallback((values) => {
@@ -81,33 +87,36 @@ function WorkspaceSettingsPage(props) {
         return errors;
     }, []);
 
-    const policyName = lodashGet(props.policy, 'name', '');
+    const onPressCurrency = useCallback(() => Navigation.navigate(ROUTES.WORKSPACE_SETTINGS_CURRENCY.getRoute(policy.id)), [policy.id]);
+
+    const policyName = lodashGet(policy, 'name', '');
 
     return (
         <WorkspacePageWithSections
-            headerText={props.translate('workspace.common.settings')}
-            route={props.route}
+            headerText={translate('workspace.common.settings')}
+            route={route}
             guidesCallTaskID={CONST.GUIDES_CALL_TASK_IDS.WORKSPACE_SETTINGS}
         >
             {(hasVBA) => (
                 <Form
                     formID={ONYXKEYS.FORMS.WORKSPACE_SETTINGS_FORM}
-                    submitButtonText={props.translate('workspace.editor.save')}
-                    style={[styles.mh5, styles.flexGrow1]}
+                    submitButtonText={translate('workspace.editor.save')}
+                    style={styles.flexGrow1}
+                    submitButtonStyles={[styles.mh5]}
                     scrollContextEnabled
                     validate={validate}
                     onSubmit={submit}
                     enabledWhenOffline
                 >
                     <AvatarWithImagePicker
-                        isUploading={props.policy.isAvatarUploading}
-                        source={lodashGet(props.policy, 'avatar')}
+                        isUploading={policy.isAvatarUploading}
+                        source={lodashGet(policy, 'avatar')}
                         size={CONST.AVATAR_SIZE.LARGE}
                         DefaultAvatar={() => (
                             <Avatar
                                 containerStyles={styles.avatarLarge}
                                 imageStyles={[styles.avatarLarge, styles.alignSelfCenter]}
-                                source={props.policy.avatar ? props.policy.avatar : ReportUtils.getDefaultWorkspaceAvatar(policyName)}
+                                source={policy.avatar ? policy.avatar : ReportUtils.getDefaultWorkspaceAvatar(policyName)}
                                 fallbackIcon={Expensicons.FallbackWorkspaceAvatar}
                                 size={CONST.AVATAR_SIZE.LARGE}
                                 name={policyName}
@@ -117,39 +126,41 @@ function WorkspaceSettingsPage(props) {
                         type={CONST.ICON_TYPE_WORKSPACE}
                         fallbackIcon={Expensicons.FallbackWorkspaceAvatar}
                         style={[styles.mb3]}
-                        anchorPosition={styles.createMenuPositionProfile(props.windowWidth)}
+                        anchorPosition={styles.createMenuPositionProfile(windowWidth)}
                         anchorAlignment={{horizontal: CONST.MODAL.ANCHOR_ORIGIN_HORIZONTAL.LEFT, vertical: CONST.MODAL.ANCHOR_ORIGIN_VERTICAL.TOP}}
-                        isUsingDefaultAvatar={!lodashGet(props.policy, 'avatar', null)}
-                        onImageSelected={(file) => Policy.updateWorkspaceAvatar(lodashGet(props.policy, 'id', ''), file)}
-                        onImageRemoved={() => Policy.deleteWorkspaceAvatar(lodashGet(props.policy, 'id', ''))}
+                        isUsingDefaultAvatar={!lodashGet(policy, 'avatar', null)}
+                        onImageSelected={(file) => Policy.updateWorkspaceAvatar(lodashGet(policy, 'id', ''), file)}
+                        onImageRemoved={() => Policy.deleteWorkspaceAvatar(lodashGet(policy, 'id', ''))}
                         editorMaskImage={Expensicons.ImageCropSquareMask}
-                        pendingAction={lodashGet(props.policy, 'pendingFields.avatar', null)}
-                        errors={lodashGet(props.policy, 'errorFields.avatar', null)}
-                        onErrorClose={() => Policy.clearAvatarErrors(props.policy.id)}
-                        previewSource={UserUtils.getFullSizeAvatar(props.policy.avatar, '')}
-                        headerTitle={props.translate('workspace.common.workspaceAvatar')}
-                        originalFileName={props.policy.originalFileName}
+                        pendingAction={lodashGet(policy, 'pendingFields.avatar', null)}
+                        errors={lodashGet(policy, 'errorFields.avatar', null)}
+                        onErrorClose={() => Policy.clearAvatarErrors(policy.id)}
+                        previewSource={UserUtils.getFullSizeAvatar(policy.avatar, '')}
+                        headerTitle={translate('workspace.common.workspaceAvatar')}
+                        originalFileName={policy.originalFileName}
                     />
-                    <OfflineWithFeedback pendingAction={lodashGet(props.policy, 'pendingFields.generalSettings')}>
+                    <OfflineWithFeedback pendingAction={lodashGet(policy, 'pendingFields.generalSettings')}>
                         <TextInput
                             accessibilityRole={CONST.ACCESSIBILITY_ROLE.TEXT}
                             inputID="name"
-                            label={props.translate('workspace.editor.nameInputLabel')}
-                            accessibilityLabel={props.translate('workspace.editor.nameInputLabel')}
-                            containerStyles={[styles.mt4]}
-                            defaultValue={props.policy.name}
+                            label={translate('workspace.editor.nameInputLabel')}
+                            accessibilityLabel={translate('workspace.editor.nameInputLabel')}
+                            containerStyles={[styles.mt4, styles.mh5]}
+                            defaultValue={policy.name}
                             maxLength={CONST.WORKSPACE_NAME_CHARACTER_LIMIT}
                             spellCheck={false}
                         />
                         <View style={[styles.mt4]}>
-                            <Picker
-                                inputID="currency"
-                                label={props.translate('workspace.editor.currencyInputLabel')}
-                                items={currencyItems}
-                                isDisabled={hasVBA}
-                                defaultValue={props.policy.outputCurrency}
-                                hintText={hasVBA ? props.translate('workspace.editor.currencyInputDisabledText') : props.translate('workspace.editor.currencyInputHelpText')}
+                            <MenuItemWithTopDescription
+                                title={formattedCurrency}
+                                description={translate('workspace.editor.currencyInputLabel')}
+                                shouldShowRightIcon
+                                disabled={hasVBA}
+                                onPress={onPressCurrency}
                             />
+                            <Text style={[styles.textLabel, styles.colorMuted, styles.mt2, styles.mh5]}>
+                                {hasVBA ? translate('workspace.editor.currencyInputDisabledText') : translate('workspace.editor.currencyInputHelpText')}
+                            </Text>
                         </View>
                     </OfflineWithFeedback>
                 </Form>
@@ -168,6 +179,5 @@ export default compose(
     withOnyx({
         currencyList: {key: ONYXKEYS.CURRENCY_LIST},
     }),
-    withLocalize,
     withNetwork(),
 )(WorkspaceSettingsPage);
diff --git a/src/pages/workspace/reimburse/WorkspaceRateAndUnitPage.js b/src/pages/workspace/reimburse/WorkspaceRateAndUnitPage.js
index bdbcd1919257..026441c665a2 100644
--- a/src/pages/workspace/reimburse/WorkspaceRateAndUnitPage.js
+++ b/src/pages/workspace/reimburse/WorkspaceRateAndUnitPage.js
@@ -22,6 +22,7 @@ import ROUTES from '../../../ROUTES';
 import getPermittedDecimalSeparator from '../../../libs/getPermittedDecimalSeparator';
 import * as BankAccounts from '../../../libs/actions/BankAccounts';
 import * as ReimbursementAccountProps from '../../ReimbursementAccount/reimbursementAccountPropTypes';
+import * as NumberUtils from '../../../libs/NumberUtils';
 
 const propTypes = {
     /** Bank account attached to free plan */
@@ -86,7 +87,7 @@ class WorkspaceRateAndUnitPage extends React.Component {
     }
 
     getNumericValue(value) {
-        const numValue = parseFloat(value.toString().replace(',', '.'));
+        const numValue = NumberUtils.parseFloatAnyLocale(value.toString());
         if (Number.isNaN(numValue)) {
             return NaN;
         }
@@ -137,7 +138,7 @@ class WorkspaceRateAndUnitPage extends React.Component {
         const rateValueRegex = RegExp(String.raw`^-?\d{0,8}([${getPermittedDecimalSeparator(decimalSeparator)}]\d{1,3})?$`, 'i');
         if (!rateValueRegex.test(values.rate) || values.rate === '') {
             errors.rate = 'workspace.reimburse.invalidRateError';
-        } else if (parseFloat(values.rate) <= 0) {
+        } else if (NumberUtils.parseFloatAnyLocale(values.rate) <= 0) {
             errors.rate = 'workspace.reimburse.lowRateError';
         }
         return errors;
diff --git a/src/setup/platformSetup/index.desktop.js b/src/setup/platformSetup/index.desktop.js
index a1585065e142..0fff03ed252b 100644
--- a/src/setup/platformSetup/index.desktop.js
+++ b/src/setup/platformSetup/index.desktop.js
@@ -1,9 +1,10 @@
 import {AppRegistry} from 'react-native';
 import Config from '../../CONFIG';
 import LocalNotification from '../../libs/Notification/LocalNotification';
-import * as KeyboardShortcuts from '../../libs/actions/KeyboardShortcuts';
 import DateUtils from '../../libs/DateUtils';
 import ELECTRON_EVENTS from '../../../desktop/ELECTRON_EVENTS';
+import ROUTES from '../../ROUTES';
+import Navigation from '../../libs/Navigation/Navigation';
 
 export default function () {
     AppRegistry.runApplication(Config.APP_NAME, {
@@ -16,7 +17,9 @@ export default function () {
     });
 
     // Trigger action to show keyboard shortcuts
-    window.electron.on(ELECTRON_EVENTS.SHOW_KEYBOARD_SHORTCUTS_MODAL, KeyboardShortcuts.showKeyboardShortcutModal);
+    window.electron.on(ELECTRON_EVENTS.KEYBOARD_SHORTCUTS_PAGE, () => {
+        Navigation.navigate(ROUTES.KEYBOARD_SHORTCUTS);
+    });
 
     // Start current date updater
     DateUtils.startCurrentDateUpdater();
diff --git a/src/stories/EReceipt.stories.js b/src/stories/EReceipt.stories.js
new file mode 100644
index 000000000000..3099e0f4a128
--- /dev/null
+++ b/src/stories/EReceipt.stories.js
@@ -0,0 +1,240 @@
+/* eslint-disable rulesdir/prefer-actions-set-data */
+import React from 'react';
+import Onyx from 'react-native-onyx';
+import EReceipt from '../components/EReceipt';
+import ONYXKEYS from '../ONYXKEYS';
+
+const transactionData = {
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_1`]: {
+        transactionID: 'FAKE_1',
+        amount: 1000,
+        currency: 'USD',
+        cardID: 4,
+        merchant: 'United Airlines',
+        mccGroup: 'Goods',
+        created: '2023-07-24 13:46:20',
+    },
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_2`]: {
+        transactionID: 'FAKE_2',
+        amount: 1000,
+        currency: 'USD',
+        cardID: 4,
+        merchant: 'United Airlines',
+        mccGroup: 'Airlines',
+        created: '2023-07-24 13:46:20',
+    },
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_3`]: {
+        transactionID: 'FAKE_3',
+        amount: 1000,
+        currency: 'USD',
+        cardID: 5,
+        merchant: 'United Airlines',
+        mccGroup: 'Commuter',
+        created: '2023-07-24 13:46:20',
+    },
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_4`]: {transactionID: 'FAKE_4', amount: 444444, currency: 'USD', cardID: 4, merchant: 'Chevron', mccGroup: 'Gas', created: '2023-07-24 13:46:20'},
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_5`]: {
+        transactionID: 'FAKE_5',
+        amount: 230440,
+        currency: 'USD',
+        cardID: 4,
+        merchant: 'Barnes and Noble',
+        mccGroup: 'Goods',
+        created: '2022-03-21 13:46:20',
+    },
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_6`]: {
+        transactionID: 'FAKE_6',
+        amount: 333333,
+        currency: 'USD',
+        cardID: 4,
+        merchant: 'Trader Joes',
+        mccGroup: 'Groceries',
+        created: '2023-12-24 13:46:20',
+    },
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_7`]: {
+        transactionID: 'FAKE_7',
+        amount: 1000,
+        currency: 'USD',
+        cardID: 4,
+        merchant: "Linda's Place",
+        mccGroup: 'Hotel',
+        created: '2023-03-24 13:46:20',
+    },
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_8`]: {
+        transactionID: 'FAKE_8',
+        amount: 2000,
+        currency: 'USD',
+        cardID: 4,
+        merchant: 'United Post Office',
+        mccGroup: 'Mail',
+        created: '2023-09-24 13:46:20',
+    },
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_9`]: {
+        transactionID: 'FAKE_9',
+        amount: 40884002,
+        currency: 'USD',
+        cardID: 4,
+        merchant: 'Dishoom',
+        mccGroup: 'Meals',
+        created: '2023-07-24 13:46:20',
+    },
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_10`]: {
+        transactionID: 'FAKE_10',
+        amount: 300000,
+        currency: 'USD',
+        cardID: 4,
+        merchant: 'Hertz',
+        mccGroup: 'Rental',
+        created: '2023-07-24 13:46:20',
+    },
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_11`]: {
+        transactionID: 'FAKE_11',
+        amount: 1000,
+        currency: 'USD',
+        cardID: 4,
+        merchant: 'Laundromat',
+        mccGroup: 'Services',
+        created: '2023-07-24 13:46:20',
+    },
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_12`]: {transactionID: 'FAKE_12', amount: 1000, currency: 'USD', cardID: 4, merchant: 'Uber', mccGroup: 'Taxi', created: '2023-07-24 13:46:20'},
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_13`]: {
+        transactionID: 'FAKE_13',
+        amount: 11230,
+        currency: 'USD',
+        cardID: 4,
+        merchant: 'Pirate Party Store',
+        mccGroup: 'Miscellaneous',
+        created: '2023-10-31 13:46:20',
+    },
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_14`]: {
+        transactionID: 'FAKE_14',
+        amount: 21500,
+        currency: 'GBP',
+        cardID: 4,
+        merchant: 'Light Bulbs R-US',
+        mccGroup: 'Utilities',
+        created: '2023-06-24 13:46:20',
+    },
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_15`]: {
+        transactionID: 'FAKE_15',
+        amount: 200,
+        currency: 'USD',
+        cardID: 4,
+        merchant: 'Invalid MCC',
+        mccGroup: 'invalidMCC',
+        created: '2023-01-11 13:46:20',
+    },
+    [`${ONYXKEYS.COLLECTION.TRANSACTION}FAKE_16`]: {
+        transactionID: 'FAKE_16',
+        amount: 200,
+        currency: 'USD',
+        cardID: 4,
+        merchant: 'This is a very very very very very very very very long merchant name, why would you ever shop at a store with a sign this long?',
+        mccGroup: 'invalidMCC',
+        created: '2023-01-11 13:46:20',
+    },
+};
+
+Onyx.mergeCollection(ONYXKEYS.COLLECTION.TRANSACTION, transactionData);
+Onyx.merge('cardList', {
+    4: {bank: 'Expensify Card', lastFourPAN: '1000'},
+    5: {bank: 'Expensify Card', lastFourPAN: '4444'},
+});
+
+/**
+ * We use the Component Story Format for writing stories. Follow the docs here:
+ *
+ * https://storybook.js.org/docs/react/writing-stories/introduction#component-story-format
+ */
+const story = {
+    title: 'Components/EReceipt',
+    component: EReceipt,
+};
+
+function Template(args) {
+    // eslint-disable-next-line react/jsx-props-no-spreading
+    return <EReceipt {...args} />;
+}
+
+const Default = Template.bind({});
+Default.args = {
+    transactionID: 'FAKE_1',
+};
+
+const Airlines = Template.bind({});
+Airlines.args = {
+    transactionID: 'FAKE_2',
+};
+
+const Commuter = Template.bind({});
+Commuter.args = {
+    transactionID: 'FAKE_3',
+};
+
+const Gas = Template.bind({});
+Gas.args = {
+    transactionID: 'FAKE_4',
+};
+
+const Goods = Template.bind({});
+Goods.args = {
+    transactionID: 'FAKE_5',
+};
+
+const Groceries = Template.bind({});
+Groceries.args = {
+    transactionID: 'FAKE_6',
+};
+
+const Hotel = Template.bind({});
+Hotel.args = {
+    transactionID: 'FAKE_7',
+};
+
+const Mail = Template.bind({});
+Mail.args = {
+    transactionID: 'FAKE_8',
+};
+
+const Meals = Template.bind({});
+Meals.args = {
+    transactionID: 'FAKE_9',
+};
+
+const Rental = Template.bind({});
+Rental.args = {
+    transactionID: 'FAKE_10',
+};
+
+const Services = Template.bind({});
+Services.args = {
+    transactionID: 'FAKE_11',
+};
+
+const Taxi = Template.bind({});
+Taxi.args = {
+    transactionID: 'FAKE_12',
+};
+
+const Miscellaneous = Template.bind({});
+Miscellaneous.args = {
+    transactionID: 'FAKE_13',
+};
+
+const Utilities = Template.bind({});
+Utilities.args = {
+    transactionID: 'FAKE_14',
+};
+
+const invalidMCC = Template.bind({});
+invalidMCC.args = {
+    transactionID: 'FAKE_15',
+};
+
+const veryLong = Template.bind({});
+veryLong.args = {
+    transactionID: 'FAKE_16',
+};
+
+export default story;
+export {Default, Airlines, Commuter, Gas, Goods, Groceries, Hotel, Mail, Meals, Rental, Services, Taxi, Miscellaneous, Utilities, invalidMCC, veryLong};
diff --git a/src/stories/EReceiptThumbail.stories.js b/src/stories/EReceiptThumbail.stories.js
new file mode 100644
index 000000000000..3d8e79957172
--- /dev/null
+++ b/src/stories/EReceiptThumbail.stories.js
@@ -0,0 +1,118 @@
+/* eslint-disable react/jsx-props-no-spreading */
+import React from 'react';
+import {View} from 'react-native';
+import EReceiptThumbnail from '../components/EReceiptThumbnail';
+
+/**
+ * We use the Component Story Format for writing stories. Follow the docs here:
+ *
+ * https://storybook.js.org/docs/react/writing-stories/introduction#component-story-format
+ */
+const story = {
+    title: 'Components/EReceiptThumbnail',
+    component: EReceiptThumbnail,
+};
+
+function Template(args) {
+    return (
+        <View style={{display: 'flex', flexDirection: 'column', gap: 12}}>
+            <View>
+                <EReceiptThumbnail {...args} />
+            </View>
+
+            <View style={{height: 116, width: 89, borderRadius: 0, overflow: 'hidden'}}>
+                <EReceiptThumbnail {...args} />
+            </View>
+
+            <View style={{height: 140, width: 143, borderRadius: 16, overflow: 'hidden'}}>
+                <EReceiptThumbnail {...args} />
+            </View>
+
+            <View style={{height: 140, width: 283, borderRadius: 16, overflow: 'hidden'}}>
+                <EReceiptThumbnail {...args} />
+            </View>
+
+            <View style={{height: 175, width: 335, borderRadius: 16, overflow: 'hidden'}}>
+                <EReceiptThumbnail {...args} />
+            </View>
+        </View>
+    );
+}
+
+const Default = Template.bind({});
+Default.args = {
+    transactionID: 'FAKE_1',
+};
+
+const Airlines = Template.bind({});
+Airlines.args = {
+    transactionID: 'FAKE_2',
+};
+
+const Commuter = Template.bind({});
+Commuter.args = {
+    transactionID: 'FAKE_3',
+};
+
+const Gas = Template.bind({});
+Gas.args = {
+    transactionID: 'FAKE_4',
+};
+
+const Goods = Template.bind({});
+Goods.args = {
+    transactionID: 'FAKE_5',
+};
+
+const Groceries = Template.bind({});
+Groceries.args = {
+    transactionID: 'FAKE_6',
+};
+
+const Hotel = Template.bind({});
+Hotel.args = {
+    transactionID: 'FAKE_7',
+};
+
+const Mail = Template.bind({});
+Mail.args = {
+    transactionID: 'FAKE_8',
+};
+
+const Meals = Template.bind({});
+Meals.args = {
+    transactionID: 'FAKE_9',
+};
+
+const Rental = Template.bind({});
+Rental.args = {
+    transactionID: 'FAKE_10',
+};
+
+const Services = Template.bind({});
+Services.args = {
+    transactionID: 'FAKE_11',
+};
+
+const Taxi = Template.bind({});
+Taxi.args = {
+    transactionID: 'FAKE_12',
+};
+
+const Miscellaneous = Template.bind({});
+Miscellaneous.args = {
+    transactionID: 'FAKE_13',
+};
+
+const Utilities = Template.bind({});
+Utilities.args = {
+    transactionID: 'FAKE_14',
+};
+
+const invalidMCC = Template.bind({});
+invalidMCC.args = {
+    transactionID: 'FAKE_15',
+};
+
+export default story;
+export {Default, Airlines, Commuter, Gas, Goods, Groceries, Hotel, Mail, Meals, Rental, Services, Taxi, Miscellaneous, Utilities, invalidMCC};
diff --git a/src/stories/ReportActionItemImages.stories.js b/src/stories/ReportActionItemImages.stories.js
new file mode 100644
index 000000000000..e619cc2ee143
--- /dev/null
+++ b/src/stories/ReportActionItemImages.stories.js
@@ -0,0 +1,142 @@
+import React from 'react';
+import ReportActionItemImages from '../components/ReportActionItem/ReportActionItemImages';
+import PressableWithoutFeedback from '../components/Pressable/PressableWithoutFeedback';
+
+/**
+ * We use the Component Story Format for writing stories. Follow the docs here:
+ *
+ * https://storybook.js.org/docs/react/writing-stories/introduction#component-story-format
+ */
+const story = {
+    title: 'Components/ReportActionItemImages',
+    component: ReportActionItemImages,
+};
+
+function Template(args) {
+    return (
+        <PressableWithoutFeedback
+            accessibilityLabel="ReportActionItemImages Story"
+            style={{flex: 1}}
+        >
+            {({hovered}) => (
+                <ReportActionItemImages
+                    // eslint-disable-next-line react/jsx-props-no-spreading
+                    {...args}
+                    isHovered={hovered}
+                />
+            )}
+        </PressableWithoutFeedback>
+    );
+}
+
+// Arguments can be passed to the component by binding
+// See: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
+const Default = Template.bind({});
+Default.args = {
+    images: [{image: 'https://c02.purpledshub.com/uploads/sites/41/2021/05/sleeping-cat-27126ee.jpg', thumbnail: ''}],
+    size: 1,
+    total: 1,
+};
+
+const TwoImages = Template.bind({});
+TwoImages.args = {
+    images: [
+        {
+            image: 'https://c02.purpledshub.com/uploads/sites/41/2021/05/sleeping-cat-27126ee.jpg',
+            thumbnail: '',
+        },
+        {
+            image: 'https://i.guim.co.uk/img/media/7d04c4cb7510a4bd9a8bec449f53425aeccee895/298_266_1150_690/master/1150.jpg?width=1200&quality=85&auto=format&fit=max&s=4ae508ecb99c15ec04610b617efb3fa7',
+            thumbnail: '',
+        },
+    ],
+    size: 2,
+    total: 2,
+};
+
+const ThreeImages = Template.bind({});
+ThreeImages.args = {
+    images: [
+        {
+            image: 'https://c02.purpledshub.com/uploads/sites/41/2021/05/sleeping-cat-27126ee.jpg',
+            thumbnail: '',
+        },
+        {
+            image: 'https://i.guim.co.uk/img/media/7d04c4cb7510a4bd9a8bec449f53425aeccee895/298_266_1150_690/master/1150.jpg?width=1200&quality=85&auto=format&fit=max&s=4ae508ecb99c15ec04610b617efb3fa7',
+            thumbnail: '',
+        },
+        {
+            image: 'https://cdn.theatlantic.com/thumbor/d8lh_KAZuOgBYslMOP4T0iu9Fks=/0x62:2000x1187/1600x900/media/img/mt/2018/03/AP_325360162607/original.jpg',
+            thumbnail: '',
+        },
+    ],
+    size: 3,
+    total: 3,
+};
+
+const FourImages = Template.bind({});
+FourImages.args = {
+    images: [
+        {
+            image: 'https://c02.purpledshub.com/uploads/sites/41/2021/05/sleeping-cat-27126ee.jpg',
+            thumbnail: '',
+        },
+        {
+            image: 'https://i.guim.co.uk/img/media/7d04c4cb7510a4bd9a8bec449f53425aeccee895/298_266_1150_690/master/1150.jpg?width=1200&quality=85&auto=format&fit=max&s=4ae508ecb99c15ec04610b617efb3fa7',
+            thumbnail: '',
+        },
+        {
+            image: 'https://cdn.theatlantic.com/thumbor/d8lh_KAZuOgBYslMOP4T0iu9Fks=/0x62:2000x1187/1600x900/media/img/mt/2018/03/AP_325360162607/original.jpg',
+            thumbnail: '',
+        },
+        {
+            image: 'https://www.alleycat.org/wp-content/uploads/2019/03/FELV-cat.jpg',
+            thumbnail: '',
+        },
+    ],
+    size: 4,
+    total: 4,
+};
+
+const ThreePlusTwoImages = Template.bind({});
+ThreePlusTwoImages.args = {
+    images: [
+        {
+            image: 'https://c02.purpledshub.com/uploads/sites/41/2021/05/sleeping-cat-27126ee.jpg',
+            thumbnail: '',
+        },
+        {
+            image: 'https://i.guim.co.uk/img/media/7d04c4cb7510a4bd9a8bec449f53425aeccee895/298_266_1150_690/master/1150.jpg?width=1200&quality=85&auto=format&fit=max&s=4ae508ecb99c15ec04610b617efb3fa7',
+            thumbnail: '',
+        },
+        {
+            image: 'https://cdn.theatlantic.com/thumbor/d8lh_KAZuOgBYslMOP4T0iu9Fks=/0x62:2000x1187/1600x900/media/img/mt/2018/03/AP_325360162607/original.jpg',
+            thumbnail: '',
+        },
+    ],
+    size: 3,
+    total: 5,
+};
+
+const ThreePlusTenImages = Template.bind({});
+ThreePlusTenImages.args = {
+    images: [
+        {
+            image: 'https://c02.purpledshub.com/uploads/sites/41/2021/05/sleeping-cat-27126ee.jpg',
+            thumbnail: '',
+        },
+        {
+            image: 'https://i.guim.co.uk/img/media/7d04c4cb7510a4bd9a8bec449f53425aeccee895/298_266_1150_690/master/1150.jpg?width=1200&quality=85&auto=format&fit=max&s=4ae508ecb99c15ec04610b617efb3fa7',
+            thumbnail: '',
+        },
+        {
+            image: 'https://cdn.theatlantic.com/thumbor/d8lh_KAZuOgBYslMOP4T0iu9Fks=/0x62:2000x1187/1600x900/media/img/mt/2018/03/AP_325360162607/original.jpg',
+            thumbnail: '',
+        },
+    ],
+    size: 3,
+    total: 13,
+};
+
+export default story;
+export {Default, TwoImages, ThreeImages, FourImages, ThreePlusTwoImages, ThreePlusTenImages};
diff --git a/src/styles/StyleUtils.ts b/src/styles/StyleUtils.ts
index 5fc8ae77ac35..62da2bf3be4b 100644
--- a/src/styles/StyleUtils.ts
+++ b/src/styles/StyleUtils.ts
@@ -1,21 +1,26 @@
-import {EdgeInsets} from 'react-native-safe-area-context';
-import {Animated, PressableStateCallbackType, TextStyle, ViewStyle} from 'react-native';
 import {CSSProperties} from 'react';
+import {Animated, DimensionValue, ImageStyle, PressableStateCallbackType, TextStyle, ViewStyle} from 'react-native';
+import {EdgeInsets} from 'react-native-safe-area-context';
 import {ValueOf} from 'type-fest';
 import CONST from '../CONST';
+import * as Browser from '../libs/Browser';
+import * as UserUtils from '../libs/UserUtils';
+import colors from './colors';
 import fontFamily from './fontFamily';
+import styles from './styles';
 import themeColors from './themes/default';
-import variables from './variables';
-import colors from './colors';
+import cursor from './utilities/cursor';
 import positioning from './utilities/positioning';
-import styles from './styles';
 import spacing from './utilities/spacing';
-import * as UserUtils from '../libs/UserUtils';
-import * as Browser from '../libs/Browser';
-import cursor from './utilities/cursor';
+import variables from './variables';
+import {Transaction} from '../types/onyx';
+
+type AllStyles = ViewStyle | TextStyle | ImageStyle;
+type ParsableStyle = AllStyles | ((state: PressableStateCallbackType) => AllStyles);
 
 type ColorValue = ValueOf<typeof colors>;
 type AvatarSizeName = ValueOf<typeof CONST.AVATAR_SIZE>;
+type EReceiptColorName = ValueOf<typeof CONST.ERECEIPT_COLORS>;
 type AvatarSizeValue = ValueOf<
     Pick<
         typeof variables,
@@ -38,12 +43,11 @@ type ButtonSizeValue = ValueOf<typeof CONST.DROPDOWN_BUTTON_SIZE>;
 type EmptyAvatarSizeName = ValueOf<Pick<typeof CONST.AVATAR_SIZE, 'SMALL' | 'MEDIUM' | 'LARGE'>>;
 type ButtonStateName = ValueOf<typeof CONST.BUTTON_STATES>;
 type AvatarSize = {width: number};
-type ParsableStyle = ViewStyle | CSSProperties | ((state: PressableStateCallbackType) => ViewStyle | CSSProperties);
 
 type WorkspaceColorStyle = {backgroundColor: ColorValue; fill: ColorValue};
 type EreceiptColorStyle = {backgroundColor: ColorValue; color: ColorValue};
 
-type ModalPaddingStylesArgs = {
+type ModalPaddingStylesParams = {
     shouldAddBottomSafeAreaMargin: boolean;
     shouldAddTopSafeAreaMargin: boolean;
     shouldAddBottomSafeAreaPadding: boolean;
@@ -59,13 +63,19 @@ type ModalPaddingStylesArgs = {
     insets: EdgeInsets;
 };
 
-type AvatarBorderStyleArgs = {
+type AvatarBorderStyleParams = {
     isHovered: boolean;
     isPressed: boolean;
     isInReportAction: boolean;
     shouldUseCardBackground: boolean;
 };
 
+type GetBaseAutoCompleteSuggestionContainerStyleParams = {
+    left: number;
+    bottom: number;
+    width: number;
+};
+
 const workspaceColorOptions: WorkspaceColorStyle[] = [
     {backgroundColor: colors.blue200, fill: colors.blue700},
     {backgroundColor: colors.blue400, fill: colors.blue800},
@@ -87,13 +97,22 @@ const workspaceColorOptions: WorkspaceColorStyle[] = [
     {backgroundColor: colors.ice700, fill: colors.ice200},
 ];
 
-const eReceiptColorOptions: EreceiptColorStyle[] = [
-    {backgroundColor: colors.yellow600, color: colors.yellow100},
-    {backgroundColor: colors.blue800, color: colors.ice400},
-    {backgroundColor: colors.blue400, color: colors.blue100},
-    {backgroundColor: colors.green800, color: colors.green400},
-    {backgroundColor: colors.tangerine800, color: colors.tangerine400},
-    {backgroundColor: colors.pink800, color: colors.pink400},
+const eReceiptColorStyles: Partial<Record<EReceiptColorName, EreceiptColorStyle>> = {
+    [CONST.ERECEIPT_COLORS.YELLOW]: {backgroundColor: colors.yellow600, color: colors.yellow100},
+    [CONST.ERECEIPT_COLORS.ICE]: {backgroundColor: colors.blue800, color: colors.ice400},
+    [CONST.ERECEIPT_COLORS.BLUE]: {backgroundColor: colors.blue400, color: colors.blue100},
+    [CONST.ERECEIPT_COLORS.GREEN]: {backgroundColor: colors.green800, color: colors.green400},
+    [CONST.ERECEIPT_COLORS.TANGERINE]: {backgroundColor: colors.tangerine800, color: colors.tangerine400},
+    [CONST.ERECEIPT_COLORS.PINK]: {backgroundColor: colors.pink800, color: colors.pink400},
+};
+
+const eReceiptColors: EReceiptColorName[] = [
+    CONST.ERECEIPT_COLORS.YELLOW,
+    CONST.ERECEIPT_COLORS.ICE,
+    CONST.ERECEIPT_COLORS.BLUE,
+    CONST.ERECEIPT_COLORS.GREEN,
+    CONST.ERECEIPT_COLORS.TANGERINE,
+    CONST.ERECEIPT_COLORS.PINK,
 ];
 
 const avatarBorderSizes: Partial<Record<AvatarSizeName, number>> = {
@@ -127,7 +146,7 @@ const avatarSizes: Record<AvatarSizeName, AvatarSizeValue> = {
     [CONST.AVATAR_SIZE.SMALL_NORMAL]: variables.avatarSizeSmallNormal,
 };
 
-const emptyAvatarStyles: Record<EmptyAvatarSizeName, ViewStyle | CSSProperties> = {
+const emptyAvatarStyles: Record<EmptyAvatarSizeName, ViewStyle> = {
     [CONST.AVATAR_SIZE.SMALL]: styles.emptyAvatarSmall,
     [CONST.AVATAR_SIZE.MEDIUM]: styles.emptyAvatarMedium,
     [CONST.AVATAR_SIZE.LARGE]: styles.emptyAvatarLarge,
@@ -167,21 +186,21 @@ function getAvatarSize(size: AvatarSizeName): number {
 /**
  * Return the height of magic code input container
  */
-function getHeightOfMagicCodeInput(): ViewStyle | CSSProperties {
+function getHeightOfMagicCodeInput(): ViewStyle {
     return {height: styles.magicCodeInputContainer.minHeight - styles.textInputContainer.borderBottomWidth};
 }
 
 /**
  * Return the style from an empty avatar size constant
  */
-function getEmptyAvatarStyle(size: EmptyAvatarSizeName): ViewStyle | CSSProperties | undefined {
+function getEmptyAvatarStyle(size: EmptyAvatarSizeName): ViewStyle | undefined {
     return emptyAvatarStyles[size];
 }
 
 /**
  * Return the width style from an avatar size constant
  */
-function getAvatarWidthStyle(size: AvatarSizeName): ViewStyle | CSSProperties {
+function getAvatarWidthStyle(size: AvatarSizeName): ViewStyle {
     const avatarSize = getAvatarSize(size);
     return {
         width: avatarSize,
@@ -191,7 +210,7 @@ function getAvatarWidthStyle(size: AvatarSizeName): ViewStyle | CSSProperties {
 /**
  * Return the style from an avatar size constant
  */
-function getAvatarStyle(size: AvatarSizeName): ViewStyle | CSSProperties {
+function getAvatarStyle(size: AvatarSizeName): ViewStyle {
     const avatarSize = getAvatarSize(size);
     return {
         height: avatarSize,
@@ -204,7 +223,7 @@ function getAvatarStyle(size: AvatarSizeName): ViewStyle | CSSProperties {
 /**
  * Get Font size of '+1' text on avatar overlay
  */
-function getAvatarExtraFontSizeStyle(size: AvatarSizeName): TextStyle | CSSProperties {
+function getAvatarExtraFontSizeStyle(size: AvatarSizeName): TextStyle {
     return {
         fontSize: avatarFontSizes[size],
     };
@@ -213,7 +232,7 @@ function getAvatarExtraFontSizeStyle(size: AvatarSizeName): TextStyle | CSSPrope
 /**
  * Get Bordersize of Avatar based on avatar size
  */
-function getAvatarBorderWidth(size: AvatarSizeName): ViewStyle | CSSProperties {
+function getAvatarBorderWidth(size: AvatarSizeName): ViewStyle {
     return {
         borderWidth: avatarBorderWidths[size],
     };
@@ -222,7 +241,7 @@ function getAvatarBorderWidth(size: AvatarSizeName): ViewStyle | CSSProperties {
 /**
  * Return the border radius for an avatar
  */
-function getAvatarBorderRadius(size: AvatarSizeName, type: string): ViewStyle | CSSProperties {
+function getAvatarBorderRadius(size: AvatarSizeName, type: string): ViewStyle {
     if (type === CONST.ICON_TYPE_WORKSPACE) {
         return {borderRadius: avatarBorderSizes[size]};
     }
@@ -234,7 +253,7 @@ function getAvatarBorderRadius(size: AvatarSizeName, type: string): ViewStyle |
 /**
  * Return the border style for an avatar
  */
-function getAvatarBorderStyle(size: AvatarSizeName, type: string): ViewStyle | CSSProperties {
+function getAvatarBorderStyle(size: AvatarSizeName, type: string): ViewStyle {
     return {
         overflow: 'hidden',
         ...getAvatarBorderRadius(size, type),
@@ -244,25 +263,34 @@ function getAvatarBorderStyle(size: AvatarSizeName, type: string): ViewStyle | C
 /**
  * Helper method to return workspace avatar color styles
  */
-function getDefaultWorkspaceAvatarColor(workspaceName: string): ViewStyle | CSSProperties {
+function getDefaultWorkspaceAvatarColor(workspaceName: string): ViewStyle {
     const colorHash = UserUtils.hashText(workspaceName.trim(), workspaceColorOptions.length);
 
     return workspaceColorOptions[colorHash];
 }
 
 /**
- * Helper method to return eReceipt color styles
+ * Helper method to return eReceipt color code
  */
-function getEReceiptColor(transactionID: string): ViewStyle | CSSProperties {
-    const colorHash = UserUtils.hashText(transactionID.trim(), eReceiptColorOptions.length);
+function getEReceiptColorCode(transaction: Transaction): EReceiptColorName {
+    const transactionID = transaction.parentTransactionID ?? transaction.transactionID ?? '';
+
+    const colorHash = UserUtils.hashText(transactionID.trim(), eReceiptColors.length);
 
-    return eReceiptColorOptions[colorHash];
+    return eReceiptColors[colorHash];
+}
+
+/**
+ * Helper method to return eReceipt color styles
+ */
+function getEReceiptColorStyles(colorCode: EReceiptColorName): EreceiptColorStyle | undefined {
+    return eReceiptColorStyles[colorCode];
 }
 
 /**
  * Takes safe area insets and returns padding to use for a View
  */
-function getSafeAreaPadding(insets?: EdgeInsets, insetsPercentage: number = variables.safeInsertPercentage): ViewStyle | CSSProperties {
+function getSafeAreaPadding(insets?: EdgeInsets, insetsPercentage: number = variables.safeInsertPercentage): ViewStyle {
     return {
         paddingTop: insets?.top,
         paddingBottom: (insets?.bottom ?? 0) * insetsPercentage,
@@ -274,11 +302,11 @@ function getSafeAreaPadding(insets?: EdgeInsets, insetsPercentage: number = vari
 /**
  * Takes safe area insets and returns margin to use for a View
  */
-function getSafeAreaMargins(insets?: EdgeInsets): ViewStyle | CSSProperties {
+function getSafeAreaMargins(insets?: EdgeInsets): ViewStyle {
     return {marginBottom: (insets?.bottom ?? 0) * variables.safeInsertPercentage};
 }
 
-function getZoomCursorStyle(isZoomed: boolean, isDragging: boolean): ViewStyle | CSSProperties {
+function getZoomCursorStyle(isZoomed: boolean, isDragging: boolean): ViewStyle {
     if (!isZoomed) {
         // TODO: Remove this "eslint-disable-next" once the theme switching migration is done and styles are fully typed (GH Issue: https://github.com/Expensify/App/issues/27337)
         // eslint-disable-next-line @typescript-eslint/no-unsafe-return
@@ -289,6 +317,7 @@ function getZoomCursorStyle(isZoomed: boolean, isDragging: boolean): ViewStyle |
     return isDragging ? styles.cursorGrabbing : styles.cursorZoomOut;
 }
 
+// NOTE: asserting some web style properties to a valid type, because it isn't possible to augment them.
 function getZoomSizingStyle(
     isZoomed: boolean,
     imgWidth: number,
@@ -297,28 +326,28 @@ function getZoomSizingStyle(
     containerHeight: number,
     containerWidth: number,
     isLoading: boolean,
-): ViewStyle | CSSProperties | undefined {
+): ViewStyle | undefined {
     // Hide image until finished loading to prevent showing preview with wrong dimensions
     if (isLoading || imgWidth === 0 || imgHeight === 0) {
         return undefined;
     }
-    const top = `${Math.max((containerHeight - imgHeight) / 2, 0)}px`;
-    const left = `${Math.max((containerWidth - imgWidth) / 2, 0)}px`;
+    const top = `${Math.max((containerHeight - imgHeight) / 2, 0)}px` as DimensionValue;
+    const left = `${Math.max((containerWidth - imgWidth) / 2, 0)}px` as DimensionValue;
 
     // Return different size and offset style based on zoomScale and isZoom.
     if (isZoomed) {
         // When both width and height are smaller than container(modal) size, set the height by multiplying zoomScale if it is zoomed in.
         if (zoomScale >= 1) {
             return {
-                height: `${imgHeight * zoomScale}px`,
-                width: `${imgWidth * zoomScale}px`,
+                height: `${imgHeight * zoomScale}px` as DimensionValue,
+                width: `${imgWidth * zoomScale}px` as DimensionValue,
             };
         }
 
         // If image height and width are bigger than container size, display image with original size because original size is bigger and position absolute.
         return {
-            height: `${imgHeight}px`,
-            width: `${imgWidth}px`,
+            height: `${imgHeight}px` as DimensionValue,
+            width: `${imgWidth}px` as DimensionValue,
             top,
             left,
         };
@@ -327,8 +356,8 @@ function getZoomSizingStyle(
     // If image is not zoomed in and image size is smaller than container size, display with original size based on offset and position absolute.
     if (zoomScale > 1) {
         return {
-            height: `${imgHeight}px`,
-            width: `${imgWidth}px`,
+            height: `${imgHeight}px` as DimensionValue,
+            width: `${imgWidth}px` as DimensionValue,
             top,
             left,
         };
@@ -336,11 +365,11 @@ function getZoomSizingStyle(
 
     // If image is bigger than container size, display full image in the screen with scaled size (fit by container size) and position absolute.
     // top, left offset should be different when displaying long or wide image.
-    const scaledTop = `${Math.max((containerHeight - imgHeight * zoomScale) / 2, 0)}px`;
-    const scaledLeft = `${Math.max((containerWidth - imgWidth * zoomScale) / 2, 0)}px`;
+    const scaledTop = `${Math.max((containerHeight - imgHeight * zoomScale) / 2, 0)}px` as DimensionValue;
+    const scaledLeft = `${Math.max((containerWidth - imgWidth * zoomScale) / 2, 0)}px` as DimensionValue;
     return {
-        height: `${imgHeight * zoomScale}px`,
-        width: `${imgWidth * zoomScale}px`,
+        height: `${imgHeight * zoomScale}px` as DimensionValue,
+        width: `${imgWidth * zoomScale}px` as DimensionValue,
         top: scaledTop,
         left: scaledLeft,
     };
@@ -349,7 +378,7 @@ function getZoomSizingStyle(
 /**
  * Returns auto grow text input style
  */
-function getWidthStyle(width: number): ViewStyle | CSSProperties {
+function getWidthStyle(width: number): ViewStyle {
     return {
         width,
     };
@@ -358,7 +387,7 @@ function getWidthStyle(width: number): ViewStyle | CSSProperties {
 /**
  * Returns auto grow height text input style
  */
-function getAutoGrowHeightInputStyle(textInputHeight: number, maxHeight: number): ViewStyle | CSSProperties {
+function getAutoGrowHeightInputStyle(textInputHeight: number, maxHeight: number): ViewStyle {
     if (textInputHeight > maxHeight) {
         // TODO: Remove this "eslint-disable-next" once the theme switching migration is done and styles are fully typed (GH Issue: https://github.com/Expensify/App/issues/27337)
         // eslint-disable-next-line @typescript-eslint/no-unsafe-return
@@ -382,7 +411,7 @@ function getAutoGrowHeightInputStyle(textInputHeight: number, maxHeight: number)
 /**
  * Returns a style with backgroundColor and borderColor set to the same color
  */
-function getBackgroundAndBorderStyle(backgroundColor: string): ViewStyle | CSSProperties {
+function getBackgroundAndBorderStyle(backgroundColor: string): ViewStyle {
     return {
         backgroundColor,
         borderColor: backgroundColor,
@@ -392,7 +421,7 @@ function getBackgroundAndBorderStyle(backgroundColor: string): ViewStyle | CSSPr
 /**
  * Returns a style with the specified backgroundColor
  */
-function getBackgroundColorStyle(backgroundColor: string): ViewStyle | CSSProperties {
+function getBackgroundColorStyle(backgroundColor: string): ViewStyle {
     return {
         backgroundColor,
     };
@@ -401,7 +430,7 @@ function getBackgroundColorStyle(backgroundColor: string): ViewStyle | CSSProper
 /**
  * Returns a style for text color
  */
-function getTextColorStyle(color: string): TextStyle | CSSProperties {
+function getTextColorStyle(color: string): TextStyle {
     return {
         color,
     };
@@ -410,7 +439,7 @@ function getTextColorStyle(color: string): TextStyle | CSSProperties {
 /**
  * Returns a style with the specified borderColor
  */
-function getBorderColorStyle(borderColor: string): ViewStyle | CSSProperties {
+function getBorderColorStyle(borderColor: string): ViewStyle {
     return {
         borderColor,
     };
@@ -419,7 +448,7 @@ function getBorderColorStyle(borderColor: string): ViewStyle | CSSProperties {
 /**
  * Returns the width style for the wordmark logo on the sign in page
  */
-function getSignInWordmarkWidthStyle(environment: string, isSmallScreenWidth: boolean): ViewStyle | CSSProperties {
+function getSignInWordmarkWidthStyle(environment: string, isSmallScreenWidth: boolean): ViewStyle {
     if (environment === CONST.ENVIRONMENT.DEV) {
         return isSmallScreenWidth ? {width: variables.signInLogoWidthPill} : {width: variables.signInLogoWidthLargeScreenPill};
     }
@@ -451,7 +480,7 @@ function hexadecimalToRGBArray(hexadecimal: string): number[] | undefined {
 /**
  * Returns a background color with opacity style
  */
-function getBackgroundColorWithOpacityStyle(backgroundColor: string, opacity: number): ViewStyle | CSSProperties {
+function getBackgroundColorWithOpacityStyle(backgroundColor: string, opacity: number): ViewStyle {
     const result = hexadecimalToRGBArray(backgroundColor);
     if (result !== undefined) {
         return {
@@ -464,8 +493,8 @@ function getBackgroundColorWithOpacityStyle(backgroundColor: string, opacity: nu
 /**
  * Generate a style for the background color of the Badge
  */
-function getBadgeColorStyle(success: boolean, error: boolean, isPressed = false, isAdHoc = false): ViewStyle | CSSProperties {
-    if (success) {
+function getBadgeColorStyle(isSuccess: boolean, isError: boolean, isPressed = false, isAdHoc = false): ViewStyle {
+    if (isSuccess) {
         if (isAdHoc) {
             // TODO: Remove this "eslint-disable-next" once the theme switching migration is done and styles are fully typed (GH Issue: https://github.com/Expensify/App/issues/27337)
             // eslint-disable-next-line @typescript-eslint/no-unsafe-return
@@ -475,7 +504,7 @@ function getBadgeColorStyle(success: boolean, error: boolean, isPressed = false,
         // eslint-disable-next-line @typescript-eslint/no-unsafe-return
         return isPressed ? styles.badgeSuccessPressed : styles.badgeSuccess;
     }
-    if (error) {
+    if (isError) {
         // TODO: Remove this "eslint-disable-next" once the theme switching migration is done and styles are fully typed (GH Issue: https://github.com/Expensify/App/issues/27337)
         // eslint-disable-next-line @typescript-eslint/no-unsafe-return
         return isPressed ? styles.badgeDangerPressed : styles.badgeDanger;
@@ -489,7 +518,7 @@ function getBadgeColorStyle(success: boolean, error: boolean, isPressed = false,
  * @param buttonState - One of {'default', 'hovered', 'pressed'}
  * @param isMenuItem - whether this button is apart of a list
  */
-function getButtonBackgroundColorStyle(buttonState: ButtonStateName = CONST.BUTTON_STATES.DEFAULT, isMenuItem = false): ViewStyle | CSSProperties {
+function getButtonBackgroundColorStyle(buttonState: ButtonStateName = CONST.BUTTON_STATES.DEFAULT, isMenuItem = false): ViewStyle {
     switch (buttonState) {
         case CONST.BUTTON_STATES.PRESSED:
             return {backgroundColor: themeColors.buttonPressedBG};
@@ -532,7 +561,7 @@ function getAnimatedFABStyle(rotate: Animated.Value, backgroundColor: Animated.V
     };
 }
 
-function getWidthAndHeightStyle(width: number, height: number | undefined = undefined): ViewStyle | CSSProperties {
+function getWidthAndHeightStyle(width: number, height?: number): ViewStyle {
     return {
         width,
         height: height ?? width,
@@ -553,17 +582,17 @@ function getModalPaddingStyles({
     modalContainerStylePaddingTop,
     modalContainerStylePaddingBottom,
     insets,
-}: ModalPaddingStylesArgs): ViewStyle | CSSProperties {
+}: ModalPaddingStylesParams): ViewStyle {
     // use fallback value for safeAreaPaddingBottom to keep padding bottom consistent with padding top.
     // More info: issue #17376
-    const safeAreaPaddingBottomWithFallback = insets.bottom === 0 ? modalContainerStylePaddingTop || 0 : safeAreaPaddingBottom;
+    const safeAreaPaddingBottomWithFallback = insets.bottom === 0 ? modalContainerStylePaddingTop ?? 0 : safeAreaPaddingBottom;
     return {
-        marginTop: (modalContainerStyleMarginTop || 0) + (shouldAddTopSafeAreaMargin ? safeAreaPaddingTop : 0),
-        marginBottom: (modalContainerStyleMarginBottom || 0) + (shouldAddBottomSafeAreaMargin ? safeAreaPaddingBottomWithFallback : 0),
-        paddingTop: shouldAddTopSafeAreaPadding ? (modalContainerStylePaddingTop || 0) + safeAreaPaddingTop : modalContainerStylePaddingTop || 0,
-        paddingBottom: shouldAddBottomSafeAreaPadding ? (modalContainerStylePaddingBottom || 0) + safeAreaPaddingBottomWithFallback : modalContainerStylePaddingBottom || 0,
-        paddingLeft: safeAreaPaddingLeft || 0,
-        paddingRight: safeAreaPaddingRight || 0,
+        marginTop: (modalContainerStyleMarginTop ?? 0) + (shouldAddTopSafeAreaMargin ? safeAreaPaddingTop : 0),
+        marginBottom: (modalContainerStyleMarginBottom ?? 0) + (shouldAddBottomSafeAreaMargin ? safeAreaPaddingBottomWithFallback : 0),
+        paddingTop: shouldAddTopSafeAreaPadding ? (modalContainerStylePaddingTop ?? 0) + safeAreaPaddingTop : modalContainerStylePaddingTop ?? 0,
+        paddingBottom: shouldAddBottomSafeAreaPadding ? (modalContainerStylePaddingBottom ?? 0) + safeAreaPaddingBottomWithFallback : modalContainerStylePaddingBottom ?? 0,
+        paddingLeft: safeAreaPaddingLeft ?? 0,
+        paddingRight: safeAreaPaddingRight ?? 0,
     };
 }
 
@@ -581,7 +610,7 @@ function getFontFamilyMonospace({fontStyle, fontWeight}: TextStyle): string {
 /**
  * Gives the width for Emoji picker Widget
  */
-function getEmojiPickerStyle(isSmallScreenWidth: boolean): ViewStyle | CSSProperties {
+function getEmojiPickerStyle(isSmallScreenWidth: boolean): ViewStyle {
     if (isSmallScreenWidth) {
         return {
             width: CONST.SMALL_EMOJI_PICKER_SIZE.WIDTH,
@@ -596,7 +625,7 @@ function getEmojiPickerStyle(isSmallScreenWidth: boolean): ViewStyle | CSSProper
 /**
  * Generate the styles for the ReportActionItem wrapper view.
  */
-function getReportActionItemStyle(isHovered = false): ViewStyle | CSSProperties {
+function getReportActionItemStyle(isHovered = false): ViewStyle {
     // TODO: Remove this "eslint-disable-next" once the theme switching migration is done and styles are fully typed (GH Issue: https://github.com/Expensify/App/issues/27337)
     // eslint-disable-next-line @typescript-eslint/no-unsafe-return
     return {
@@ -614,7 +643,7 @@ function getReportActionItemStyle(isHovered = false): ViewStyle | CSSProperties
 /**
  * Generate the wrapper styles for the mini ReportActionContextMenu.
  */
-function getMiniReportActionContextMenuWrapperStyle(isReportActionItemGrouped: boolean): ViewStyle | CSSProperties {
+function getMiniReportActionContextMenuWrapperStyle(isReportActionItemGrouped: boolean): ViewStyle {
     // TODO: Remove this "eslint-disable-next" once the theme switching migration is done and styles are fully typed (GH Issue: https://github.com/Expensify/App/issues/27337)
     // eslint-disable-next-line @typescript-eslint/no-unsafe-return
     return {
@@ -626,7 +655,7 @@ function getMiniReportActionContextMenuWrapperStyle(isReportActionItemGrouped: b
     };
 }
 
-function getPaymentMethodMenuWidth(isSmallScreenWidth: boolean): ViewStyle | CSSProperties {
+function getPaymentMethodMenuWidth(isSmallScreenWidth: boolean): ViewStyle {
     const margin = 20;
     return {width: !isSmallScreenWidth ? variables.sideBarWidth - margin * 2 : undefined};
 }
@@ -712,14 +741,14 @@ function getThemeBackgroundColor(bgColor: string = themeColors.appBG): string {
 /**
  * Parse styleParam and return Styles array
  */
-function parseStyleAsArray(styleParam: ViewStyle | CSSProperties | Array<ViewStyle | CSSProperties>): Array<ViewStyle | CSSProperties> {
+function parseStyleAsArray<T extends AllStyles>(styleParam: T | T[]): T[] {
     return Array.isArray(styleParam) ? styleParam : [styleParam];
 }
 
 /**
  * Parse style function and return Styles object
  */
-function parseStyleFromFunction(style: ParsableStyle, state: PressableStateCallbackType): Array<ViewStyle | CSSProperties> {
+function parseStyleFromFunction(style: ParsableStyle, state: PressableStateCallbackType): AllStyles[] {
     const functionAppliedStyle = typeof style === 'function' ? style(state) : style;
     return parseStyleAsArray(functionAppliedStyle);
 }
@@ -727,8 +756,8 @@ function parseStyleFromFunction(style: ParsableStyle, state: PressableStateCallb
 /**
  * Receives any number of object or array style objects and returns them all as an array
  */
-function combineStyles(...allStyles: Array<ViewStyle | CSSProperties | Array<ViewStyle | CSSProperties>>) {
-    let finalStyles: Array<Array<ViewStyle | CSSProperties>> = [];
+function combineStyles<T extends AllStyles>(...allStyles: Array<T | T[]>): T[] {
+    let finalStyles: T[] = [];
     allStyles.forEach((style) => {
         finalStyles = finalStyles.concat(parseStyleAsArray(style));
     });
@@ -738,7 +767,7 @@ function combineStyles(...allStyles: Array<ViewStyle | CSSProperties | Array<Vie
 /**
  * Get variable padding-left as style
  */
-function getPaddingLeft(paddingLeft: number): ViewStyle | CSSProperties {
+function getPaddingLeft(paddingLeft: number): ViewStyle {
     return {
         paddingLeft,
     };
@@ -755,7 +784,7 @@ function hasSafeAreas(windowWidth: number, windowHeight: number): boolean {
 /**
  * Get height as style
  */
-function getHeight(height: number): ViewStyle | CSSProperties {
+function getHeight(height: number): ViewStyle {
     return {
         height,
     };
@@ -764,16 +793,25 @@ function getHeight(height: number): ViewStyle | CSSProperties {
 /**
  * Get minimum height as style
  */
-function getMinimumHeight(minHeight: number): ViewStyle | CSSProperties {
+function getMinimumHeight(minHeight: number): ViewStyle {
     return {
         minHeight,
     };
 }
 
+/**
+ * Get minimum width as style
+ */
+function getMinimumWidth(minWidth: number): ViewStyle | CSSProperties {
+    return {
+        minWidth,
+    };
+}
+
 /**
  * Get maximum height as style
  */
-function getMaximumHeight(maxHeight: number): ViewStyle | CSSProperties {
+function getMaximumHeight(maxHeight: number): ViewStyle {
     return {
         maxHeight,
     };
@@ -782,7 +820,7 @@ function getMaximumHeight(maxHeight: number): ViewStyle | CSSProperties {
 /**
  * Get maximum width as style
  */
-function getMaximumWidth(maxWidth: number): ViewStyle | CSSProperties {
+function getMaximumWidth(maxWidth: number): ViewStyle {
     return {
         maxWidth,
     };
@@ -797,17 +835,7 @@ function fade(fadeAnimation: Animated.Value): Animated.WithAnimatedValue<ViewSty
     };
 }
 
-/**
- * Return width for keyboard shortcuts modal.
- */
-function getKeyboardShortcutsModalWidth(isSmallScreenWidth: boolean): ViewStyle | CSSProperties {
-    if (isSmallScreenWidth) {
-        return {maxWidth: '100%'};
-    }
-    return {maxWidth: 600};
-}
-
-function getHorizontalStackedAvatarBorderStyle({isHovered, isPressed, isInReportAction = false, shouldUseCardBackground = false}: AvatarBorderStyleArgs): ViewStyle | CSSProperties {
+function getHorizontalStackedAvatarBorderStyle({isHovered, isPressed, isInReportAction = false, shouldUseCardBackground = false}: AvatarBorderStyleParams): ViewStyle {
     let borderColor = shouldUseCardBackground ? themeColors.cardBG : themeColors.appBG;
 
     if (isHovered) {
@@ -824,7 +852,7 @@ function getHorizontalStackedAvatarBorderStyle({isHovered, isPressed, isInReport
 /**
  * Get computed avatar styles based on position and border size
  */
-function getHorizontalStackedAvatarStyle(index: number, overlapSize: number): ViewStyle | CSSProperties {
+function getHorizontalStackedAvatarStyle(index: number, overlapSize: number): ViewStyle {
     return {
         marginLeft: index > 0 ? -overlapSize : 0,
         zIndex: index + 2,
@@ -834,7 +862,7 @@ function getHorizontalStackedAvatarStyle(index: number, overlapSize: number): Vi
 /**
  * Get computed avatar styles of '+1' overlay based on size
  */
-function getHorizontalStackedOverlayAvatarStyle(oneAvatarSize: AvatarSize, oneAvatarBorderWidth: number): ViewStyle | CSSProperties {
+function getHorizontalStackedOverlayAvatarStyle(oneAvatarSize: AvatarSize, oneAvatarBorderWidth: number): ViewStyle {
     return {
         borderWidth: oneAvatarBorderWidth,
         borderRadius: oneAvatarSize.width,
@@ -844,7 +872,7 @@ function getHorizontalStackedOverlayAvatarStyle(oneAvatarSize: AvatarSize, oneAv
     };
 }
 
-function getErrorPageContainerStyle(safeAreaPaddingBottom = 0): ViewStyle | CSSProperties {
+function getErrorPageContainerStyle(safeAreaPaddingBottom = 0): ViewStyle {
     return {
         backgroundColor: themeColors.componentBG,
         paddingBottom: 40 + safeAreaPaddingBottom,
@@ -854,7 +882,7 @@ function getErrorPageContainerStyle(safeAreaPaddingBottom = 0): ViewStyle | CSSP
 /**
  * Gets the correct size for the empty state background image based on screen dimensions
  */
-function getReportWelcomeBackgroundImageStyle(isSmallScreenWidth: boolean): ViewStyle | CSSProperties {
+function getReportWelcomeBackgroundImageStyle(isSmallScreenWidth: boolean): ViewStyle {
     if (isSmallScreenWidth) {
         return {
             height: CONST.EMPTY_STATE_BACKGROUND.SMALL_SCREEN.IMAGE_HEIGHT,
@@ -873,7 +901,7 @@ function getReportWelcomeBackgroundImageStyle(isSmallScreenWidth: boolean): View
 /**
  * Gets the correct top margin size for the chat welcome message based on screen dimensions
  */
-function getReportWelcomeTopMarginStyle(isSmallScreenWidth: boolean): ViewStyle | CSSProperties {
+function getReportWelcomeTopMarginStyle(isSmallScreenWidth: boolean): ViewStyle {
     if (isSmallScreenWidth) {
         return {
             marginTop: CONST.EMPTY_STATE_BACKGROUND.SMALL_SCREEN.VIEW_HEIGHT,
@@ -888,7 +916,7 @@ function getReportWelcomeTopMarginStyle(isSmallScreenWidth: boolean): ViewStyle
 /**
  * Returns fontSize style
  */
-function getFontSizeStyle(fontSize: number): TextStyle | CSSProperties {
+function getFontSizeStyle(fontSize: number): TextStyle {
     return {
         fontSize,
     };
@@ -897,7 +925,7 @@ function getFontSizeStyle(fontSize: number): TextStyle | CSSProperties {
 /**
  * Returns lineHeight style
  */
-function getLineHeightStyle(lineHeight: number): TextStyle | CSSProperties {
+function getLineHeightStyle(lineHeight: number): TextStyle {
     return {
         lineHeight,
     };
@@ -906,7 +934,7 @@ function getLineHeightStyle(lineHeight: number): TextStyle | CSSProperties {
 /**
  * Gets the correct size for the empty state container based on screen dimensions
  */
-function getReportWelcomeContainerStyle(isSmallScreenWidth: boolean): ViewStyle | CSSProperties {
+function getReportWelcomeContainerStyle(isSmallScreenWidth: boolean): ViewStyle {
     if (isSmallScreenWidth) {
         return {
             minHeight: CONST.EMPTY_STATE_BACKGROUND.SMALL_SCREEN.CONTAINER_MINHEIGHT,
@@ -925,12 +953,12 @@ function getReportWelcomeContainerStyle(isSmallScreenWidth: boolean): ViewStyle
 /**
  * Gets styles for AutoCompleteSuggestion row
  */
-function getAutoCompleteSuggestionItemStyle(highlightedEmojiIndex: number, rowHeight: number, hovered: boolean, currentEmojiIndex: number): Array<ViewStyle | CSSProperties> {
+function getAutoCompleteSuggestionItemStyle(highlightedEmojiIndex: number, rowHeight: number, isHovered: boolean, currentEmojiIndex: number): ViewStyle[] {
     let backgroundColor;
 
     if (currentEmojiIndex === highlightedEmojiIndex) {
         backgroundColor = themeColors.activeComponentBG;
-    } else if (hovered) {
+    } else if (isHovered) {
         backgroundColor = themeColors.hoverComponentBG;
     }
 
@@ -950,14 +978,19 @@ function getAutoCompleteSuggestionItemStyle(highlightedEmojiIndex: number, rowHe
 /**
  * Gets the correct position for the base auto complete suggestion container
  */
-function getBaseAutoCompleteSuggestionContainerStyle({left, bottom, width}: {left: number; bottom: number; width: number}): ViewStyle | CSSProperties {
-    return {position: 'fixed', bottom, left, width};
+function getBaseAutoCompleteSuggestionContainerStyle({left, bottom, width}: GetBaseAutoCompleteSuggestionContainerStyleParams): ViewStyle {
+    return {
+        ...positioning.pFixed,
+        bottom,
+        left,
+        width,
+    };
 }
 
 /**
  * Gets the correct position for auto complete suggestion container
  */
-function getAutoCompleteSuggestionContainerStyle(itemsHeight: number): ViewStyle | CSSProperties {
+function getAutoCompleteSuggestionContainerStyle(itemsHeight: number): ViewStyle {
     'worklet';
 
     const borderWidth = 2;
@@ -975,11 +1008,11 @@ function getAutoCompleteSuggestionContainerStyle(itemsHeight: number): ViewStyle
 /**
  * Select the correct color for text.
  */
-function getColoredBackgroundStyle(isColored: boolean): ViewStyle | CSSProperties {
+function getColoredBackgroundStyle(isColored: boolean): ViewStyle {
     return {backgroundColor: isColored ? themeColors.link : undefined};
 }
 
-function getEmojiReactionBubbleStyle(isHovered: boolean, hasUserReacted: boolean, isContextMenu = false): ViewStyle | CSSProperties {
+function getEmojiReactionBubbleStyle(isHovered: boolean, hasUserReacted: boolean, isContextMenu = false): ViewStyle {
     let backgroundColor = themeColors.border;
 
     if (isHovered) {
@@ -1005,7 +1038,7 @@ function getEmojiReactionBubbleStyle(isHovered: boolean, hasUserReacted: boolean
     };
 }
 
-function getEmojiReactionBubbleTextStyle(isContextMenu = false): TextStyle | CSSProperties {
+function getEmojiReactionBubbleTextStyle(isContextMenu = false): TextStyle {
     if (isContextMenu) {
         return {
             fontSize: 17,
@@ -1019,7 +1052,7 @@ function getEmojiReactionBubbleTextStyle(isContextMenu = false): TextStyle | CSS
     };
 }
 
-function getEmojiReactionCounterTextStyle(hasUserReacted: boolean): TextStyle | CSSProperties {
+function getEmojiReactionCounterTextStyle(hasUserReacted: boolean): TextStyle {
     if (hasUserReacted) {
         return {color: themeColors.reactionActiveText};
     }
@@ -1032,7 +1065,7 @@ function getEmojiReactionCounterTextStyle(hasUserReacted: boolean): TextStyle |
  *
  * @param direction - The direction of the rotation (CONST.DIRECTION.LEFT or CONST.DIRECTION.RIGHT).
  */
-function getDirectionStyle(direction: string): ViewStyle | CSSProperties {
+function getDirectionStyle(direction: ValueOf<typeof CONST.DIRECTION>): ViewStyle {
     if (direction === CONST.DIRECTION.LEFT) {
         return {transform: [{rotate: '180deg'}]};
     }
@@ -1043,11 +1076,11 @@ function getDirectionStyle(direction: string): ViewStyle | CSSProperties {
 /**
  * Returns a style object with display flex or none basing on the condition value.
  */
-function displayIfTrue(condition: boolean): ViewStyle | CSSProperties {
+function displayIfTrue(condition: boolean): ViewStyle {
     return {display: condition ? 'flex' : 'none'};
 }
 
-function getGoogleListViewStyle(shouldDisplayBorder: boolean): ViewStyle | CSSProperties {
+function getGoogleListViewStyle(shouldDisplayBorder: boolean): ViewStyle {
     if (shouldDisplayBorder) {
         // TODO: Remove this "eslint-disable-next" once the theme switching migration is done and styles are fully typed (GH Issue: https://github.com/Expensify/App/issues/27337)
         // eslint-disable-next-line @typescript-eslint/no-unsafe-return
@@ -1067,7 +1100,7 @@ function getGoogleListViewStyle(shouldDisplayBorder: boolean): ViewStyle | CSSPr
 /**
  * Gets the correct height for emoji picker list based on screen dimensions
  */
-function getEmojiPickerListHeight(hasAdditionalSpace: boolean, windowHeight: number): ViewStyle | CSSProperties {
+function getEmojiPickerListHeight(hasAdditionalSpace: boolean, windowHeight: number): ViewStyle {
     const style = {
         ...spacing.ph4,
         height: hasAdditionalSpace ? CONST.NON_NATIVE_EMOJI_PICKER_LIST_HEIGHT + CONST.CATEGORY_SHORTCUT_BAR_HEIGHT : CONST.NON_NATIVE_EMOJI_PICKER_LIST_HEIGHT,
@@ -1087,7 +1120,7 @@ function getEmojiPickerListHeight(hasAdditionalSpace: boolean, windowHeight: num
 /**
  * Returns style object for the user mention component based on whether the mention is ours or not.
  */
-function getMentionStyle(isOurMention: boolean): ViewStyle | CSSProperties {
+function getMentionStyle(isOurMention: boolean): ViewStyle {
     const backgroundColor = isOurMention ? themeColors.ourMentionBG : themeColors.mentionBG;
     return {
         backgroundColor,
@@ -1106,7 +1139,7 @@ function getMentionTextColor(isOurMention: boolean): string {
 /**
  * Returns padding vertical based on number of lines
  */
-function getComposeTextAreaPadding(numberOfLines: number, isComposerFullSize: boolean): ViewStyle | CSSProperties {
+function getComposeTextAreaPadding(numberOfLines: number, isComposerFullSize: boolean): ViewStyle {
     let paddingValue = 5;
     // Issue #26222: If isComposerFullSize paddingValue will always be 5 to prevent padding jumps when adding multiple lines.
     if (!isComposerFullSize) {
@@ -1127,14 +1160,14 @@ function getComposeTextAreaPadding(numberOfLines: number, isComposerFullSize: bo
 /**
  * Returns style object for the mobile on WEB
  */
-function getOuterModalStyle(windowHeight: number, viewportOffsetTop: number): ViewStyle | CSSProperties {
+function getOuterModalStyle(windowHeight: number, viewportOffsetTop: number): ViewStyle {
     return Browser.isMobile() ? {maxHeight: windowHeight, marginTop: viewportOffsetTop} : {};
 }
 
 /**
  * Returns style object for flexWrap depending on the screen size
  */
-function getWrappingStyle(isExtraSmallScreenWidth: boolean): ViewStyle | CSSProperties {
+function getWrappingStyle(isExtraSmallScreenWidth: boolean): ViewStyle {
     return {
         flexWrap: isExtraSmallScreenWidth ? 'wrap' : 'nowrap',
     };
@@ -1143,7 +1176,7 @@ function getWrappingStyle(isExtraSmallScreenWidth: boolean): ViewStyle | CSSProp
 /**
  * Returns the text container styles for menu items depending on if the menu item container a small avatar
  */
-function getMenuItemTextContainerStyle(isSmallAvatarSubscriptMenu: boolean): ViewStyle | CSSProperties {
+function getMenuItemTextContainerStyle(isSmallAvatarSubscriptMenu: boolean): ViewStyle {
     return {
         minHeight: isSmallAvatarSubscriptMenu ? variables.avatarSizeSubscript : variables.componentSizeNormal,
     };
@@ -1152,7 +1185,7 @@ function getMenuItemTextContainerStyle(isSmallAvatarSubscriptMenu: boolean): Vie
 /**
  * Returns link styles based on whether the link is disabled or not
  */
-function getDisabledLinkStyles(isDisabled = false): ViewStyle | CSSProperties {
+function getDisabledLinkStyles(isDisabled = false): ViewStyle {
     const disabledLinkStyles = {
         color: themeColors.textSupporting,
         ...cursor.cursorDisabled,
@@ -1166,10 +1199,17 @@ function getDisabledLinkStyles(isDisabled = false): ViewStyle | CSSProperties {
     };
 }
 
+/**
+ * Returns color style
+ */
+function getColorStyle(color: string): ViewStyle | CSSProperties {
+    return {color};
+}
+
 /**
  * Returns the checkbox pressable style
  */
-function getCheckboxPressableStyle(borderRadius = 6): ViewStyle | CSSProperties {
+function getCheckboxPressableStyle(borderRadius = 6): ViewStyle {
     return {
         padding: 2,
         justifyContent: 'center',
@@ -1182,7 +1222,7 @@ function getCheckboxPressableStyle(borderRadius = 6): ViewStyle | CSSProperties
 /**
  * Returns the checkbox container style
  */
-function getCheckboxContainerStyle(size: number, borderRadius = 4): ViewStyle | CSSProperties {
+function getCheckboxContainerStyle(size: number, borderRadius = 4): ViewStyle {
     return {
         backgroundColor: themeColors.componentBG,
         height: size,
@@ -1199,7 +1239,7 @@ function getCheckboxContainerStyle(size: number, borderRadius = 4): ViewStyle |
 /**
  * Returns style object for the dropbutton height
  */
-function getDropDownButtonHeight(buttonSize: ButtonSizeValue): ViewStyle | CSSProperties {
+function getDropDownButtonHeight(buttonSize: ButtonSizeValue): ViewStyle {
     if (buttonSize === CONST.DROPDOWN_BUTTON_SIZE.LARGE) {
         return {
             height: variables.componentSizeLarge,
@@ -1213,7 +1253,7 @@ function getDropDownButtonHeight(buttonSize: ButtonSizeValue): ViewStyle | CSSPr
 /**
  * Returns fitting fontSize and lineHeight values in order to prevent large amounts from being cut off on small screen widths.
  */
-function getAmountFontSizeAndLineHeight(baseFontSize: number, baseLineHeight: number, isSmallScreenWidth: boolean, windowWidth: number): ViewStyle | CSSProperties {
+function getAmountFontSizeAndLineHeight(baseFontSize: number, baseLineHeight: number, isSmallScreenWidth: boolean, windowWidth: number): TextStyle {
     let toSubtract = 0;
 
     if (isSmallScreenWidth) {
@@ -1239,6 +1279,32 @@ function getAmountFontSizeAndLineHeight(baseFontSize: number, baseLineHeight: nu
     };
 }
 
+/**
+ * Returns container styles for showing the icons in MultipleAvatars/SubscriptAvatar
+ */
+function getContainerStyles(size: string, isInReportAction = false): Array<ViewStyle | CSSProperties> {
+    let containerStyles: Array<ViewStyle | CSSProperties>;
+
+    switch (size) {
+        case CONST.AVATAR_SIZE.SMALL:
+            containerStyles = [styles.emptyAvatarSmall, styles.emptyAvatarMarginSmall];
+            break;
+        case CONST.AVATAR_SIZE.SMALLER:
+            containerStyles = [styles.emptyAvatarSmaller, styles.emptyAvatarMarginSmaller];
+            break;
+        case CONST.AVATAR_SIZE.MEDIUM:
+            containerStyles = [styles.emptyAvatarMedium, styles.emptyAvatarMargin];
+            break;
+        case CONST.AVATAR_SIZE.LARGE:
+            containerStyles = [styles.emptyAvatarLarge, styles.mb2, styles.mr2];
+            break;
+        default:
+            containerStyles = [styles.emptyAvatar, isInReportAction ? styles.emptyAvatarMarginChat : styles.emptyAvatarMargin];
+    }
+
+    return containerStyles;
+}
+
 /**
  * Get transparent color by setting alpha value 0 of the passed hex(#xxxxxx) color code
  */
@@ -1247,45 +1313,30 @@ function getTransparentColor(color: string) {
 }
 
 export {
+    combineStyles,
+    displayIfTrue,
+    getAmountFontSizeAndLineHeight,
+    getAnimatedFABStyle,
+    getAutoCompleteSuggestionContainerStyle,
+    getAutoCompleteSuggestionItemStyle,
+    getAutoGrowHeightInputStyle,
+    getAvatarBorderRadius,
+    getAvatarBorderStyle,
+    getAvatarBorderWidth,
+    getAvatarExtraFontSizeStyle,
     getAvatarSize,
-    getAvatarWidthStyle,
     getAvatarStyle,
-    getAvatarExtraFontSizeStyle,
-    getAvatarBorderWidth,
-    getAvatarBorderStyle,
-    getEmptyAvatarStyle,
-    getErrorPageContainerStyle,
-    getSafeAreaPadding,
-    getSafeAreaMargins,
-    getZoomCursorStyle,
-    getZoomSizingStyle,
-    getWidthStyle,
-    getAutoGrowHeightInputStyle,
+    getAvatarWidthStyle,
     getBackgroundAndBorderStyle,
     getBackgroundColorStyle,
-    getTextColorStyle,
-    getBorderColorStyle,
     getBackgroundColorWithOpacityStyle,
     getBadgeColorStyle,
     getButtonBackgroundColorStyle,
-    getIconFillColor,
-    getAnimatedFABStyle,
-    getWidthAndHeightStyle,
-    getModalPaddingStyles,
-    getFontFamilyMonospace,
-    getEmojiPickerStyle,
-    getReportActionItemStyle,
-    getMiniReportActionContextMenuWrapperStyle,
-    getKeyboardShortcutsModalWidth,
-    getPaymentMethodMenuWidth,
-    getThemeBackgroundColor,
-    parseStyleAsArray,
-    parseStyleFromFunction,
-    combineStyles,
     getPaddingLeft,
     hasSafeAreas,
     getHeight,
     getMinimumHeight,
+    getMinimumWidth,
     getMaximumHeight,
     getMaximumWidth,
     fade,
@@ -1296,33 +1347,51 @@ export {
     getReportWelcomeTopMarginStyle,
     getReportWelcomeContainerStyle,
     getBaseAutoCompleteSuggestionContainerStyle,
-    getAutoCompleteSuggestionItemStyle,
-    getAutoCompleteSuggestionContainerStyle,
+    getBorderColorStyle,
+    getCheckboxContainerStyle,
+    getCheckboxPressableStyle,
     getColoredBackgroundStyle,
+    getComposeTextAreaPadding,
+    getColorStyle,
     getDefaultWorkspaceAvatarColor,
-    getAvatarBorderRadius,
+    getDirectionStyle,
+    getDisabledLinkStyles,
+    getDropDownButtonHeight,
+    getEmojiPickerListHeight,
+    getEmojiPickerStyle,
     getEmojiReactionBubbleStyle,
     getEmojiReactionBubbleTextStyle,
     getEmojiReactionCounterTextStyle,
-    getDirectionStyle,
-    displayIfTrue,
+    getEmptyAvatarStyle,
+    getErrorPageContainerStyle,
+    getFontFamilyMonospace,
     getFontSizeStyle,
-    getLineHeightStyle,
-    getSignInWordmarkWidthStyle,
     getGoogleListViewStyle,
-    getEmojiPickerListHeight,
+    getHeightOfMagicCodeInput,
+    getIconFillColor,
+    getLineHeightStyle,
     getMentionStyle,
     getMentionTextColor,
-    getComposeTextAreaPadding,
-    getHeightOfMagicCodeInput,
-    getOuterModalStyle,
-    getWrappingStyle,
     getMenuItemTextContainerStyle,
-    getDisabledLinkStyles,
-    getCheckboxPressableStyle,
-    getCheckboxContainerStyle,
-    getDropDownButtonHeight,
-    getAmountFontSizeAndLineHeight,
+    getMiniReportActionContextMenuWrapperStyle,
+    getModalPaddingStyles,
+    getOuterModalStyle,
+    getPaymentMethodMenuWidth,
+    getReportActionItemStyle,
+    getSafeAreaMargins,
+    getSafeAreaPadding,
+    getSignInWordmarkWidthStyle,
+    getTextColorStyle,
+    getThemeBackgroundColor,
     getTransparentColor,
-    getEReceiptColor,
+    getWidthAndHeightStyle,
+    getWidthStyle,
+    getWrappingStyle,
+    getZoomCursorStyle,
+    getZoomSizingStyle,
+    parseStyleAsArray,
+    parseStyleFromFunction,
+    getContainerStyles,
+    getEReceiptColorStyles,
+    getEReceiptColorCode,
 };
diff --git a/src/styles/ThemeStylesProvider.tsx b/src/styles/ThemeStylesProvider.tsx
index d0db784ca8ca..4e6f91baf34a 100644
--- a/src/styles/ThemeStylesProvider.tsx
+++ b/src/styles/ThemeStylesProvider.tsx
@@ -5,7 +5,7 @@ import ThemeStylesContext from './ThemeStylesContext';
 // TODO: Rename this to "styles" once the app is migrated to theme switching hooks and HOCs
 import {stylesGenerator as stylesUntyped} from './styles';
 
-const styles = stylesUntyped as (theme: Record<string, string>) => Record<string, unknown>;
+const styles = stylesUntyped;
 
 type ThemeStylesProviderProps = {
     children: React.ReactNode;
diff --git a/src/styles/addOutlineWidth/index.ts b/src/styles/addOutlineWidth/index.ts
index 257a3de2b6cd..6fe2ecf85978 100644
--- a/src/styles/addOutlineWidth/index.ts
+++ b/src/styles/addOutlineWidth/index.ts
@@ -9,11 +9,11 @@ import AddOutlineWidth from './types';
 /**
  * Adds the addOutlineWidth property to an object to be used when styling
  */
-const addOutlineWidth: AddOutlineWidth = (obj, val, error = false) => ({
+const addOutlineWidth: AddOutlineWidth = (obj, val, hasError = false) => ({
     ...obj,
     outlineWidth: val,
     outlineStyle: val ? 'auto' : 'none',
-    boxShadow: val !== 0 ? `0px 0px 0px ${val}px ${error ? themeDefault.danger : themeDefault.borderFocus}` : 'none',
+    boxShadow: val !== 0 ? `0px 0px 0px ${val}px ${hasError ? themeDefault.danger : themeDefault.borderFocus}` : 'none',
 });
 
 export default addOutlineWidth;
diff --git a/src/styles/addOutlineWidth/types.ts b/src/styles/addOutlineWidth/types.ts
index 422d135ef759..7a3a86506959 100644
--- a/src/styles/addOutlineWidth/types.ts
+++ b/src/styles/addOutlineWidth/types.ts
@@ -1,6 +1,5 @@
-import {CSSProperties} from 'react';
 import {TextStyle} from 'react-native';
 
-type AddOutlineWidth = (obj: TextStyle | CSSProperties, val?: number, error?: boolean) => TextStyle | CSSProperties;
+type AddOutlineWidth = (obj: TextStyle, val?: number, hasError?: boolean) => TextStyle;
 
 export default AddOutlineWidth;
diff --git a/src/styles/cardStyles/index.ts b/src/styles/cardStyles/index.ts
index 823081b62904..1f28ca4f4b78 100644
--- a/src/styles/cardStyles/index.ts
+++ b/src/styles/cardStyles/index.ts
@@ -1,10 +1,11 @@
+import positioning from '../utilities/positioning';
 import GetCardStyles from './types';
 
 /**
  * Get card style for cardStyleInterpolator
  */
 const getCardStyles: GetCardStyles = (screenWidth) => ({
-    position: 'fixed',
+    ...positioning.pFixed,
     width: screenWidth,
     height: '100%',
 });
diff --git a/src/styles/cardStyles/types.ts b/src/styles/cardStyles/types.ts
index e1598b7696ff..134b93eae32f 100644
--- a/src/styles/cardStyles/types.ts
+++ b/src/styles/cardStyles/types.ts
@@ -1,6 +1,5 @@
-import {CSSProperties} from 'react';
 import {ViewStyle} from 'react-native';
 
-type GetCardStyles = (screenWidth: number) => Partial<Pick<CSSProperties | ViewStyle, 'position' | 'width' | 'height'>>;
+type GetCardStyles = (screenWidth: number) => ViewStyle;
 
 export default GetCardStyles;
diff --git a/src/styles/codeStyles/types.ts b/src/styles/codeStyles/types.ts
index 7397b3c6543c..25e35f492089 100644
--- a/src/styles/codeStyles/types.ts
+++ b/src/styles/codeStyles/types.ts
@@ -1,8 +1,7 @@
-import {CSSProperties} from 'react';
 import {TextStyle, ViewStyle} from 'react-native';
 
-type CodeWordWrapperStyles = ViewStyle | CSSProperties;
-type CodeWordStyles = TextStyle | CSSProperties;
-type CodeTextStyles = TextStyle | CSSProperties;
+type CodeWordWrapperStyles = ViewStyle;
+type CodeWordStyles = TextStyle;
+type CodeTextStyles = TextStyle;
 
-export type {CodeWordWrapperStyles, CodeWordStyles, CodeTextStyles};
+export type {CodeTextStyles, CodeWordStyles, CodeWordWrapperStyles};
diff --git a/src/styles/containerComposeStyles/index.native.ts b/src/styles/containerComposeStyles/index.native.ts
index 6b6bcf71cfcf..ea525dc652cf 100644
--- a/src/styles/containerComposeStyles/index.native.ts
+++ b/src/styles/containerComposeStyles/index.native.ts
@@ -1,6 +1,6 @@
-import {StyleProp, ViewStyle} from 'react-native';
 import styles from '../styles';
+import ContainerComposeStyles from './types';
 
-const containerComposeStyles: StyleProp<ViewStyle> = [styles.textInputComposeSpacing];
+const containerComposeStyles: ContainerComposeStyles = [styles.textInputComposeSpacing];
 
 export default containerComposeStyles;
diff --git a/src/styles/containerComposeStyles/index.ts b/src/styles/containerComposeStyles/index.ts
index 6968e23a507e..fbbf35a20818 100644
--- a/src/styles/containerComposeStyles/index.ts
+++ b/src/styles/containerComposeStyles/index.ts
@@ -1,7 +1,7 @@
-import {StyleProp, ViewStyle} from 'react-native';
 import styles from '../styles';
+import ContainerComposeStyles from './types';
 
 // We need to set paddingVertical = 0 on web to avoid displaying a normal pointer on some parts of compose box when not in focus
-const containerComposeStyles: StyleProp<ViewStyle> = [styles.textInputComposeSpacing, {paddingVertical: 0}];
+const containerComposeStyles: ContainerComposeStyles = [styles.textInputComposeSpacing, {paddingVertical: 0}];
 
 export default containerComposeStyles;
diff --git a/src/styles/containerComposeStyles/types.ts b/src/styles/containerComposeStyles/types.ts
new file mode 100644
index 000000000000..278039691b8a
--- /dev/null
+++ b/src/styles/containerComposeStyles/types.ts
@@ -0,0 +1,5 @@
+import {ViewStyle} from 'react-native';
+
+type ContainerComposeStyles = ViewStyle[];
+
+export default ContainerComposeStyles;
diff --git a/src/styles/editedLabelStyles/index.ts b/src/styles/editedLabelStyles/index.ts
index 6e6164810b52..5764735d0dea 100644
--- a/src/styles/editedLabelStyles/index.ts
+++ b/src/styles/editedLabelStyles/index.ts
@@ -1,7 +1,10 @@
-import EditedLabelStyles from './types';
 import display from '../utilities/display';
 import flex from '../utilities/flex';
+import EditedLabelStyles from './types';
 
-const editedLabelStyles: EditedLabelStyles = {...display.dInlineFlex, ...flex.alignItemsBaseline};
+const editedLabelStyles: EditedLabelStyles = {
+    ...display.dInlineFlex,
+    ...flex.alignItemsBaseline,
+};
 
 export default editedLabelStyles;
diff --git a/src/styles/editedLabelStyles/types.ts b/src/styles/editedLabelStyles/types.ts
index 8d96c9216ed2..20bcc8c55f15 100644
--- a/src/styles/editedLabelStyles/types.ts
+++ b/src/styles/editedLabelStyles/types.ts
@@ -1,6 +1,5 @@
-import {CSSProperties} from 'react';
 import {TextStyle} from 'react-native';
 
-type EditedLabelStyles = CSSProperties | TextStyle;
+type EditedLabelStyles = TextStyle;
 
 export default EditedLabelStyles;
diff --git a/src/styles/fontFamily/bold/index.android.js b/src/styles/fontFamily/bold/index.android.js
deleted file mode 100644
index 73ba56dc4262..000000000000
--- a/src/styles/fontFamily/bold/index.android.js
+++ /dev/null
@@ -1,4 +0,0 @@
-const singleBold = 'ExpensifyNeue-Bold';
-const multiBold = 'ExpensifyNeue-Bold';
-
-export {singleBold, multiBold};
diff --git a/src/styles/fontFamily/bold/index.android.ts b/src/styles/fontFamily/bold/index.android.ts
new file mode 100644
index 000000000000..828b9425e8d4
--- /dev/null
+++ b/src/styles/fontFamily/bold/index.android.ts
@@ -0,0 +1,6 @@
+import FontFamilyBoldStyles from './types';
+
+const singleBold: FontFamilyBoldStyles = 'ExpensifyNeue-Bold';
+const multiBold: FontFamilyBoldStyles = 'ExpensifyNeue-Bold';
+
+export {singleBold, multiBold};
diff --git a/src/styles/fontFamily/bold/index.ios.js b/src/styles/fontFamily/bold/index.ios.js
deleted file mode 100644
index a0523831a058..000000000000
--- a/src/styles/fontFamily/bold/index.ios.js
+++ /dev/null
@@ -1,4 +0,0 @@
-const singleBold = 'ExpensifyNeue-Regular';
-const multiBold = 'ExpensifyNeue-Regular';
-
-export {singleBold, multiBold};
diff --git a/src/styles/fontFamily/bold/index.ios.ts b/src/styles/fontFamily/bold/index.ios.ts
new file mode 100644
index 000000000000..31b7e3d82c05
--- /dev/null
+++ b/src/styles/fontFamily/bold/index.ios.ts
@@ -0,0 +1,6 @@
+import FontFamilyBoldStyles from './types';
+
+const singleBold: FontFamilyBoldStyles = 'ExpensifyNeue-Regular';
+const multiBold: FontFamilyBoldStyles = 'ExpensifyNeue-Regular';
+
+export {singleBold, multiBold};
diff --git a/src/styles/fontFamily/bold/index.js b/src/styles/fontFamily/bold/index.js
deleted file mode 100644
index 401a808d29d6..000000000000
--- a/src/styles/fontFamily/bold/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-const singleBold = 'ExpensifyNeue-Regular';
-const multiBold = 'ExpensifyNeue-Regular, Segoe UI Emoji, Noto Color Emoji';
-
-export {singleBold, multiBold};
diff --git a/src/styles/fontFamily/bold/index.ts b/src/styles/fontFamily/bold/index.ts
new file mode 100644
index 000000000000..c416bff3aadc
--- /dev/null
+++ b/src/styles/fontFamily/bold/index.ts
@@ -0,0 +1,6 @@
+import FontFamilyBoldStyles from './types';
+
+const singleBold: FontFamilyBoldStyles = 'ExpensifyNeue-Regular';
+const multiBold: FontFamilyBoldStyles = 'ExpensifyNeue-Regular, Segoe UI Emoji, Noto Color Emoji';
+
+export {singleBold, multiBold};
diff --git a/src/styles/fontFamily/bold/types.ts b/src/styles/fontFamily/bold/types.ts
new file mode 100644
index 000000000000..258b23de94a2
--- /dev/null
+++ b/src/styles/fontFamily/bold/types.ts
@@ -0,0 +1,5 @@
+import {TextStyle} from 'react-native';
+
+type FontFamilyBoldStyles = NonNullable<TextStyle['fontFamily']>;
+
+export default FontFamilyBoldStyles;
diff --git a/src/styles/fontFamily/types.ts b/src/styles/fontFamily/types.ts
index 4c9a121e80d7..c688f40927be 100644
--- a/src/styles/fontFamily/types.ts
+++ b/src/styles/fontFamily/types.ts
@@ -1,3 +1,5 @@
+import {TextStyle} from 'react-native';
+
 type FontFamilyKeys =
     | 'EXP_NEUE_ITALIC'
     | 'EXP_NEUE_BOLD'
@@ -10,6 +12,6 @@ type FontFamilyKeys =
     | 'MONOSPACE_BOLD'
     | 'MONOSPACE_BOLD_ITALIC';
 
-type FontFamilyStyles = Record<FontFamilyKeys, string>;
+type FontFamilyStyles = Record<FontFamilyKeys, NonNullable<TextStyle['fontFamily']>>;
 
 export default FontFamilyStyles;
diff --git a/src/styles/fontWeight/bold/types.ts b/src/styles/fontWeight/bold/types.ts
index 3c9930a63d87..00e72d0e879c 100644
--- a/src/styles/fontWeight/bold/types.ts
+++ b/src/styles/fontWeight/bold/types.ts
@@ -1,6 +1,5 @@
-import {CSSProperties} from 'react';
 import {TextStyle} from 'react-native';
 
-type FontWeightBoldStyles = (TextStyle | CSSProperties)['fontWeight'];
+type FontWeightBoldStyles = NonNullable<TextStyle['fontWeight']>;
 
 export default FontWeightBoldStyles;
diff --git a/src/styles/getModalStyles.ts b/src/styles/getModalStyles.ts
index 32e6cf6f98e7..d52d29568c2d 100644
--- a/src/styles/getModalStyles.ts
+++ b/src/styles/getModalStyles.ts
@@ -1,16 +1,17 @@
-import {CSSProperties} from 'react';
 import {ViewStyle} from 'react-native';
-import {ValueOf} from 'type-fest';
 import {ModalProps} from 'react-native-modal';
+import {ValueOf} from 'type-fest';
 import CONST from '../CONST';
-import variables from './variables';
-import themeColors from './themes/default';
 import styles from './styles';
+import themeColors from './themes/default';
+import variables from './variables';
 
 function getCenteredModalStyles(windowWidth: number, isSmallScreenWidth: boolean, isFullScreenWhenSmall = false): ViewStyle {
+    const modalStyles = styles.centeredModalStyles(isSmallScreenWidth, isFullScreenWhenSmall);
+
     return {
-        borderWidth: styles.centeredModalStyles(isSmallScreenWidth, isFullScreenWhenSmall).borderWidth,
-        width: isSmallScreenWidth ? '100%' : windowWidth - styles.centeredModalStyles(isSmallScreenWidth, isFullScreenWhenSmall).marginHorizontal * 2,
+        borderWidth: modalStyles.borderWidth,
+        width: isSmallScreenWidth ? '100%' : windowWidth - modalStyles.marginHorizontal * 2,
     };
 }
 
@@ -26,7 +27,7 @@ type WindowDimensions = {
 
 type GetModalStyles = {
     modalStyle: ViewStyle;
-    modalContainerStyle: ViewStyle | Pick<CSSProperties, 'boxShadow'>;
+    modalContainerStyle: ViewStyle;
     swipeDirection: ModalProps['swipeDirection'];
     animationIn: ModalProps['animationIn'];
     animationOut: ModalProps['animationOut'];
diff --git a/src/styles/getNavigationModalCardStyles/index.desktop.js b/src/styles/getNavigationModalCardStyles/index.desktop.ts
similarity index 57%
rename from src/styles/getNavigationModalCardStyles/index.desktop.js
rename to src/styles/getNavigationModalCardStyles/index.desktop.ts
index 54c9790253d6..75b5636f9bd8 100644
--- a/src/styles/getNavigationModalCardStyles/index.desktop.js
+++ b/src/styles/getNavigationModalCardStyles/index.desktop.ts
@@ -1,4 +1,7 @@
-export default () => ({
+import positioning from '../utilities/positioning';
+import GetNavigationModalCardStyles from './types';
+
+const getNavigationModalCardStyles: GetNavigationModalCardStyles = () => ({
     // position: fixed is set instead of position absolute to workaround Safari known issues of updating heights in DOM.
     // Safari issues:
     // https://github.com/Expensify/App/issues/12005
@@ -6,5 +9,8 @@ export default () => ({
     // https://github.com/Expensify/App/issues/20709
     width: '100%',
     height: '100%',
-    position: 'fixed',
+
+    ...positioning.pFixed,
 });
+
+export default getNavigationModalCardStyles;
diff --git a/src/styles/getNavigationModalCardStyles/index.ts b/src/styles/getNavigationModalCardStyles/index.ts
index 8e2bffc1ecfc..d3cf49c6c89c 100644
--- a/src/styles/getNavigationModalCardStyles/index.ts
+++ b/src/styles/getNavigationModalCardStyles/index.ts
@@ -1,3 +1,7 @@
-export default () => ({
+import GetNavigationModalCardStyles from './types';
+
+const getNavigationModalCardStyles: GetNavigationModalCardStyles = () => ({
     height: '100%',
 });
+
+export default getNavigationModalCardStyles;
diff --git a/src/styles/getNavigationModalCardStyles/index.website.ts b/src/styles/getNavigationModalCardStyles/index.website.ts
index 9879e4c1567b..75b5636f9bd8 100644
--- a/src/styles/getNavigationModalCardStyles/index.website.ts
+++ b/src/styles/getNavigationModalCardStyles/index.website.ts
@@ -1,3 +1,4 @@
+import positioning from '../utilities/positioning';
 import GetNavigationModalCardStyles from './types';
 
 const getNavigationModalCardStyles: GetNavigationModalCardStyles = () => ({
@@ -8,7 +9,8 @@ const getNavigationModalCardStyles: GetNavigationModalCardStyles = () => ({
     // https://github.com/Expensify/App/issues/20709
     width: '100%',
     height: '100%',
-    position: 'fixed',
+
+    ...positioning.pFixed,
 });
 
 export default getNavigationModalCardStyles;
diff --git a/src/styles/getNavigationModalCardStyles/types.ts b/src/styles/getNavigationModalCardStyles/types.ts
index 504b659c87b7..877981dd4dd2 100644
--- a/src/styles/getNavigationModalCardStyles/types.ts
+++ b/src/styles/getNavigationModalCardStyles/types.ts
@@ -1,9 +1,7 @@
-import {CSSProperties} from 'react';
 import {ViewStyle} from 'react-native';
-import {Merge} from 'type-fest';
 
 type GetNavigationModalCardStylesParams = {isSmallScreenWidth: number};
 
-type GetNavigationModalCardStyles = (params: GetNavigationModalCardStylesParams) => Merge<ViewStyle, Pick<CSSProperties, 'position'>>;
+type GetNavigationModalCardStyles = (params: GetNavigationModalCardStylesParams) => ViewStyle;
 
 export default GetNavigationModalCardStyles;
diff --git a/src/styles/getReportActionContextMenuStyles.ts b/src/styles/getReportActionContextMenuStyles.ts
index 9c0e159eb5fe..cd3843169a43 100644
--- a/src/styles/getReportActionContextMenuStyles.ts
+++ b/src/styles/getReportActionContextMenuStyles.ts
@@ -1,16 +1,13 @@
-import {CSSProperties} from 'react';
 import {ViewStyle} from 'react-native';
 import styles from './styles';
-import variables from './variables';
 import themeColors from './themes/default';
+import variables from './variables';
 
-type StylesArray = Array<ViewStyle | CSSProperties>;
-
-const defaultWrapperStyle: ViewStyle | CSSProperties = {
+const defaultWrapperStyle: ViewStyle = {
     backgroundColor: themeColors.componentBG,
 };
 
-const miniWrapperStyle: StylesArray = [
+const miniWrapperStyle: ViewStyle[] = [
     styles.flexRow,
     defaultWrapperStyle,
     {
@@ -18,11 +15,12 @@ const miniWrapperStyle: StylesArray = [
         borderWidth: 1,
         borderColor: themeColors.border,
         // In Safari, when welcome messages use a code block (triple backticks), they would overlap the context menu below when there is no scrollbar without the transform style.
-        transform: 'translateZ(0)',
+        // NOTE: asserting "transform" to a valid type, because it isn't possible to augment "transform".
+        transform: 'translateZ(0)' as unknown as ViewStyle['transform'],
     },
 ];
 
-const bigWrapperStyle: StylesArray = [styles.flexColumn, defaultWrapperStyle];
+const bigWrapperStyle: ViewStyle[] = [styles.flexColumn, defaultWrapperStyle];
 
 /**
  * Generate the wrapper styles for the ReportActionContextMenu.
@@ -30,7 +28,7 @@ const bigWrapperStyle: StylesArray = [styles.flexColumn, defaultWrapperStyle];
  * @param isMini
  * @param isSmallScreenWidth
  */
-function getReportActionContextMenuStyles(isMini: boolean, isSmallScreenWidth: boolean): StylesArray {
+function getReportActionContextMenuStyles(isMini: boolean, isSmallScreenWidth: boolean): ViewStyle[] {
     if (isMini) {
         return miniWrapperStyle;
     }
diff --git a/src/styles/getTooltipStyles.ts b/src/styles/getTooltipStyles.ts
index be76002bd216..2613cb791688 100644
--- a/src/styles/getTooltipStyles.ts
+++ b/src/styles/getTooltipStyles.ts
@@ -1,11 +1,11 @@
-import {CSSProperties} from 'react';
 import {TextStyle, View, ViewStyle} from 'react-native';
-import spacing from './utilities/spacing';
+import fontFamily from './fontFamily';
+import roundToNearestMultipleOfFour from './roundToNearestMultipleOfFour';
 import styles from './styles';
 import themeColors from './themes/default';
-import fontFamily from './fontFamily';
+import positioning from './utilities/positioning';
+import spacing from './utilities/spacing';
 import variables from './variables';
-import roundToNearestMultipleOfFour from './roundToNearestMultipleOfFour';
 
 /** This defines the proximity with the edge of the window in which tooltips should not be displayed.
  * If a tooltip is too close to the edge of the screen, we'll shift it towards the center. */
@@ -95,9 +95,9 @@ function isOverlappingAtTop(tooltip: View | HTMLDivElement, xOffset: number, yOf
 
 type TooltipStyles = {
     animationStyle: ViewStyle;
-    rootWrapperStyle: ViewStyle | CSSProperties;
+    rootWrapperStyle: ViewStyle;
     textStyle: TextStyle;
-    pointerWrapperStyle: ViewStyle | CSSProperties;
+    pointerWrapperStyle: ViewStyle;
     pointerStyle: ViewStyle;
 };
 
@@ -237,7 +237,7 @@ export default function getTooltipStyles(
             transform: [{scale}],
         },
         rootWrapperStyle: {
-            position: 'fixed',
+            ...positioning.pFixed,
             backgroundColor: themeColors.heading,
             borderRadius: variables.componentBorderRadiusSmall,
             ...tooltipVerticalPadding,
@@ -260,7 +260,7 @@ export default function getTooltipStyles(
             textAlign: 'center',
         },
         pointerWrapperStyle: {
-            position: 'fixed',
+            ...positioning.pFixed,
             top: pointerWrapperTop,
             left: pointerWrapperLeft,
         },
diff --git a/src/styles/italic/types.ts b/src/styles/italic/types.ts
index 61e0328e52b6..e9feedbdfac5 100644
--- a/src/styles/italic/types.ts
+++ b/src/styles/italic/types.ts
@@ -1,6 +1,5 @@
-import {CSSProperties} from 'react';
 import {TextStyle} from 'react-native';
 
-type ItalicStyles = (TextStyle | CSSProperties)['fontStyle'];
+type ItalicStyles = NonNullable<TextStyle['fontStyle']>;
 
 export default ItalicStyles;
diff --git a/src/styles/optionAlternateTextPlatformStyles/types.ts b/src/styles/optionAlternateTextPlatformStyles/types.ts
index b2e8e4745fff..aacdef7e3501 100644
--- a/src/styles/optionAlternateTextPlatformStyles/types.ts
+++ b/src/styles/optionAlternateTextPlatformStyles/types.ts
@@ -1,5 +1,5 @@
 import {TextStyle} from 'react-native';
 
-type OptionAlternateTextPlatformStyles = Partial<Pick<TextStyle, 'paddingTop'>>;
+type OptionAlternateTextPlatformStyles = Pick<TextStyle, 'paddingTop'>;
 
 export default OptionAlternateTextPlatformStyles;
diff --git a/src/styles/optionRowStyles/index.native.ts b/src/styles/optionRowStyles/index.native.ts
index 11371509ce73..9c13fdd082a4 100644
--- a/src/styles/optionRowStyles/index.native.ts
+++ b/src/styles/optionRowStyles/index.native.ts
@@ -1,5 +1,5 @@
-import OptionRowStyles from './types';
 import styles from '../styles';
+import CompactContentContainerStyles from './types';
 
 /**
  *  On native platforms, alignItemsBaseline does not work correctly
@@ -7,8 +7,7 @@ import styles from '../styles';
  *  keeping compactContentContainerStyles as it is.
  *  https://github.com/Expensify/App/issues/14148
  */
-
-const compactContentContainerStyles: OptionRowStyles = styles.alignItemsCenter;
+const compactContentContainerStyles: CompactContentContainerStyles = styles.alignItemsCenter;
 
 export {
     // eslint-disable-next-line import/prefer-default-export
diff --git a/src/styles/optionRowStyles/index.ts b/src/styles/optionRowStyles/index.ts
index fbeca3c702d9..975f4243842e 100644
--- a/src/styles/optionRowStyles/index.ts
+++ b/src/styles/optionRowStyles/index.ts
@@ -1,7 +1,7 @@
-import OptionRowStyles from './types';
+import CompactContentContainerStyles from './types';
 import styles from '../styles';
 
-const compactContentContainerStyles: OptionRowStyles = styles.alignItemsBaseline;
+const compactContentContainerStyles: CompactContentContainerStyles = styles.alignItemsBaseline;
 
 export {
     // eslint-disable-next-line import/prefer-default-export
diff --git a/src/styles/optionRowStyles/types.ts b/src/styles/optionRowStyles/types.ts
index c08174470701..fcce41f6bc28 100644
--- a/src/styles/optionRowStyles/types.ts
+++ b/src/styles/optionRowStyles/types.ts
@@ -1,6 +1,5 @@
-import {CSSProperties} from 'react';
 import {ViewStyle} from 'react-native';
 
-type OptionRowStyles = CSSProperties | ViewStyle;
+type CompactContentContainerStyles = ViewStyle;
 
-export default OptionRowStyles;
+export default CompactContentContainerStyles;
diff --git a/src/styles/overflowXHidden/types.ts b/src/styles/overflowXHidden/types.ts
index 7ac572f0e651..0f13ba552c0c 100644
--- a/src/styles/overflowXHidden/types.ts
+++ b/src/styles/overflowXHidden/types.ts
@@ -1,5 +1,5 @@
-import {CSSProperties} from 'react';
+import {ViewStyle} from 'react-native';
 
-type OverflowXHiddenStyles = Partial<Pick<CSSProperties, 'overflowX'>>;
+type OverflowXHiddenStyles = Pick<ViewStyle, 'overflowX'>;
 
 export default OverflowXHiddenStyles;
diff --git a/src/styles/pointerEventsAuto/types.ts b/src/styles/pointerEventsAuto/types.ts
index 7c9f0164c936..0ecbc851e000 100644
--- a/src/styles/pointerEventsAuto/types.ts
+++ b/src/styles/pointerEventsAuto/types.ts
@@ -1,5 +1,5 @@
-import {CSSProperties} from 'react';
+import {ViewStyle} from 'react-native';
 
-type PointerEventsAutoStyles = Partial<Pick<CSSProperties, 'pointerEvents'>>;
+type PointerEventsAutoStyles = Pick<ViewStyle, 'pointerEvents'>;
 
 export default PointerEventsAutoStyles;
diff --git a/src/styles/pointerEventsNone/types.ts b/src/styles/pointerEventsNone/types.ts
index f2f5a0d88a41..766ac3f94349 100644
--- a/src/styles/pointerEventsNone/types.ts
+++ b/src/styles/pointerEventsNone/types.ts
@@ -1,5 +1,5 @@
-import {CSSProperties} from 'react';
+import {ViewStyle} from 'react-native';
 
-type PointerEventsNone = Partial<Pick<CSSProperties, 'pointerEvents'>>;
+type PointerEventsNone = Pick<ViewStyle, 'pointerEvents'>;
 
 export default PointerEventsNone;
diff --git a/src/styles/styles.js b/src/styles/styles.js
deleted file mode 100644
index 6f08e5c5303e..000000000000
--- a/src/styles/styles.js
+++ /dev/null
@@ -1,3805 +0,0 @@
-import {defaultStyles as defaultPickerStyles} from 'react-native-picker-select/src/styles';
-import lodashClamp from 'lodash/clamp';
-import fontFamily from './fontFamily';
-import addOutlineWidth from './addOutlineWidth';
-import defaultTheme from './themes/default';
-import fontWeightBold from './fontWeight/bold';
-import variables from './variables';
-import spacing from './utilities/spacing';
-import sizing from './utilities/sizing';
-import flex from './utilities/flex';
-import display from './utilities/display';
-import overflow from './utilities/overflow';
-import whiteSpace from './utilities/whiteSpace';
-import wordBreak from './utilities/wordBreak';
-import positioning from './utilities/positioning';
-import codeStyles from './codeStyles';
-import visibility from './utilities/visibility';
-import writingDirection from './utilities/writingDirection';
-import optionAlternateTextPlatformStyles from './optionAlternateTextPlatformStyles';
-import pointerEventsNone from './pointerEventsNone';
-import pointerEventsAuto from './pointerEventsAuto';
-import getPopOverVerticalOffset from './getPopOverVerticalOffset';
-import overflowXHidden from './overflowXHidden';
-import CONST from '../CONST';
-import * as Browser from '../libs/Browser';
-import cursor from './utilities/cursor';
-import userSelect from './utilities/userSelect';
-import textUnderline from './utilities/textUnderline';
-
-// touchCallout is an iOS safari only property that controls the display of the callout information when you touch and hold a target
-const touchCalloutNone = Browser.isMobileSafari() ? {WebkitTouchCallout: 'none'} : {};
-// to prevent vertical text offset in Safari for badges, new lineHeight values have been added
-const lineHeightBadge = Browser.isSafari() ? {lineHeight: variables.lineHeightXSmall} : {lineHeight: variables.lineHeightNormal};
-
-const picker = (theme) => ({
-    backgroundColor: theme.transparent,
-    color: theme.text,
-    fontFamily: fontFamily.EXP_NEUE,
-    fontSize: variables.fontSizeNormal,
-    lineHeight: variables.fontSizeNormalHeight,
-    paddingBottom: 8,
-    paddingTop: 23,
-    paddingLeft: 0,
-    paddingRight: 25,
-    height: variables.inputHeight,
-    borderWidth: 0,
-    textAlign: 'left',
-});
-
-const link = (theme) => ({
-    color: theme.link,
-    textDecorationColor: theme.link,
-    fontFamily: fontFamily.EXP_NEUE,
-});
-
-const baseCodeTagStyles = (theme) => ({
-    borderWidth: 1,
-    borderRadius: 5,
-    borderColor: theme.border,
-    backgroundColor: theme.textBackground,
-});
-
-const headlineFont = {
-    fontFamily: fontFamily.EXP_NEW_KANSAS_MEDIUM,
-    fontWeight: '500',
-};
-
-const webViewStyles = (theme) => ({
-    // As of react-native-render-html v6, don't declare distinct styles for
-    // custom renderers, the API for custom renderers has changed. Declare the
-    // styles in the below "tagStyles" instead. If you need to reuse those
-    // styles from the renderer, just pass the "style" prop to the underlying
-    // component.
-    tagStyles: {
-        em: {
-            fontFamily: fontFamily.EXP_NEUE,
-            fontStyle: 'italic',
-        },
-
-        del: {
-            textDecorationLine: 'line-through',
-            textDecorationStyle: 'solid',
-        },
-
-        strong: {
-            fontFamily: fontFamily.EXP_NEUE,
-            fontWeight: 'bold',
-        },
-
-        a: link(theme),
-
-        ul: {
-            maxWidth: '100%',
-        },
-
-        ol: {
-            maxWidth: '100%',
-        },
-
-        li: {
-            flexShrink: 1,
-        },
-
-        blockquote: {
-            borderLeftColor: theme.border,
-            borderLeftWidth: 4,
-            paddingLeft: 12,
-            marginTop: 4,
-            marginBottom: 4,
-
-            // Overwrite default HTML margin for blockquotes
-            marginLeft: 0,
-        },
-
-        pre: {
-            ...baseCodeTagStyles(theme),
-            paddingTop: 12,
-            paddingBottom: 12,
-            paddingRight: 8,
-            paddingLeft: 8,
-            fontFamily: fontFamily.MONOSPACE,
-            marginTop: 0,
-            marginBottom: 0,
-        },
-
-        code: {
-            ...baseCodeTagStyles(theme),
-            ...codeStyles.codeTextStyle,
-            paddingLeft: 5,
-            paddingRight: 5,
-            fontFamily: fontFamily.MONOSPACE,
-            fontSize: 13,
-        },
-
-        img: {
-            borderColor: theme.border,
-            borderRadius: variables.componentBorderRadiusNormal,
-            borderWidth: 1,
-            ...touchCalloutNone,
-        },
-
-        p: {
-            marginTop: 0,
-            marginBottom: 0,
-        },
-        h1: {
-            fontSize: variables.fontSizeLarge,
-            marginBottom: 8,
-        },
-    },
-
-    baseFontStyle: {
-        color: theme.text,
-        fontSize: variables.fontSizeNormal,
-        fontFamily: fontFamily.EXP_NEUE,
-        flex: 1,
-        lineHeight: variables.fontSizeNormalHeight,
-        ...writingDirection.ltr,
-    },
-});
-
-const styles = (theme) => ({
-    // Add all of our utility and helper styles
-    ...spacing,
-    ...sizing,
-    ...flex,
-    ...display,
-    ...overflow,
-    ...positioning,
-    ...wordBreak,
-    ...whiteSpace,
-    ...writingDirection,
-    ...cursor,
-    ...userSelect,
-    ...textUnderline,
-    ...theme, // TODO: Should we do this?
-
-    autoCompleteSuggestionsContainer: {
-        backgroundColor: theme.appBG,
-        borderRadius: 8,
-        borderWidth: 1,
-        borderColor: theme.border,
-        justifyContent: 'center',
-        boxShadow: variables.popoverMenuShadow,
-        position: 'absolute',
-        left: 0,
-        right: 0,
-        paddingVertical: CONST.AUTO_COMPLETE_SUGGESTER.SUGGESTER_INNER_PADDING,
-    },
-
-    autoCompleteSuggestionContainer: {
-        flexDirection: 'row',
-        alignItems: 'center',
-    },
-
-    emojiSuggestionsEmoji: {
-        fontSize: variables.fontSizeMedium,
-        width: 51,
-        textAlign: 'center',
-    },
-    emojiSuggestionsText: {
-        fontSize: variables.fontSizeMedium,
-        flex: 1,
-        ...wordBreak.breakWord,
-        ...spacing.pr4,
-    },
-
-    mentionSuggestionsAvatarContainer: {
-        width: 24,
-        height: 24,
-        alignItems: 'center',
-        justifyContent: 'center',
-    },
-
-    mentionSuggestionsText: {
-        fontSize: variables.fontSizeMedium,
-        ...spacing.ml2,
-    },
-
-    mentionSuggestionsDisplayName: {
-        fontFamily: fontFamily.EXP_NEUE_BOLD,
-        fontWeight: fontWeightBold,
-    },
-
-    mentionSuggestionsHandle: {
-        color: theme.textSupporting,
-    },
-
-    webViewStyles: webViewStyles(theme),
-
-    link: link(theme),
-
-    linkMuted: {
-        color: theme.textSupporting,
-        textDecorationColor: theme.textSupporting,
-        fontFamily: fontFamily.EXP_NEUE,
-    },
-
-    linkMutedHovered: {
-        color: theme.textMutedReversed,
-    },
-
-    highlightBG: {
-        backgroundColor: theme.highlightBG,
-    },
-
-    appBG: {
-        backgroundColor: theme.appBG,
-    },
-
-    h4: {
-        fontFamily: fontFamily.EXP_NEUE_BOLD,
-        fontSize: variables.fontSizeLabel,
-        fontWeight: fontWeightBold,
-    },
-
-    textAlignCenter: {
-        textAlign: 'center',
-    },
-
-    textAlignRight: {
-        textAlign: 'right',
-    },
-
-    textAlignLeft: {
-        textAlign: 'left',
-    },
-
-    textUnderline: {
-        textDecorationLine: 'underline',
-    },
-
-    label: {
-        fontSize: variables.fontSizeLabel,
-        lineHeight: variables.lineHeightLarge,
-    },
-
-    textLabel: {
-        color: theme.text,
-        fontSize: variables.fontSizeLabel,
-        lineHeight: variables.lineHeightLarge,
-    },
-
-    mutedTextLabel: {
-        color: theme.textSupporting,
-        fontSize: variables.fontSizeLabel,
-        lineHeight: variables.lineHeightLarge,
-    },
-
-    textMicro: {
-        fontFamily: fontFamily.EXP_NEUE,
-        fontSize: variables.fontSizeSmall,
-        lineHeight: variables.lineHeightSmall,
-    },
-
-    textMicroBold: {
-        color: theme.text,
-        fontWeight: fontWeightBold,
-        fontFamily: fontFamily.EXP_NEUE_BOLD,
-        fontSize: variables.fontSizeSmall,
-        lineHeight: variables.lineHeightSmall,
-    },
-
-    textMicroSupporting: {
-        color: theme.textSupporting,
-        fontFamily: fontFamily.EXP_NEUE,
-        fontSize: variables.fontSizeSmall,
-        lineHeight: variables.lineHeightSmall,
-    },
-
-    textExtraSmallSupporting: {
-        color: theme.textSupporting,
-        fontFamily: fontFamily.EXP_NEUE,
-        fontSize: variables.fontSizeExtraSmall,
-    },
-
-    textNormal: {
-        fontSize: variables.fontSizeNormal,
-    },
-
-    textLarge: {
-        fontSize: variables.fontSizeLarge,
-    },
-
-    textXLarge: {
-        fontSize: variables.fontSizeXLarge,
-    },
-
-    textXXLarge: {
-        fontSize: variables.fontSizeXXLarge,
-    },
-
-    textXXXLarge: {
-        fontSize: variables.fontSizeXXXLarge,
-    },
-
-    textHero: {
-        fontSize: variables.fontSizeHero,
-        fontFamily: fontFamily.EXP_NEW_KANSAS_MEDIUM,
-        lineHeight: variables.lineHeightHero,
-    },
-
-    textStrong: {
-        fontFamily: fontFamily.EXP_NEUE_BOLD,
-        fontWeight: fontWeightBold,
-    },
-
-    textItalic: {
-        fontFamily: fontFamily.EXP_NEUE_ITALIC,
-        fontStyle: 'italic',
-    },
-
-    textHeadline: {
-        ...headlineFont,
-        ...whiteSpace.preWrap,
-        color: theme.heading,
-        fontSize: variables.fontSizeXLarge,
-        lineHeight: variables.lineHeightXXLarge,
-    },
-
-    textHeadlineH1: {
-        ...headlineFont,
-        ...whiteSpace.preWrap,
-        color: theme.heading,
-        fontSize: variables.fontSizeh1,
-        lineHeight: variables.lineHeightSizeh1,
-    },
-
-    textDecorationNoLine: {
-        textDecorationLine: 'none',
-    },
-
-    textWhite: {
-        color: theme.textLight,
-    },
-
-    textBlue: {
-        color: theme.link,
-    },
-
-    textUppercase: {
-        textTransform: 'uppercase',
-    },
-
-    textNoWrap: {
-        ...whiteSpace.noWrap,
-    },
-
-    colorReversed: {
-        color: theme.textReversed,
-    },
-
-    colorMutedReversed: {
-        color: theme.textMutedReversed,
-    },
-
-    colorMuted: {
-        color: theme.textSupporting,
-    },
-
-    bgTransparent: {
-        backgroundColor: 'transparent',
-    },
-
-    bgDark: {
-        backgroundColor: theme.inverse,
-    },
-
-    opacity0: {
-        opacity: 0,
-    },
-
-    opacity1: {
-        opacity: 1,
-    },
-
-    textDanger: {
-        color: theme.danger,
-    },
-
-    borderRadiusNormal: {
-        borderRadius: variables.buttonBorderRadius,
-    },
-
-    button: {
-        backgroundColor: theme.buttonDefaultBG,
-        borderRadius: variables.buttonBorderRadius,
-        minHeight: variables.componentSizeLarge,
-        justifyContent: 'center',
-        ...spacing.ph3,
-    },
-
-    buttonContainer: {
-        padding: 1,
-        borderRadius: variables.buttonBorderRadius,
-    },
-
-    buttonText: {
-        color: theme.text,
-        fontFamily: fontFamily.EXP_NEUE_BOLD,
-        fontSize: variables.fontSizeNormal,
-        fontWeight: fontWeightBold,
-        textAlign: 'center',
-        flexShrink: 1,
-
-        // It is needed to unset the Lineheight. We don't need it for buttons as button always contains single line of text.
-        // It allows to vertically center the text.
-        lineHeight: undefined,
-
-        // Add 1px to the Button text to give optical vertical alignment.
-        paddingBottom: 1,
-    },
-
-    buttonSmall: {
-        borderRadius: variables.buttonBorderRadius,
-        minHeight: variables.componentSizeSmall,
-        paddingTop: 4,
-        paddingHorizontal: 14,
-        paddingBottom: 4,
-        backgroundColor: theme.buttonDefaultBG,
-    },
-
-    buttonMedium: {
-        borderRadius: variables.buttonBorderRadius,
-        minHeight: variables.componentSizeNormal,
-        paddingTop: 12,
-        paddingRight: 16,
-        paddingBottom: 12,
-        paddingLeft: 16,
-        backgroundColor: theme.buttonDefaultBG,
-    },
-
-    buttonLarge: {
-        borderRadius: variables.buttonBorderRadius,
-        minHeight: variables.componentSizeLarge,
-        paddingTop: 8,
-        paddingRight: 10,
-        paddingBottom: 8,
-        paddingLeft: 18,
-        backgroundColor: theme.buttonDefaultBG,
-    },
-
-    buttonSmallText: {
-        fontSize: variables.fontSizeSmall,
-        fontFamily: fontFamily.EXP_NEUE_BOLD,
-        fontWeight: fontWeightBold,
-        textAlign: 'center',
-    },
-
-    buttonMediumText: {
-        fontSize: variables.fontSizeLabel,
-        fontFamily: fontFamily.EXP_NEUE_BOLD,
-        fontWeight: fontWeightBold,
-        textAlign: 'center',
-    },
-
-    buttonLargeText: {
-        fontSize: variables.fontSizeNormal,
-        fontFamily: fontFamily.EXP_NEUE_BOLD,
-        fontWeight: fontWeightBold,
-        textAlign: 'center',
-    },
-
-    buttonDefaultHovered: {
-        backgroundColor: theme.buttonHoveredBG,
-        borderWidth: 0,
-    },
-
-    buttonSuccess: {
-        backgroundColor: theme.success,
-        borderWidth: 0,
-    },
-
-    buttonOpacityDisabled: {
-        opacity: 0.5,
-    },
-
-    buttonSuccessHovered: {
-        backgroundColor: theme.successHover,
-        borderWidth: 0,
-    },
-
-    buttonDanger: {
-        backgroundColor: theme.danger,
-        borderWidth: 0,
-    },
-
-    buttonDangerHovered: {
-        backgroundColor: theme.dangerHover,
-        borderWidth: 0,
-    },
-
-    buttonDisabled: {
-        backgroundColor: theme.buttonDefaultBG,
-        borderWidth: 0,
-    },
-
-    buttonDivider: {
-        height: variables.dropDownButtonDividerHeight,
-        borderWidth: 0.7,
-        borderColor: theme.text,
-    },
-
-    noBorderRadius: {
-        borderRadius: 0,
-    },
-
-    noRightBorderRadius: {
-        borderTopRightRadius: 0,
-        borderBottomRightRadius: 0,
-    },
-
-    noLeftBorderRadius: {
-        borderTopLeftRadius: 0,
-        borderBottomLeftRadius: 0,
-    },
-
-    buttonCTA: {
-        paddingVertical: 6,
-        ...spacing.mh4,
-    },
-
-    buttonCTAIcon: {
-        marginRight: 22,
-
-        // Align vertically with the Button text
-        paddingBottom: 1,
-        paddingTop: 1,
-    },
-
-    buttonConfirm: {
-        margin: 20,
-    },
-
-    attachmentButtonBigScreen: {
-        minWidth: 300,
-        alignSelf: 'center',
-    },
-
-    buttonConfirmText: {
-        paddingLeft: 20,
-        paddingRight: 20,
-    },
-
-    buttonSuccessText: {
-        color: theme.textLight,
-    },
-
-    buttonDangerText: {
-        color: theme.textLight,
-    },
-
-    hoveredComponentBG: {
-        backgroundColor: theme.hoverComponentBG,
-    },
-
-    activeComponentBG: {
-        backgroundColor: theme.activeComponentBG,
-    },
-
-    touchableButtonImage: {
-        alignItems: 'center',
-        height: variables.componentSizeNormal,
-        justifyContent: 'center',
-        width: variables.componentSizeNormal,
-    },
-
-    visuallyHidden: {
-        ...visibility.hidden,
-        overflow: 'hidden',
-        width: 0,
-        height: 0,
-    },
-
-    visibilityHidden: {
-        ...visibility.hidden,
-    },
-
-    loadingVBAAnimation: {
-        width: 140,
-        height: 140,
-    },
-
-    pickerSmall: (backgroundColor = theme.highlightBG) => ({
-        inputIOS: {
-            fontFamily: fontFamily.EXP_NEUE,
-            fontSize: variables.fontSizeSmall,
-            paddingLeft: 0,
-            paddingRight: 17,
-            paddingTop: 6,
-            paddingBottom: 6,
-            borderWidth: 0,
-            color: theme.text,
-            height: 26,
-            opacity: 1,
-            backgroundColor: 'transparent',
-        },
-        done: {
-            color: theme.text,
-        },
-        doneDepressed: {
-            fontSize: defaultPickerStyles.done.fontSize,
-        },
-        modalViewMiddle: {
-            backgroundColor: theme.border,
-            borderTopWidth: 0,
-        },
-        modalViewBottom: {
-            backgroundColor: theme.highlightBG,
-        },
-        inputWeb: {
-            fontFamily: fontFamily.EXP_NEUE,
-            fontSize: variables.fontSizeSmall,
-            paddingLeft: 0,
-            paddingRight: 17,
-            paddingTop: 6,
-            paddingBottom: 6,
-            borderWidth: 0,
-            color: theme.text,
-            appearance: 'none',
-            height: 26,
-            opacity: 1,
-            backgroundColor,
-            ...cursor.cursorPointer,
-        },
-        inputAndroid: {
-            fontFamily: fontFamily.EXP_NEUE,
-            fontSize: variables.fontSizeSmall,
-            paddingLeft: 0,
-            paddingRight: 17,
-            paddingTop: 6,
-            paddingBottom: 6,
-            borderWidth: 0,
-            color: theme.text,
-            height: 26,
-            opacity: 1,
-            backgroundColor: 'transparent',
-        },
-        iconContainer: {
-            top: 7,
-            ...pointerEventsNone,
-        },
-        icon: {
-            width: variables.iconSizeExtraSmall,
-            height: variables.iconSizeExtraSmall,
-        },
-    }),
-
-    badge: {
-        backgroundColor: theme.border,
-        borderRadius: 14,
-        height: variables.iconSizeNormal,
-        flexDirection: 'row',
-        paddingHorizontal: 7,
-        alignItems: 'center',
-    },
-
-    badgeSuccess: {
-        backgroundColor: theme.success,
-    },
-
-    badgeSuccessPressed: {
-        backgroundColor: theme.successHover,
-    },
-
-    badgeAdHocSuccess: {
-        backgroundColor: theme.badgeAdHoc,
-    },
-
-    badgeAdHocSuccessPressed: {
-        backgroundColor: theme.badgeAdHocHover,
-    },
-
-    badgeDanger: {
-        backgroundColor: theme.danger,
-    },
-
-    badgeDangerPressed: {
-        backgroundColor: theme.dangerPressed,
-    },
-
-    badgeText: {
-        color: theme.text,
-        fontSize: variables.fontSizeSmall,
-        ...lineHeightBadge,
-        ...whiteSpace.noWrap,
-    },
-
-    border: {
-        borderWidth: 1,
-        borderRadius: variables.componentBorderRadius,
-        borderColor: theme.border,
-    },
-
-    borderColorFocus: {
-        borderColor: theme.borderFocus,
-    },
-
-    borderColorDanger: {
-        borderColor: theme.danger,
-    },
-
-    textInputDisabled: {
-        // Adding disabled color theme to indicate user that the field is not editable.
-        backgroundColor: theme.highlightBG,
-        borderBottomWidth: 2,
-        borderColor: theme.borderLighter,
-        // Adding browser specefic style to bring consistency between Safari and other platforms.
-        // Applying the Webkit styles only to browsers as it is not available in native.
-        ...(Browser.getBrowser()
-            ? {
-                  WebkitTextFillColor: theme.textSupporting,
-                  WebkitOpacity: 1,
-              }
-            : {}),
-        color: theme.textSupporting,
-    },
-
-    uploadReceiptView: (isSmallScreenWidth) => ({
-        borderRadius: variables.componentBorderRadiusLarge,
-        borderWidth: isSmallScreenWidth ? 0 : 2,
-        borderColor: theme.borderFocus,
-        borderStyle: 'dotted',
-        marginBottom: 20,
-        marginLeft: 20,
-        marginRight: 20,
-        justifyContent: 'center',
-        alignItems: 'center',
-        paddingVertical: 40,
-        gap: 4,
-        flex: 1,
-    }),
-
-    receiptViewTextContainer: {
-        paddingHorizontal: 40,
-        ...sizing.w100,
-    },
-
-    cameraView: {
-        flex: 1,
-        overflow: 'hidden',
-        padding: 10,
-        borderRadius: 28,
-        borderStyle: 'solid',
-        borderWidth: 8,
-        backgroundColor: theme.highlightBG,
-        borderColor: theme.appBG,
-    },
-
-    permissionView: {
-        paddingVertical: 108,
-        paddingHorizontal: 61,
-        alignItems: 'center',
-        justifyContent: 'center',
-    },
-
-    headerAnonymousFooter: {
-        color: theme.heading,
-        fontFamily: fontFamily.EXP_NEW_KANSAS_MEDIUM,
-        fontSize: variables.fontSizeXLarge,
-        lineHeight: variables.lineHeightXXLarge,
-    },
-
-    headerText: {
-        color: theme.heading,
-        fontFamily: fontFamily.EXP_NEUE_BOLD,
-        fontSize: variables.fontSizeNormal,
-        fontWeight: fontWeightBold,
-    },
-
-    headerGap: {
-        height: CONST.DESKTOP_HEADER_PADDING,
-    },
-
-    reportOptions: {
-        marginLeft: 8,
-    },
-
-    chatItemComposeSecondaryRow: {
-        height: 15,
-        marginBottom: 5,
-        marginTop: 5,
-    },
-
-    chatItemComposeSecondaryRowSubText: {
-        color: theme.textSupporting,
-        fontFamily: fontFamily.EXP_NEUE,
-        fontSize: variables.fontSizeSmall,
-        lineHeight: variables.lineHeightSmall,
-    },
-
-    chatItemComposeSecondaryRowOffset: {
-        marginLeft: variables.chatInputSpacing,
-    },
-
-    offlineIndicator: {
-        marginLeft: variables.chatInputSpacing,
-    },
-
-    offlineIndicatorMobile: {
-        paddingLeft: 20,
-        paddingTop: 5,
-        paddingBottom: 30,
-        marginBottom: -25,
-    },
-
-    offlineIndicatorRow: {
-        height: 25,
-    },
-
-    // Actions
-    actionAvatar: {
-        borderRadius: 20,
-    },
-
-    componentHeightLarge: {
-        height: variables.inputHeight,
-    },
-
-    calendarHeader: {
-        height: 50,
-        flexDirection: 'row',
-        justifyContent: 'space-between',
-        alignItems: 'center',
-        paddingHorizontal: 15,
-        paddingRight: 5,
-        ...userSelect.userSelectNone,
-    },
-
-    calendarDayRoot: {
-        flex: 1,
-        height: 45,
-        justifyContent: 'center',
-        alignItems: 'center',
-        ...userSelect.userSelectNone,
-    },
-
-    calendarDayContainer: {
-        width: 30,
-        height: 30,
-        justifyContent: 'center',
-        alignItems: 'center',
-        borderRadius: 15,
-        overflow: 'hidden',
-    },
-
-    calendarDayContainerSelected: {
-        backgroundColor: theme.buttonDefaultBG,
-    },
-
-    /**
-     * @param {number} textInputHeight
-     * @param {number} minHeight
-     * @param {number} maxHeight
-     * @returns {object}
-     */
-    autoGrowHeightInputContainer: (textInputHeight, minHeight, maxHeight) => ({
-        height: lodashClamp(textInputHeight, minHeight, maxHeight),
-        minHeight,
-    }),
-
-    autoGrowHeightHiddenInput: (maxWidth, maxHeight) => ({
-        maxWidth,
-        maxHeight: maxHeight && maxHeight + 1,
-        overflow: 'hidden',
-    }),
-
-    textInputContainer: {
-        flex: 1,
-        justifyContent: 'center',
-        height: '100%',
-        backgroundColor: 'transparent',
-        borderBottomWidth: 2,
-        borderColor: theme.border,
-        overflow: 'hidden',
-    },
-
-    textInputLabel: {
-        position: 'absolute',
-        left: 0,
-        top: 0,
-        fontSize: variables.fontSizeNormal,
-        color: theme.textSupporting,
-        fontFamily: fontFamily.EXP_NEUE,
-        width: '100%',
-    },
-
-    textInputLabelBackground: {
-        position: 'absolute',
-        top: 0,
-        width: '100%',
-        height: 23,
-        backgroundColor: theme.componentBG,
-    },
-
-    textInputLabelDesktop: {
-        transformOrigin: 'left center',
-    },
-
-    textInputLabelTransformation: (translateY, translateX, scale) => ({
-        transform: [{translateY}, {translateX}, {scale}],
-    }),
-
-    baseTextInput: {
-        fontFamily: fontFamily.EXP_NEUE,
-        fontSize: variables.fontSizeNormal,
-        lineHeight: variables.lineHeightXLarge,
-        color: theme.text,
-        paddingTop: 23,
-        paddingBottom: 8,
-        paddingLeft: 0,
-        borderWidth: 0,
-    },
-
-    textInputMultiline: {
-        scrollPadding: '23px 0 0 0',
-    },
-
-    textInputMultilineContainer: {
-        paddingTop: 23,
-    },
-
-    textInputAndIconContainer: {
-        flex: 1,
-        height: '100%',
-        zIndex: -1,
-        flexDirection: 'row',
-    },
-
-    textInputDesktop: addOutlineWidth({}, 0),
-
-    textInputIconContainer: {
-        paddingHorizontal: 11,
-        justifyContent: 'center',
-        margin: 1,
-    },
-
-    secureInput: {
-        borderTopRightRadius: 0,
-        borderBottomRightRadius: 0,
-    },
-
-    textInput: {
-        backgroundColor: 'transparent',
-        borderRadius: variables.componentBorderRadiusNormal,
-        height: variables.inputComponentSizeNormal,
-        borderColor: theme.border,
-        borderWidth: 1,
-        color: theme.text,
-        fontFamily: fontFamily.EXP_NEUE,
-        fontSize: variables.fontSizeNormal,
-        paddingLeft: 12,
-        paddingRight: 12,
-        paddingTop: 10,
-        paddingBottom: 10,
-        textAlignVertical: 'center',
-    },
-
-    textInputPrefixWrapper: {
-        position: 'absolute',
-        left: 0,
-        top: 0,
-        height: variables.inputHeight,
-        display: 'flex',
-        flexDirection: 'row',
-        alignItems: 'center',
-        paddingTop: 23,
-        paddingBottom: 8,
-    },
-
-    textInputPrefix: {
-        color: theme.text,
-        fontFamily: fontFamily.EXP_NEUE,
-        fontSize: variables.fontSizeNormal,
-        textAlignVertical: 'center',
-    },
-
-    pickerContainer: {
-        borderBottomWidth: 2,
-        paddingLeft: 0,
-        borderStyle: 'solid',
-        borderColor: theme.border,
-        justifyContent: 'center',
-        backgroundColor: 'transparent',
-        height: variables.inputHeight,
-        overflow: 'hidden',
-    },
-
-    pickerContainerSmall: {
-        height: variables.inputHeightSmall,
-    },
-
-    pickerLabel: {
-        position: 'absolute',
-        left: 0,
-        top: 6,
-        zIndex: 1,
-    },
-
-    picker: (disabled = false, backgroundColor = theme.appBG) => ({
-        iconContainer: {
-            top: Math.round(variables.inputHeight * 0.5) - 11,
-            right: 0,
-            ...pointerEventsNone,
-        },
-
-        inputWeb: {
-            appearance: 'none',
-            ...(disabled ? cursor.cursorDisabled : cursor.cursorPointer),
-            ...picker(theme),
-            backgroundColor,
-        },
-
-        inputIOS: {
-            ...picker(theme),
-        },
-        done: {
-            color: theme.text,
-        },
-        doneDepressed: {
-            fontSize: defaultPickerStyles.done.fontSize,
-        },
-        modalViewMiddle: {
-            backgroundColor: theme.border,
-            borderTopWidth: 0,
-        },
-        modalViewBottom: {
-            backgroundColor: theme.highlightBG,
-        },
-
-        inputAndroid: {
-            ...picker(theme),
-        },
-    }),
-
-    disabledText: {
-        color: theme.icon,
-    },
-
-    inputDisabled: {
-        backgroundColor: theme.highlightBG,
-        color: theme.icon,
-    },
-
-    noOutline: addOutlineWidth({}, 0),
-
-    textLabelSupporting: {
-        fontFamily: fontFamily.EXP_NEUE,
-        fontSize: variables.fontSizeLabel,
-        color: theme.textSupporting,
-    },
-
-    textLabelError: {
-        fontFamily: fontFamily.EXP_NEUE,
-        fontSize: variables.fontSizeLabel,
-        color: theme.textError,
-    },
-
-    textReceiptUpload: {
-        ...headlineFont,
-        fontSize: variables.fontSizeXLarge,
-        color: theme.textLight,
-        textAlign: 'center',
-    },
-
-    subTextReceiptUpload: {
-        fontFamily: fontFamily.EXP_NEUE,
-        lineHeight: variables.lineHeightLarge,
-        textAlign: 'center',
-        color: theme.textLight,
-    },
-
-    furtherDetailsText: {
-        fontFamily: fontFamily.EXP_NEUE,
-        fontSize: variables.fontSizeSmall,
-        color: theme.textSupporting,
-    },
-
-    lh16: {
-        lineHeight: 16,
-    },
-
-    lh20: {
-        lineHeight: 20,
-    },
-
-    lh140Percent: {
-        lineHeight: '140%',
-    },
-
-    formHelp: {
-        color: theme.textSupporting,
-        fontSize: variables.fontSizeLabel,
-        lineHeight: variables.lineHeightLarge,
-        marginBottom: 4,
-    },
-
-    formError: {
-        color: theme.textError,
-        fontSize: variables.fontSizeLabel,
-        lineHeight: variables.formErrorLineHeight,
-        marginBottom: 4,
-    },
-
-    formSuccess: {
-        color: theme.success,
-        fontSize: variables.fontSizeLabel,
-        lineHeight: 18,
-        marginBottom: 4,
-    },
-
-    signInPage: {
-        backgroundColor: theme.highlightBG,
-        minHeight: '100%',
-        flex: 1,
-    },
-
-    signInPageHeroCenter: {
-        position: 'absolute',
-        top: 0,
-        left: 0,
-        right: 0,
-        bottom: 0,
-        justifyContent: 'center',
-        alignItems: 'center',
-    },
-
-    signInPageGradient: {
-        height: '100%',
-        width: 540,
-        position: 'absolute',
-        top: 0,
-        left: 0,
-    },
-
-    signInPageGradientMobile: {
-        height: 300,
-        width: 800,
-        position: 'absolute',
-        top: 0,
-        left: 0,
-    },
-
-    signInBackground: {
-        position: 'absolute',
-        bottom: 0,
-        left: 0,
-        minHeight: 700,
-    },
-
-    signInPageInner: {
-        marginLeft: 'auto',
-        marginRight: 'auto',
-        height: '100%',
-        width: '100%',
-    },
-
-    signInPageContentTopSpacer: {
-        maxHeight: 132,
-        minHeight: 24,
-    },
-
-    signInPageContentTopSpacerSmallScreens: {
-        maxHeight: 132,
-        minHeight: 45,
-    },
-
-    signInPageLeftContainer: {
-        paddingLeft: 40,
-        paddingRight: 40,
-    },
-
-    signInPageLeftContainerWide: {
-        maxWidth: variables.sideBarWidth,
-    },
-
-    signInPageWelcomeFormContainer: {
-        maxWidth: CONST.SIGN_IN_FORM_WIDTH,
-    },
-
-    signInPageWelcomeTextContainer: {
-        width: CONST.SIGN_IN_FORM_WIDTH,
-    },
-
-    changeExpensifyLoginLinkContainer: {
-        flexDirection: 'row',
-        flexWrap: 'wrap',
-        ...wordBreak.breakWord,
-    },
-
-    // Sidebar Styles
-    sidebar: {
-        backgroundColor: theme.sidebar,
-        height: '100%',
-    },
-
-    sidebarHeaderContainer: {
-        flexDirection: 'row',
-        paddingHorizontal: 20,
-        paddingVertical: 19,
-        justifyContent: 'space-between',
-        alignItems: 'center',
-    },
-
-    subNavigationContainer: {
-        backgroundColor: theme.sidebar,
-        flex: 1,
-        borderTopLeftRadius: variables.componentBorderRadiusRounded,
-    },
-
-    sidebarAnimatedWrapperContainer: {
-        height: '100%',
-        position: 'absolute',
-    },
-
-    sidebarFooter: {
-        alignItems: 'center',
-        display: 'flex',
-        justifyContent: 'center',
-        paddingVertical: variables.lineHeightXLarge,
-        width: '100%',
-    },
-
-    sidebarAvatar: {
-        backgroundColor: theme.icon,
-        borderRadius: 20,
-        height: variables.componentSizeNormal,
-        width: variables.componentSizeNormal,
-    },
-
-    statusIndicator: (backgroundColor = theme.danger) => ({
-        borderColor: theme.sidebar,
-        backgroundColor,
-        borderRadius: 8,
-        borderWidth: 2,
-        position: 'absolute',
-        right: -2,
-        top: -1,
-        height: 16,
-        width: 16,
-        zIndex: 10,
-    }),
-
-    floatingActionButtonContainer: {
-        position: 'absolute',
-        left: 16,
-        // The bottom of the floating action button should align with the bottom of the compose box.
-        // The value should be equal to the height + marginBottom + marginTop of chatItemComposeSecondaryRow
-        bottom: 25,
-    },
-
-    floatingActionButton: {
-        backgroundColor: theme.success,
-        height: variables.componentSizeNormal,
-        width: variables.componentSizeNormal,
-        borderRadius: 999,
-        alignItems: 'center',
-        justifyContent: 'center',
-    },
-
-    sidebarFooterUsername: {
-        color: theme.heading,
-        fontSize: variables.fontSizeLabel,
-        fontWeight: '700',
-        width: 200,
-        textOverflow: 'ellipsis',
-        overflow: 'hidden',
-        ...whiteSpace.noWrap,
-    },
-
-    sidebarFooterLink: {
-        color: theme.textSupporting,
-        fontSize: variables.fontSizeSmall,
-        textDecorationLine: 'none',
-        fontFamily: fontFamily.EXP_NEUE,
-        lineHeight: 20,
-    },
-
-    sidebarListContainer: {
-        scrollbarWidth: 'none',
-        paddingBottom: 4,
-    },
-
-    sidebarListItem: {
-        justifyContent: 'center',
-        textDecorationLine: 'none',
-    },
-
-    RHPNavigatorContainer: (isSmallScreenWidth) => ({
-        width: isSmallScreenWidth ? '100%' : variables.sideBarWidth,
-        position: 'absolute',
-        right: 0,
-        height: '100%',
-    }),
-
-    onlyEmojisText: {
-        fontSize: variables.fontSizeOnlyEmojis,
-        lineHeight: variables.fontSizeOnlyEmojisHeight,
-    },
-
-    onlyEmojisTextLineHeight: {
-        lineHeight: variables.fontSizeOnlyEmojisHeight,
-    },
-
-    createMenuPositionSidebar: (windowHeight) => ({
-        horizontal: 18,
-        vertical: windowHeight - 75,
-    }),
-
-    createMenuPositionProfile: (windowWidth) => ({
-        horizontal: windowWidth - 355,
-        ...getPopOverVerticalOffset(162),
-    }),
-
-    createMenuPositionReportActionCompose: (windowHeight) => ({
-        horizontal: 18 + variables.sideBarWidth,
-        vertical: windowHeight - 83,
-    }),
-
-    createMenuPositionRightSidepane: {
-        right: 18,
-        bottom: 75,
-    },
-
-    createMenuContainer: {
-        width: variables.sideBarWidth - 40,
-        paddingVertical: 12,
-    },
-
-    createMenuHeaderText: {
-        fontFamily: fontFamily.EXP_NEUE,
-        fontSize: variables.fontSizeLabel,
-        color: theme.heading,
-    },
-
-    popoverMenuItem: {
-        flexDirection: 'row',
-        borderRadius: 0,
-        paddingHorizontal: 20,
-        paddingVertical: 12,
-        justifyContent: 'space-between',
-        width: '100%',
-    },
-
-    popoverMenuIcon: {
-        width: variables.componentSizeNormal,
-        justifyContent: 'center',
-        alignItems: 'center',
-    },
-
-    popoverMenuText: {
-        fontSize: variables.fontSizeNormal,
-        color: theme.heading,
-    },
-
-    popoverInnerContainer: {
-        paddingTop: 0, // adjusting this because the mobile modal adds additional padding that we don't need for our layout
-        maxHeight: '95%',
-    },
-
-    menuItemTextContainer: {
-        minHeight: variables.componentSizeNormal,
-    },
-
-    chatLinkRowPressable: {
-        minWidth: 0,
-        textDecorationLine: 'none',
-        flex: 1,
-    },
-
-    sidebarLink: {
-        textDecorationLine: 'none',
-    },
-
-    sidebarLinkLHN: {
-        textDecorationLine: 'none',
-        marginLeft: 12,
-        marginRight: 12,
-        borderRadius: 8,
-    },
-
-    sidebarLinkInner: {
-        alignItems: 'center',
-        flexDirection: 'row',
-        paddingLeft: 20,
-        paddingRight: 20,
-    },
-
-    sidebarLinkInnerLHN: {
-        alignItems: 'center',
-        flexDirection: 'row',
-        paddingLeft: 8,
-        paddingRight: 8,
-    },
-
-    sidebarLinkText: {
-        color: theme.textSupporting,
-        fontSize: variables.fontSizeNormal,
-        textDecorationLine: 'none',
-        overflow: 'hidden',
-    },
-
-    sidebarLinkHover: {
-        backgroundColor: theme.sidebarHover,
-    },
-
-    sidebarLinkHoverLHN: {
-        backgroundColor: theme.highlightBG,
-    },
-
-    sidebarLinkActive: {
-        backgroundColor: theme.border,
-        textDecorationLine: 'none',
-    },
-
-    sidebarLinkActiveLHN: {
-        backgroundColor: theme.highlightBG,
-        textDecorationLine: 'none',
-    },
-
-    sidebarLinkTextBold: {
-        fontFamily: fontFamily.EXP_NEUE_BOLD,
-        fontWeight: fontWeightBold,
-        color: theme.heading,
-    },
-
-    sidebarLinkActiveText: {
-        color: theme.textSupporting,
-        fontSize: variables.fontSizeNormal,
-        textDecorationLine: 'none',
-        overflow: 'hidden',
-    },
-
-    optionItemAvatarNameWrapper: {
-        minWidth: 0,
-        flex: 1,
-    },
-
-    optionDisplayName: {
-        fontFamily: fontFamily.EXP_NEUE,
-        minHeight: variables.alternateTextHeight,
-        lineHeight: variables.lineHeightXLarge,
-        ...whiteSpace.noWrap,
-    },
-
-    optionDisplayNameCompact: {
-        minWidth: 'auto',
-        flexBasis: 'auto',
-        flexGrow: 0,
-        flexShrink: 1,
-    },
-
-    displayNameTooltipEllipsis: {
-        position: 'absolute',
-        opacity: 0,
-        right: 0,
-        bottom: 0,
-    },
-
-    optionAlternateText: {
-        minHeight: variables.alternateTextHeight,
-        lineHeight: variables.lineHeightXLarge,
-    },
-
-    optionAlternateTextCompact: {
-        flexShrink: 1,
-        flexGrow: 1,
-        flexBasis: 'auto',
-        ...optionAlternateTextPlatformStyles,
-    },
-
-    optionRow: {
-        minHeight: variables.optionRowHeight,
-        paddingTop: 12,
-        paddingBottom: 12,
-    },
-
-    optionRowSelected: {
-        backgroundColor: theme.activeComponentBG,
-    },
-
-    optionRowDisabled: {
-        color: theme.textSupporting,
-    },
-
-    optionRowCompact: {
-        height: variables.optionRowHeightCompact,
-        paddingTop: 12,
-        paddingBottom: 12,
-    },
-
-    optionsListSectionHeader: {
-        marginTop: 8,
-        marginBottom: 4,
-    },
-
-    overlayStyles: (current) => ({
-        position: 'fixed',
-
-        // We need to stretch the overlay to cover the sidebar and the translate animation distance.
-        left: -2 * variables.sideBarWidth,
-        top: 0,
-        bottom: 0,
-        right: 0,
-        backgroundColor: theme.overlay,
-        opacity: current.progress.interpolate({
-            inputRange: [0, 1],
-            outputRange: [0, variables.overlayOpacity],
-            extrapolate: 'clamp',
-        }),
-    }),
-
-    appContent: {
-        backgroundColor: theme.appBG,
-        overflow: 'hidden',
-    },
-
-    appContentHeader: {
-        height: variables.contentHeaderHeight,
-        justifyContent: 'center',
-        display: 'flex',
-        paddingRight: 20,
-    },
-
-    appContentHeaderTitle: {
-        alignItems: 'center',
-        flexDirection: 'row',
-    },
-
-    LHNToggle: {
-        alignItems: 'center',
-        height: variables.contentHeaderHeight,
-        justifyContent: 'center',
-        paddingRight: 10,
-        paddingLeft: 20,
-    },
-
-    LHNToggleIcon: {
-        height: 15,
-        width: 18,
-    },
-
-    chatContentScrollView: {
-        flexGrow: 1,
-        justifyContent: 'flex-start',
-        paddingBottom: 16,
-    },
-
-    // Chat Item
-    chatItem: {
-        display: 'flex',
-        flexDirection: 'row',
-        paddingTop: 8,
-        paddingBottom: 8,
-        paddingLeft: 20,
-        paddingRight: 20,
-    },
-
-    chatItemRightGrouped: {
-        flexGrow: 1,
-        flexShrink: 1,
-        flexBasis: 0,
-        position: 'relative',
-        marginLeft: variables.chatInputSpacing,
-    },
-
-    chatItemRight: {
-        flexGrow: 1,
-        flexShrink: 1,
-        flexBasis: 0,
-        position: 'relative',
-    },
-
-    chatItemMessageHeader: {
-        alignItems: 'center',
-        display: 'flex',
-        flexDirection: 'row',
-        flexWrap: 'nowrap',
-    },
-
-    chatItemMessageHeaderSender: {
-        color: theme.heading,
-        fontFamily: fontFamily.EXP_NEUE_BOLD,
-        fontSize: variables.fontSizeNormal,
-        fontWeight: fontWeightBold,
-        lineHeight: variables.lineHeightXLarge,
-        ...wordBreak.breakWord,
-    },
-
-    chatItemMessageHeaderTimestamp: {
-        flexShrink: 0,
-        color: theme.textSupporting,
-        fontSize: variables.fontSizeSmall,
-        paddingTop: 2,
-    },
-
-    chatItemMessage: {
-        color: theme.text,
-        fontSize: variables.fontSizeNormal,
-        fontFamily: fontFamily.EXP_NEUE,
-        lineHeight: variables.lineHeightXLarge,
-        maxWidth: '100%',
-        ...cursor.cursorAuto,
-        ...whiteSpace.preWrap,
-        ...wordBreak.breakWord,
-    },
-
-    renderHTMLTitle: {
-        color: theme.text,
-        fontSize: variables.fontSizeNormal,
-        fontFamily: fontFamily.EXP_NEUE,
-        lineHeight: variables.lineHeightXLarge,
-        maxWidth: '100%',
-        ...whiteSpace.preWrap,
-        ...wordBreak.breakWord,
-    },
-
-    chatItemComposeWithFirstRow: {
-        minHeight: 90,
-    },
-
-    chatItemFullComposeRow: {
-        ...sizing.h100,
-    },
-
-    chatItemComposeBoxColor: {
-        borderColor: theme.border,
-    },
-
-    chatItemComposeBoxFocusedColor: {
-        borderColor: theme.borderFocus,
-    },
-
-    chatItemComposeBox: {
-        backgroundColor: theme.componentBG,
-        borderWidth: 1,
-        borderRadius: variables.componentBorderRadiusRounded,
-        minHeight: variables.componentSizeMedium,
-    },
-
-    chatItemFullComposeBox: {
-        ...flex.flex1,
-        ...sizing.h100,
-    },
-
-    chatFooter: {
-        paddingLeft: 20,
-        paddingRight: 20,
-        display: 'flex',
-        backgroundColor: theme.appBG,
-    },
-
-    chatFooterFullCompose: {
-        flex: 1,
-    },
-
-    chatItemDraft: {
-        display: 'flex',
-        flexDirection: 'row',
-        paddingTop: 8,
-        paddingBottom: 8,
-        paddingLeft: 20,
-        paddingRight: 20,
-    },
-
-    chatItemReactionsDraftRight: {
-        marginLeft: 52,
-    },
-    chatFooterAtTheTop: {
-        flexGrow: 1,
-        justifyContent: 'flex-start',
-    },
-
-    // Be extremely careful when editing the compose styles, as it is easy to introduce regressions.
-    // Make sure you run the following tests against any changes: #12669
-    textInputCompose: addOutlineWidth(
-        {
-            backgroundColor: theme.componentBG,
-            borderColor: theme.border,
-            color: theme.text,
-            fontFamily: fontFamily.EXP_NEUE,
-            fontSize: variables.fontSizeNormal,
-            borderWidth: 0,
-            height: 'auto',
-            lineHeight: variables.lineHeightXLarge,
-            ...overflowXHidden,
-
-            // On Android, multiline TextInput with height: 'auto' will show extra padding unless they are configured with
-            // paddingVertical: 0, alignSelf: 'center', and textAlignVertical: 'center'
-
-            paddingHorizontal: variables.avatarChatSpacing,
-            paddingTop: 0,
-            paddingBottom: 0,
-            alignSelf: 'center',
-            textAlignVertical: 'center',
-        },
-        0,
-    ),
-
-    textInputFullCompose: {
-        alignSelf: 'stretch',
-        flex: 1,
-        maxHeight: '100%',
-        textAlignVertical: 'top',
-    },
-
-    // composer padding should not be modified unless thoroughly tested against the cases in this PR: #12669
-    textInputComposeSpacing: {
-        paddingVertical: 5,
-        ...flex.flexRow,
-        flex: 1,
-    },
-
-    textInputComposeBorder: {
-        borderLeftWidth: 1,
-        borderColor: theme.border,
-    },
-
-    chatItemSubmitButton: {
-        alignSelf: 'flex-end',
-        borderRadius: variables.componentBorderRadiusRounded,
-        backgroundColor: theme.transparent,
-        height: 40,
-        padding: 10,
-        margin: 3,
-        justifyContent: 'center',
-    },
-
-    emojiPickerContainer: {
-        backgroundColor: theme.componentBG,
-    },
-
-    emojiHeaderContainer: {
-        backgroundColor: theme.componentBG,
-        display: 'flex',
-        height: CONST.EMOJI_PICKER_HEADER_HEIGHT,
-        justifyContent: 'center',
-        width: '100%',
-    },
-
-    emojiSkinToneTitle: {
-        ...spacing.pv1,
-        fontFamily: fontFamily.EXP_NEUE_BOLD,
-        fontWeight: fontWeightBold,
-        color: theme.heading,
-        fontSize: variables.fontSizeSmall,
-    },
-
-    // Emoji Picker Styles
-    emojiText: {
-        textAlign: 'center',
-        fontSize: variables.emojiSize,
-        ...spacing.pv0,
-        ...spacing.ph0,
-        lineHeight: variables.emojiLineHeight,
-    },
-
-    emojiItem: {
-        width: '12.5%',
-        textAlign: 'center',
-        borderRadius: 8,
-        paddingTop: 2,
-        paddingBottom: 2,
-        height: CONST.EMOJI_PICKER_ITEM_HEIGHT,
-        ...userSelect.userSelectNone,
-    },
-
-    emojiItemHighlighted: {
-        transition: '0.2s ease',
-        backgroundColor: theme.buttonDefaultBG,
-    },
-
-    emojiItemKeyboardHighlighted: {
-        transition: '0.2s ease',
-        borderWidth: 1,
-        borderColor: theme.link,
-        borderRadius: variables.buttonBorderRadius,
-    },
-
-    categoryShortcutButton: {
-        flex: 1,
-        borderRadius: 8,
-        height: CONST.EMOJI_PICKER_ITEM_HEIGHT,
-        alignItems: 'center',
-        justifyContent: 'center',
-    },
-
-    chatItemEmojiButton: {
-        alignSelf: 'flex-end',
-        borderRadius: variables.buttonBorderRadius,
-        height: 40,
-        marginVertical: 3,
-        paddingHorizontal: 10,
-        justifyContent: 'center',
-    },
-
-    editChatItemEmojiWrapper: {
-        marginRight: 3,
-        alignSelf: 'flex-end',
-    },
-
-    hoveredButton: {
-        backgroundColor: theme.buttonHoveredBG,
-    },
-
-    composerSizeButton: {
-        alignSelf: 'center',
-        height: 32,
-        width: 32,
-        padding: 6,
-        margin: 3,
-        borderRadius: variables.componentBorderRadiusRounded,
-        backgroundColor: theme.transparent,
-        justifyContent: 'center',
-    },
-
-    chatItemAttachmentPlaceholder: {
-        backgroundColor: theme.sidebar,
-        borderColor: theme.border,
-        borderWidth: 1,
-        borderRadius: variables.componentBorderRadiusNormal,
-        height: 150,
-        textAlign: 'center',
-        verticalAlign: 'middle',
-        width: 200,
-    },
-
-    sidebarVisible: {
-        borderRightWidth: 1,
-    },
-
-    sidebarHidden: {
-        width: 0,
-        borderRightWidth: 0,
-    },
-
-    exampleCheckImage: {
-        width: '100%',
-        height: 80,
-        borderColor: theme.border,
-        borderWidth: 1,
-        borderRadius: variables.componentBorderRadiusNormal,
-    },
-
-    singleAvatar: {
-        height: 24,
-        width: 24,
-        backgroundColor: theme.icon,
-        borderRadius: 24,
-    },
-
-    singleAvatarSmall: {
-        height: 18,
-        width: 18,
-        backgroundColor: theme.icon,
-        borderRadius: 18,
-    },
-
-    singleAvatarMedium: {
-        height: 52,
-        width: 52,
-        backgroundColor: theme.icon,
-        borderRadius: 52,
-    },
-
-    secondAvatar: {
-        position: 'absolute',
-        right: -18,
-        bottom: -18,
-        borderWidth: 3,
-        borderRadius: 30,
-        borderColor: 'transparent',
-    },
-
-    secondAvatarSmall: {
-        position: 'absolute',
-        right: -13,
-        bottom: -13,
-        borderWidth: 3,
-        borderRadius: 18,
-        borderColor: 'transparent',
-    },
-
-    secondAvatarMedium: {
-        position: 'absolute',
-        right: -36,
-        bottom: -36,
-        borderWidth: 3,
-        borderRadius: 52,
-        borderColor: 'transparent',
-    },
-
-    secondAvatarSubscript: {
-        position: 'absolute',
-        right: -6,
-        bottom: -6,
-    },
-
-    secondAvatarSubscriptCompact: {
-        position: 'absolute',
-        bottom: -1,
-        right: -1,
-    },
-
-    secondAvatarSubscriptSmallNormal: {
-        position: 'absolute',
-        bottom: 0,
-        right: 0,
-    },
-
-    secondAvatarInline: {
-        bottom: -3,
-        right: -25,
-        borderWidth: 3,
-        borderRadius: 18,
-        borderColor: theme.cardBorder,
-        backgroundColor: theme.appBG,
-    },
-
-    avatarLarge: {
-        width: variables.avatarSizeLarge,
-        height: variables.avatarSizeLarge,
-    },
-
-    avatarXLarge: {
-        width: variables.avatarSizeXLarge,
-        height: variables.avatarSizeXLarge,
-    },
-
-    avatarInnerText: {
-        color: theme.textLight,
-        fontSize: variables.fontSizeSmall,
-        lineHeight: undefined,
-        marginLeft: -3,
-        textAlign: 'center',
-    },
-
-    avatarInnerTextSmall: {
-        color: theme.textLight,
-        fontSize: variables.fontSizeExtraSmall,
-        lineHeight: undefined,
-        marginLeft: -2,
-        textAlign: 'center',
-    },
-
-    emptyAvatar: {
-        height: variables.avatarSizeNormal,
-        width: variables.avatarSizeNormal,
-    },
-
-    emptyAvatarSmallNormal: {
-        height: variables.avatarSizeSmallNormal,
-        width: variables.avatarSizeSmallNormal,
-    },
-
-    emptyAvatarSmall: {
-        height: variables.avatarSizeSmall,
-        width: variables.avatarSizeSmall,
-    },
-
-    emptyAvatarSmaller: {
-        height: variables.avatarSizeSmaller,
-        width: variables.avatarSizeSmaller,
-    },
-
-    emptyAvatarMedium: {
-        height: variables.avatarSizeMedium,
-        width: variables.avatarSizeMedium,
-    },
-
-    emptyAvatarLarge: {
-        height: variables.avatarSizeLarge,
-        width: variables.avatarSizeLarge,
-    },
-
-    emptyAvatarMargin: {
-        marginRight: variables.avatarChatSpacing,
-    },
-
-    emptyAvatarMarginChat: {
-        marginRight: variables.avatarChatSpacing - 12,
-    },
-
-    emptyAvatarMarginSmall: {
-        marginRight: variables.avatarChatSpacing - 4,
-    },
-
-    emptyAvatarMarginSmaller: {
-        marginRight: variables.avatarChatSpacing - 4,
-    },
-
-    borderTop: {
-        borderTopWidth: variables.borderTopWidth,
-        borderColor: theme.border,
-    },
-
-    borderTopRounded: {
-        borderTopWidth: 1,
-        borderColor: theme.border,
-        borderTopLeftRadius: variables.componentBorderRadiusNormal,
-        borderTopRightRadius: variables.componentBorderRadiusNormal,
-    },
-
-    borderBottomRounded: {
-        borderBottomWidth: 1,
-        borderColor: theme.border,
-        borderBottomLeftRadius: variables.componentBorderRadiusNormal,
-        borderBottomRightRadius: variables.componentBorderRadiusNormal,
-    },
-
-    borderBottom: {
-        borderBottomWidth: 1,
-        borderColor: theme.border,
-    },
-
-    borderNone: {
-        borderWidth: 0,
-        borderBottomWidth: 0,
-    },
-
-    borderRight: {
-        borderRightWidth: 1,
-        borderColor: theme.border,
-    },
-
-    borderLeft: {
-        borderLeftWidth: 1,
-        borderColor: theme.border,
-    },
-
-    pointerEventsNone,
-
-    pointerEventsAuto,
-
-    headerBar: {
-        overflow: 'hidden',
-        justifyContent: 'center',
-        display: 'flex',
-        paddingLeft: 20,
-        height: variables.contentHeaderHeight,
-        width: '100%',
-    },
-
-    imageViewContainer: {
-        width: '100%',
-        height: '100%',
-        alignItems: 'center',
-        justifyContent: 'center',
-    },
-
-    imageModalPDF: {
-        flex: 1,
-        backgroundColor: theme.modalBackground,
-    },
-
-    PDFView: {
-        // `display: grid` is not supported in native platforms!
-        // It's being used on Web/Desktop only to vertically center short PDFs,
-        // while preventing the overflow of the top of long PDF files.
-        display: 'grid',
-        backgroundColor: theme.modalBackground,
-        width: '100%',
-        height: '100%',
-        justifyContent: 'center',
-        overflow: 'hidden',
-        alignItems: 'center',
-    },
-
-    PDFViewList: {
-        overflowX: 'hidden',
-        // There properties disable "focus" effect on list
-        boxShadow: 'none',
-        outline: 'none',
-    },
-
-    getPDFPasswordFormStyle: (isSmallScreenWidth) => ({
-        width: isSmallScreenWidth ? '100%' : 350,
-        ...(isSmallScreenWidth && flex.flex1),
-    }),
-
-    centeredModalStyles: (isSmallScreenWidth, isFullScreenWhenSmall) => ({
-        borderWidth: isSmallScreenWidth && !isFullScreenWhenSmall ? 1 : 0,
-        marginHorizontal: isSmallScreenWidth ? 0 : 20,
-    }),
-
-    imageModalImageCenterContainer: {
-        alignItems: 'center',
-        flex: 1,
-        justifyContent: 'center',
-        width: '100%',
-    },
-
-    defaultAttachmentView: {
-        backgroundColor: theme.sidebar,
-        borderRadius: variables.componentBorderRadiusNormal,
-        borderWidth: 1,
-        borderColor: theme.border,
-        flexDirection: 'row',
-        padding: 20,
-        alignItems: 'center',
-    },
-
-    notFoundTextHeader: {
-        ...headlineFont,
-        color: theme.heading,
-        fontSize: variables.fontSizeXLarge,
-        lineHeight: variables.lineHeightXXLarge,
-        marginTop: 20,
-        marginBottom: 8,
-        textAlign: 'center',
-    },
-
-    blockingViewContainer: {
-        paddingBottom: variables.contentHeaderHeight,
-    },
-
-    defaultModalContainer: {
-        backgroundColor: theme.componentBG,
-        borderColor: theme.transparent,
-    },
-
-    reportActionContextMenuMiniButton: {
-        ...spacing.p1,
-        ...spacing.mv1,
-        ...spacing.mh1,
-        ...{borderRadius: variables.buttonBorderRadius},
-    },
-
-    reportActionSystemMessageContainer: {
-        marginLeft: 42,
-    },
-
-    reportDetailsTitleContainer: {
-        ...flex.dFlex,
-        ...flex.flexColumn,
-        ...flex.alignItemsCenter,
-        paddingHorizontal: 20,
-        paddingBottom: 20,
-    },
-
-    reportDetailsRoomInfo: {
-        ...flex.flex1,
-        ...flex.dFlex,
-        ...flex.flexColumn,
-        ...flex.alignItemsCenter,
-    },
-
-    reportSettingsVisibilityText: {
-        textTransform: 'capitalize',
-    },
-
-    settingsPageBackground: {
-        flexDirection: 'column',
-        width: '100%',
-        flexGrow: 1,
-    },
-
-    settingsPageBody: {
-        width: '100%',
-        justifyContent: 'space-around',
-    },
-
-    twoFactorAuthSection: {
-        backgroundColor: theme.appBG,
-        padding: 0,
-    },
-
-    twoFactorAuthCodesBox: ({isExtraSmallScreenWidth, isSmallScreenWidth}) => {
-        let paddingHorizontal = styles.ph9;
-
-        if (isSmallScreenWidth) {
-            paddingHorizontal = styles.ph4;
-        }
-
-        if (isExtraSmallScreenWidth) {
-            paddingHorizontal = styles.ph2;
-        }
-
-        return {
-            alignItems: 'center',
-            justifyContent: 'center',
-            backgroundColor: theme.highlightBG,
-            paddingVertical: 28,
-            borderRadius: 16,
-            marginTop: 32,
-            ...paddingHorizontal,
-        };
-    },
-
-    twoFactorLoadingContainer: {
-        alignItems: 'center',
-        justifyContent: 'center',
-        height: 210,
-    },
-
-    twoFactorAuthCodesContainer: {
-        alignItems: 'center',
-        justifyContent: 'center',
-        flexDirection: 'row',
-        flexWrap: 'wrap',
-        gap: 12,
-    },
-
-    twoFactorAuthCode: {
-        fontFamily: fontFamily.MONOSPACE,
-        width: 112,
-        textAlign: 'center',
-    },
-
-    twoFactorAuthCodesButtonsContainer: {
-        flexDirection: 'row',
-        justifyContent: 'center',
-        gap: 12,
-        marginTop: 20,
-        flexWrap: 'wrap',
-    },
-
-    twoFactorAuthCodesButton: {
-        minWidth: 112,
-    },
-
-    twoFactorAuthCopyCodeButton: {
-        minWidth: 110,
-    },
-
-    anonymousRoomFooter: (isSmallSizeLayout) => ({
-        flexDirection: isSmallSizeLayout ? 'column' : 'row',
-        ...(!isSmallSizeLayout && {
-            alignItems: 'center',
-            justifyContent: 'space-between',
-        }),
-        padding: 20,
-        backgroundColor: theme.sidebar,
-        borderRadius: variables.componentBorderRadiusLarge,
-        overflow: 'hidden',
-    }),
-    anonymousRoomFooterWordmarkAndLogoContainer: (isSmallSizeLayout) => ({
-        flexDirection: 'row',
-        alignItems: 'center',
-        ...(isSmallSizeLayout && {
-            justifyContent: 'space-between',
-            marginTop: 16,
-        }),
-    }),
-    anonymousRoomFooterLogo: {
-        width: 88,
-        marginLeft: 0,
-        height: 20,
-    },
-    anonymousRoomFooterLogoTaglineText: {
-        fontFamily: fontFamily.EXP_NEUE,
-        fontSize: variables.fontSizeMedium,
-        color: theme.textLight,
-    },
-    signInButtonAvatar: {
-        width: 80,
-    },
-
-    anonymousRoomFooterSignInButton: {
-        width: 110,
-    },
-
-    roomHeaderAvatarSize: {
-        height: variables.componentSizeLarge,
-        width: variables.componentSizeLarge,
-    },
-
-    roomHeaderAvatar: {
-        backgroundColor: theme.appBG,
-        borderRadius: 100,
-        borderColor: theme.componentBG,
-        borderWidth: 4,
-    },
-
-    roomHeaderAvatarOverlay: {
-        position: 'absolute',
-        top: 0,
-        right: 0,
-        bottom: 0,
-        left: 0,
-        backgroundColor: theme.overlay,
-        opacity: variables.overlayOpacity,
-        borderRadius: 88,
-    },
-
-    rootNavigatorContainerStyles: (isSmallScreenWidth) => ({marginLeft: isSmallScreenWidth ? 0 : variables.sideBarWidth, flex: 1}),
-    RHPNavigatorContainerNavigatorContainerStyles: (isSmallScreenWidth) => ({marginLeft: isSmallScreenWidth ? 0 : variables.sideBarWidth, flex: 1}),
-
-    avatarInnerTextChat: {
-        color: theme.textLight,
-        fontSize: variables.fontSizeXLarge,
-        fontFamily: fontFamily.EXP_NEW_KANSAS_MEDIUM,
-        textAlign: 'center',
-        fontWeight: 'normal',
-        position: 'absolute',
-        width: 88,
-        left: -16,
-    },
-
-    pageWrapper: {
-        width: '100%',
-        alignItems: 'center',
-        padding: 20,
-    },
-
-    avatarSectionWrapper: {
-        width: '100%',
-        alignItems: 'center',
-        paddingHorizontal: 20,
-        paddingBottom: 20,
-    },
-
-    avatarSectionWrapperSkeleton: {
-        width: '100%',
-        paddingHorizontal: 20,
-        paddingBottom: 20,
-    },
-
-    selectCircle: {
-        width: variables.componentSizeSmall,
-        height: variables.componentSizeSmall,
-        borderColor: theme.border,
-        borderWidth: 1,
-        borderRadius: variables.componentSizeSmall / 2,
-        justifyContent: 'center',
-        alignItems: 'center',
-        backgroundColor: theme.componentBG,
-        marginLeft: 8,
-    },
-
-    unreadIndicatorContainer: {
-        position: 'absolute',
-        top: -10,
-        left: 0,
-        width: '100%',
-        height: 20,
-        paddingHorizontal: 20,
-        flexDirection: 'row',
-        alignItems: 'center',
-        zIndex: 1,
-        ...cursor.cursorDefault,
-    },
-
-    unreadIndicatorLine: {
-        height: 1,
-        backgroundColor: theme.unreadIndicator,
-        flexGrow: 1,
-        marginRight: 8,
-        opacity: 0.5,
-    },
-
-    threadDividerLine: {
-        height: 1,
-        backgroundColor: theme.border,
-        flexGrow: 1,
-        marginHorizontal: 20,
-    },
-
-    unreadIndicatorText: {
-        color: theme.unreadIndicator,
-        fontFamily: fontFamily.EXP_NEUE_BOLD,
-        fontSize: variables.fontSizeSmall,
-        fontWeight: fontWeightBold,
-        textTransform: 'capitalize',
-    },
-
-    flipUpsideDown: {
-        transform: [{rotate: '180deg'}],
-    },
-
-    navigationScreenCardStyle: {
-        backgroundColor: theme.appBG,
-        height: '100%',
-    },
-
-    invisible: {
-        position: 'absolute',
-        opacity: 0,
-    },
-
-    invisiblePopover: {
-        position: 'absolute',
-        opacity: 0,
-        left: -9999,
-    },
-
-    containerWithSpaceBetween: {
-        justifyContent: 'space-between',
-        width: '100%',
-        flex: 1,
-    },
-
-    detailsPageSectionContainer: {
-        alignSelf: 'flex-start',
-    },
-
-    attachmentCarouselContainer: {
-        height: '100%',
-        width: '100%',
-        display: 'flex',
-        justifyContent: 'center',
-        ...cursor.cursorUnset,
-    },
-
-    attachmentArrow: {
-        zIndex: 23,
-        position: 'absolute',
-    },
-
-    attachmentRevealButtonContainer: {
-        flex: 1,
-        alignItems: 'center',
-        justifyContent: 'center',
-        ...spacing.ph4,
-    },
-
-    arrowIcon: {
-        height: 40,
-        width: 40,
-        alignItems: 'center',
-        paddingHorizontal: 0,
-        paddingTop: 0,
-        paddingBottom: 0,
-    },
-
-    switchTrack: {
-        width: 50,
-        height: 28,
-        justifyContent: 'center',
-        borderRadius: 20,
-        padding: 15,
-        backgroundColor: theme.success,
-    },
-
-    switchInactive: {
-        backgroundColor: theme.border,
-    },
-
-    switchThumb: {
-        width: 22,
-        height: 22,
-        borderRadius: 11,
-        position: 'absolute',
-        left: 4,
-        backgroundColor: theme.appBG,
-    },
-
-    switchThumbTransformation: (translateX) => ({
-        transform: [{translateX}],
-    }),
-
-    radioButtonContainer: {
-        backgroundColor: theme.componentBG,
-        borderRadius: 10,
-        height: 20,
-        width: 20,
-        borderColor: theme.icon,
-        borderWidth: 1,
-        justifyContent: 'center',
-        alignItems: 'center',
-    },
-
-    checkedContainer: {
-        backgroundColor: theme.checkBox,
-    },
-
-    magicCodeInputContainer: {
-        flexDirection: 'row',
-        justifyContent: 'space-between',
-        minHeight: variables.inputHeight,
-    },
-
-    magicCodeInput: {
-        fontSize: variables.fontSizeXLarge,
-        color: theme.heading,
-        lineHeight: variables.inputHeight,
-    },
-
-    // Manually style transparent, in iOS Safari, an input in a container with its opacity set to
-    // 0 (completely transparent) cannot handle user interaction, hence the Paste option is never shown
-    inputTransparent: {
-        color: 'transparent',
-        // These properties are available in browser only
-        ...(Browser.getBrowser()
-            ? {
-                  caretColor: 'transparent',
-                  WebkitTextFillColor: 'transparent',
-                  // After setting the input text color to transparent, it acquires the background-color.
-                  // However, it is not possible to override the background-color directly as explained in this resource: https://developer.mozilla.org/en-US/docs/Web/CSS/:autofill
-                  // Therefore, the transition effect needs to be delayed.
-                  transitionDelay: '99999s',
-                  transitionProperty: 'background-color',
-              }
-            : {}),
-    },
-
-    iouAmountText: {
-        ...headlineFont,
-        fontSize: variables.iouAmountTextSize,
-        color: theme.heading,
-        lineHeight: variables.inputHeight,
-    },
-
-    iouAmountTextInput: addOutlineWidth(
-        {
-            ...headlineFont,
-            fontSize: variables.iouAmountTextSize,
-            color: theme.heading,
-            padding: 0,
-            lineHeight: undefined,
-        },
-        0,
-    ),
-
-    moneyRequestConfirmationAmount: {
-        ...headlineFont,
-        fontSize: variables.fontSizeh1,
-    },
-
-    moneyRequestMenuItem: {
-        flexDirection: 'row',
-        borderRadius: 0,
-        justifyContent: 'space-between',
-        width: '100%',
-        paddingHorizontal: 20,
-        paddingVertical: 12,
-    },
-
-    requestPreviewBox: {
-        marginTop: 12,
-        maxWidth: variables.sideBarWidth,
-    },
-
-    moneyRequestPreviewBox: {
-        backgroundColor: theme.cardBG,
-        borderRadius: variables.componentBorderRadiusLarge,
-        maxWidth: variables.sideBarWidth,
-        width: '100%',
-    },
-
-    moneyRequestPreviewBoxText: {
-        padding: 16,
-    },
-
-    amountSplitPadding: {
-        paddingTop: 2,
-    },
-
-    moneyRequestPreviewBoxLoading: {
-        // When a new IOU request arrives it is very briefly in a loading state, so set the minimum height of the container to 94 to match the rendered height after loading.
-        // Otherwise, the IOU request pay button will not be fully visible and the user will have to scroll up to reveal the entire IOU request container.
-        // See https://github.com/Expensify/App/issues/10283.
-        minHeight: 94,
-        width: '100%',
-    },
-
-    moneyRequestPreviewBoxAvatar: {
-        marginRight: -10,
-        marginBottom: 0,
-    },
-
-    moneyRequestPreviewAmount: {
-        ...headlineFont,
-        ...whiteSpace.preWrap,
-        color: theme.heading,
-    },
-
-    defaultCheckmarkWrapper: {
-        marginLeft: 8,
-        alignSelf: 'center',
-    },
-
-    codeWordWrapper: {
-        ...codeStyles.codeWordWrapper,
-    },
-
-    codeWordStyle: {
-        borderLeftWidth: 0,
-        borderRightWidth: 0,
-        borderTopLeftRadius: 0,
-        borderBottomLeftRadius: 0,
-        borderTopRightRadius: 0,
-        borderBottomRightRadius: 0,
-        paddingLeft: 0,
-        paddingRight: 0,
-        justifyContent: 'center',
-        ...codeStyles.codeWordStyle,
-    },
-
-    codeFirstWordStyle: {
-        borderLeftWidth: 1,
-        borderTopLeftRadius: 4,
-        borderBottomLeftRadius: 4,
-        paddingLeft: 5,
-    },
-
-    codeLastWordStyle: {
-        borderRightWidth: 1,
-        borderTopRightRadius: 4,
-        borderBottomRightRadius: 4,
-        paddingRight: 5,
-    },
-
-    fullScreenLoading: {
-        backgroundColor: theme.componentBG,
-        opacity: 0.8,
-        justifyContent: 'center',
-        alignItems: 'center',
-        zIndex: 10,
-    },
-
-    reimbursementAccountFullScreenLoading: {
-        backgroundColor: theme.componentBG,
-        opacity: 0.8,
-        justifyContent: 'flex-start',
-        alignItems: 'center',
-        zIndex: 10,
-    },
-
-    hiddenElementOutsideOfWindow: {
-        position: 'absolute',
-        top: -10000,
-        left: 0,
-        opacity: 0,
-    },
-
-    growlNotificationWrapper: {
-        zIndex: 2,
-    },
-
-    growlNotificationContainer: {
-        flex: 1,
-        justifyContent: 'flex-start',
-        position: 'absolute',
-        width: '100%',
-        top: 20,
-        ...spacing.pl5,
-        ...spacing.pr5,
-    },
-
-    growlNotificationDesktopContainer: {
-        maxWidth: variables.sideBarWidth,
-        right: 0,
-        position: 'fixed',
-    },
-
-    growlNotificationTranslateY: (y) => ({
-        transform: [{translateY: y}],
-    }),
-
-    makeSlideInTranslation: (translationType, fromValue) => ({
-        from: {
-            [translationType]: fromValue,
-        },
-        to: {
-            [translationType]: 0,
-        },
-    }),
-
-    growlNotificationBox: {
-        backgroundColor: theme.inverse,
-        borderRadius: variables.componentBorderRadiusNormal,
-        alignItems: 'center',
-        flexDirection: 'row',
-        justifyContent: 'space-between',
-        shadowColor: theme.shadow,
-        ...spacing.p5,
-    },
-
-    growlNotificationText: {
-        fontSize: variables.fontSizeNormal,
-        fontFamily: fontFamily.EXP_NEUE,
-        width: '90%',
-        lineHeight: variables.fontSizeNormalHeight,
-        color: theme.textReversed,
-        ...spacing.ml4,
-    },
-
-    blockquote: {
-        borderLeftColor: theme.border,
-        borderLeftWidth: 4,
-        paddingLeft: 12,
-        marginVertical: 4,
-    },
-
-    noSelect: {
-        boxShadow: 'none',
-        outline: 'none',
-    },
-
-    cardStyleNavigator: {
-        overflow: 'hidden',
-        height: '100%',
-    },
-
-    smallEditIcon: {
-        alignItems: 'center',
-        backgroundColor: theme.buttonHoveredBG,
-        borderColor: theme.textReversed,
-        borderRadius: 14,
-        borderWidth: 3,
-        color: theme.textReversed,
-        height: 28,
-        width: 28,
-        justifyContent: 'center',
-    },
-
-    smallAvatarEditIcon: {
-        position: 'absolute',
-        right: -4,
-        bottom: -4,
-    },
-
-    autoGrowHeightMultilineInput: {
-        maxHeight: 115,
-    },
-
-    peopleRow: {
-        width: '100%',
-        flexDirection: 'row',
-        justifyContent: 'space-between',
-        alignItems: 'center',
-        ...spacing.ph5,
-    },
-
-    peopleRowBorderBottom: {
-        borderColor: theme.border,
-        borderBottomWidth: 1,
-        ...spacing.pb2,
-    },
-
-    peopleBadge: {
-        backgroundColor: theme.icon,
-        ...spacing.ph3,
-    },
-
-    peopleBadgeText: {
-        color: theme.textReversed,
-        fontSize: variables.fontSizeSmall,
-        lineHeight: variables.lineHeightNormal,
-        ...whiteSpace.noWrap,
-    },
-
-    offlineFeedback: {
-        deleted: {
-            textDecorationLine: 'line-through',
-            textDecorationStyle: 'solid',
-        },
-        pending: {
-            opacity: 0.5,
-        },
-        error: {
-            flexDirection: 'row',
-            alignItems: 'center',
-        },
-        container: {
-            ...spacing.pv2,
-        },
-        textContainer: {
-            flexDirection: 'column',
-            flex: 1,
-        },
-        text: {
-            color: theme.textSupporting,
-            textAlignVertical: 'center',
-            fontSize: variables.fontSizeLabel,
-        },
-        errorDot: {
-            marginRight: 12,
-        },
-    },
-
-    dotIndicatorMessage: {
-        display: 'flex',
-        flexDirection: 'row',
-        alignItems: 'center',
-    },
-
-    locationErrorLinkText: {
-        textAlignVertical: 'center',
-        fontSize: variables.fontSizeLabel,
-    },
-
-    sidebarPopover: {
-        width: variables.sideBarWidth - 68,
-    },
-
-    cardOverlay: {
-        backgroundColor: theme.overlay,
-        position: 'absolute',
-        top: 0,
-        left: 0,
-        width: '100%',
-        height: '100%',
-        opacity: variables.overlayOpacity,
-    },
-
-    shortTermsBorder: {
-        borderWidth: 1,
-        borderColor: theme.border,
-    },
-
-    shortTermsHorizontalRule: {
-        borderBottomWidth: 1,
-        borderColor: theme.border,
-        ...spacing.mh3,
-    },
-
-    shortTermsLargeHorizontalRule: {
-        borderWidth: 1,
-        borderColor: theme.border,
-        ...spacing.mh3,
-    },
-
-    shortTermsRow: {
-        flexDirection: 'row',
-        padding: 12,
-    },
-
-    termsCenterRight: {
-        marginTop: 'auto',
-        marginBottom: 'auto',
-    },
-
-    shortTermsBoldHeadingSection: {
-        paddingRight: 12,
-        paddingLeft: 12,
-        marginTop: 12,
-    },
-
-    shortTermsHeadline: {
-        ...headlineFont,
-        ...whiteSpace.preWrap,
-        color: theme.heading,
-        fontSize: variables.fontSizeXXXLarge,
-        lineHeight: variables.lineHeightXXXLarge,
-    },
-
-    longTermsRow: {
-        flexDirection: 'row',
-        marginTop: 20,
-    },
-
-    collapsibleSectionBorder: {
-        borderBottomWidth: 2,
-        borderBottomColor: theme.border,
-    },
-
-    communicationsLinkHeight: {
-        height: variables.communicationsLinkHeight,
-    },
-
-    floatingMessageCounterWrapper: {
-        position: 'absolute',
-        left: '50%',
-        top: 0,
-        zIndex: 100,
-        ...visibility.hidden,
-    },
-
-    floatingMessageCounterWrapperAndroid: {
-        left: 0,
-        width: '100%',
-        alignItems: 'center',
-        position: 'absolute',
-        top: 0,
-        zIndex: 100,
-        ...visibility.hidden,
-    },
-
-    floatingMessageCounterSubWrapperAndroid: {
-        left: '50%',
-        width: 'auto',
-    },
-
-    floatingMessageCounter: {
-        left: '-50%',
-        ...visibility.visible,
-    },
-
-    floatingMessageCounterTransformation: (translateY) => ({
-        transform: [{translateY}],
-    }),
-
-    confirmationAnimation: {
-        height: 180,
-        width: 180,
-        marginBottom: 20,
-    },
-
-    googleSearchTextInputContainer: {
-        flexDirection: 'column',
-    },
-
-    googleSearchSeparator: {
-        height: 1,
-        backgroundColor: theme.border,
-    },
-
-    googleSearchText: {
-        color: theme.text,
-        fontSize: variables.fontSizeNormal,
-        lineHeight: variables.fontSizeNormalHeight,
-        fontFamily: fontFamily.EXP_NEUE,
-        flex: 1,
-    },
-
-    threeDotsPopoverOffset: (windowWidth) => ({
-        ...getPopOverVerticalOffset(60),
-        horizontal: windowWidth - 60,
-    }),
-
-    threeDotsPopoverOffsetNoCloseButton: (windowWidth) => ({
-        ...getPopOverVerticalOffset(60),
-        horizontal: windowWidth - 10,
-    }),
-
-    threeDotsPopoverOffsetAttachmentModal: (windowWidth) => ({
-        ...getPopOverVerticalOffset(80),
-        horizontal: windowWidth - 140,
-    }),
-
-    invert: {
-        // It's important to invert the Y AND X axis to prevent a react native issue that can lead to ANRs on android 13
-        transform: [{scaleX: -1}, {scaleY: -1}],
-    },
-
-    keyboardShortcutModalContainer: {
-        maxHeight: '100%',
-        flex: 0,
-        flexBasis: 'auto',
-    },
-
-    keyboardShortcutTableWrapper: {
-        alignItems: 'center',
-        flex: 1,
-        height: 'auto',
-        maxHeight: '100%',
-    },
-
-    keyboardShortcutTableContainer: {
-        display: 'flex',
-        width: '100%',
-        borderColor: theme.border,
-        height: 'auto',
-        borderRadius: variables.componentBorderRadius,
-        borderWidth: 1,
-    },
-
-    keyboardShortcutTableRow: {
-        flex: 1,
-        flexDirection: 'row',
-        borderColor: theme.border,
-        flexBasis: 'auto',
-        alignSelf: 'stretch',
-        borderTopWidth: 1,
-    },
-
-    keyboardShortcutTablePrefix: {
-        width: '30%',
-        borderRightWidth: 1,
-        borderColor: theme.border,
-    },
-
-    keyboardShortcutTableFirstRow: {
-        borderTopWidth: 0,
-    },
-
-    iPhoneXSafeArea: {
-        backgroundColor: theme.inverse,
-        flex: 1,
-    },
-
-    transferBalancePayment: {
-        borderWidth: 1,
-        borderRadius: variables.componentBorderRadiusNormal,
-        borderColor: theme.border,
-    },
-
-    transferBalanceSelectedPayment: {
-        borderColor: theme.iconSuccessFill,
-    },
-
-    transferBalanceBalance: {
-        fontSize: 48,
-    },
-
-    imageCropContainer: {
-        overflow: 'hidden',
-        alignItems: 'center',
-        justifyContent: 'center',
-        backgroundColor: theme.imageCropBackgroundColor,
-        ...cursor.cursorMove,
-    },
-
-    sliderKnobTooltipView: {
-        height: variables.sliderKnobSize,
-        width: variables.sliderKnobSize,
-        borderRadius: variables.sliderKnobSize / 2,
-    },
-
-    sliderKnob: {
-        backgroundColor: theme.success,
-        position: 'absolute',
-        height: variables.sliderKnobSize,
-        width: variables.sliderKnobSize,
-        borderRadius: variables.sliderKnobSize / 2,
-        left: -(variables.sliderKnobSize / 2),
-        ...cursor.cursorPointer,
-    },
-
-    sliderBar: {
-        backgroundColor: theme.border,
-        height: variables.sliderBarHeight,
-        borderRadius: variables.sliderBarHeight / 2,
-        alignSelf: 'stretch',
-        justifyContent: 'center',
-    },
-
-    screenCenteredContainer: {
-        flex: 1,
-        justifyContent: 'center',
-        marginBottom: 40,
-        padding: 16,
-    },
-
-    inlineSystemMessage: {
-        color: theme.textSupporting,
-        fontSize: variables.fontSizeLabel,
-        fontFamily: fontFamily.EXP_NEUE,
-        marginLeft: 6,
-    },
-
-    fullScreen: {
-        position: 'absolute',
-        top: 0,
-        left: 0,
-        right: 0,
-        bottom: 0,
-    },
-
-    invisibleOverlay: {
-        backgroundColor: theme.transparent,
-        zIndex: 1000,
-    },
-
-    reportDropOverlay: {
-        backgroundColor: theme.dropUIBG,
-        zIndex: 2,
-    },
-
-    receiptDropOverlay: {
-        backgroundColor: theme.receiptDropUIBG,
-        zIndex: 2,
-    },
-
-    receiptImageWrapper: (receiptImageTopPosition) => ({
-        position: 'absolute',
-        top: receiptImageTopPosition,
-    }),
-
-    cardSection: {
-        backgroundColor: theme.cardBG,
-        borderRadius: variables.componentBorderRadiusCard,
-        marginBottom: 20,
-        marginHorizontal: 16,
-        padding: 20,
-        width: 'auto',
-        textAlign: 'left',
-    },
-
-    cardSectionTitle: {
-        lineHeight: variables.lineHeightXXLarge,
-    },
-
-    cardMenuItem: {
-        paddingLeft: 8,
-        paddingRight: 0,
-        borderRadius: variables.buttonBorderRadius,
-        height: variables.componentSizeLarge,
-        alignItems: 'center',
-    },
-
-    archivedReportFooter: {
-        borderRadius: variables.componentBorderRadius,
-        ...wordBreak.breakWord,
-    },
-
-    deeplinkWrapperContainer: {
-        padding: 20,
-        flex: 1,
-        alignItems: 'center',
-        justifyContent: 'center',
-        backgroundColor: theme.appBG,
-    },
-
-    deeplinkWrapperMessage: {
-        flex: 1,
-        alignItems: 'center',
-        justifyContent: 'center',
-    },
-
-    deeplinkWrapperFooter: {
-        paddingTop: 80,
-        paddingBottom: 45,
-    },
-
-    emojiReactionBubble: {
-        borderRadius: 28,
-        alignItems: 'center',
-        justifyContent: 'center',
-        flexDirection: 'row',
-        alignSelf: 'flex-start',
-    },
-
-    emojiReactionListHeader: {
-        marginTop: 8,
-        paddingBottom: 20,
-        borderBottomColor: theme.border,
-        borderBottomWidth: 1,
-        marginHorizontal: 20,
-    },
-    emojiReactionListHeaderBubble: {
-        paddingVertical: 2,
-        paddingHorizontal: 8,
-        borderRadius: 28,
-        backgroundColor: theme.border,
-        alignItems: 'center',
-        justifyContent: 'center',
-        flexDirection: 'row',
-        alignSelf: 'flex-start',
-        marginRight: 4,
-    },
-
-    reactionListHeaderText: {
-        color: theme.textSupporting,
-        marginLeft: 8,
-        alignSelf: 'center',
-    },
-
-    miniQuickEmojiReactionText: {
-        fontSize: 15,
-        lineHeight: 20,
-        textAlignVertical: 'center',
-    },
-
-    emojiReactionBubbleText: {
-        textAlignVertical: 'center',
-    },
-
-    reactionCounterText: {
-        fontSize: 13,
-        marginLeft: 4,
-        fontWeight: 'bold',
-    },
-
-    fontColorReactionLabel: {
-        color: theme.tooltipSupportingText,
-    },
-
-    reactionEmojiTitle: {
-        fontSize: variables.iconSizeLarge,
-        lineHeight: variables.iconSizeXLarge,
-    },
-
-    textReactionSenders: {
-        color: theme.tooltipPrimaryText,
-        ...wordBreak.breakWord,
-    },
-
-    quickReactionsContainer: {
-        gap: 12,
-        flexDirection: 'row',
-        paddingHorizontal: 25,
-        paddingVertical: 12,
-        justifyContent: 'space-between',
-    },
-
-    reactionListContainer: {
-        maxHeight: variables.listItemHeightNormal * 5.75,
-        ...spacing.pv2,
-    },
-
-    reactionListContainerFixedWidth: {
-        maxWidth: variables.popoverWidth,
-    },
-
-    validateCodeDigits: {
-        color: theme.text,
-        fontFamily: fontFamily.EXP_NEUE,
-        fontSize: variables.fontSizeXXLarge,
-        letterSpacing: 4,
-    },
-
-    footerWrapper: {
-        fontSize: variables.fontSizeNormal,
-        paddingTop: 64,
-        maxWidth: 1100, // Match footer across all Expensify platforms
-    },
-
-    footerColumnsContainer: {
-        flex: 1,
-        flexWrap: 'wrap',
-        marginBottom: 40,
-        marginHorizontal: -16,
-    },
-
-    footerTitle: {
-        fontSize: variables.fontSizeLarge,
-        color: theme.success,
-        marginBottom: 16,
-    },
-
-    footerRow: {
-        paddingVertical: 4,
-        marginBottom: 8,
-        color: theme.textLight,
-        fontSize: variables.fontSizeMedium,
-    },
-
-    footerBottomLogo: {
-        marginTop: 40,
-        width: '100%',
-    },
-
-    datePickerRoot: {
-        position: 'relative',
-        zIndex: 99,
-    },
-
-    datePickerPopover: {
-        backgroundColor: theme.appBG,
-        width: '100%',
-        alignSelf: 'center',
-        zIndex: 100,
-        marginTop: 8,
-    },
-
-    loginHeroHeader: {
-        fontFamily: fontFamily.EXP_NEW_KANSAS_MEDIUM,
-        color: theme.success,
-        fontWeight: '500',
-        textAlign: 'center',
-    },
-
-    newKansasLarge: {
-        ...headlineFont,
-        fontSize: variables.fontSizeXLarge,
-        lineHeight: variables.lineHeightXXLarge,
-    },
-
-    loginHeroBody: {
-        fontFamily: fontFamily.EXP_NEUE,
-        fontSize: variables.fontSizeSignInHeroBody,
-        color: theme.textLight,
-        textAlign: 'center',
-    },
-
-    linkPreviewWrapper: {
-        marginTop: 16,
-        borderLeftWidth: 4,
-        borderLeftColor: theme.border,
-        paddingLeft: 12,
-    },
-
-    linkPreviewImage: {
-        flex: 1,
-        resizeMode: 'contain',
-        borderRadius: 8,
-        marginTop: 8,
-    },
-
-    linkPreviewLogoImage: {
-        height: 16,
-        width: 16,
-    },
-
-    contextMenuItemPopoverMaxWidth: {
-        maxWidth: 375,
-    },
-
-    formSpaceVertical: {
-        height: 20,
-        width: 1,
-    },
-
-    taskCheckbox: {
-        height: 16,
-        width: 16,
-    },
-
-    taskTitleMenuItem: {
-        ...writingDirection.ltr,
-        ...headlineFont,
-        ...spacing.flexWrap,
-        ...spacing.flex1,
-        fontSize: variables.fontSizeXLarge,
-        maxWidth: '100%',
-        ...wordBreak.breakWord,
-    },
-
-    taskDescriptionMenuItem: {
-        maxWidth: '100%',
-        ...wordBreak.breakWord,
-    },
-
-    taskTitleDescription: {
-        fontFamily: fontFamily.EXP_NEUE,
-        fontSize: variables.fontSizeLabel,
-        color: theme.textSupporting,
-        lineHeight: variables.lineHeightNormal,
-        ...spacing.mb1,
-    },
-
-    taskMenuItemCheckbox: {
-        height: 27,
-        ...spacing.mr3,
-    },
-
-    reportHorizontalRule: {
-        borderColor: theme.border,
-        ...spacing.mh5,
-    },
-
-    assigneeTextStyle: {
-        fontFamily: fontFamily.EXP_NEUE_BOLD,
-        fontWeight: fontWeightBold,
-        minHeight: variables.avatarSizeSubscript,
-    },
-
-    taskRightIconContainer: {
-        width: variables.componentSizeNormal,
-        marginLeft: 'auto',
-        ...spacing.mt1,
-        ...pointerEventsAuto,
-        ...spacing.dFlex,
-        ...spacing.alignItemsCenter,
-    },
-
-    shareCodePage: {
-        paddingHorizontal: 38.5,
-    },
-
-    shareCodeContainer: {
-        width: '100%',
-        alignItems: 'center',
-        paddingHorizontal: variables.qrShareHorizontalPadding,
-        paddingVertical: 20,
-        borderRadius: 20,
-        overflow: 'hidden',
-        borderColor: theme.borderFocus,
-        borderWidth: 2,
-        backgroundColor: theme.highlightBG,
-    },
-
-    splashScreenHider: {
-        backgroundColor: theme.splashBG,
-        alignItems: 'center',
-        justifyContent: 'center',
-    },
-
-    headerEnvBadge: {
-        marginLeft: 0,
-        marginBottom: 2,
-        height: 12,
-        paddingLeft: 4,
-        paddingRight: 4,
-        alignItems: 'center',
-    },
-
-    headerEnvBadgeText: {
-        fontSize: 7,
-        fontWeight: fontWeightBold,
-        lineHeight: undefined,
-    },
-
-    expensifyQrLogo: {
-        alignSelf: 'stretch',
-        height: 27,
-        marginBottom: 20,
-    },
-
-    qrShareTitle: {
-        marginTop: 15,
-        textAlign: 'center',
-    },
-
-    loginButtonRow: {
-        width: '100%',
-        gap: 12,
-        ...flex.flexRow,
-        ...flex.justifyContentCenter,
-    },
-
-    loginButtonRowSmallScreen: {
-        width: '100%',
-        gap: 12,
-        ...flex.flexRow,
-        ...flex.justifyContentCenter,
-        marginBottom: 10,
-    },
-
-    desktopSignInButtonContainer: {
-        width: 40,
-        height: 40,
-    },
-
-    signInIconButton: {
-        paddingVertical: 2,
-    },
-
-    googleButtonContainer: {
-        colorScheme: 'light',
-        width: 40,
-        height: 40,
-        alignItems: 'center',
-        overflow: 'hidden',
-    },
-
-    googlePillButtonContainer: {
-        colorScheme: 'light',
-        height: 40,
-        width: 219,
-    },
-
-    thirdPartyLoadingContainer: {
-        alignItems: 'center',
-        justifyContent: 'center',
-        height: 450,
-    },
-
-    tabSelectorButton: {
-        height: variables.tabSelectorButtonHeight,
-        padding: variables.tabSelectorButtonPadding,
-        flexDirection: 'row',
-        alignItems: 'center',
-        justifyContent: 'center',
-        borderRadius: variables.buttonBorderRadius,
-    },
-
-    tabSelector: {
-        flexDirection: 'row',
-        paddingHorizontal: 20,
-        paddingBottom: 12,
-    },
-
-    tabText: (isSelected) => ({
-        marginLeft: 8,
-        fontFamily: fontFamily.EXP_NEUE_BOLD,
-        fontWeight: fontWeightBold,
-        color: isSelected ? theme.textLight : theme.textSupporting,
-    }),
-
-    tabBackground: (hovered, isFocused, background) => ({
-        backgroundColor: hovered && !isFocused ? theme.highlightBG : background,
-    }),
-
-    tabOpacity: (hovered, isFocused, activeOpacityValue, inactiveOpacityValue) => (hovered && !isFocused ? inactiveOpacityValue : activeOpacityValue),
-
-    /**
-     * @param {String} backgroundColor
-     * @param {Number} height
-     * @returns {Object}
-     */
-    overscrollSpacer: (backgroundColor, height) => ({
-        backgroundColor,
-        height,
-        width: '100%',
-        position: 'absolute',
-        top: -height,
-        left: 0,
-        right: 0,
-    }),
-
-    dualColorOverscrollSpacer: {
-        position: 'absolute',
-        top: 0,
-        left: 0,
-        width: '100%',
-        height: '100%',
-        zIndex: -1,
-    },
-
-    willChangeTransform: {
-        willChange: 'transform',
-    },
-
-    dropDownButtonCartIconContainerPadding: {
-        paddingRight: 0,
-        paddingLeft: 0,
-    },
-
-    dropDownButtonArrowContain: {
-        marginLeft: 12,
-        marginRight: 14,
-    },
-
-    dropDownButtonCartIconView: {
-        borderTopRightRadius: variables.buttonBorderRadius,
-        borderBottomRightRadius: variables.buttonBorderRadius,
-        ...flex.flexRow,
-        ...flex.alignItemsCenter,
-    },
-
-    emojiPickerButtonDropdown: {
-        justifyContent: 'center',
-        backgroundColor: theme.activeComponentBG,
-        width: 86,
-        height: 52,
-        borderRadius: 26,
-        alignItems: 'center',
-        paddingLeft: 10,
-        paddingRight: 4,
-        marginBottom: 32,
-        alignSelf: 'flex-start',
-    },
-
-    emojiPickerButtonDropdownIcon: {
-        fontSize: 30,
-    },
-
-    moneyRequestImage: {
-        height: 200,
-        borderRadius: 16,
-        margin: 20,
-    },
-
-    reportPreviewBox: {
-        backgroundColor: theme.cardBG,
-        borderRadius: variables.componentBorderRadiusLarge,
-        maxWidth: variables.sideBarWidth,
-        width: '100%',
-    },
-
-    reportPreviewBoxHoverBorder: {
-        borderColor: theme.border,
-        backgroundColor: theme.border,
-    },
-
-    reportContainerBorderRadius: {
-        borderRadius: variables.componentBorderRadiusLarge,
-    },
-
-    reportPreviewBoxBody: {
-        padding: 16,
-    },
-
-    reportActionItemImages: {
-        flexDirection: 'row',
-        borderWidth: 4,
-        borderColor: theme.transparent,
-        borderTopLeftRadius: variables.componentBorderRadiusLarge,
-        borderTopRightRadius: variables.componentBorderRadiusLarge,
-        borderBottomLeftRadius: variables.componentBorderRadiusLarge,
-        borderBottomRightRadius: variables.componentBorderRadiusLarge,
-        overflow: 'hidden',
-        height: 200,
-    },
-
-    reportActionItemImage: {
-        flex: 1,
-        width: '100%',
-        height: '100%',
-        display: 'flex',
-        justifyContent: 'center',
-        alignItems: 'center',
-    },
-
-    reportActionItemImageBorder: {
-        borderRightWidth: 2,
-        borderColor: theme.cardBG,
-    },
-
-    reportActionItemImagesMore: {
-        position: 'absolute',
-        borderRadius: 18,
-        backgroundColor: theme.cardBG,
-        width: 36,
-        height: 36,
-        display: 'flex',
-        justifyContent: 'center',
-        alignItems: 'center',
-    },
-
-    moneyRequestHeaderStatusBarBadge: {
-        paddingHorizontal: 8,
-        borderRadius: variables.componentBorderRadiusSmall,
-        height: variables.inputHeightSmall,
-        display: 'flex',
-        justifyContent: 'center',
-        alignItems: 'center',
-        backgroundColor: theme.border,
-        marginRight: 12,
-    },
-
-    staticHeaderImage: {
-        minHeight: 240,
-    },
-
-    emojiPickerButtonDropdownContainer: {
-        flexDirection: 'row',
-        alignItems: 'center',
-    },
-
-    rotate90: {
-        transform: [{rotate: '90deg'}],
-    },
-
-    emojiStatusLHN: {
-        fontSize: 22,
-    },
-    sidebarStatusAvatarContainer: {
-        height: 44,
-        width: 84,
-        backgroundColor: theme.componentBG,
-        flexDirection: 'row',
-        alignItems: 'center',
-        justifyContent: 'space-between',
-        borderRadius: 42,
-        paddingHorizontal: 2,
-        marginVertical: -2,
-        marginRight: -2,
-    },
-    sidebarStatusAvatar: {
-        flex: 1,
-        alignItems: 'center',
-        justifyContent: 'center',
-    },
-
-    moneyRequestViewImage: {
-        ...spacing.mh5,
-        ...spacing.mv3,
-        overflow: 'hidden',
-        borderWidth: 2,
-        borderColor: theme.cardBG,
-        borderRadius: variables.componentBorderRadiusLarge,
-        height: 200,
-        maxWidth: 400,
-    },
-
-    mapViewContainer: {
-        ...flex.flex1,
-        ...spacing.p4,
-        ...spacing.flex1,
-        minHeight: 300,
-        maxHeight: 500,
-    },
-
-    mapView: {
-        flex: 1,
-        borderRadius: 16,
-        overflow: 'hidden',
-    },
-
-    mapViewOverlay: {
-        flex: 1,
-        position: 'absolute',
-        left: 0,
-        top: 0,
-        borderRadius: variables.componentBorderRadiusLarge,
-        overflow: 'hidden',
-        backgroundColor: theme.highlightBG,
-        ...sizing.w100,
-        ...sizing.h100,
-    },
-
-    confirmationListMapItem: {
-        ...spacing.mv2,
-        ...spacing.mh5,
-        height: 200,
-    },
-
-    mapDirection: {
-        lineColor: theme.success,
-        lineWidth: 7,
-    },
-
-    mapDirectionLayer: {
-        layout: {'line-join': 'round', 'line-cap': 'round'},
-        paint: {'line-color': theme.success, 'line-width': 7},
-    },
-
-    mapPendingView: {
-        backgroundColor: theme.highlightBG,
-        ...flex.flex1,
-        borderRadius: variables.componentBorderRadiusLarge,
-    },
-    userReportStatusEmoji: {
-        flexShrink: 0,
-        fontSize: variables.fontSizeNormal,
-        marginRight: 4,
-    },
-    draggableTopBar: {
-        height: 30,
-        width: '100%',
-    },
-
-    globalNavigation: {
-        width: variables.globalNavigationWidth,
-        backgroundColor: theme.highlightBG,
-    },
-
-    globalNavigationMenuContainer: {
-        marginTop: 13,
-    },
-
-    globalAndSubNavigationContainer: {
-        backgroundColor: theme.highlightBG,
-    },
-
-    globalNavigationSelectionIndicator: (isFocused) => ({
-        width: 4,
-        height: 52,
-        borderTopRightRadius: variables.componentBorderRadiusRounded,
-        borderBottomRightRadius: variables.componentBorderRadiusRounded,
-        backgroundColor: isFocused ? theme.iconMenu : theme.transparent,
-    }),
-
-    globalNavigationMenuItem: (isFocused) => (isFocused ? {color: theme.text, fontWeight: fontWeightBold, fontFamily: fontFamily.EXP_NEUE_BOLD} : {color: theme.icon}),
-
-    globalNavigationItemContainer: {
-        width: variables.globalNavigationWidth,
-        height: variables.globalNavigationWidth,
-    },
-
-    walletCard: {
-        borderRadius: variables.componentBorderRadiusLarge,
-        position: 'relative',
-        alignSelf: 'center',
-        overflow: 'hidden',
-    },
-
-    walletCardMenuItem: {
-        color: theme.text,
-        fontSize: variables.fontSizeNormal,
-    },
-
-    walletCardHolder: {
-        position: 'absolute',
-        left: 16,
-        bottom: 16,
-        width: variables.cardNameWidth,
-        color: theme.text,
-        fontSize: variables.fontSizeSmall,
-        lineHeight: variables.lineHeightLarge,
-    },
-
-    receiptDropHeaderGap: {
-        backgroundColor: theme.receiptDropUIBG,
-    },
-
-    checkboxWithLabelCheckboxStyle: {
-        marginLeft: -2,
-    },
-});
-
-// For now we need to export the styles function that takes the theme as an argument
-// as something named different than "styles", because a lot of files import the "defaultStyles"
-// as "styles", which causes ESLint to throw an error.
-// TODO: Remove "stylesGenerator" and instead only return "styles" once the app is migrated to theme switching hooks and HOCs and "styles/theme/default.js" is not used anywhere anymore (GH issue: https://github.com/Expensify/App/issues/27337)
-const stylesGenerator = styles;
-const defaultStyles = styles(defaultTheme);
-
-export default defaultStyles;
-export {stylesGenerator};
diff --git a/src/styles/styles.ts b/src/styles/styles.ts
new file mode 100644
index 000000000000..aed9eac08d9b
--- /dev/null
+++ b/src/styles/styles.ts
@@ -0,0 +1,3977 @@
+/* eslint-disable @typescript-eslint/naming-convention */
+import {LineLayerStyleProps} from '@rnmapbox/maps/src/utils/MapboxStyles';
+import lodashClamp from 'lodash/clamp';
+import {LineLayer} from 'react-map-gl';
+import {AnimatableNumericValue, Animated, ImageStyle, TextStyle, ViewStyle} from 'react-native';
+import {CustomAnimation} from 'react-native-animatable';
+import {PickerStyle} from 'react-native-picker-select';
+import {MixedStyleDeclaration, MixedStyleRecord} from 'react-native-render-html';
+import CONST from '../CONST';
+import * as Browser from '../libs/Browser';
+import addOutlineWidth from './addOutlineWidth';
+import codeStyles from './codeStyles';
+import fontFamily from './fontFamily';
+import fontWeightBold from './fontWeight/bold';
+import getPopOverVerticalOffset from './getPopOverVerticalOffset';
+import optionAlternateTextPlatformStyles from './optionAlternateTextPlatformStyles';
+import overflowXHidden from './overflowXHidden';
+import pointerEventsAuto from './pointerEventsAuto';
+import pointerEventsNone from './pointerEventsNone';
+import defaultTheme from './themes/default';
+import {ThemeDefault} from './themes/types';
+import cursor from './utilities/cursor';
+import display from './utilities/display';
+import flex from './utilities/flex';
+import overflow from './utilities/overflow';
+import positioning from './utilities/positioning';
+import sizing from './utilities/sizing';
+import spacing from './utilities/spacing';
+import textUnderline from './utilities/textUnderline';
+import userSelect from './utilities/userSelect';
+import visibility from './utilities/visibility';
+import whiteSpace from './utilities/whiteSpace';
+import wordBreak from './utilities/wordBreak';
+import writingDirection from './utilities/writingDirection';
+import variables from './variables';
+import colors from './colors';
+import objectFit from './utilities/objectFit';
+
+type AnchorPosition = {
+    horizontal: number;
+    vertical: number;
+};
+
+type WebViewStyle = {
+    tagStyles: MixedStyleRecord;
+    baseFontStyle: MixedStyleDeclaration;
+};
+
+type CustomPickerStyle = PickerStyle & {icon?: ViewStyle};
+
+type OverlayStylesParams = {progress: Animated.AnimatedInterpolation<string | number>};
+
+type TwoFactorAuthCodesBoxParams = {isExtraSmallScreenWidth: boolean; isSmallScreenWidth: boolean};
+
+type Translation = 'perspective' | 'rotate' | 'rotateX' | 'rotateY' | 'rotateZ' | 'scale' | 'scaleX' | 'scaleY' | 'translateX' | 'translateY' | 'skewX' | 'skewY' | 'matrix';
+
+type OfflineFeedbackStyle = Record<'deleted' | 'pending' | 'error' | 'container' | 'textContainer' | 'text' | 'errorDot', ViewStyle | TextStyle>;
+
+type MapDirectionStyle = Pick<LineLayerStyleProps, 'lineColor' | 'lineWidth'>;
+
+type MapDirectionLayerStyle = Pick<LineLayer, 'layout' | 'paint'>;
+
+type Styles = Record<
+    string,
+    | ViewStyle
+    | TextStyle
+    | ImageStyle
+    | WebViewStyle
+    | OfflineFeedbackStyle
+    | MapDirectionStyle
+    | MapDirectionLayerStyle
+    // eslint-disable-next-line @typescript-eslint/no-explicit-any
+    | ((...args: any[]) => ViewStyle | TextStyle | ImageStyle | AnchorPosition | CustomAnimation | CustomPickerStyle)
+>;
+
+// touchCallout is an iOS safari only property that controls the display of the callout information when you touch and hold a target
+const touchCalloutNone: Pick<ViewStyle, 'WebkitTouchCallout'> = Browser.isMobileSafari() ? {WebkitTouchCallout: 'none'} : {};
+// to prevent vertical text offset in Safari for badges, new lineHeight values have been added
+const lineHeightBadge: Pick<ViewStyle, 'lineHeight'> = Browser.isSafari() ? {lineHeight: variables.lineHeightXSmall} : {lineHeight: variables.lineHeightNormal};
+
+const picker = (theme: ThemeDefault) =>
+    ({
+        backgroundColor: theme.transparent,
+        color: theme.text,
+        fontFamily: fontFamily.EXP_NEUE,
+        fontSize: variables.fontSizeNormal,
+        lineHeight: variables.fontSizeNormalHeight,
+        paddingBottom: 8,
+        paddingTop: 23,
+        paddingLeft: 0,
+        paddingRight: 25,
+        height: variables.inputHeight,
+        borderWidth: 0,
+        textAlign: 'left',
+    } satisfies TextStyle);
+
+const link = (theme: ThemeDefault) =>
+    ({
+        color: theme.link,
+        textDecorationColor: theme.link,
+        fontFamily: fontFamily.EXP_NEUE,
+    } satisfies ViewStyle & MixedStyleDeclaration);
+
+const baseCodeTagStyles = (theme: ThemeDefault) =>
+    ({
+        borderWidth: 1,
+        borderRadius: 5,
+        borderColor: theme.border,
+        backgroundColor: theme.textBackground,
+    } satisfies ViewStyle & MixedStyleDeclaration);
+
+const headlineFont = {
+    fontFamily: fontFamily.EXP_NEW_KANSAS_MEDIUM,
+    fontWeight: '500',
+} satisfies TextStyle;
+
+const webViewStyles = (theme: ThemeDefault) =>
+    ({
+        // As of react-native-render-html v6, don't declare distinct styles for
+        // custom renderers, the API for custom renderers has changed. Declare the
+        // styles in the below "tagStyles" instead. If you need to reuse those
+        // styles from the renderer, just pass the "style" prop to the underlying
+        // component.
+        tagStyles: {
+            em: {
+                fontFamily: fontFamily.EXP_NEUE,
+                fontStyle: 'italic',
+            },
+
+            del: {
+                textDecorationLine: 'line-through',
+                textDecorationStyle: 'solid',
+            },
+
+            strong: {
+                fontFamily: fontFamily.EXP_NEUE,
+                fontWeight: 'bold',
+            },
+
+            a: link(theme),
+
+            ul: {
+                maxWidth: '100%',
+            },
+
+            ol: {
+                maxWidth: '100%',
+            },
+
+            li: {
+                flexShrink: 1,
+            },
+
+            blockquote: {
+                borderLeftColor: theme.border,
+                borderLeftWidth: 4,
+                paddingLeft: 12,
+                marginTop: 4,
+                marginBottom: 4,
+
+                // Overwrite default HTML margin for blockquotes
+                marginLeft: 0,
+            },
+
+            pre: {
+                ...baseCodeTagStyles(theme),
+                paddingTop: 12,
+                paddingBottom: 12,
+                paddingRight: 8,
+                paddingLeft: 8,
+                fontFamily: fontFamily.MONOSPACE,
+                marginTop: 0,
+                marginBottom: 0,
+            },
+
+            code: {
+                ...baseCodeTagStyles(theme),
+                ...(codeStyles.codeTextStyle as MixedStyleDeclaration),
+                paddingLeft: 5,
+                paddingRight: 5,
+                fontFamily: fontFamily.MONOSPACE,
+                fontSize: 13,
+            },
+
+            img: {
+                borderColor: theme.border,
+                borderRadius: variables.componentBorderRadiusNormal,
+                borderWidth: 1,
+                ...touchCalloutNone,
+            },
+
+            p: {
+                marginTop: 0,
+                marginBottom: 0,
+            },
+            h1: {
+                fontSize: variables.fontSizeLarge,
+                marginBottom: 8,
+            },
+        },
+
+        baseFontStyle: {
+            color: theme.text,
+            fontSize: variables.fontSizeNormal,
+            fontFamily: fontFamily.EXP_NEUE,
+            flex: 1,
+            lineHeight: variables.fontSizeNormalHeight,
+            ...writingDirection.ltr,
+        },
+    } satisfies WebViewStyle);
+
+const styles = (theme: ThemeDefault) =>
+    ({
+        // Add all of our utility and helper styles
+        ...spacing,
+        ...sizing,
+        ...flex,
+        ...display,
+        ...overflow,
+        ...positioning,
+        ...wordBreak,
+        ...whiteSpace,
+        ...writingDirection,
+        ...cursor,
+        ...userSelect,
+        ...textUnderline,
+        ...objectFit,
+
+        autoCompleteSuggestionsContainer: {
+            backgroundColor: theme.appBG,
+            borderRadius: 8,
+            borderWidth: 1,
+            borderColor: theme.border,
+            justifyContent: 'center',
+            boxShadow: variables.popoverMenuShadow,
+            position: 'absolute',
+            left: 0,
+            right: 0,
+            paddingVertical: CONST.AUTO_COMPLETE_SUGGESTER.SUGGESTER_INNER_PADDING,
+        },
+
+        autoCompleteSuggestionContainer: {
+            flexDirection: 'row',
+            alignItems: 'center',
+        },
+
+        emojiSuggestionsEmoji: {
+            fontSize: variables.fontSizeMedium,
+            width: 51,
+            textAlign: 'center',
+        },
+        emojiSuggestionsText: {
+            fontSize: variables.fontSizeMedium,
+            flex: 1,
+            ...wordBreak.breakWord,
+            ...spacing.pr4,
+        },
+
+        mentionSuggestionsAvatarContainer: {
+            width: 24,
+            height: 24,
+            alignItems: 'center',
+            justifyContent: 'center',
+        },
+
+        mentionSuggestionsText: {
+            fontSize: variables.fontSizeMedium,
+            ...spacing.ml2,
+        },
+
+        mentionSuggestionsDisplayName: {
+            fontFamily: fontFamily.EXP_NEUE_BOLD,
+            fontWeight: fontWeightBold,
+        },
+
+        mentionSuggestionsHandle: {
+            color: theme.textSupporting,
+        },
+
+        webViewStyles: webViewStyles(theme),
+
+        link: link(theme),
+
+        linkMuted: {
+            color: theme.textSupporting,
+            textDecorationColor: theme.textSupporting,
+            fontFamily: fontFamily.EXP_NEUE,
+        },
+
+        linkMutedHovered: {
+            color: theme.textMutedReversed,
+        },
+
+        highlightBG: {
+            backgroundColor: theme.highlightBG,
+        },
+
+        appBG: {
+            backgroundColor: theme.appBG,
+        },
+
+        h4: {
+            fontFamily: fontFamily.EXP_NEUE_BOLD,
+            fontSize: variables.fontSizeLabel,
+            fontWeight: fontWeightBold,
+        },
+
+        textAlignCenter: {
+            textAlign: 'center',
+        },
+
+        textAlignRight: {
+            textAlign: 'right',
+        },
+
+        textAlignLeft: {
+            textAlign: 'left',
+        },
+
+        textUnderline: {
+            textDecorationLine: 'underline',
+        },
+
+        label: {
+            fontSize: variables.fontSizeLabel,
+            lineHeight: variables.lineHeightLarge,
+        },
+
+        textLabel: {
+            color: theme.text,
+            fontSize: variables.fontSizeLabel,
+            lineHeight: variables.lineHeightLarge,
+        },
+
+        mutedTextLabel: {
+            color: theme.textSupporting,
+            fontSize: variables.fontSizeLabel,
+            lineHeight: variables.lineHeightLarge,
+        },
+
+        textMicro: {
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeSmall,
+            lineHeight: variables.lineHeightSmall,
+        },
+
+        textMicroBold: {
+            color: theme.text,
+            fontWeight: fontWeightBold,
+            fontFamily: fontFamily.EXP_NEUE_BOLD,
+            fontSize: variables.fontSizeSmall,
+            lineHeight: variables.lineHeightSmall,
+        },
+
+        textMicroSupporting: {
+            color: theme.textSupporting,
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeSmall,
+            lineHeight: variables.lineHeightSmall,
+        },
+
+        textExtraSmallSupporting: {
+            color: theme.textSupporting,
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeExtraSmall,
+        },
+
+        textNormal: {
+            fontSize: variables.fontSizeNormal,
+        },
+
+        textLarge: {
+            fontSize: variables.fontSizeLarge,
+        },
+
+        textXLarge: {
+            fontSize: variables.fontSizeXLarge,
+        },
+
+        textXXLarge: {
+            fontSize: variables.fontSizeXXLarge,
+        },
+
+        textXXXLarge: {
+            fontSize: variables.fontSizeXXXLarge,
+        },
+
+        textHero: {
+            fontSize: variables.fontSizeHero,
+            fontFamily: fontFamily.EXP_NEW_KANSAS_MEDIUM,
+            lineHeight: variables.lineHeightHero,
+        },
+
+        textStrong: {
+            fontFamily: fontFamily.EXP_NEUE_BOLD,
+            fontWeight: fontWeightBold,
+        },
+
+        textItalic: {
+            fontFamily: fontFamily.EXP_NEUE_ITALIC,
+            fontStyle: 'italic',
+        },
+
+        textHeadline: {
+            ...headlineFont,
+            ...whiteSpace.preWrap,
+            color: theme.heading,
+            fontSize: variables.fontSizeXLarge,
+            lineHeight: variables.lineHeightXXLarge,
+        },
+
+        textHeadlineH1: {
+            ...headlineFont,
+            ...whiteSpace.preWrap,
+            color: theme.heading,
+            fontSize: variables.fontSizeh1,
+            lineHeight: variables.lineHeightSizeh1,
+        },
+
+        textDecorationNoLine: {
+            textDecorationLine: 'none',
+        },
+
+        textWhite: {
+            color: theme.textLight,
+        },
+
+        textBlue: {
+            color: theme.link,
+        },
+
+        textUppercase: {
+            textTransform: 'uppercase',
+        },
+
+        textNoWrap: {
+            ...whiteSpace.noWrap,
+        },
+
+        colorReversed: {
+            color: theme.textReversed,
+        },
+
+        colorMutedReversed: {
+            color: theme.textMutedReversed,
+        },
+
+        colorMuted: {
+            color: theme.textSupporting,
+        },
+
+        bgTransparent: {
+            backgroundColor: 'transparent',
+        },
+
+        bgDark: {
+            backgroundColor: theme.inverse,
+        },
+
+        opacity0: {
+            opacity: 0,
+        },
+
+        opacity1: {
+            opacity: 1,
+        },
+
+        textDanger: {
+            color: theme.danger,
+        },
+
+        borderRadiusNormal: {
+            borderRadius: variables.buttonBorderRadius,
+        },
+
+        button: {
+            backgroundColor: theme.buttonDefaultBG,
+            borderRadius: variables.buttonBorderRadius,
+            minHeight: variables.componentSizeLarge,
+            justifyContent: 'center',
+            ...spacing.ph3,
+        },
+
+        buttonContainer: {
+            padding: 1,
+            borderRadius: variables.buttonBorderRadius,
+        },
+
+        buttonText: {
+            color: theme.text,
+            fontFamily: fontFamily.EXP_NEUE_BOLD,
+            fontSize: variables.fontSizeNormal,
+            fontWeight: fontWeightBold,
+            textAlign: 'center',
+            flexShrink: 1,
+
+            // It is needed to unset the Lineheight. We don't need it for buttons as button always contains single line of text.
+            // It allows to vertically center the text.
+            lineHeight: undefined,
+
+            // Add 1px to the Button text to give optical vertical alignment.
+            paddingBottom: 1,
+        },
+
+        buttonSmall: {
+            borderRadius: variables.buttonBorderRadius,
+            minHeight: variables.componentSizeSmall,
+            paddingTop: 4,
+            paddingHorizontal: 14,
+            paddingBottom: 4,
+            backgroundColor: theme.buttonDefaultBG,
+        },
+
+        buttonMedium: {
+            borderRadius: variables.buttonBorderRadius,
+            minHeight: variables.componentSizeNormal,
+            paddingTop: 12,
+            paddingRight: 16,
+            paddingBottom: 12,
+            paddingLeft: 16,
+            backgroundColor: theme.buttonDefaultBG,
+        },
+
+        buttonLarge: {
+            borderRadius: variables.buttonBorderRadius,
+            minHeight: variables.componentSizeLarge,
+            paddingTop: 8,
+            paddingRight: 10,
+            paddingBottom: 8,
+            paddingLeft: 18,
+            backgroundColor: theme.buttonDefaultBG,
+        },
+
+        buttonSmallText: {
+            fontSize: variables.fontSizeSmall,
+            fontFamily: fontFamily.EXP_NEUE_BOLD,
+            fontWeight: fontWeightBold,
+            textAlign: 'center',
+        },
+
+        buttonMediumText: {
+            fontSize: variables.fontSizeLabel,
+            fontFamily: fontFamily.EXP_NEUE_BOLD,
+            fontWeight: fontWeightBold,
+            textAlign: 'center',
+        },
+
+        buttonLargeText: {
+            fontSize: variables.fontSizeNormal,
+            fontFamily: fontFamily.EXP_NEUE_BOLD,
+            fontWeight: fontWeightBold,
+            textAlign: 'center',
+        },
+
+        buttonDefaultHovered: {
+            backgroundColor: theme.buttonHoveredBG,
+            borderWidth: 0,
+        },
+
+        buttonSuccess: {
+            backgroundColor: theme.success,
+            borderWidth: 0,
+        },
+
+        buttonOpacityDisabled: {
+            opacity: 0.5,
+        },
+
+        buttonSuccessHovered: {
+            backgroundColor: theme.successHover,
+            borderWidth: 0,
+        },
+
+        buttonDanger: {
+            backgroundColor: theme.danger,
+            borderWidth: 0,
+        },
+
+        buttonDangerHovered: {
+            backgroundColor: theme.dangerHover,
+            borderWidth: 0,
+        },
+
+        buttonDisabled: {
+            backgroundColor: theme.buttonDefaultBG,
+            borderWidth: 0,
+        },
+
+        buttonDivider: {
+            height: variables.dropDownButtonDividerHeight,
+            borderWidth: 0.7,
+            borderColor: theme.text,
+        },
+
+        noBorderRadius: {
+            borderRadius: 0,
+        },
+
+        noRightBorderRadius: {
+            borderTopRightRadius: 0,
+            borderBottomRightRadius: 0,
+        },
+
+        noLeftBorderRadius: {
+            borderTopLeftRadius: 0,
+            borderBottomLeftRadius: 0,
+        },
+
+        buttonCTA: {
+            paddingVertical: 6,
+            ...spacing.mh4,
+        },
+
+        buttonCTAIcon: {
+            marginRight: 22,
+
+            // Align vertically with the Button text
+            paddingBottom: 1,
+            paddingTop: 1,
+        },
+
+        buttonConfirm: {
+            margin: 20,
+        },
+
+        attachmentButtonBigScreen: {
+            minWidth: 300,
+            alignSelf: 'center',
+        },
+
+        buttonConfirmText: {
+            paddingLeft: 20,
+            paddingRight: 20,
+        },
+
+        buttonSuccessText: {
+            color: theme.textLight,
+        },
+
+        buttonDangerText: {
+            color: theme.textLight,
+        },
+
+        hoveredComponentBG: {
+            backgroundColor: theme.hoverComponentBG,
+        },
+
+        activeComponentBG: {
+            backgroundColor: theme.activeComponentBG,
+        },
+
+        touchableButtonImage: {
+            alignItems: 'center',
+            height: variables.componentSizeNormal,
+            justifyContent: 'center',
+            width: variables.componentSizeNormal,
+        },
+
+        visuallyHidden: {
+            ...visibility.hidden,
+            overflow: 'hidden',
+            width: 0,
+            height: 0,
+        },
+
+        visibilityHidden: {
+            ...visibility.hidden,
+        },
+
+        loadingVBAAnimation: {
+            width: 140,
+            height: 140,
+        },
+
+        pickerSmall: (backgroundColor = theme.highlightBG) =>
+            ({
+                inputIOS: {
+                    fontFamily: fontFamily.EXP_NEUE,
+                    fontSize: variables.fontSizeSmall,
+                    paddingLeft: 0,
+                    paddingRight: 17,
+                    paddingTop: 6,
+                    paddingBottom: 6,
+                    borderWidth: 0,
+                    color: theme.text,
+                    height: 26,
+                    opacity: 1,
+                    backgroundColor: 'transparent',
+                },
+                done: {
+                    color: theme.text,
+                },
+                doneDepressed: {
+                    // Extracted from react-native-picker-select, src/styles.js
+                    fontSize: 17,
+                },
+                modalViewMiddle: {
+                    backgroundColor: theme.border,
+                    borderTopWidth: 0,
+                },
+                modalViewBottom: {
+                    backgroundColor: theme.highlightBG,
+                },
+                inputWeb: {
+                    fontFamily: fontFamily.EXP_NEUE,
+                    fontSize: variables.fontSizeSmall,
+                    paddingLeft: 0,
+                    paddingRight: 17,
+                    paddingTop: 6,
+                    paddingBottom: 6,
+                    borderWidth: 0,
+                    color: theme.text,
+                    appearance: 'none',
+                    height: 26,
+                    opacity: 1,
+                    backgroundColor,
+                    ...cursor.cursorPointer,
+                },
+                inputAndroid: {
+                    fontFamily: fontFamily.EXP_NEUE,
+                    fontSize: variables.fontSizeSmall,
+                    paddingLeft: 0,
+                    paddingRight: 17,
+                    paddingTop: 6,
+                    paddingBottom: 6,
+                    borderWidth: 0,
+                    color: theme.text,
+                    height: 26,
+                    opacity: 1,
+                    backgroundColor: 'transparent',
+                },
+                iconContainer: {
+                    top: 7,
+                    ...pointerEventsNone,
+                },
+                icon: {
+                    width: variables.iconSizeExtraSmall,
+                    height: variables.iconSizeExtraSmall,
+                },
+            } satisfies CustomPickerStyle),
+
+        badge: {
+            backgroundColor: theme.border,
+            borderRadius: 14,
+            height: variables.iconSizeNormal,
+            flexDirection: 'row',
+            paddingHorizontal: 7,
+            alignItems: 'center',
+        },
+
+        badgeSuccess: {
+            backgroundColor: theme.success,
+        },
+
+        badgeSuccessPressed: {
+            backgroundColor: theme.successHover,
+        },
+
+        badgeAdHocSuccess: {
+            backgroundColor: theme.badgeAdHoc,
+        },
+
+        badgeAdHocSuccessPressed: {
+            backgroundColor: theme.badgeAdHocHover,
+        },
+
+        badgeDanger: {
+            backgroundColor: theme.danger,
+        },
+
+        badgeDangerPressed: {
+            backgroundColor: theme.dangerPressed,
+        },
+
+        badgeText: {
+            color: theme.text,
+            fontSize: variables.fontSizeSmall,
+            ...lineHeightBadge,
+            ...whiteSpace.noWrap,
+        },
+
+        border: {
+            borderWidth: 1,
+            borderRadius: variables.componentBorderRadius,
+            borderColor: theme.border,
+        },
+
+        borderColorFocus: {
+            borderColor: theme.borderFocus,
+        },
+
+        borderColorDanger: {
+            borderColor: theme.danger,
+        },
+
+        textInputDisabled: {
+            // Adding disabled color theme to indicate user that the field is not editable.
+            backgroundColor: theme.highlightBG,
+            borderBottomWidth: 2,
+            borderColor: theme.borderLighter,
+            // Adding browser specefic style to bring consistency between Safari and other platforms.
+            // Applying the Webkit styles only to browsers as it is not available in native.
+            ...(Browser.getBrowser()
+                ? {
+                      WebkitTextFillColor: theme.textSupporting,
+                      WebkitOpacity: 1,
+                  }
+                : {}),
+            color: theme.textSupporting,
+        },
+
+        uploadReceiptView: (isSmallScreenWidth: boolean) =>
+            ({
+                borderRadius: variables.componentBorderRadiusLarge,
+                borderWidth: isSmallScreenWidth ? 0 : 2,
+                borderColor: theme.borderFocus,
+                borderStyle: 'dotted',
+                marginBottom: 20,
+                marginLeft: 20,
+                marginRight: 20,
+                justifyContent: 'center',
+                alignItems: 'center',
+                paddingVertical: 40,
+                gap: 4,
+                flex: 1,
+            } satisfies ViewStyle),
+
+        receiptViewTextContainer: {
+            paddingHorizontal: 40,
+            ...sizing.w100,
+        },
+
+        cameraView: {
+            flex: 1,
+            overflow: 'hidden',
+            borderRadius: 28,
+            borderStyle: 'solid',
+            borderWidth: 8,
+            backgroundColor: theme.highlightBG,
+            borderColor: theme.appBG,
+            display: 'flex',
+            justifyContent: 'center',
+            justifyItems: 'center',
+        },
+
+        permissionView: {
+            paddingVertical: 108,
+            paddingHorizontal: 61,
+            alignItems: 'center',
+            justifyContent: 'center',
+        },
+
+        headerAnonymousFooter: {
+            color: theme.heading,
+            fontFamily: fontFamily.EXP_NEW_KANSAS_MEDIUM,
+            fontSize: variables.fontSizeXLarge,
+            lineHeight: variables.lineHeightXXLarge,
+        },
+
+        headerText: {
+            color: theme.heading,
+            fontFamily: fontFamily.EXP_NEUE_BOLD,
+            fontSize: variables.fontSizeNormal,
+            fontWeight: fontWeightBold,
+        },
+
+        headerGap: {
+            height: CONST.DESKTOP_HEADER_PADDING,
+        },
+
+        reportOptions: {
+            marginLeft: 8,
+        },
+
+        chatItemComposeSecondaryRow: {
+            height: CONST.CHAT_FOOTER_SECONDARY_ROW_HEIGHT,
+            marginBottom: CONST.CHAT_FOOTER_SECONDARY_ROW_PADDING,
+            marginTop: CONST.CHAT_FOOTER_SECONDARY_ROW_PADDING,
+        },
+
+        chatItemComposeSecondaryRowSubText: {
+            color: theme.textSupporting,
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeSmall,
+            lineHeight: variables.lineHeightSmall,
+        },
+
+        chatItemComposeSecondaryRowOffset: {
+            marginLeft: variables.chatInputSpacing,
+        },
+
+        offlineIndicator: {
+            marginLeft: variables.chatInputSpacing,
+        },
+
+        offlineIndicatorMobile: {
+            paddingLeft: 20,
+            paddingTop: 5,
+            paddingBottom: 30,
+            marginBottom: -25,
+        },
+
+        offlineIndicatorRow: {
+            height: 25,
+        },
+
+        // Actions
+        actionAvatar: {
+            borderRadius: 20,
+        },
+
+        componentHeightLarge: {
+            height: variables.inputHeight,
+        },
+
+        calendarHeader: {
+            height: 50,
+            flexDirection: 'row',
+            justifyContent: 'space-between',
+            alignItems: 'center',
+            paddingHorizontal: 15,
+            paddingRight: 5,
+            ...userSelect.userSelectNone,
+        },
+
+        calendarDayRoot: {
+            flex: 1,
+            height: 45,
+            justifyContent: 'center',
+            alignItems: 'center',
+            ...userSelect.userSelectNone,
+        },
+
+        calendarDayContainer: {
+            width: 30,
+            height: 30,
+            justifyContent: 'center',
+            alignItems: 'center',
+            borderRadius: 15,
+            overflow: 'hidden',
+        },
+
+        calendarDayContainerSelected: {
+            backgroundColor: theme.buttonDefaultBG,
+        },
+
+        autoGrowHeightInputContainer: (textInputHeight: number, minHeight: number, maxHeight: number) =>
+            ({
+                height: lodashClamp(textInputHeight, minHeight, maxHeight),
+                minHeight,
+            } satisfies ViewStyle),
+
+        autoGrowHeightHiddenInput: (maxWidth: number, maxHeight?: number) =>
+            ({
+                maxWidth,
+                maxHeight: maxHeight && maxHeight + 1,
+                overflow: 'hidden',
+            } satisfies TextStyle),
+
+        textInputContainer: {
+            flex: 1,
+            justifyContent: 'center',
+            height: '100%',
+            backgroundColor: 'transparent',
+            borderBottomWidth: 2,
+            borderColor: theme.border,
+            overflow: 'hidden',
+        },
+
+        textInputLabel: {
+            position: 'absolute',
+            left: 0,
+            top: 0,
+            fontSize: variables.fontSizeNormal,
+            color: theme.textSupporting,
+            fontFamily: fontFamily.EXP_NEUE,
+            width: '100%',
+        },
+
+        textInputLabelBackground: {
+            position: 'absolute',
+            top: 0,
+            width: '100%',
+            height: 23,
+            backgroundColor: theme.componentBG,
+        },
+
+        textInputLabelDesktop: {
+            transformOrigin: 'left center',
+        },
+
+        textInputLabelTransformation: (translateY: AnimatableNumericValue, translateX: AnimatableNumericValue, scale: AnimatableNumericValue) =>
+            ({
+                transform: [{translateY}, {translateX}, {scale}],
+            } satisfies TextStyle),
+
+        baseTextInput: {
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeNormal,
+            lineHeight: variables.lineHeightXLarge,
+            color: theme.text,
+            paddingTop: 23,
+            paddingBottom: 8,
+            paddingLeft: 0,
+            borderWidth: 0,
+        },
+
+        textInputMultiline: {
+            scrollPadding: '23px 0 0 0',
+        },
+
+        textInputMultilineContainer: {
+            paddingTop: 23,
+        },
+
+        textInputAndIconContainer: {
+            flex: 1,
+            height: '100%',
+            zIndex: -1,
+            flexDirection: 'row',
+        },
+
+        textInputDesktop: addOutlineWidth({}, 0),
+
+        textInputIconContainer: {
+            paddingHorizontal: 11,
+            justifyContent: 'center',
+            margin: 1,
+        },
+
+        secureInput: {
+            borderTopRightRadius: 0,
+            borderBottomRightRadius: 0,
+        },
+
+        textInput: {
+            backgroundColor: 'transparent',
+            borderRadius: variables.componentBorderRadiusNormal,
+            height: variables.inputComponentSizeNormal,
+            borderColor: theme.border,
+            borderWidth: 1,
+            color: theme.text,
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeNormal,
+            paddingLeft: 12,
+            paddingRight: 12,
+            paddingTop: 10,
+            paddingBottom: 10,
+            textAlignVertical: 'center',
+        },
+
+        textInputPrefixWrapper: {
+            position: 'absolute',
+            left: 0,
+            top: 0,
+            height: variables.inputHeight,
+            display: 'flex',
+            flexDirection: 'row',
+            alignItems: 'center',
+            paddingTop: 23,
+            paddingBottom: 8,
+        },
+
+        textInputPrefix: {
+            color: theme.text,
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeNormal,
+            textAlignVertical: 'center',
+        },
+
+        pickerContainer: {
+            borderBottomWidth: 2,
+            paddingLeft: 0,
+            borderStyle: 'solid',
+            borderColor: theme.border,
+            justifyContent: 'center',
+            backgroundColor: 'transparent',
+            height: variables.inputHeight,
+            overflow: 'hidden',
+        },
+
+        pickerContainerSmall: {
+            height: variables.inputHeightSmall,
+        },
+
+        pickerLabel: {
+            position: 'absolute',
+            left: 0,
+            top: 6,
+            zIndex: 1,
+        },
+
+        picker: (disabled = false, backgroundColor = theme.appBG) =>
+            ({
+                iconContainer: {
+                    top: Math.round(variables.inputHeight * 0.5) - 11,
+                    right: 0,
+                    ...pointerEventsNone,
+                },
+
+                inputWeb: {
+                    appearance: 'none',
+                    ...(disabled ? cursor.cursorDisabled : cursor.cursorPointer),
+                    ...picker(theme),
+                    backgroundColor,
+                },
+
+                inputIOS: {
+                    ...picker(theme),
+                },
+                done: {
+                    color: theme.text,
+                },
+                doneDepressed: {
+                    // Extracted from react-native-picker-select, src/styles.js
+                    fontSize: 17,
+                },
+                modalViewMiddle: {
+                    backgroundColor: theme.border,
+                    borderTopWidth: 0,
+                },
+                modalViewBottom: {
+                    backgroundColor: theme.highlightBG,
+                },
+
+                inputAndroid: {
+                    ...picker(theme),
+                },
+            } satisfies CustomPickerStyle),
+
+        disabledText: {
+            color: theme.icon,
+        },
+
+        inputDisabled: {
+            backgroundColor: theme.highlightBG,
+            color: theme.icon,
+        },
+
+        noOutline: addOutlineWidth({}, 0),
+
+        textLabelSupporting: {
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeLabel,
+            color: theme.textSupporting,
+        },
+
+        textLabelError: {
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeLabel,
+            color: theme.textError,
+        },
+
+        textReceiptUpload: {
+            ...headlineFont,
+            fontSize: variables.fontSizeXLarge,
+            color: theme.textLight,
+            textAlign: 'center',
+        },
+
+        subTextReceiptUpload: {
+            fontFamily: fontFamily.EXP_NEUE,
+            lineHeight: variables.lineHeightLarge,
+            textAlign: 'center',
+            color: theme.textLight,
+        },
+
+        furtherDetailsText: {
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeSmall,
+            color: theme.textSupporting,
+        },
+
+        lh16: {
+            lineHeight: 16,
+        },
+
+        lh20: {
+            lineHeight: 20,
+        },
+
+        lh140Percent: {
+            lineHeight: '140%',
+        },
+
+        formHelp: {
+            color: theme.textSupporting,
+            fontSize: variables.fontSizeLabel,
+            lineHeight: variables.lineHeightLarge,
+            marginBottom: 4,
+        },
+
+        formError: {
+            color: theme.textError,
+            fontSize: variables.fontSizeLabel,
+            lineHeight: variables.formErrorLineHeight,
+            marginBottom: 4,
+        },
+
+        formSuccess: {
+            color: theme.success,
+            fontSize: variables.fontSizeLabel,
+            lineHeight: 18,
+            marginBottom: 4,
+        },
+
+        signInPage: {
+            backgroundColor: theme.highlightBG,
+            minHeight: '100%',
+            flex: 1,
+        },
+
+        signInPageHeroCenter: {
+            position: 'absolute',
+            top: 0,
+            left: 0,
+            right: 0,
+            bottom: 0,
+            justifyContent: 'center',
+            alignItems: 'center',
+        },
+
+        signInPageGradient: {
+            height: '100%',
+            width: 540,
+            position: 'absolute',
+            top: 0,
+            left: 0,
+        },
+
+        signInPageGradientMobile: {
+            height: 300,
+            width: 800,
+            position: 'absolute',
+            top: 0,
+            left: 0,
+        },
+
+        signInBackground: {
+            position: 'absolute',
+            bottom: 0,
+            left: 0,
+            minHeight: 700,
+        },
+
+        signInPageInner: {
+            marginLeft: 'auto',
+            marginRight: 'auto',
+            height: '100%',
+            width: '100%',
+        },
+
+        signInPageContentTopSpacer: {
+            maxHeight: 132,
+            minHeight: 24,
+        },
+
+        signInPageContentTopSpacerSmallScreens: {
+            maxHeight: 132,
+            minHeight: 45,
+        },
+
+        signInPageLeftContainer: {
+            paddingLeft: 40,
+            paddingRight: 40,
+        },
+
+        signInPageLeftContainerWide: {
+            maxWidth: variables.sideBarWidth,
+        },
+
+        signInPageWelcomeFormContainer: {
+            maxWidth: CONST.SIGN_IN_FORM_WIDTH,
+        },
+
+        signInPageWelcomeTextContainer: {
+            width: CONST.SIGN_IN_FORM_WIDTH,
+        },
+
+        changeExpensifyLoginLinkContainer: {
+            flexDirection: 'row',
+            flexWrap: 'wrap',
+            ...wordBreak.breakWord,
+        },
+
+        // Sidebar Styles
+        sidebar: {
+            backgroundColor: theme.sidebar,
+            height: '100%',
+        },
+
+        sidebarHeaderContainer: {
+            flexDirection: 'row',
+            paddingHorizontal: 20,
+            paddingVertical: 19,
+            justifyContent: 'space-between',
+            alignItems: 'center',
+        },
+
+        subNavigationContainer: {
+            backgroundColor: theme.sidebar,
+            flex: 1,
+            borderTopLeftRadius: variables.componentBorderRadiusRounded,
+        },
+
+        sidebarAnimatedWrapperContainer: {
+            height: '100%',
+            position: 'absolute',
+        },
+
+        sidebarFooter: {
+            alignItems: 'center',
+            display: 'flex',
+            justifyContent: 'center',
+            paddingVertical: variables.lineHeightXLarge,
+            width: '100%',
+        },
+
+        sidebarAvatar: {
+            backgroundColor: theme.icon,
+            borderRadius: 20,
+            height: variables.componentSizeNormal,
+            width: variables.componentSizeNormal,
+        },
+
+        statusIndicator: (backgroundColor = theme.danger) =>
+            ({
+                borderColor: theme.sidebar,
+                backgroundColor,
+                borderRadius: 8,
+                borderWidth: 2,
+                position: 'absolute',
+                right: -2,
+                top: -1,
+                height: 16,
+                width: 16,
+                zIndex: 10,
+            } satisfies ViewStyle),
+
+        floatingActionButtonContainer: {
+            position: 'absolute',
+            left: 16,
+
+            // The bottom of the floating action button should align with the bottom of the compose box.
+            // The value should be equal to the height + marginBottom + marginTop of chatItemComposeSecondaryRow
+            bottom: 25,
+        },
+
+        floatingActionButton: {
+            backgroundColor: theme.success,
+            height: variables.componentSizeNormal,
+            width: variables.componentSizeNormal,
+            borderRadius: 999,
+            alignItems: 'center',
+            justifyContent: 'center',
+        },
+
+        sidebarFooterUsername: {
+            color: theme.heading,
+            fontSize: variables.fontSizeLabel,
+            fontWeight: '700',
+            width: 200,
+            textOverflow: 'ellipsis',
+            overflow: 'hidden',
+            ...whiteSpace.noWrap,
+        },
+
+        sidebarFooterLink: {
+            color: theme.textSupporting,
+            fontSize: variables.fontSizeSmall,
+            textDecorationLine: 'none',
+            fontFamily: fontFamily.EXP_NEUE,
+            lineHeight: 20,
+        },
+
+        sidebarListContainer: {
+            scrollbarWidth: 'none',
+            paddingBottom: 4,
+        },
+
+        sidebarListItem: {
+            justifyContent: 'center',
+            textDecorationLine: 'none',
+        },
+
+        RHPNavigatorContainer: (isSmallScreenWidth: boolean) =>
+            ({
+                width: isSmallScreenWidth ? '100%' : variables.sideBarWidth,
+                position: 'absolute',
+                right: 0,
+                height: '100%',
+            } satisfies ViewStyle),
+
+        onlyEmojisText: {
+            fontSize: variables.fontSizeOnlyEmojis,
+            lineHeight: variables.fontSizeOnlyEmojisHeight,
+        },
+
+        onlyEmojisTextLineHeight: {
+            lineHeight: variables.fontSizeOnlyEmojisHeight,
+        },
+
+        createMenuPositionSidebar: (windowHeight: number) =>
+            ({
+                horizontal: 18,
+                vertical: windowHeight - 75,
+            } satisfies AnchorPosition),
+
+        createMenuPositionProfile: (windowWidth: number) =>
+            ({
+                horizontal: windowWidth - 355,
+                ...getPopOverVerticalOffset(162),
+            } satisfies AnchorPosition),
+
+        createMenuPositionReportActionCompose: (windowHeight: number) =>
+            ({
+                horizontal: 18 + variables.sideBarWidth,
+                vertical: windowHeight - 83,
+            } satisfies AnchorPosition),
+
+        createMenuPositionRightSidepane: {
+            right: 18,
+            bottom: 75,
+        },
+
+        createMenuContainer: {
+            width: variables.sideBarWidth - 40,
+            paddingVertical: 12,
+        },
+
+        createMenuHeaderText: {
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeLabel,
+            color: theme.heading,
+        },
+
+        popoverMenuItem: {
+            flexDirection: 'row',
+            borderRadius: 0,
+            paddingHorizontal: 20,
+            paddingVertical: 12,
+            justifyContent: 'space-between',
+            width: '100%',
+        },
+
+        popoverMenuIcon: {
+            width: variables.componentSizeNormal,
+            justifyContent: 'center',
+            alignItems: 'center',
+        },
+
+        popoverMenuText: {
+            fontSize: variables.fontSizeNormal,
+            color: theme.heading,
+        },
+
+        popoverInnerContainer: {
+            paddingTop: 0, // adjusting this because the mobile modal adds additional padding that we don't need for our layout
+            maxHeight: '95%',
+        },
+
+        menuItemTextContainer: {
+            minHeight: variables.componentSizeNormal,
+        },
+
+        chatLinkRowPressable: {
+            minWidth: 0,
+            textDecorationLine: 'none',
+            flex: 1,
+        },
+
+        sidebarLink: {
+            textDecorationLine: 'none',
+        },
+
+        sidebarLinkLHN: {
+            textDecorationLine: 'none',
+            marginLeft: 12,
+            marginRight: 12,
+            borderRadius: 8,
+        },
+
+        sidebarLinkInner: {
+            alignItems: 'center',
+            flexDirection: 'row',
+            paddingLeft: 20,
+            paddingRight: 20,
+        },
+
+        sidebarLinkInnerLHN: {
+            alignItems: 'center',
+            flexDirection: 'row',
+            paddingLeft: 8,
+            paddingRight: 8,
+        },
+
+        sidebarLinkText: {
+            color: theme.textSupporting,
+            fontSize: variables.fontSizeNormal,
+            textDecorationLine: 'none',
+            overflow: 'hidden',
+        },
+
+        sidebarLinkHover: {
+            backgroundColor: theme.sidebarHover,
+        },
+
+        sidebarLinkHoverLHN: {
+            backgroundColor: theme.highlightBG,
+        },
+
+        sidebarLinkActive: {
+            backgroundColor: theme.border,
+            textDecorationLine: 'none',
+        },
+
+        sidebarLinkActiveLHN: {
+            backgroundColor: theme.highlightBG,
+            textDecorationLine: 'none',
+        },
+
+        sidebarLinkTextBold: {
+            fontFamily: fontFamily.EXP_NEUE_BOLD,
+            fontWeight: fontWeightBold,
+            color: theme.heading,
+        },
+
+        sidebarLinkActiveText: {
+            color: theme.textSupporting,
+            fontSize: variables.fontSizeNormal,
+            textDecorationLine: 'none',
+            overflow: 'hidden',
+        },
+
+        optionItemAvatarNameWrapper: {
+            minWidth: 0,
+            flex: 1,
+        },
+
+        optionDisplayName: {
+            fontFamily: fontFamily.EXP_NEUE,
+            minHeight: variables.alternateTextHeight,
+            lineHeight: variables.lineHeightXLarge,
+            ...whiteSpace.noWrap,
+        },
+
+        optionDisplayNameCompact: {
+            minWidth: 'auto',
+            flexBasis: 'auto',
+            flexGrow: 0,
+            flexShrink: 1,
+        },
+
+        displayNameTooltipEllipsis: {
+            position: 'absolute',
+            opacity: 0,
+            right: 0,
+            bottom: 0,
+        },
+
+        optionAlternateText: {
+            minHeight: variables.alternateTextHeight,
+            lineHeight: variables.lineHeightXLarge,
+        },
+
+        optionAlternateTextCompact: {
+            flexShrink: 1,
+            flexGrow: 1,
+            flexBasis: 'auto',
+            ...optionAlternateTextPlatformStyles,
+        },
+
+        optionRow: {
+            minHeight: variables.optionRowHeight,
+            paddingTop: 12,
+            paddingBottom: 12,
+        },
+
+        optionRowSelected: {
+            backgroundColor: theme.activeComponentBG,
+        },
+
+        optionRowDisabled: {
+            color: theme.textSupporting,
+        },
+
+        optionRowCompact: {
+            height: variables.optionRowHeightCompact,
+            paddingTop: 12,
+            paddingBottom: 12,
+        },
+
+        optionsListSectionHeader: {
+            marginTop: 8,
+            marginBottom: 4,
+        },
+
+        overlayStyles: (current: OverlayStylesParams) =>
+            ({
+                ...positioning.pFixed,
+                // We need to stretch the overlay to cover the sidebar and the translate animation distance.
+                left: -2 * variables.sideBarWidth,
+                top: 0,
+                bottom: 0,
+                right: 0,
+                backgroundColor: theme.overlay,
+                opacity: current.progress.interpolate({
+                    inputRange: [0, 1],
+                    outputRange: [0, variables.overlayOpacity],
+                    extrapolate: 'clamp',
+                }),
+            } satisfies ViewStyle),
+
+        appContent: {
+            backgroundColor: theme.appBG,
+            overflow: 'hidden',
+        },
+
+        appContentHeader: {
+            height: variables.contentHeaderHeight,
+            justifyContent: 'center',
+            display: 'flex',
+            paddingRight: 20,
+        },
+
+        appContentHeaderTitle: {
+            alignItems: 'center',
+            flexDirection: 'row',
+        },
+
+        LHNToggle: {
+            alignItems: 'center',
+            height: variables.contentHeaderHeight,
+            justifyContent: 'center',
+            paddingRight: 10,
+            paddingLeft: 20,
+        },
+
+        LHNToggleIcon: {
+            height: 15,
+            width: 18,
+        },
+
+        chatContentScrollView: {
+            flexGrow: 1,
+            justifyContent: 'flex-start',
+            paddingBottom: 16,
+        },
+
+        // Chat Item
+        chatItem: {
+            display: 'flex',
+            flexDirection: 'row',
+            paddingTop: 8,
+            paddingBottom: 8,
+            paddingLeft: 20,
+            paddingRight: 20,
+        },
+
+        chatItemRightGrouped: {
+            flexGrow: 1,
+            flexShrink: 1,
+            flexBasis: 0,
+            position: 'relative',
+            marginLeft: variables.chatInputSpacing,
+        },
+
+        chatItemRight: {
+            flexGrow: 1,
+            flexShrink: 1,
+            flexBasis: 0,
+            position: 'relative',
+        },
+
+        chatItemMessageHeader: {
+            alignItems: 'center',
+            display: 'flex',
+            flexDirection: 'row',
+            flexWrap: 'nowrap',
+        },
+
+        chatItemMessageHeaderSender: {
+            color: theme.heading,
+            fontFamily: fontFamily.EXP_NEUE_BOLD,
+            fontSize: variables.fontSizeNormal,
+            fontWeight: fontWeightBold,
+            lineHeight: variables.lineHeightXLarge,
+            ...wordBreak.breakWord,
+        },
+
+        chatItemMessageHeaderTimestamp: {
+            flexShrink: 0,
+            color: theme.textSupporting,
+            fontSize: variables.fontSizeSmall,
+            paddingTop: 2,
+        },
+
+        chatItemMessage: {
+            color: theme.text,
+            fontSize: variables.fontSizeNormal,
+            fontFamily: fontFamily.EXP_NEUE,
+            lineHeight: variables.lineHeightXLarge,
+            maxWidth: '100%',
+            ...cursor.cursorAuto,
+            ...whiteSpace.preWrap,
+            ...wordBreak.breakWord,
+        },
+
+        renderHTMLTitle: {
+            color: theme.text,
+            fontSize: variables.fontSizeNormal,
+            fontFamily: fontFamily.EXP_NEUE,
+            lineHeight: variables.lineHeightXLarge,
+            maxWidth: '100%',
+            ...whiteSpace.preWrap,
+            ...wordBreak.breakWord,
+        },
+
+        chatItemComposeWithFirstRow: {
+            minHeight: 90,
+        },
+
+        chatItemFullComposeRow: {
+            ...sizing.h100,
+        },
+
+        chatItemComposeBoxColor: {
+            borderColor: theme.border,
+        },
+
+        chatItemComposeBoxFocusedColor: {
+            borderColor: theme.borderFocus,
+        },
+
+        chatItemComposeBox: {
+            backgroundColor: theme.componentBG,
+            borderWidth: 1,
+            borderRadius: variables.componentBorderRadiusRounded,
+            minHeight: variables.componentSizeMedium,
+        },
+
+        chatItemFullComposeBox: {
+            ...flex.flex1,
+            ...sizing.h100,
+        },
+
+        chatFooter: {
+            paddingLeft: 20,
+            paddingRight: 20,
+            display: 'flex',
+            backgroundColor: theme.appBG,
+        },
+
+        chatFooterFullCompose: {
+            flex: 1,
+        },
+
+        chatItemDraft: {
+            display: 'flex',
+            flexDirection: 'row',
+            paddingTop: 8,
+            paddingBottom: 8,
+            paddingLeft: 20,
+            paddingRight: 20,
+        },
+
+        chatItemReactionsDraftRight: {
+            marginLeft: 52,
+        },
+        chatFooterAtTheTop: {
+            flexGrow: 1,
+            justifyContent: 'flex-start',
+        },
+
+        // Be extremely careful when editing the compose styles, as it is easy to introduce regressions.
+        // Make sure you run the following tests against any changes: #12669
+        textInputCompose: addOutlineWidth(
+            {
+                backgroundColor: theme.componentBG,
+                borderColor: theme.border,
+                color: theme.text,
+                fontFamily: fontFamily.EXP_NEUE,
+                fontSize: variables.fontSizeNormal,
+                borderWidth: 0,
+                height: 'auto',
+                lineHeight: variables.lineHeightXLarge,
+                ...overflowXHidden,
+
+                // On Android, multiline TextInput with height: 'auto' will show extra padding unless they are configured with
+                // paddingVertical: 0, alignSelf: 'center', and textAlignVertical: 'center'
+
+                paddingHorizontal: variables.avatarChatSpacing,
+                paddingTop: 0,
+                paddingBottom: 0,
+                alignSelf: 'center',
+                textAlignVertical: 'center',
+            },
+            0,
+        ),
+
+        textInputFullCompose: {
+            alignSelf: 'stretch',
+            flex: 1,
+            maxHeight: '100%',
+            textAlignVertical: 'top',
+        },
+
+        // composer padding should not be modified unless thoroughly tested against the cases in this PR: #12669
+        textInputComposeSpacing: {
+            paddingVertical: 5,
+            ...flex.flexRow,
+            flex: 1,
+        },
+
+        textInputComposeBorder: {
+            borderLeftWidth: 1,
+            borderColor: theme.border,
+        },
+
+        chatItemSubmitButton: {
+            alignSelf: 'flex-end',
+            borderRadius: variables.componentBorderRadiusRounded,
+            backgroundColor: theme.transparent,
+            height: 40,
+            padding: 10,
+            margin: 3,
+            justifyContent: 'center',
+        },
+
+        emojiPickerContainer: {
+            backgroundColor: theme.componentBG,
+        },
+
+        emojiHeaderContainer: {
+            backgroundColor: theme.componentBG,
+            display: 'flex',
+            height: CONST.EMOJI_PICKER_HEADER_HEIGHT,
+            justifyContent: 'center',
+            width: '100%',
+        },
+
+        emojiSkinToneTitle: {
+            ...spacing.pv1,
+            fontFamily: fontFamily.EXP_NEUE_BOLD,
+            fontWeight: fontWeightBold,
+            color: theme.heading,
+            fontSize: variables.fontSizeSmall,
+        },
+
+        // Emoji Picker Styles
+        emojiText: {
+            textAlign: 'center',
+            fontSize: variables.emojiSize,
+            ...spacing.pv0,
+            ...spacing.ph0,
+            lineHeight: variables.emojiLineHeight,
+        },
+
+        emojiItem: {
+            width: '12.5%',
+            textAlign: 'center',
+            borderRadius: 8,
+            paddingTop: 2,
+            paddingBottom: 2,
+            height: CONST.EMOJI_PICKER_ITEM_HEIGHT,
+            ...userSelect.userSelectNone,
+        },
+
+        emojiItemHighlighted: {
+            transition: '0.2s ease',
+            backgroundColor: theme.buttonDefaultBG,
+        },
+
+        emojiItemKeyboardHighlighted: {
+            transition: '0.2s ease',
+            borderWidth: 1,
+            borderColor: theme.link,
+            borderRadius: variables.buttonBorderRadius,
+        },
+
+        categoryShortcutButton: {
+            flex: 1,
+            borderRadius: 8,
+            height: CONST.EMOJI_PICKER_ITEM_HEIGHT,
+            alignItems: 'center',
+            justifyContent: 'center',
+        },
+
+        chatItemEmojiButton: {
+            alignSelf: 'flex-end',
+            borderRadius: variables.buttonBorderRadius,
+            height: 40,
+            marginVertical: 3,
+            paddingHorizontal: 10,
+            justifyContent: 'center',
+        },
+
+        editChatItemEmojiWrapper: {
+            marginRight: 3,
+            alignSelf: 'flex-end',
+        },
+
+        hoveredButton: {
+            backgroundColor: theme.buttonHoveredBG,
+        },
+
+        composerSizeButton: {
+            alignSelf: 'center',
+            height: 32,
+            width: 32,
+            padding: 6,
+            margin: 3,
+            borderRadius: variables.componentBorderRadiusRounded,
+            backgroundColor: theme.transparent,
+            justifyContent: 'center',
+        },
+
+        chatItemAttachmentPlaceholder: {
+            backgroundColor: theme.sidebar,
+            borderColor: theme.border,
+            borderWidth: 1,
+            borderRadius: variables.componentBorderRadiusNormal,
+            height: 150,
+            textAlign: 'center',
+            verticalAlign: 'middle',
+            width: 200,
+        },
+
+        sidebarVisible: {
+            borderRightWidth: 1,
+        },
+
+        sidebarHidden: {
+            width: 0,
+            borderRightWidth: 0,
+        },
+
+        exampleCheckImage: {
+            width: '100%',
+            height: 80,
+            borderColor: theme.border,
+            borderWidth: 1,
+            borderRadius: variables.componentBorderRadiusNormal,
+        },
+
+        singleAvatar: {
+            height: 24,
+            width: 24,
+            backgroundColor: theme.icon,
+            borderRadius: 24,
+        },
+
+        singleAvatarSmall: {
+            height: 18,
+            width: 18,
+            backgroundColor: theme.icon,
+            borderRadius: 18,
+        },
+
+        singleAvatarMedium: {
+            height: 52,
+            width: 52,
+            backgroundColor: theme.icon,
+            borderRadius: 52,
+        },
+
+        secondAvatar: {
+            position: 'absolute',
+            right: -18,
+            bottom: -18,
+            borderWidth: 3,
+            borderRadius: 30,
+            borderColor: 'transparent',
+        },
+
+        secondAvatarSmall: {
+            position: 'absolute',
+            right: -13,
+            bottom: -13,
+            borderWidth: 3,
+            borderRadius: 18,
+            borderColor: 'transparent',
+        },
+
+        secondAvatarMedium: {
+            position: 'absolute',
+            right: -36,
+            bottom: -36,
+            borderWidth: 3,
+            borderRadius: 52,
+            borderColor: 'transparent',
+        },
+
+        secondAvatarSubscript: {
+            position: 'absolute',
+            right: -6,
+            bottom: -6,
+        },
+
+        secondAvatarSubscriptCompact: {
+            position: 'absolute',
+            bottom: -1,
+            right: -1,
+        },
+
+        secondAvatarSubscriptSmallNormal: {
+            position: 'absolute',
+            bottom: 0,
+            right: 0,
+        },
+
+        secondAvatarInline: {
+            bottom: -3,
+            right: -25,
+            borderWidth: 3,
+            borderRadius: 18,
+            borderColor: theme.cardBorder,
+            backgroundColor: theme.appBG,
+        },
+
+        avatarLarge: {
+            width: variables.avatarSizeLarge,
+            height: variables.avatarSizeLarge,
+        },
+
+        avatarXLarge: {
+            width: variables.avatarSizeXLarge,
+            height: variables.avatarSizeXLarge,
+        },
+
+        avatarInnerText: {
+            color: theme.textLight,
+            fontSize: variables.fontSizeSmall,
+            lineHeight: undefined,
+            marginLeft: -3,
+            textAlign: 'center',
+        },
+
+        avatarInnerTextSmall: {
+            color: theme.textLight,
+            fontSize: variables.fontSizeExtraSmall,
+            lineHeight: undefined,
+            marginLeft: -2,
+            textAlign: 'center',
+        },
+
+        emptyAvatar: {
+            height: variables.avatarSizeNormal,
+            width: variables.avatarSizeNormal,
+        },
+
+        emptyAvatarSmallNormal: {
+            height: variables.avatarSizeSmallNormal,
+            width: variables.avatarSizeSmallNormal,
+        },
+
+        emptyAvatarSmall: {
+            height: variables.avatarSizeSmall,
+            width: variables.avatarSizeSmall,
+        },
+
+        emptyAvatarSmaller: {
+            height: variables.avatarSizeSmaller,
+            width: variables.avatarSizeSmaller,
+        },
+
+        emptyAvatarMedium: {
+            height: variables.avatarSizeMedium,
+            width: variables.avatarSizeMedium,
+        },
+
+        emptyAvatarLarge: {
+            height: variables.avatarSizeLarge,
+            width: variables.avatarSizeLarge,
+        },
+
+        emptyAvatarMargin: {
+            marginRight: variables.avatarChatSpacing,
+        },
+
+        emptyAvatarMarginChat: {
+            marginRight: variables.avatarChatSpacing - 12,
+        },
+
+        emptyAvatarMarginSmall: {
+            marginRight: variables.avatarChatSpacing - 4,
+        },
+
+        emptyAvatarMarginSmaller: {
+            marginRight: variables.avatarChatSpacing - 4,
+        },
+
+        borderTop: {
+            borderTopWidth: variables.borderTopWidth,
+            borderColor: theme.border,
+        },
+
+        borderTopRounded: {
+            borderTopWidth: 1,
+            borderColor: theme.border,
+            borderTopLeftRadius: variables.componentBorderRadiusNormal,
+            borderTopRightRadius: variables.componentBorderRadiusNormal,
+        },
+
+        borderBottomRounded: {
+            borderBottomWidth: 1,
+            borderColor: theme.border,
+            borderBottomLeftRadius: variables.componentBorderRadiusNormal,
+            borderBottomRightRadius: variables.componentBorderRadiusNormal,
+        },
+
+        borderBottom: {
+            borderBottomWidth: 1,
+            borderColor: theme.border,
+        },
+
+        borderNone: {
+            borderWidth: 0,
+            borderBottomWidth: 0,
+        },
+
+        borderRight: {
+            borderRightWidth: 1,
+            borderColor: theme.border,
+        },
+
+        borderLeft: {
+            borderLeftWidth: 1,
+            borderColor: theme.border,
+        },
+
+        pointerEventsNone,
+
+        pointerEventsAuto,
+
+        headerBar: {
+            overflow: 'hidden',
+            justifyContent: 'center',
+            display: 'flex',
+            paddingLeft: 20,
+            height: variables.contentHeaderHeight,
+            width: '100%',
+        },
+
+        imageViewContainer: {
+            width: '100%',
+            height: '100%',
+            alignItems: 'center',
+            justifyContent: 'center',
+        },
+
+        imageModalPDF: {
+            flex: 1,
+            backgroundColor: theme.modalBackground,
+        },
+
+        PDFView: {
+            // `display: grid` is not supported in native platforms!
+            // It's being used on Web/Desktop only to vertically center short PDFs,
+            // while preventing the overflow of the top of long PDF files.
+            ...display.dGrid,
+            backgroundColor: theme.modalBackground,
+            width: '100%',
+            height: '100%',
+            justifyContent: 'center',
+            overflow: 'hidden',
+            alignItems: 'center',
+        },
+
+        PDFViewList: {
+            overflowX: 'hidden',
+            // There properties disable "focus" effect on list
+            boxShadow: 'none',
+            outline: 'none',
+        },
+
+        getPDFPasswordFormStyle: (isSmallScreenWidth: boolean) =>
+            ({
+                width: isSmallScreenWidth ? '100%' : 350,
+                ...(isSmallScreenWidth && flex.flex1),
+            } satisfies ViewStyle),
+
+        centeredModalStyles: (isSmallScreenWidth: boolean, isFullScreenWhenSmall: boolean) =>
+            ({
+                borderWidth: isSmallScreenWidth && !isFullScreenWhenSmall ? 1 : 0,
+                marginHorizontal: isSmallScreenWidth ? 0 : 20,
+            } satisfies ViewStyle),
+
+        imageModalImageCenterContainer: {
+            alignItems: 'center',
+            flex: 1,
+            justifyContent: 'center',
+            width: '100%',
+        },
+
+        defaultAttachmentView: {
+            backgroundColor: theme.sidebar,
+            borderRadius: variables.componentBorderRadiusNormal,
+            borderWidth: 1,
+            borderColor: theme.border,
+            flexDirection: 'row',
+            padding: 20,
+            alignItems: 'center',
+        },
+
+        notFoundTextHeader: {
+            ...headlineFont,
+            color: theme.heading,
+            fontSize: variables.fontSizeXLarge,
+            lineHeight: variables.lineHeightXXLarge,
+            marginTop: 20,
+            marginBottom: 8,
+            textAlign: 'center',
+        },
+
+        blockingViewContainer: {
+            paddingBottom: variables.contentHeaderHeight,
+        },
+
+        defaultModalContainer: {
+            backgroundColor: theme.componentBG,
+            borderColor: theme.transparent,
+        },
+
+        reportActionContextMenuMiniButton: {
+            ...spacing.p1,
+            ...spacing.mv1,
+            ...spacing.mh1,
+            ...{borderRadius: variables.buttonBorderRadius},
+        },
+
+        reportActionSystemMessageContainer: {
+            marginLeft: 42,
+        },
+
+        reportDetailsTitleContainer: {
+            ...display.dFlex,
+            ...flex.flexColumn,
+            ...flex.alignItemsCenter,
+            paddingHorizontal: 20,
+            paddingBottom: 20,
+        },
+
+        reportDetailsRoomInfo: {
+            ...flex.flex1,
+            ...display.dFlex,
+            ...flex.flexColumn,
+            ...flex.alignItemsCenter,
+        },
+
+        reportSettingsVisibilityText: {
+            textTransform: 'capitalize',
+        },
+
+        settingsPageBackground: {
+            flexDirection: 'column',
+            width: '100%',
+            flexGrow: 1,
+        },
+
+        settingsPageBody: {
+            width: '100%',
+            justifyContent: 'space-around',
+        },
+
+        twoFactorAuthSection: {
+            backgroundColor: theme.appBG,
+            padding: 0,
+        },
+
+        twoFactorAuthCodesBox: ({isExtraSmallScreenWidth, isSmallScreenWidth}: TwoFactorAuthCodesBoxParams) => {
+            let paddingHorizontal = spacing.ph9;
+
+            if (isSmallScreenWidth) {
+                paddingHorizontal = spacing.ph4;
+            }
+
+            if (isExtraSmallScreenWidth) {
+                paddingHorizontal = spacing.ph2;
+            }
+
+            return {
+                alignItems: 'center',
+                justifyContent: 'center',
+                backgroundColor: theme.highlightBG,
+                paddingVertical: 28,
+                borderRadius: 16,
+                marginTop: 32,
+                ...paddingHorizontal,
+            } satisfies ViewStyle;
+        },
+
+        twoFactorLoadingContainer: {
+            alignItems: 'center',
+            justifyContent: 'center',
+            height: 210,
+        },
+
+        twoFactorAuthCodesContainer: {
+            alignItems: 'center',
+            justifyContent: 'center',
+            flexDirection: 'row',
+            flexWrap: 'wrap',
+            gap: 12,
+        },
+
+        twoFactorAuthCode: {
+            fontFamily: fontFamily.MONOSPACE,
+            width: 112,
+            textAlign: 'center',
+        },
+
+        twoFactorAuthCodesButtonsContainer: {
+            flexDirection: 'row',
+            justifyContent: 'center',
+            gap: 12,
+            marginTop: 20,
+            flexWrap: 'wrap',
+        },
+
+        twoFactorAuthCodesButton: {
+            minWidth: 112,
+        },
+
+        twoFactorAuthCopyCodeButton: {
+            minWidth: 110,
+        },
+
+        anonymousRoomFooter: (isSmallSizeLayout: boolean) =>
+            ({
+                flexDirection: isSmallSizeLayout ? 'column' : 'row',
+                ...(!isSmallSizeLayout && {
+                    alignItems: 'center',
+                    justifyContent: 'space-between',
+                }),
+                padding: 20,
+                backgroundColor: theme.cardBG,
+                borderRadius: variables.componentBorderRadiusLarge,
+                overflow: 'hidden',
+            } satisfies ViewStyle & TextStyle),
+        anonymousRoomFooterWordmarkAndLogoContainer: (isSmallSizeLayout: boolean) =>
+            ({
+                flexDirection: 'row',
+                alignItems: 'center',
+                ...(isSmallSizeLayout && {
+                    justifyContent: 'space-between',
+                    marginTop: 16,
+                }),
+            } satisfies ViewStyle),
+        anonymousRoomFooterLogo: {
+            width: 88,
+            marginLeft: 0,
+            height: 20,
+        },
+        anonymousRoomFooterLogoTaglineText: {
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeMedium,
+            color: theme.textLight,
+        },
+        signInButtonAvatar: {
+            width: 80,
+        },
+
+        anonymousRoomFooterSignInButton: {
+            width: 110,
+        },
+
+        roomHeaderAvatarSize: {
+            height: variables.componentSizeLarge,
+            width: variables.componentSizeLarge,
+        },
+
+        roomHeaderAvatar: {
+            backgroundColor: theme.appBG,
+            borderRadius: 100,
+            borderColor: theme.componentBG,
+            borderWidth: 4,
+        },
+
+        roomHeaderAvatarOverlay: {
+            position: 'absolute',
+            top: 0,
+            right: 0,
+            bottom: 0,
+            left: 0,
+            backgroundColor: theme.overlay,
+            opacity: variables.overlayOpacity,
+            borderRadius: 88,
+        },
+
+        rootNavigatorContainerStyles: (isSmallScreenWidth: boolean) => ({marginLeft: isSmallScreenWidth ? 0 : variables.sideBarWidth, flex: 1} satisfies ViewStyle),
+        RHPNavigatorContainerNavigatorContainerStyles: (isSmallScreenWidth: boolean) => ({marginLeft: isSmallScreenWidth ? 0 : variables.sideBarWidth, flex: 1} satisfies ViewStyle),
+
+        avatarInnerTextChat: {
+            color: theme.textLight,
+            fontSize: variables.fontSizeXLarge,
+            fontFamily: fontFamily.EXP_NEW_KANSAS_MEDIUM,
+            textAlign: 'center',
+            fontWeight: 'normal',
+            position: 'absolute',
+            width: 88,
+            left: -16,
+        },
+
+        pageWrapper: {
+            width: '100%',
+            alignItems: 'center',
+            padding: 20,
+        },
+
+        avatarSectionWrapper: {
+            width: '100%',
+            alignItems: 'center',
+            paddingHorizontal: 20,
+            paddingBottom: 20,
+        },
+
+        avatarSectionWrapperSkeleton: {
+            width: '100%',
+            paddingHorizontal: 20,
+            paddingBottom: 20,
+        },
+
+        selectCircle: {
+            width: variables.componentSizeSmall,
+            height: variables.componentSizeSmall,
+            borderColor: theme.border,
+            borderWidth: 1,
+            borderRadius: variables.componentSizeSmall / 2,
+            justifyContent: 'center',
+            alignItems: 'center',
+            backgroundColor: theme.componentBG,
+            marginLeft: 8,
+        },
+
+        unreadIndicatorContainer: {
+            position: 'absolute',
+            top: -10,
+            left: 0,
+            width: '100%',
+            height: 20,
+            paddingHorizontal: 20,
+            flexDirection: 'row',
+            alignItems: 'center',
+            zIndex: 1,
+            ...cursor.cursorDefault,
+        },
+
+        unreadIndicatorLine: {
+            height: 1,
+            backgroundColor: theme.unreadIndicator,
+            flexGrow: 1,
+            marginRight: 8,
+            opacity: 0.5,
+        },
+
+        threadDividerLine: {
+            height: 1,
+            backgroundColor: theme.border,
+            flexGrow: 1,
+            marginHorizontal: 20,
+        },
+
+        unreadIndicatorText: {
+            color: theme.unreadIndicator,
+            fontFamily: fontFamily.EXP_NEUE_BOLD,
+            fontSize: variables.fontSizeSmall,
+            fontWeight: fontWeightBold,
+            textTransform: 'capitalize',
+        },
+
+        flipUpsideDown: {
+            transform: [{rotate: '180deg'}],
+        },
+
+        navigationScreenCardStyle: {
+            backgroundColor: theme.appBG,
+            height: '100%',
+        },
+
+        invisible: {
+            position: 'absolute',
+            opacity: 0,
+        },
+
+        invisiblePopover: {
+            position: 'absolute',
+            opacity: 0,
+            left: -9999,
+        },
+
+        containerWithSpaceBetween: {
+            justifyContent: 'space-between',
+            width: '100%',
+            flex: 1,
+        },
+
+        detailsPageSectionContainer: {
+            alignSelf: 'flex-start',
+        },
+
+        attachmentCarouselContainer: {
+            height: '100%',
+            width: '100%',
+            display: 'flex',
+            justifyContent: 'center',
+            ...cursor.cursorUnset,
+        },
+
+        attachmentArrow: {
+            zIndex: 23,
+            position: 'absolute',
+        },
+
+        attachmentRevealButtonContainer: {
+            flex: 1,
+            alignItems: 'center',
+            justifyContent: 'center',
+            ...spacing.ph4,
+        },
+
+        arrowIcon: {
+            height: 40,
+            width: 40,
+            alignItems: 'center',
+            paddingHorizontal: 0,
+            paddingTop: 0,
+            paddingBottom: 0,
+        },
+
+        switchTrack: {
+            width: 50,
+            height: 28,
+            justifyContent: 'center',
+            borderRadius: 20,
+            padding: 15,
+            backgroundColor: theme.success,
+        },
+
+        switchInactive: {
+            backgroundColor: theme.border,
+        },
+
+        switchThumb: {
+            width: 22,
+            height: 22,
+            borderRadius: 11,
+            position: 'absolute',
+            left: 4,
+            backgroundColor: theme.appBG,
+        },
+
+        switchThumbTransformation: (translateX: AnimatableNumericValue) =>
+            ({
+                transform: [{translateX}],
+            } satisfies ViewStyle),
+
+        radioButtonContainer: {
+            backgroundColor: theme.componentBG,
+            borderRadius: 10,
+            height: 20,
+            width: 20,
+            borderColor: theme.icon,
+            borderWidth: 1,
+            justifyContent: 'center',
+            alignItems: 'center',
+        },
+
+        checkedContainer: {
+            backgroundColor: theme.checkBox,
+        },
+
+        magicCodeInputContainer: {
+            flexDirection: 'row',
+            justifyContent: 'space-between',
+            minHeight: variables.inputHeight,
+        },
+
+        magicCodeInput: {
+            fontSize: variables.fontSizeXLarge,
+            color: theme.heading,
+            lineHeight: variables.inputHeight,
+        },
+
+        // Manually style transparent, in iOS Safari, an input in a container with its opacity set to
+        // 0 (completely transparent) cannot handle user interaction, hence the Paste option is never shown
+        inputTransparent: {
+            color: 'transparent',
+            // These properties are available in browser only
+            ...(Browser.getBrowser()
+                ? {
+                      caretColor: 'transparent',
+                      WebkitTextFillColor: 'transparent',
+                      // After setting the input text color to transparent, it acquires the background-color.
+                      // However, it is not possible to override the background-color directly as explained in this resource: https://developer.mozilla.org/en-US/docs/Web/CSS/:autofill
+                      // Therefore, the transition effect needs to be delayed.
+                      transitionDelay: '99999s',
+                      transitionProperty: 'background-color',
+                  }
+                : {}),
+        },
+
+        iouAmountText: {
+            ...headlineFont,
+            fontSize: variables.iouAmountTextSize,
+            color: theme.heading,
+            lineHeight: variables.inputHeight,
+        },
+
+        iouAmountTextInput: addOutlineWidth(
+            {
+                ...headlineFont,
+                fontSize: variables.iouAmountTextSize,
+                color: theme.heading,
+                padding: 0,
+                lineHeight: undefined,
+            },
+            0,
+        ),
+
+        moneyRequestConfirmationAmount: {
+            ...headlineFont,
+            fontSize: variables.fontSizeh1,
+        },
+
+        moneyRequestMenuItem: {
+            flexDirection: 'row',
+            borderRadius: 0,
+            justifyContent: 'space-between',
+            width: '100%',
+            paddingHorizontal: 20,
+            paddingVertical: 12,
+        },
+
+        requestPreviewBox: {
+            marginTop: 12,
+            maxWidth: variables.reportPreviewMaxWidth,
+        },
+
+        moneyRequestPreviewBox: {
+            backgroundColor: theme.cardBG,
+            borderRadius: variables.componentBorderRadiusLarge,
+            maxWidth: variables.reportPreviewMaxWidth,
+            width: '100%',
+        },
+
+        moneyRequestPreviewBoxText: {
+            padding: 16,
+        },
+
+        amountSplitPadding: {
+            paddingTop: 2,
+        },
+
+        moneyRequestPreviewBoxLoading: {
+            // When a new IOU request arrives it is very briefly in a loading state, so set the minimum height of the container to 94 to match the rendered height after loading.
+            // Otherwise, the IOU request pay button will not be fully visible and the user will have to scroll up to reveal the entire IOU request container.
+            // See https://github.com/Expensify/App/issues/10283.
+            minHeight: 94,
+            width: '100%',
+        },
+
+        moneyRequestPreviewBoxAvatar: {
+            marginRight: -10,
+            marginBottom: 0,
+        },
+
+        moneyRequestPreviewAmount: {
+            ...headlineFont,
+            ...whiteSpace.preWrap,
+            color: theme.heading,
+        },
+
+        defaultCheckmarkWrapper: {
+            marginLeft: 8,
+            alignSelf: 'center',
+        },
+
+        codeWordWrapper: {
+            ...codeStyles.codeWordWrapper,
+        },
+
+        codeWordStyle: {
+            borderLeftWidth: 0,
+            borderRightWidth: 0,
+            borderTopLeftRadius: 0,
+            borderBottomLeftRadius: 0,
+            borderTopRightRadius: 0,
+            borderBottomRightRadius: 0,
+            paddingLeft: 0,
+            paddingRight: 0,
+            justifyContent: 'center',
+            ...codeStyles.codeWordStyle,
+        },
+
+        codeFirstWordStyle: {
+            borderLeftWidth: 1,
+            borderTopLeftRadius: 4,
+            borderBottomLeftRadius: 4,
+            paddingLeft: 5,
+        },
+
+        codeLastWordStyle: {
+            borderRightWidth: 1,
+            borderTopRightRadius: 4,
+            borderBottomRightRadius: 4,
+            paddingRight: 5,
+        },
+
+        fullScreenLoading: {
+            backgroundColor: theme.componentBG,
+            opacity: 0.8,
+            justifyContent: 'center',
+            alignItems: 'center',
+            zIndex: 10,
+        },
+
+        reimbursementAccountFullScreenLoading: {
+            backgroundColor: theme.componentBG,
+            opacity: 0.8,
+            justifyContent: 'flex-start',
+            alignItems: 'center',
+            zIndex: 10,
+        },
+
+        hiddenElementOutsideOfWindow: {
+            position: 'absolute',
+            top: -10000,
+            left: 0,
+            opacity: 0,
+        },
+
+        growlNotificationWrapper: {
+            zIndex: 2,
+        },
+
+        growlNotificationContainer: {
+            flex: 1,
+            justifyContent: 'flex-start',
+            position: 'absolute',
+            width: '100%',
+            top: 20,
+            ...spacing.pl5,
+            ...spacing.pr5,
+        },
+
+        growlNotificationDesktopContainer: {
+            maxWidth: variables.sideBarWidth,
+            right: 0,
+            ...positioning.pFixed,
+        },
+
+        growlNotificationTranslateY: (translateY: AnimatableNumericValue) =>
+            ({
+                transform: [{translateY}],
+            } satisfies ViewStyle),
+
+        makeSlideInTranslation: (translationType: Translation, fromValue: number) =>
+            ({
+                from: {
+                    [translationType]: fromValue,
+                },
+                to: {
+                    [translationType]: 0,
+                },
+            } satisfies CustomAnimation),
+
+        growlNotificationBox: {
+            backgroundColor: theme.inverse,
+            borderRadius: variables.componentBorderRadiusNormal,
+            alignItems: 'center',
+            flexDirection: 'row',
+            justifyContent: 'space-between',
+            shadowColor: theme.shadow,
+            ...spacing.p5,
+        },
+
+        growlNotificationText: {
+            fontSize: variables.fontSizeNormal,
+            fontFamily: fontFamily.EXP_NEUE,
+            width: '90%',
+            lineHeight: variables.fontSizeNormalHeight,
+            color: theme.textReversed,
+            ...spacing.ml4,
+        },
+
+        blockquote: {
+            borderLeftColor: theme.border,
+            borderLeftWidth: 4,
+            paddingLeft: 12,
+            marginVertical: 4,
+        },
+
+        noSelect: {
+            boxShadow: 'none',
+            outlineStyle: 'none',
+        },
+
+        cardStyleNavigator: {
+            overflow: 'hidden',
+            height: '100%',
+        },
+
+        smallEditIcon: {
+            alignItems: 'center',
+            backgroundColor: theme.buttonHoveredBG,
+            borderColor: theme.textReversed,
+            borderRadius: 14,
+            borderWidth: 3,
+            color: theme.textReversed,
+            height: 28,
+            width: 28,
+            justifyContent: 'center',
+        },
+
+        smallAvatarEditIcon: {
+            position: 'absolute',
+            right: -4,
+            bottom: -4,
+        },
+
+        autoGrowHeightMultilineInput: {
+            maxHeight: 115,
+        },
+
+        peopleRow: {
+            width: '100%',
+            flexDirection: 'row',
+            justifyContent: 'space-between',
+            alignItems: 'center',
+            ...spacing.ph5,
+        },
+
+        peopleRowBorderBottom: {
+            borderColor: theme.border,
+            borderBottomWidth: 1,
+            ...spacing.pb2,
+        },
+
+        peopleBadge: {
+            backgroundColor: theme.icon,
+            ...spacing.ph3,
+        },
+
+        peopleBadgeText: {
+            color: theme.textReversed,
+            fontSize: variables.fontSizeSmall,
+            lineHeight: variables.lineHeightNormal,
+            ...whiteSpace.noWrap,
+        },
+
+        offlineFeedback: {
+            deleted: {
+                textDecorationLine: 'line-through',
+                textDecorationStyle: 'solid',
+            },
+            pending: {
+                opacity: 0.5,
+            },
+            error: {
+                flexDirection: 'row',
+                alignItems: 'center',
+            },
+            container: {
+                ...spacing.pv2,
+            },
+            textContainer: {
+                flexDirection: 'column',
+                flex: 1,
+            },
+            text: {
+                color: theme.textSupporting,
+                textAlignVertical: 'center',
+                fontSize: variables.fontSizeLabel,
+            },
+            errorDot: {
+                marginRight: 12,
+            },
+        },
+
+        dotIndicatorMessage: {
+            display: 'flex',
+            flexDirection: 'row',
+            alignItems: 'center',
+        },
+
+        locationErrorLinkText: {
+            textAlignVertical: 'center',
+            fontSize: variables.fontSizeLabel,
+        },
+
+        sidebarPopover: {
+            width: variables.sideBarWidth - 68,
+        },
+
+        cardOverlay: {
+            backgroundColor: theme.overlay,
+            position: 'absolute',
+            top: 0,
+            left: 0,
+            width: '100%',
+            height: '100%',
+            opacity: variables.overlayOpacity,
+        },
+
+        shortTermsBorder: {
+            borderWidth: 1,
+            borderColor: theme.border,
+        },
+
+        shortTermsHorizontalRule: {
+            borderBottomWidth: 1,
+            borderColor: theme.border,
+            ...spacing.mh3,
+        },
+
+        shortTermsLargeHorizontalRule: {
+            borderWidth: 1,
+            borderColor: theme.border,
+            ...spacing.mh3,
+        },
+
+        shortTermsRow: {
+            flexDirection: 'row',
+            padding: 12,
+        },
+
+        termsCenterRight: {
+            marginTop: 'auto',
+            marginBottom: 'auto',
+        },
+
+        shortTermsBoldHeadingSection: {
+            paddingRight: 12,
+            paddingLeft: 12,
+            marginTop: 12,
+        },
+
+        shortTermsHeadline: {
+            ...headlineFont,
+            ...whiteSpace.preWrap,
+            color: theme.heading,
+            fontSize: variables.fontSizeXXXLarge,
+            lineHeight: variables.lineHeightXXXLarge,
+        },
+
+        longTermsRow: {
+            flexDirection: 'row',
+            marginTop: 20,
+        },
+
+        collapsibleSectionBorder: {
+            borderBottomWidth: 2,
+            borderBottomColor: theme.border,
+        },
+
+        communicationsLinkHeight: {
+            height: variables.communicationsLinkHeight,
+        },
+
+        floatingMessageCounterWrapper: {
+            position: 'absolute',
+            left: '50%',
+            top: 0,
+            zIndex: 100,
+            ...visibility.hidden,
+        },
+
+        floatingMessageCounterWrapperAndroid: {
+            left: 0,
+            width: '100%',
+            alignItems: 'center',
+            position: 'absolute',
+            top: 0,
+            zIndex: 100,
+            ...visibility.hidden,
+        },
+
+        floatingMessageCounterSubWrapperAndroid: {
+            left: '50%',
+            width: 'auto',
+        },
+
+        floatingMessageCounter: {
+            left: '-50%',
+            ...visibility.visible,
+        },
+
+        floatingMessageCounterTransformation: (translateY: AnimatableNumericValue) =>
+            ({
+                transform: [{translateY}],
+            } satisfies ViewStyle),
+
+        confirmationAnimation: {
+            height: 180,
+            width: 180,
+            marginBottom: 20,
+        },
+
+        googleSearchTextInputContainer: {
+            flexDirection: 'column',
+        },
+
+        googleSearchSeparator: {
+            height: 1,
+            backgroundColor: theme.border,
+        },
+
+        googleSearchText: {
+            color: theme.text,
+            fontSize: variables.fontSizeNormal,
+            lineHeight: variables.fontSizeNormalHeight,
+            fontFamily: fontFamily.EXP_NEUE,
+            flex: 1,
+        },
+
+        threeDotsPopoverOffset: (windowWidth: number) =>
+            ({
+                ...getPopOverVerticalOffset(60),
+                horizontal: windowWidth - 60,
+            } satisfies AnchorPosition),
+
+        threeDotsPopoverOffsetNoCloseButton: (windowWidth: number) =>
+            ({
+                ...getPopOverVerticalOffset(60),
+                horizontal: windowWidth - 10,
+            } satisfies AnchorPosition),
+
+        threeDotsPopoverOffsetAttachmentModal: (windowWidth: number) =>
+            ({
+                ...getPopOverVerticalOffset(80),
+                horizontal: windowWidth - 140,
+            } satisfies AnchorPosition),
+
+        iPhoneXSafeArea: {
+            backgroundColor: theme.inverse,
+            flex: 1,
+        },
+
+        transferBalancePayment: {
+            borderWidth: 1,
+            borderRadius: variables.componentBorderRadiusNormal,
+            borderColor: theme.border,
+        },
+
+        transferBalanceSelectedPayment: {
+            borderColor: theme.iconSuccessFill,
+        },
+
+        transferBalanceBalance: {
+            fontSize: 48,
+        },
+
+        imageCropContainer: {
+            overflow: 'hidden',
+            alignItems: 'center',
+            justifyContent: 'center',
+            backgroundColor: theme.imageCropBackgroundColor,
+            ...cursor.cursorMove,
+        },
+
+        sliderKnobTooltipView: {
+            height: variables.sliderKnobSize,
+            width: variables.sliderKnobSize,
+            borderRadius: variables.sliderKnobSize / 2,
+        },
+
+        sliderKnob: {
+            backgroundColor: theme.success,
+            position: 'absolute',
+            height: variables.sliderKnobSize,
+            width: variables.sliderKnobSize,
+            borderRadius: variables.sliderKnobSize / 2,
+            left: -(variables.sliderKnobSize / 2),
+            ...cursor.cursorPointer,
+        },
+
+        sliderBar: {
+            backgroundColor: theme.border,
+            height: variables.sliderBarHeight,
+            borderRadius: variables.sliderBarHeight / 2,
+            alignSelf: 'stretch',
+            justifyContent: 'center',
+        },
+
+        screenCenteredContainer: {
+            flex: 1,
+            justifyContent: 'center',
+            marginBottom: 40,
+            padding: 16,
+        },
+
+        inlineSystemMessage: {
+            color: theme.textSupporting,
+            fontSize: variables.fontSizeLabel,
+            fontFamily: fontFamily.EXP_NEUE,
+            marginLeft: 6,
+        },
+
+        fullScreen: {
+            position: 'absolute',
+            top: 0,
+            left: 0,
+            right: 0,
+            bottom: 0,
+        },
+
+        invisibleOverlay: {
+            backgroundColor: theme.transparent,
+            zIndex: 1000,
+        },
+
+        reportDropOverlay: {
+            backgroundColor: theme.dropUIBG,
+            zIndex: 2,
+        },
+
+        receiptDropOverlay: {
+            backgroundColor: theme.receiptDropUIBG,
+            zIndex: 2,
+        },
+
+        receiptImageWrapper: (receiptImageTopPosition: number) =>
+            ({
+                position: 'absolute',
+                top: receiptImageTopPosition,
+            } satisfies ViewStyle),
+
+        cardSection: {
+            backgroundColor: theme.cardBG,
+            borderRadius: variables.componentBorderRadiusCard,
+            marginBottom: 20,
+            marginHorizontal: 16,
+            padding: 20,
+            width: 'auto',
+            textAlign: 'left',
+        },
+
+        cardSectionTitle: {
+            lineHeight: variables.lineHeightXXLarge,
+        },
+
+        cardMenuItem: {
+            paddingLeft: 8,
+            paddingRight: 0,
+            borderRadius: variables.buttonBorderRadius,
+            height: variables.componentSizeLarge,
+            alignItems: 'center',
+        },
+
+        transferBalance: {
+            paddingLeft: 20,
+            paddingRight: 20,
+            borderRadius: 0,
+            height: 64,
+            alignItems: 'center',
+        },
+
+        paymentMethod: {
+            paddingHorizontal: 20,
+            height: 64,
+        },
+
+        archivedReportFooter: {
+            borderRadius: variables.componentBorderRadius,
+            ...wordBreak.breakWord,
+        },
+
+        deeplinkWrapperContainer: {
+            padding: 20,
+            flex: 1,
+            alignItems: 'center',
+            justifyContent: 'center',
+            backgroundColor: theme.appBG,
+        },
+
+        deeplinkWrapperMessage: {
+            flex: 1,
+            alignItems: 'center',
+            justifyContent: 'center',
+        },
+
+        deeplinkWrapperFooter: {
+            paddingTop: 80,
+            paddingBottom: 45,
+        },
+
+        emojiReactionBubble: {
+            borderRadius: 28,
+            alignItems: 'center',
+            justifyContent: 'center',
+            flexDirection: 'row',
+            alignSelf: 'flex-start',
+        },
+
+        emojiReactionListHeader: {
+            marginTop: 8,
+            paddingBottom: 20,
+            borderBottomColor: theme.border,
+            borderBottomWidth: 1,
+            marginHorizontal: 20,
+        },
+        emojiReactionListHeaderBubble: {
+            paddingVertical: 2,
+            paddingHorizontal: 8,
+            borderRadius: 28,
+            backgroundColor: theme.border,
+            alignItems: 'center',
+            justifyContent: 'center',
+            flexDirection: 'row',
+            alignSelf: 'flex-start',
+            marginRight: 4,
+        },
+
+        reactionListHeaderText: {
+            color: theme.textSupporting,
+            marginLeft: 8,
+            alignSelf: 'center',
+        },
+
+        miniQuickEmojiReactionText: {
+            fontSize: 15,
+            lineHeight: 20,
+            textAlignVertical: 'center',
+        },
+
+        emojiReactionBubbleText: {
+            textAlignVertical: 'center',
+        },
+
+        reactionCounterText: {
+            fontSize: 13,
+            marginLeft: 4,
+            fontWeight: 'bold',
+        },
+
+        fontColorReactionLabel: {
+            color: theme.tooltipSupportingText,
+        },
+
+        reactionEmojiTitle: {
+            fontSize: variables.iconSizeLarge,
+            lineHeight: variables.iconSizeXLarge,
+        },
+
+        textReactionSenders: {
+            color: theme.tooltipPrimaryText,
+            ...wordBreak.breakWord,
+        },
+
+        quickReactionsContainer: {
+            gap: 12,
+            flexDirection: 'row',
+            paddingHorizontal: 25,
+            paddingVertical: 12,
+            justifyContent: 'space-between',
+        },
+
+        reactionListContainer: {
+            maxHeight: variables.listItemHeightNormal * 5.75,
+            ...spacing.pv2,
+        },
+
+        reactionListContainerFixedWidth: {
+            maxWidth: variables.popoverWidth,
+        },
+
+        validateCodeDigits: {
+            color: theme.text,
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeXXLarge,
+            letterSpacing: 4,
+        },
+
+        footerWrapper: {
+            fontSize: variables.fontSizeNormal,
+            paddingTop: 64,
+            maxWidth: 1100, // Match footer across all Expensify platforms
+        },
+
+        footerColumnsContainer: {
+            flex: 1,
+            flexWrap: 'wrap',
+            marginBottom: 40,
+            marginHorizontal: -16,
+        },
+
+        footerTitle: {
+            fontSize: variables.fontSizeLarge,
+            color: theme.success,
+            marginBottom: 16,
+        },
+
+        footerRow: {
+            paddingVertical: 4,
+            marginBottom: 8,
+            color: theme.textLight,
+            fontSize: variables.fontSizeMedium,
+        },
+
+        footerBottomLogo: {
+            marginTop: 40,
+            width: '100%',
+        },
+
+        datePickerRoot: {
+            position: 'relative',
+            zIndex: 99,
+        },
+
+        datePickerPopover: {
+            backgroundColor: theme.appBG,
+            width: '100%',
+            alignSelf: 'center',
+            zIndex: 100,
+            marginTop: 8,
+        },
+
+        loginHeroHeader: {
+            fontFamily: fontFamily.EXP_NEW_KANSAS_MEDIUM,
+            color: theme.success,
+            fontWeight: '500',
+            textAlign: 'center',
+        },
+
+        newKansasLarge: {
+            ...headlineFont,
+            fontSize: variables.fontSizeXLarge,
+            lineHeight: variables.lineHeightXXLarge,
+        },
+
+        eReceiptAmount: {
+            ...headlineFont,
+            fontSize: variables.fontSizeXXXLarge,
+            lineHeight: variables.lineHeightXXXLarge,
+            color: colors.green400,
+        },
+
+        eReceiptAmountLarge: {
+            ...headlineFont,
+            fontSize: variables.fontSizeEReceiptLarge,
+            lineHeight: variables.lineHeightXXLarge,
+            wordBreak: 'break-word',
+            textAlign: 'center',
+        },
+
+        eReceiptCurrency: {
+            ...headlineFont,
+            fontSize: variables.fontSizeXXLarge,
+            lineHeight: variables.lineHeightXXLarge,
+            wordBreak: 'break-all',
+        },
+
+        eReceiptMerchant: {
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeXLarge,
+            lineHeight: variables.lineHeightXXLarge,
+            color: theme.text,
+        },
+
+        eReceiptWaypointTitle: {
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeSmall,
+            lineHeight: variables.lineHeightSmall,
+            color: colors.green400,
+        },
+
+        eReceiptWaypointAddress: {
+            fontFamily: fontFamily.MONOSPACE,
+            fontSize: variables.fontSizeNormal,
+            lineHeight: variables.lineHeightNormal,
+            color: theme.textColorfulBackground,
+        },
+
+        eReceiptGuaranteed: {
+            fontFamily: fontFamily.MONOSPACE,
+            fontSize: variables.fontSizeSmall,
+            lineHeight: variables.lineHeightSmall,
+            color: theme.textColorfulBackground,
+        },
+
+        eReceiptBackground: {
+            ...sizing.w100,
+            borderRadius: 20,
+            position: 'absolute',
+            top: 0,
+            left: 0,
+            height: 540,
+        },
+
+        eReceiptPanel: {
+            ...spacing.p5,
+            ...spacing.pb8,
+            ...spacing.m5,
+            backgroundColor: colors.green800,
+            borderRadius: 20,
+            width: 335,
+        },
+
+        eReceiptBackgroundThumbnail: {
+            ...sizing.w100,
+            position: 'absolute',
+            aspectRatio: 335 / 540,
+            top: 0,
+            minWidth: 217,
+        },
+
+        eReceiptContainer: {
+            flex: 1,
+            width: 335,
+            minHeight: 540,
+            borderRadius: 20,
+            overflow: 'hidden',
+        },
+
+        loginHeroBody: {
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeSignInHeroBody,
+            color: theme.textLight,
+            textAlign: 'center',
+        },
+
+        linkPreviewWrapper: {
+            marginTop: 16,
+            borderLeftWidth: 4,
+            borderLeftColor: theme.border,
+            paddingLeft: 12,
+        },
+
+        linkPreviewImage: {
+            flex: 1,
+            resizeMode: 'contain',
+            borderRadius: 8,
+            marginTop: 8,
+        },
+
+        linkPreviewLogoImage: {
+            height: 16,
+            width: 16,
+        },
+
+        contextMenuItemPopoverMaxWidth: {
+            maxWidth: 375,
+        },
+
+        formSpaceVertical: {
+            height: 20,
+            width: 1,
+        },
+
+        taskCheckbox: {
+            height: 16,
+            width: 16,
+        },
+
+        taskTitleMenuItem: {
+            ...writingDirection.ltr,
+            ...headlineFont,
+            fontSize: variables.fontSizeXLarge,
+            maxWidth: '100%',
+            ...wordBreak.breakWord,
+        },
+
+        taskDescriptionMenuItem: {
+            maxWidth: '100%',
+            ...wordBreak.breakWord,
+        },
+
+        taskTitleDescription: {
+            fontFamily: fontFamily.EXP_NEUE,
+            fontSize: variables.fontSizeLabel,
+            color: theme.textSupporting,
+            lineHeight: variables.lineHeightNormal,
+            ...spacing.mb1,
+        },
+
+        taskMenuItemCheckbox: {
+            height: 27,
+            ...spacing.mr3,
+        },
+
+        reportHorizontalRule: {
+            borderColor: theme.border,
+            ...spacing.mh5,
+        },
+
+        assigneeTextStyle: {
+            fontFamily: fontFamily.EXP_NEUE_BOLD,
+            fontWeight: fontWeightBold,
+            minHeight: variables.avatarSizeSubscript,
+        },
+
+        taskRightIconContainer: {
+            width: variables.componentSizeNormal,
+            marginLeft: 'auto',
+            ...spacing.mt1,
+            ...pointerEventsAuto,
+            ...display.dFlex,
+            ...flex.alignItemsCenter,
+        },
+
+        shareCodePage: {
+            paddingHorizontal: 38.5,
+        },
+
+        shareCodeContainer: {
+            width: '100%',
+            alignItems: 'center',
+            paddingHorizontal: variables.qrShareHorizontalPadding,
+            paddingVertical: 20,
+            borderRadius: 20,
+            overflow: 'hidden',
+            borderColor: theme.borderFocus,
+            borderWidth: 2,
+            backgroundColor: theme.highlightBG,
+        },
+
+        splashScreenHider: {
+            backgroundColor: theme.splashBG,
+            alignItems: 'center',
+            justifyContent: 'center',
+        },
+
+        headerEnvBadge: {
+            marginLeft: 0,
+            marginBottom: 2,
+            height: 12,
+            paddingLeft: 4,
+            paddingRight: 4,
+            alignItems: 'center',
+        },
+
+        headerEnvBadgeText: {
+            fontSize: 7,
+            fontWeight: fontWeightBold,
+            lineHeight: undefined,
+        },
+
+        expensifyQrLogo: {
+            alignSelf: 'stretch',
+            height: 27,
+            marginBottom: 20,
+        },
+
+        qrShareTitle: {
+            marginTop: 15,
+            textAlign: 'center',
+        },
+
+        loginButtonRow: {
+            width: '100%',
+            gap: 12,
+            ...flex.flexRow,
+            ...flex.justifyContentCenter,
+        },
+
+        loginButtonRowSmallScreen: {
+            width: '100%',
+            gap: 12,
+            ...flex.flexRow,
+            ...flex.justifyContentCenter,
+            marginBottom: 10,
+        },
+
+        desktopSignInButtonContainer: {
+            width: 40,
+            height: 40,
+        },
+
+        signInIconButton: {
+            paddingVertical: 2,
+        },
+
+        googleButtonContainer: {
+            colorScheme: 'light',
+            width: 40,
+            height: 40,
+            alignItems: 'center',
+            overflow: 'hidden',
+        },
+
+        googlePillButtonContainer: {
+            colorScheme: 'light',
+            height: 40,
+            width: 219,
+        },
+
+        thirdPartyLoadingContainer: {
+            alignItems: 'center',
+            justifyContent: 'center',
+            height: 450,
+        },
+
+        tabSelectorButton: {
+            height: variables.tabSelectorButtonHeight,
+            padding: variables.tabSelectorButtonPadding,
+            flexDirection: 'row',
+            alignItems: 'center',
+            justifyContent: 'center',
+            borderRadius: variables.buttonBorderRadius,
+        },
+
+        tabSelector: {
+            flexDirection: 'row',
+            paddingHorizontal: 20,
+            paddingBottom: 12,
+        },
+
+        tabText: (isSelected: boolean) =>
+            ({
+                marginLeft: 8,
+                fontFamily: isSelected ? fontFamily.EXP_NEUE_BOLD : fontFamily.EXP_NEUE,
+                fontWeight: isSelected ? fontWeightBold : '400',
+                color: isSelected ? theme.textLight : theme.textSupporting,
+            } satisfies TextStyle),
+
+        tabBackground: (hovered: boolean, isFocused: boolean, background: string) => ({
+            backgroundColor: hovered && !isFocused ? theme.highlightBG : background,
+        }),
+
+        tabOpacity: (hovered: boolean, isFocused: boolean, activeOpacityValue: number, inactiveOpacityValue: number) => ({
+            opacity: hovered && !isFocused ? inactiveOpacityValue : activeOpacityValue,
+        }),
+
+        overscrollSpacer: (backgroundColor: string, height: number) =>
+            ({
+                backgroundColor,
+                height,
+                width: '100%',
+                position: 'absolute',
+                top: -height,
+                left: 0,
+                right: 0,
+            } satisfies ViewStyle),
+
+        dualColorOverscrollSpacer: {
+            position: 'absolute',
+            top: 0,
+            left: 0,
+            width: '100%',
+            height: '100%',
+            zIndex: -1,
+        },
+
+        willChangeTransform: {
+            willChange: 'transform',
+        },
+
+        dropDownButtonCartIconContainerPadding: {
+            paddingRight: 0,
+            paddingLeft: 0,
+        },
+
+        dropDownButtonArrowContain: {
+            marginLeft: 12,
+            marginRight: 14,
+        },
+
+        dropDownButtonCartIconView: {
+            borderTopRightRadius: variables.buttonBorderRadius,
+            borderBottomRightRadius: variables.buttonBorderRadius,
+            ...flex.flexRow,
+            ...flex.alignItemsCenter,
+        },
+
+        emojiPickerButtonDropdown: {
+            justifyContent: 'center',
+            backgroundColor: theme.activeComponentBG,
+            width: 86,
+            height: 52,
+            borderRadius: 26,
+            alignItems: 'center',
+            paddingLeft: 10,
+            paddingRight: 4,
+            marginBottom: 32,
+            alignSelf: 'flex-start',
+        },
+
+        emojiPickerButtonDropdownIcon: {
+            fontSize: 30,
+        },
+
+        moneyRequestImage: {
+            height: 200,
+            borderRadius: 16,
+            margin: 20,
+        },
+
+        reportPreviewBox: {
+            backgroundColor: theme.cardBG,
+            borderRadius: variables.componentBorderRadiusLarge,
+            maxWidth: variables.reportPreviewMaxWidth,
+            width: '100%',
+        },
+
+        reportPreviewBoxHoverBorder: {
+            borderColor: theme.border,
+            backgroundColor: theme.border,
+        },
+
+        reportContainerBorderRadius: {
+            borderRadius: variables.componentBorderRadiusLarge,
+        },
+
+        reportPreviewBoxBody: {
+            padding: 16,
+        },
+
+        reportActionItemImages: {
+            flexDirection: 'row',
+            borderWidth: 4,
+            borderColor: theme.transparent,
+            borderTopLeftRadius: variables.componentBorderRadiusLarge,
+            borderTopRightRadius: variables.componentBorderRadiusLarge,
+            overflow: 'hidden',
+            height: variables.reportActionImagesSingleImageHeight,
+        },
+
+        reportActionItemImage: {
+            flex: 1,
+            width: '100%',
+            height: '100%',
+            display: 'flex',
+            justifyContent: 'center',
+            alignItems: 'center',
+        },
+
+        reportActionItemImageBorder: {
+            borderRightWidth: 4,
+            borderColor: theme.cardBG,
+        },
+
+        reportActionItemImagesMoreContainer: {
+            position: 'absolute',
+            bottom: 0,
+            right: 0,
+            display: 'flex',
+        },
+
+        reportActionItemImagesMore: {
+            borderTopLeftRadius: 12,
+            backgroundColor: theme.border,
+            width: 40,
+            height: 40,
+        },
+
+        reportActionItemImagesMoreHovered: {
+            backgroundColor: theme.cardBG,
+        },
+
+        reportActionItemImagesMoreText: {
+            position: 'absolute',
+            marginLeft: 20,
+            marginTop: 16,
+            color: theme.textSupporting,
+        },
+
+        reportActionItemImagesMoreCornerTriangle: {
+            position: 'absolute',
+            bottom: 0,
+            right: 0,
+            width: 0,
+            height: 0,
+            borderStyle: 'solid',
+            borderWidth: 0,
+            borderBottomWidth: 40,
+            borderLeftWidth: 40,
+            borderColor: 'transparent',
+            borderBottomColor: theme.cardBG,
+        },
+
+        reportActionItemImagesMoreCornerTriangleHighlighted: {
+            borderColor: 'transparent',
+            borderBottomColor: theme.border,
+        },
+
+        moneyRequestHeaderStatusBarBadge: {
+            paddingHorizontal: 8,
+            borderRadius: variables.componentBorderRadiusSmall,
+            height: variables.inputHeightSmall,
+            display: 'flex',
+            justifyContent: 'center',
+            alignItems: 'center',
+            backgroundColor: theme.border,
+            marginRight: 12,
+        },
+
+        staticHeaderImage: {
+            minHeight: 240,
+        },
+
+        emojiPickerButtonDropdownContainer: {
+            flexDirection: 'row',
+            alignItems: 'center',
+        },
+
+        rotate90: {
+            transform: [{rotate: '90deg'}],
+        },
+
+        emojiStatusLHN: {
+            fontSize: 22,
+        },
+        sidebarStatusAvatarContainer: {
+            height: 44,
+            width: 84,
+            backgroundColor: theme.componentBG,
+            flexDirection: 'row',
+            alignItems: 'center',
+            justifyContent: 'space-between',
+            borderRadius: 42,
+            paddingHorizontal: 2,
+            marginVertical: -2,
+            marginRight: -2,
+        },
+        sidebarStatusAvatar: {
+            flex: 1,
+            alignItems: 'center',
+            justifyContent: 'center',
+        },
+
+        moneyRequestViewImage: {
+            ...spacing.mh5,
+            ...spacing.mv3,
+            overflow: 'hidden',
+            borderWidth: 2,
+            borderColor: theme.cardBG,
+            borderRadius: variables.componentBorderRadiusLarge,
+            height: 200,
+            maxWidth: 400,
+        },
+
+        mapViewContainer: {
+            ...flex.flex1,
+            ...spacing.p4,
+            minHeight: 300,
+            maxHeight: 500,
+        },
+
+        mapView: {
+            flex: 1,
+            borderRadius: 16,
+            overflow: 'hidden',
+        },
+
+        mapViewOverlay: {
+            flex: 1,
+            position: 'absolute',
+            left: 0,
+            top: 0,
+            borderRadius: variables.componentBorderRadiusLarge,
+            overflow: 'hidden',
+            backgroundColor: theme.highlightBG,
+            ...sizing.w100,
+            ...sizing.h100,
+        },
+
+        confirmationListMapItem: {
+            ...spacing.mv2,
+            ...spacing.mh5,
+            height: 200,
+        },
+
+        mapDirection: {
+            lineColor: theme.success,
+            lineWidth: 7,
+        },
+
+        mapDirectionLayer: {
+            layout: {'line-join': 'round', 'line-cap': 'round'},
+            paint: {'line-color': theme.success, 'line-width': 7},
+        },
+
+        mapPendingView: {
+            backgroundColor: theme.highlightBG,
+            ...flex.flex1,
+            borderRadius: variables.componentBorderRadiusLarge,
+        },
+        userReportStatusEmoji: {
+            flexShrink: 0,
+            fontSize: variables.fontSizeNormal,
+            marginRight: 4,
+        },
+        draggableTopBar: {
+            height: 30,
+            width: '100%',
+        },
+
+        videoContainer: {
+            ...flex.flex1,
+            ...flex.alignItemsCenter,
+            ...flex.justifyContentCenter,
+            ...objectFit.oFCover,
+        },
+
+        globalNavigation: {
+            width: variables.globalNavigationWidth,
+            backgroundColor: theme.highlightBG,
+        },
+
+        globalNavigationMenuContainer: {
+            marginTop: 13,
+        },
+
+        globalAndSubNavigationContainer: {
+            backgroundColor: theme.highlightBG,
+        },
+
+        globalNavigationSelectionIndicator: (isFocused: boolean) => ({
+            width: 4,
+            height: 52,
+            borderTopRightRadius: variables.componentBorderRadiusRounded,
+            borderBottomRightRadius: variables.componentBorderRadiusRounded,
+            backgroundColor: isFocused ? theme.iconMenu : theme.transparent,
+        }),
+
+        globalNavigationMenuItem: (isFocused: boolean) => (isFocused ? {color: theme.text, fontWeight: fontWeightBold, fontFamily: fontFamily.EXP_NEUE_BOLD} : {color: theme.icon}),
+
+        globalNavigationItemContainer: {
+            width: variables.globalNavigationWidth,
+            height: variables.globalNavigationWidth,
+        },
+
+        walletCard: {
+            borderRadius: variables.componentBorderRadiusLarge,
+            position: 'relative',
+            alignSelf: 'center',
+            overflow: 'hidden',
+        },
+
+        walletCardMenuItem: {
+            color: theme.text,
+            fontSize: variables.fontSizeNormal,
+        },
+
+        walletCardHolder: {
+            position: 'absolute',
+            left: 16,
+            bottom: 16,
+            width: variables.cardNameWidth,
+            color: theme.text,
+            fontSize: variables.fontSizeSmall,
+            lineHeight: variables.lineHeightLarge,
+        },
+
+        walletBalance: {
+            lineHeight: undefined,
+            fontSize: 45,
+            paddingTop: 0,
+            paddingBottom: 0,
+        },
+
+        aspectRatioLottie: (source) => {
+            if (!source.uri && typeof source === 'object' && source.w && source.h) {
+                return {aspectRatio: source.w / source.h};
+            }
+            return {};
+        },
+
+        receiptDropHeaderGap: {
+            backgroundColor: theme.receiptDropUIBG,
+        },
+
+        checkboxWithLabelCheckboxStyle: {
+            marginLeft: -2,
+        },
+    } satisfies Styles);
+
+// For now we need to export the styles function that takes the theme as an argument
+// as something named different than "styles", because a lot of files import the "defaultStyles"
+// as "styles", which causes ESLint to throw an error.
+// TODO: Remove "stylesGenerator" and instead only return "styles" once the app is migrated to theme switching hooks and HOCs and "styles/theme/default.js" is not used anywhere anymore (GH issue: https://github.com/Expensify/App/issues/27337)
+const stylesGenerator = styles;
+const defaultStyles = styles(defaultTheme);
+
+export default defaultStyles;
+export {stylesGenerator};
diff --git a/src/styles/themes/default.js b/src/styles/themes/default.ts
similarity index 96%
rename from src/styles/themes/default.js
rename to src/styles/themes/default.ts
index db4719f5548a..aabe9140bf9d 100644
--- a/src/styles/themes/default.js
+++ b/src/styles/themes/default.ts
@@ -1,7 +1,6 @@
-/* eslint-disable no-unused-vars */
-import colors from '../colors';
 import SCREENS from '../../SCREENS';
-import ROUTES from '../../ROUTES';
+import colors from '../colors';
+import type {ThemeBase} from './types';
 
 const darkTheme = {
     // Figma keys
@@ -82,9 +81,10 @@ const darkTheme = {
     QRLogo: colors.green400,
     starDefaultBG: 'rgb(254, 228, 94)',
     loungeAccessOverlay: colors.blue800,
-    selectionListIndicatorColor: colors.white,
     mapAttributionText: colors.black,
-};
+    PAGE_BACKGROUND_COLORS: {},
+    white: colors.white,
+} satisfies ThemeBase;
 
 darkTheme.PAGE_BACKGROUND_COLORS = {
     [SCREENS.HOME]: darkTheme.sidebar,
diff --git a/src/styles/themes/light.js b/src/styles/themes/light.ts
similarity index 94%
rename from src/styles/themes/light.js
rename to src/styles/themes/light.ts
index 3c80eb589a07..cd3079c3313f 100644
--- a/src/styles/themes/light.js
+++ b/src/styles/themes/light.ts
@@ -1,5 +1,6 @@
-import colors from '../colors';
 import SCREENS from '../../SCREENS';
+import colors from '../colors';
+import type {ThemeDefault} from './types';
 
 const lightTheme = {
     // Figma keys
@@ -60,7 +61,7 @@ const lightTheme = {
     heroCard: colors.blue400,
     uploadPreviewActivityIndicator: colors.lightHighlightBackground,
     dropUIBG: 'rgba(252, 251, 249, 0.92)',
-    dropTransparentOverlay: 'rgba(255,255,255,0)',
+    receiptDropUIBG: 'rgba(3, 212, 124, 0.84)',
     checkBox: colors.green400,
     pickerOptionsTextColor: colors.lightPrimaryText,
     imageCropBackgroundColor: colors.lightIcons,
@@ -81,12 +82,15 @@ const lightTheme = {
     starDefaultBG: 'rgb(254, 228, 94)',
     loungeAccessOverlay: colors.blue800,
     mapAttributionText: colors.black,
-};
+    PAGE_BACKGROUND_COLORS: {},
+    white: colors.white,
+} satisfies ThemeDefault;
 
 lightTheme.PAGE_BACKGROUND_COLORS = {
     [SCREENS.HOME]: lightTheme.sidebar,
     [SCREENS.SAVE_THE_WORLD.ROOT]: colors.tangerine800,
     [SCREENS.SETTINGS.PREFERENCES]: colors.blue500,
+    [SCREENS.SETTINGS.WALLET]: colors.green700,
     [SCREENS.SETTINGS.WORKSPACES]: colors.pink800,
     [SCREENS.SETTINGS.SECURITY]: colors.ice500,
     [SCREENS.SETTINGS.STATUS]: colors.green700,
diff --git a/src/styles/themes/types.ts b/src/styles/themes/types.ts
new file mode 100644
index 000000000000..40b8da361654
--- /dev/null
+++ b/src/styles/themes/types.ts
@@ -0,0 +1,8 @@
+import DeepRecord from '../../types/utils/DeepRecord';
+import defaultTheme from './default';
+
+type ThemeBase = DeepRecord<string, string>;
+
+type ThemeDefault = typeof defaultTheme;
+
+export type {ThemeBase, ThemeDefault};
diff --git a/src/styles/utilities/cursor/types.ts b/src/styles/utilities/cursor/types.ts
index 9ca20c5ae123..e9cfc120b161 100644
--- a/src/styles/utilities/cursor/types.ts
+++ b/src/styles/utilities/cursor/types.ts
@@ -1,4 +1,4 @@
-import {CSSProperties} from 'react';
+import {ViewStyle} from 'react-native';
 
 type CursorStylesKeys =
     | 'cursorDefault'
@@ -13,6 +13,6 @@ type CursorStylesKeys =
     | 'cursorInitial'
     | 'cursorText';
 
-type CursorStyles = Record<CursorStylesKeys, Partial<Pick<CSSProperties, 'cursor'>>>;
+type CursorStyles = Record<CursorStylesKeys, Pick<ViewStyle, 'cursor'>>;
 
 export default CursorStyles;
diff --git a/src/styles/utilities/display.ts b/src/styles/utilities/display.ts
index 868c2bdb0e3b..f14a25d641b1 100644
--- a/src/styles/utilities/display.ts
+++ b/src/styles/utilities/display.ts
@@ -1,4 +1,3 @@
-import {CSSProperties} from 'react';
 import {ViewStyle} from 'react-native';
 
 /**
@@ -20,15 +19,35 @@ export default {
         display: 'none',
     },
 
+    /**
+     * Web-only style.
+     */
     dInline: {
-        display: 'inline',
+        // NOTE: asserting "display" to a valid type, because it isn't possible to augment "display".
+        display: 'inline' as ViewStyle['display'],
     },
 
+    /**
+     * Web-only style.
+     */
     dInlineFlex: {
-        display: 'inline-flex',
+        // NOTE: asserting "display" to a valid type, because it isn't possible to augment "display".
+        display: 'inline-flex' as ViewStyle['display'],
     },
 
+    /**
+     * Web-only style.
+     */
     dBlock: {
-        display: 'block',
+        // NOTE: asserting "display" to a valid type, because it isn't possible to augment "display".
+        display: 'block' as ViewStyle['display'],
     },
-} satisfies Record<string, ViewStyle | CSSProperties>;
+
+    /**
+     * Web-only style.
+     */
+    dGrid: {
+        // NOTE: asserting "display" to a valid type, because it isn't possible to augment "display".
+        display: 'grid' as ViewStyle['display'],
+    },
+} satisfies Record<string, ViewStyle>;
diff --git a/src/styles/utilities/objectFit.ts b/src/styles/utilities/objectFit.ts
new file mode 100644
index 000000000000..9d5e4141d6de
--- /dev/null
+++ b/src/styles/utilities/objectFit.ts
@@ -0,0 +1,17 @@
+import {CSSProperties} from 'react';
+import {ViewStyle} from 'react-native';
+
+export default {
+    oFCover: {
+        objectFit: 'cover',
+    },
+    oFFill: {
+        objectFit: 'fill',
+    },
+    oFContain: {
+        objectFit: 'contain',
+    },
+    oFNone: {
+        objectFit: 'none',
+    },
+} satisfies Record<string, ViewStyle | CSSProperties>;
diff --git a/src/styles/utilities/overflow.ts b/src/styles/utilities/overflow.ts
index 48807283c9b4..9b4fa010af84 100644
--- a/src/styles/utilities/overflow.ts
+++ b/src/styles/utilities/overflow.ts
@@ -1,4 +1,4 @@
-import {CSSProperties} from 'react';
+import {ViewStyle} from 'react-native';
 import overflowAuto from './overflowAuto';
 import overscrollBehaviorContain from './overscrollBehaviorContain';
 
@@ -27,4 +27,4 @@ export default {
     overscrollBehaviorContain,
 
     overflowAuto,
-} satisfies Record<string, CSSProperties>;
+} satisfies Record<string, ViewStyle>;
diff --git a/src/styles/utilities/overflowAuto/index.ts b/src/styles/utilities/overflowAuto/index.ts
index 0eb19068738f..1e7ac8ed8246 100644
--- a/src/styles/utilities/overflowAuto/index.ts
+++ b/src/styles/utilities/overflowAuto/index.ts
@@ -1,7 +1,12 @@
+import {ViewStyle} from 'react-native';
 import OverflowAutoStyles from './types';
 
+/**
+ * Web-only style.
+ */
 const overflowAuto: OverflowAutoStyles = {
-    overflow: 'auto',
+    // NOTE: asserting "overflow" to a valid type, because it isn't possible to augment "overflow".
+    overflow: 'auto' as ViewStyle['overflow'],
 };
 
 export default overflowAuto;
diff --git a/src/styles/utilities/overflowAuto/types.ts b/src/styles/utilities/overflowAuto/types.ts
index faba7c2cbdb8..da7548d49e7b 100644
--- a/src/styles/utilities/overflowAuto/types.ts
+++ b/src/styles/utilities/overflowAuto/types.ts
@@ -1,5 +1,5 @@
-import {CSSProperties} from 'react';
+import {ViewStyle} from 'react-native';
 
-type OverflowAutoStyles = Pick<CSSProperties, 'overflow'>;
+type OverflowAutoStyles = Pick<ViewStyle, 'overflow'>;
 
 export default OverflowAutoStyles;
diff --git a/src/styles/utilities/positioning.ts b/src/styles/utilities/positioning.ts
index 651d2a12f2ea..26e6198a5827 100644
--- a/src/styles/utilities/positioning.ts
+++ b/src/styles/utilities/positioning.ts
@@ -11,6 +11,14 @@ export default {
     pAbsolute: {
         position: 'absolute',
     },
+    /**
+     * Web-only style.
+     */
+    pFixed: {
+        // NOTE: asserting "position" to a valid type, because it isn't possible to augment "position".
+        position: 'fixed' as ViewStyle['position'],
+    },
+
     t0: {
         top: 0,
     },
diff --git a/src/styles/utilities/spacing.ts b/src/styles/utilities/spacing.ts
index f0fbe4b4591a..e2b161ca0d62 100644
--- a/src/styles/utilities/spacing.ts
+++ b/src/styles/utilities/spacing.ts
@@ -171,6 +171,10 @@ export default {
         marginLeft: -32,
     },
 
+    mt0: {
+        marginTop: 0,
+    },
+
     mt1: {
         marginTop: 4,
     },
@@ -195,6 +199,10 @@ export default {
         marginTop: 24,
     },
 
+    mt7: {
+        marginTop: 28,
+    },
+
     mt8: {
         marginTop: 32,
     },
@@ -247,6 +255,10 @@ export default {
         marginBottom: 32,
     },
 
+    mb10: {
+        marginBottom: 40,
+    },
+
     mb15: {
         marginBottom: 60,
     },
@@ -457,6 +469,10 @@ export default {
         paddingTop: 24,
     },
 
+    pt8: {
+        paddingTop: 32,
+    },
+
     pt10: {
         paddingTop: 40,
     },
@@ -493,6 +509,10 @@ export default {
         paddingBottom: 32,
     },
 
+    pb14: {
+        paddingBottom: 56,
+    },
+
     pb20: {
         paddingBottom: 80,
     },
diff --git a/src/styles/utilities/textUnderline/types.ts b/src/styles/utilities/textUnderline/types.ts
index ecc09ed0fe09..f71d2bfdaa9a 100644
--- a/src/styles/utilities/textUnderline/types.ts
+++ b/src/styles/utilities/textUnderline/types.ts
@@ -1,8 +1,8 @@
-import {CSSProperties} from 'react';
+import {TextStyle} from 'react-native';
 
 type TextUnderlineStyles = {
-    textUnderlinePositionUnder: Pick<CSSProperties, 'textUnderlinePosition'>;
-    textDecorationSkipInkNone: Pick<CSSProperties, 'textDecorationSkipInk'>;
+    textUnderlinePositionUnder: Pick<TextStyle, 'textUnderlinePosition'>;
+    textDecorationSkipInkNone: Pick<TextStyle, 'textDecorationSkipInk'>;
 };
 
 export default TextUnderlineStyles;
diff --git a/src/styles/utilities/userSelect/types.ts b/src/styles/utilities/userSelect/types.ts
index 67a8c9c7b9b6..a177bac5a3e7 100644
--- a/src/styles/utilities/userSelect/types.ts
+++ b/src/styles/utilities/userSelect/types.ts
@@ -1,5 +1,5 @@
-import {CSSProperties} from 'react';
+import {TextStyle} from 'react-native';
 
-type UserSelectStyles = Record<'userSelectText' | 'userSelectNone', Partial<Pick<CSSProperties, 'userSelect' | 'WebkitUserSelect'>>>;
+type UserSelectStyles = Record<'userSelectText' | 'userSelectNone', Pick<TextStyle, 'userSelect' | 'WebkitUserSelect'>>;
 
 export default UserSelectStyles;
diff --git a/src/styles/utilities/visibility/types.ts b/src/styles/utilities/visibility/types.ts
index 9dab3d7c752e..64bdbdd2cca6 100644
--- a/src/styles/utilities/visibility/types.ts
+++ b/src/styles/utilities/visibility/types.ts
@@ -1,5 +1,5 @@
-import {CSSProperties} from 'react';
+import {ViewStyle} from 'react-native';
 
-type VisibilityStyles = Record<'visible' | 'hidden', Partial<Pick<CSSProperties, 'visibility'>>>;
+type VisibilityStyles = Record<'visible' | 'hidden', Pick<ViewStyle, 'visibility'>>;
 
 export default VisibilityStyles;
diff --git a/src/styles/utilities/whiteSpace/types.ts b/src/styles/utilities/whiteSpace/types.ts
index c42dc14080b1..b10671f04977 100644
--- a/src/styles/utilities/whiteSpace/types.ts
+++ b/src/styles/utilities/whiteSpace/types.ts
@@ -1,5 +1,5 @@
-import {CSSProperties} from 'react';
+import {TextStyle} from 'react-native';
 
-type WhiteSpaceStyles = Record<'noWrap' | 'preWrap' | 'pre', Partial<Pick<CSSProperties, 'whiteSpace'>>>;
+type WhiteSpaceStyles = Record<'noWrap' | 'preWrap' | 'pre', Pick<TextStyle, 'whiteSpace'>>;
 
 export default WhiteSpaceStyles;
diff --git a/src/styles/utilities/wordBreak/types.ts b/src/styles/utilities/wordBreak/types.ts
index 003a5ca1c869..0ed520ae119d 100644
--- a/src/styles/utilities/wordBreak/types.ts
+++ b/src/styles/utilities/wordBreak/types.ts
@@ -1,5 +1,5 @@
-import {CSSProperties} from 'react';
+import {TextStyle} from 'react-native';
 
-type WordBreakStyles = Record<'breakWord' | 'breakAll', Partial<Pick<CSSProperties, 'wordBreak'>>>;
+type WordBreakStyles = Record<'breakWord' | 'breakAll', Pick<TextStyle, 'wordBreak'>>;
 
 export default WordBreakStyles;
diff --git a/src/styles/variables.ts b/src/styles/variables.ts
index 5dbe573bea3d..e7efcf4052d4 100644
--- a/src/styles/variables.ts
+++ b/src/styles/variables.ts
@@ -23,7 +23,7 @@ export default {
     componentBorderRadiusMedium: 6,
     componentBorderRadiusNormal: 8,
     componentBorderRadiusLarge: 16,
-    componentBorderRadiusCard: 12,
+    componentBorderRadiusCard: 20,
     componentBorderRadiusRounded: 24,
     appModalAppIconSize: 48,
     buttonBorderRadius: 100,
@@ -56,6 +56,7 @@ export default {
     fontSizeXXLarge: 28,
     fontSizeXXXLarge: 32,
     fontSizeNormalHeight: getValueUsingPixelRatio(20, 28),
+    fontSizeEReceiptLarge: 44,
     fontSizeSignInHeroLarge: 48,
     fontSizeSignInHeroMedium: 38,
     fontSizeSignInHeroXSmall: 26,
@@ -145,9 +146,31 @@ export default {
     listItemHeightNormal: 64,
     popoverWidth: 375,
     addPaymentPopoverTopSpacing: 8,
-    addPaymentPopoverRightSpacing: 13,
+    addPaymentPopoverRightSpacing: 23,
     anonymousReportFooterBreakpoint: 650,
     dropDownButtonDividerHeight: 28,
+    addPaymentMethodLeftSpacing: 2,
+    addBankAccountLeftSpacing: 3,
+    eReceiptThumbnailSmallBreakpoint: 110,
+    eReceiptThumbnailMediumBreakpoint: 335,
+    eReceiptThumnailCenterReceiptBreakpoint: 200,
+    eReceiptIconHeight: 100,
+    eReceiptIconWidth: 72,
+    eReceiptMCCHeightWidth: 40,
+    eReceiptIconHeightSmall: 65,
+    eReceiptIconWidthSmall: 46,
+    eReceiptMCCHeightWidthSmall: 26,
+    eReceiptIconHeightMedium: 82,
+    eReceiptIconWidthMedium: 59,
+    eReceiptMCCHeightWidthMedium: 32,
+    eReceiptWordmarkHeight: 19.25,
+    eReceiptWordmarkWidth: 86,
+    eReceiptBGHeight: 540,
+    eReceiptBGHWidth: 335,
+    reportPreviewMaxWidth: 335,
+    reportActionImagesSingleImageHeight: 147,
+    reportActionImagesDoubleImageHeight: 138,
+    reportActionImagesMultipleImageHeight: 110,
 
     // The height of the empty list is 14px (2px for borders and 12px for vertical padding)
     // This is calculated based on the values specified in the 'getGoogleListViewStyle' function of the 'StyleUtils' utility
diff --git a/src/types/modules/pusher.d.ts b/src/types/modules/pusher.d.ts
new file mode 100644
index 000000000000..b54a0508c309
--- /dev/null
+++ b/src/types/modules/pusher.d.ts
@@ -0,0 +1,8 @@
+import Pusher from 'pusher-js/types/src/core/pusher';
+
+declare global {
+    // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
+    interface Window {
+        getPusherInstance: () => Pusher | null;
+    }
+}
diff --git a/src/types/modules/react-native.d.ts b/src/types/modules/react-native.d.ts
index ebe0974db690..0659cc4e4b4a 100644
--- a/src/types/modules/react-native.d.ts
+++ b/src/types/modules/react-native.d.ts
@@ -1,8 +1,343 @@
+/* eslint-disable @typescript-eslint/naming-convention */
+/* eslint-disable @typescript-eslint/no-empty-interface */
 /* eslint-disable @typescript-eslint/consistent-type-definitions */
+import {CSSProperties, FocusEventHandler, KeyboardEventHandler, MouseEventHandler, PointerEventHandler, UIEventHandler, WheelEventHandler} from 'react';
 import 'react-native';
 import {BootSplashModule} from '../../libs/BootSplash/types';
 
 declare module 'react-native' {
+    // <------ REACT NATIVE WEB (0.19.0) ------>
+    // Extracted from react-native-web, packages/react-native-web/src/exports/View/types.js
+    type idRef = string;
+    type idRefList = idRef | idRef[];
+
+    // https://necolas.github.io/react-native-web/docs/accessibility/#accessibility-props-api
+    // Extracted from react-native-web, packages/react-native-web/src/exports/View/types.js
+    interface AccessibilityProps {
+        'aria-activedescendant'?: idRef;
+        'aria-atomic'?: boolean;
+        'aria-autocomplete'?: 'none' | 'list' | 'inline' | 'both';
+        'aria-busy'?: boolean;
+        'aria-checked'?: boolean | 'mixed';
+        'aria-colcount'?: number;
+        'aria-colindex'?: number;
+        'aria-colspan'?: number;
+        'aria-controls'?: idRef;
+        'aria-current'?: boolean | 'page' | 'step' | 'location' | 'date' | 'time';
+        'aria-describedby'?: idRef;
+        'aria-details'?: idRef;
+        'aria-disabled'?: boolean;
+        'aria-errormessage'?: idRef;
+        'aria-expanded'?: boolean;
+        'aria-flowto'?: idRef;
+        'aria-haspopup'?: 'dialog' | 'grid' | 'listbox' | 'menu' | 'tree' | false;
+        'aria-hidden'?: boolean;
+        'aria-invalid'?: boolean;
+        'aria-keyshortcuts'?: string[];
+        'aria-label'?: string;
+        'aria-labelledby'?: idRef;
+        'aria-level'?: number;
+        'aria-live'?: 'assertive' | 'none' | 'polite';
+        'aria-modal'?: boolean;
+        'aria-multiline'?: boolean;
+        'aria-multiselectable'?: boolean;
+        'aria-orientation'?: 'horizontal' | 'vertical';
+        'aria-owns'?: idRef;
+        'aria-placeholder'?: string;
+        'aria-posinset'?: number;
+        'aria-pressed'?: boolean | 'mixed';
+        'aria-readonly'?: boolean;
+        'aria-required'?: boolean;
+        'aria-roledescription'?: string;
+        'aria-rowcount'?: number;
+        'aria-rowindex'?: number;
+        'aria-rowspan'?: number;
+        'aria-selected'?: boolean;
+        'aria-setsize'?: number;
+        'aria-sort'?: 'ascending' | 'descending' | 'none' | 'other';
+        'aria-valuemax'?: number;
+        'aria-valuemin'?: number;
+        'aria-valuenow'?: number;
+        'aria-valuetext'?: string;
+        role?: string;
+
+        // @deprecated
+        accessibilityActiveDescendant?: idRef;
+        accessibilityAtomic?: boolean;
+        accessibilityAutoComplete?: 'none' | 'list' | 'inline' | 'both';
+        accessibilityBusy?: boolean;
+        accessibilityChecked?: boolean | 'mixed';
+        accessibilityColumnCount?: number;
+        accessibilityColumnIndex?: number;
+        accessibilityColumnSpan?: number;
+        accessibilityControls?: idRefList;
+        accessibilityCurrent?: boolean | 'page' | 'step' | 'location' | 'date' | 'time';
+        accessibilityDescribedBy?: idRefList;
+        accessibilityDetails?: idRef;
+        accessibilityDisabled?: boolean;
+        accessibilityErrorMessage?: idRef;
+        accessibilityExpanded?: boolean;
+        accessibilityFlowTo?: idRefList;
+        accessibilityHasPopup?: 'dialog' | 'grid' | 'listbox' | 'menu' | 'tree' | false;
+        accessibilityHidden?: boolean;
+        accessibilityInvalid?: boolean;
+        accessibilityKeyShortcuts?: string[];
+        accessibilityLabel?: string;
+        accessibilityLabelledBy?: idRefList;
+        accessibilityLevel?: number;
+        accessibilityLiveRegion?: 'assertive' | 'none' | 'polite';
+        accessibilityModal?: boolean;
+        accessibilityMultiline?: boolean;
+        accessibilityMultiSelectable?: boolean;
+        accessibilityOrientation?: 'horizontal' | 'vertical';
+        accessibilityOwns?: idRefList;
+        accessibilityPlaceholder?: string;
+        accessibilityPosInSet?: number;
+        accessibilityPressed?: boolean | 'mixed';
+        accessibilityReadOnly?: boolean;
+        accessibilityRequired?: boolean;
+        accessibilityRole?: string;
+        accessibilityRoleDescription?: string;
+        accessibilityRowCount?: number;
+        accessibilityRowIndex?: number;
+        accessibilityRowSpan?: number;
+        accessibilitySelected?: boolean;
+        accessibilitySetSize?: number;
+        accessibilitySort?: 'ascending' | 'descending' | 'none' | 'other';
+        accessibilityValueMax?: number;
+        accessibilityValueMin?: number;
+        accessibilityValueNow?: number;
+        accessibilityValueText?: string;
+    }
+
+    // https://necolas.github.io/react-native-web/docs/interactions/#pointerevent-props-api
+    // Extracted properties from react-native-web, packages/react-native-web/src/exports/View/types.js and packages/react-native-web/src/modules/forwardedProps/index.js
+    // Extracted types from @types/react, index.d.ts
+    interface PointerProps {
+        onAuxClick?: MouseEventHandler;
+        onClick?: MouseEventHandler;
+        onContextMenu?: MouseEventHandler;
+        onGotPointerCapture?: PointerEventHandler;
+        onLostPointerCapture?: PointerEventHandler;
+        onPointerCancel?: PointerEventHandler;
+        onPointerDown?: PointerEventHandler;
+        onPointerEnter?: PointerEventHandler;
+        onPointerMove?: PointerEventHandler;
+        onPointerLeave?: PointerEventHandler;
+        onPointerOut?: PointerEventHandler;
+        onPointerOver?: PointerEventHandler;
+        onPointerUp?: PointerEventHandler;
+        onMouseDown?: MouseEventHandler;
+        onMouseEnter?: MouseEventHandler;
+        onMouseLeave?: MouseEventHandler;
+        onMouseMove?: MouseEventHandler;
+        onMouseOver?: MouseEventHandler;
+        onMouseOut?: MouseEventHandler;
+        onMouseUp?: MouseEventHandler;
+        onScroll?: UIEventHandler;
+        onWheel?: WheelEventHandler;
+    }
+
+    // https://necolas.github.io/react-native-web/docs/interactions/#responderevent-props-api
+    // Extracted from react-native-web, packages/react-native-web/src/modules/useResponderEvents/ResponderTouchHistoryStore.js
+    type TouchRecord = {
+        currentPageX: number;
+        currentPageY: number;
+        currentTimeStamp: number;
+        previousPageX: number;
+        previousPageY: number;
+        previousTimeStamp: number;
+        startPageX: number;
+        startPageY: number;
+        startTimeStamp: number;
+        touchActive: boolean;
+    };
+
+    // https://necolas.github.io/react-native-web/docs/interactions/#responderevent-props-api
+    // Extracted from react-native-web, packages/react-native-web/src/modules/useResponderEvents/ResponderTouchHistoryStore.js
+    type TouchHistory = Readonly<{
+        indexOfSingleActiveTouch: number;
+        mostRecentTimeStamp: number;
+        numberActiveTouches: number;
+        touchBank: TouchRecord[];
+    }>;
+
+    // https://necolas.github.io/react-native-web/docs/interactions/#responderevent-props-api
+    // Extracted from react-native-web, packages/react-native-web/src/modules/useResponderEvents/createResponderEvent.js
+    type ResponderEvent = {
+        bubbles: boolean;
+        cancelable: boolean;
+        currentTarget?: unknown; // changed from "any" to "unknown"
+        defaultPrevented?: boolean;
+        dispatchConfig: {
+            registrationName?: string;
+            phasedRegistrationNames?: {
+                bubbled: string;
+                captured: string;
+            };
+        };
+        eventPhase?: number;
+        isDefaultPrevented: () => boolean;
+        isPropagationStopped: () => boolean;
+        isTrusted?: boolean;
+        preventDefault: () => void;
+        stopPropagation: () => void;
+        nativeEvent: TouchEvent;
+        persist: () => void;
+        target?: unknown; // changed from "any" to "unknown"
+        timeStamp: number;
+        touchHistory: TouchHistory;
+    };
+
+    // https://necolas.github.io/react-native-web/docs/interactions/#responderevent-props-api
+    // Extracted from react-native-web, packages/react-native-web/src/modules/useResponderEvents/ResponderSystem.js
+    interface ResponderProps {
+        // Direct responder events dispatched directly to responder. Do not bubble.
+        onResponderEnd?: (e: ResponderEvent) => void;
+        onResponderGrant?: (e: ResponderEvent) => void | boolean;
+        onResponderMove?: (e: ResponderEvent) => void;
+        onResponderRelease?: (e: ResponderEvent) => void;
+        onResponderReject?: (e: ResponderEvent) => void;
+        onResponderStart?: (e: ResponderEvent) => void;
+        onResponderTerminate?: (e: ResponderEvent) => void;
+        onResponderTerminationRequest?: (e: ResponderEvent) => boolean;
+
+        // On pointer down, should this element become the responder?
+        onStartShouldSetResponder?: (e: ResponderEvent) => boolean;
+        onStartShouldSetResponderCapture?: (e: ResponderEvent) => boolean;
+
+        // On pointer move, should this element become the responder?
+        onMoveShouldSetResponder?: (e: ResponderEvent) => boolean;
+        onMoveShouldSetResponderCapture?: (e: ResponderEvent) => boolean;
+
+        // On scroll, should this element become the responder? Do no bubble
+        onScrollShouldSetResponder?: (e: ResponderEvent) => boolean;
+        onScrollShouldSetResponderCapture?: (e: ResponderEvent) => boolean;
+
+        // On text selection change, should this element become the responder?
+        onSelectionChangeShouldSetResponder?: (e: ResponderEvent) => boolean;
+        onSelectionChangeShouldSetResponderCapture?: (e: ResponderEvent) => boolean;
+    }
+
+    // https://necolas.github.io/react-native-web/docs/interactions/#focusevent-props-api
+    // Extracted properties from react-native-web, packages/react-native-web/src/exports/View/types.js and packages/react-native-web/src/modules/forwardedProps/index.js
+    // Extracted types from @types/react, index.d.ts
+    interface FocusProps {
+        onBlur?: FocusEventHandler;
+        onFocus?: FocusEventHandler;
+    }
+
+    // https://necolas.github.io/react-native-web/docs/interactions/#keyboardevent-props-api
+    // Extracted properties from react-native-web, packages/react-native-web/src/exports/View/types.js and packages/react-native-web/src/modules/forwardedProps/index.js
+    // Extracted types from @types/react, index.d.ts
+    interface KeyboardProps {
+        onKeyDown?: KeyboardEventHandler;
+        onKeyDownCapture?: KeyboardEventHandler;
+        onKeyUp?: KeyboardEventHandler;
+        onKeyUpCapture?: KeyboardEventHandler;
+    }
+
+    /**
+     * Shared props
+     * Extracted from react-native-web, packages/react-native-web/src/exports/View/types.js
+     */
+    interface WebSharedProps extends AccessibilityProps, PointerProps, ResponderProps, FocusProps, KeyboardProps {
+        dataSet?: Record<string, unknown>;
+        href?: string;
+        hrefAttrs?: {
+            download?: boolean;
+            rel?: string;
+            target?: string;
+        };
+        tabIndex?: 0 | -1;
+        lang?: string;
+    }
+
+    /**
+     * View
+     * Extracted from react-native-web, packages/react-native-web/src/exports/View/types.js
+     */
+    interface WebViewProps extends WebSharedProps {
+        dir?: 'ltr' | 'rtl';
+    }
+    interface ViewProps extends WebViewProps {}
+
+    /**
+     * Text
+     * Extracted from react-native-web, packages/react-native-web/src/exports/Text/types.js
+     */
+    interface WebTextProps extends WebSharedProps {
+        dir?: 'auto' | 'ltr' | 'rtl';
+    }
+    interface TextProps extends WebTextProps {}
+
+    /**
+     * TextInput
+     * Extracted from react-native-web, packages/react-native-web/src/exports/TextInput/types.js
+     */
+    interface WebTextInputProps extends WebSharedProps {
+        dir?: 'auto' | 'ltr' | 'rtl';
+        disabled?: boolean;
+        enterKeyHint?: 'enter' | 'done' | 'go' | 'next' | 'previous' | 'search' | 'send';
+        readOnly?: boolean;
+    }
+    interface TextInputProps extends WebTextInputProps {}
+
+    /**
+     * Image
+     * Extracted from react-native-web, packages/react-native-web/src/exports/Image/types.js
+     */
+    interface WebImageProps extends WebSharedProps {
+        dir?: 'ltr' | 'rtl';
+        draggable?: boolean;
+    }
+    interface ImageProps extends WebImageProps {}
+
+    /**
+     * ScrollView
+     * Extracted from react-native-web, packages/react-native-web/src/exports/ScrollView/ScrollViewBase.js
+     */
+    interface WebScrollViewProps extends WebSharedProps {}
+    interface ScrollViewProps extends WebScrollViewProps {}
+
+    /**
+     * Pressable
+     */
+    // https://necolas.github.io/react-native-web/docs/pressable/#interactionstate
+    // Extracted from react-native-web, packages/react-native-web/src/exports/Pressable/index.js
+    interface WebPressableStateCallbackType {
+        readonly focused: boolean;
+        readonly hovered: boolean;
+        readonly pressed: boolean;
+    }
+    interface PressableStateCallbackType extends WebPressableStateCallbackType {}
+
+    // Extracted from react-native-web, packages/react-native-web/src/exports/Pressable/index.js
+    interface WebPressableProps extends WebSharedProps {
+        delayPressIn?: number;
+        delayPressOut?: number;
+        onPressMove?: null | ((event: GestureResponderEvent) => void);
+        onPressEnd?: null | ((event: GestureResponderEvent) => void);
+    }
+    interface PressableProps extends WebPressableProps {}
+
+    /**
+     * Styles
+     */
+    // We extend CSSProperties (alias to "csstype" library) which provides all CSS style properties for Web,
+    // but properties that are already defined on RN won't be overrided / augmented.
+    interface WebStyle extends CSSProperties {
+        // https://necolas.github.io/react-native-web/docs/styling/#non-standard-properties
+        // Exclusive to react-native-web, "pointerEvents" already included on RN
+        animationKeyframes?: string | Record<string, ViewStyle>;
+        writingDirection?: 'auto' | 'ltr' | 'rtl';
+    }
+
+    interface ViewStyle extends WebStyle {}
+    interface TextStyle extends WebStyle {}
+    interface ImageStyle extends WebStyle {}
+    // <------ REACT NATIVE WEB (0.19.0) ------>
+
     interface TextInput {
         // Typescript type declaration is missing in React Native for setting text selection.
         setSelection: (start: number, end: number) => void;
diff --git a/src/types/onyx/BankAccount.ts b/src/types/onyx/BankAccount.ts
index 5d309023e94a..61c7e44f68d7 100644
--- a/src/types/onyx/BankAccount.ts
+++ b/src/types/onyx/BankAccount.ts
@@ -1,3 +1,4 @@
+import {ValueOf} from 'type-fest';
 import CONST from '../../CONST';
 
 type AdditionalData = {
@@ -69,6 +70,10 @@ type BankAccount = {
 
     /** All data related to the bank account */
     accountData?: AccountData;
+
+    /** Action that is waiting to happen on the bank account */
+    pendingAction?: ValueOf<typeof CONST.RED_BRICK_ROAD_PENDING_ACTION>;
 };
 
 export default BankAccount;
+export type {AccountData};
diff --git a/src/types/onyx/PersonalBankAccount.ts b/src/types/onyx/PersonalBankAccount.ts
index 06f505a04196..ea993d7393e8 100644
--- a/src/types/onyx/PersonalBankAccount.ts
+++ b/src/types/onyx/PersonalBankAccount.ts
@@ -1,6 +1,8 @@
+import * as OnyxCommon from './OnyxCommon';
+
 type PersonalBankAccount = {
     /** An error message to display to the user */
-    error?: string;
+    errors?: OnyxCommon.Errors;
 
     /** Whether we should show the view that the bank account was successfully added */
     shouldShowSuccess?: boolean;
@@ -10,6 +12,9 @@ type PersonalBankAccount = {
 
     /** The account ID of the selected bank account from Plaid */
     plaidAccountID?: string;
+
+    /** Any reportID we should redirect to at the end of the flow */
+    exitReportID?: string;
 };
 
 export default PersonalBankAccount;
diff --git a/src/types/onyx/PlaidBankAccount.ts b/src/types/onyx/PlaidBankAccount.ts
index d89e8ac3082d..c7cd7b5d83e4 100644
--- a/src/types/onyx/PlaidBankAccount.ts
+++ b/src/types/onyx/PlaidBankAccount.ts
@@ -19,6 +19,9 @@ type PlaidBankAccount = {
 
     /** Plaid access token, used to then retrieve Assets and Balances */
     plaidAccessToken: string;
+
+    /** Name of the bank */
+    bankName?: string;
 };
 
 export default PlaidBankAccount;
diff --git a/src/types/onyx/Policy.ts b/src/types/onyx/Policy.ts
index 12b4cb92024e..e4d77b150a7c 100644
--- a/src/types/onyx/Policy.ts
+++ b/src/types/onyx/Policy.ts
@@ -18,6 +18,9 @@ type Policy = {
     /** The email of the policy owner */
     owner: string;
 
+    /** The accountID of the policy owner */
+    ownerAccountID: number;
+
     /** The output currency for the policy */
     outputCurrency: string;
 
diff --git a/src/types/onyx/ReimbursementAccount.ts b/src/types/onyx/ReimbursementAccount.ts
index 4f2a05d7f4e1..fc46c9aa3132 100644
--- a/src/types/onyx/ReimbursementAccount.ts
+++ b/src/types/onyx/ReimbursementAccount.ts
@@ -2,12 +2,16 @@ import {ValueOf} from 'type-fest';
 import * as OnyxCommon from './OnyxCommon';
 import CONST from '../../CONST';
 
+type BankAccountStep = ValueOf<typeof CONST.BANK_ACCOUNT.STEP>;
+
+type BankAccountSubStep = ValueOf<typeof CONST.BANK_ACCOUNT.SUBSTEP>;
+
 type ACHData = {
     /** Step of the setup flow that we are on. Determines which view is presented. */
-    currentStep: ValueOf<typeof CONST.BANK_ACCOUNT.STEP>;
+    currentStep: BankAccountStep;
 
     /** Optional subStep we would like the user to start back on */
-    subStep?: ValueOf<typeof CONST.BANK_ACCOUNT.SUBSTEP>;
+    subStep?: BankAccountSubStep;
 
     /** Bank account state */
     state?: string;
@@ -38,7 +42,11 @@ type ReimbursementAccount = {
     /** Any additional error message to show */
     errors?: OnyxCommon.Errors;
 
+    /** Draft step of the setup flow from Onyx */
+    draftStep?: BankAccountStep;
+
     pendingAction?: OnyxCommon.PendingAction;
 };
 
 export default ReimbursementAccount;
+export type {BankAccountStep, BankAccountSubStep};
diff --git a/src/types/onyx/ReimbursementAccountDraft.ts b/src/types/onyx/ReimbursementAccountDraft.ts
index d55c2b5b3567..cab1283943bc 100644
--- a/src/types/onyx/ReimbursementAccountDraft.ts
+++ b/src/types/onyx/ReimbursementAccountDraft.ts
@@ -1,10 +1,19 @@
-type ReimbursementAccountDraft = {
+type OnfidoData = Record<string, unknown>;
+
+type BankAccountStepProps = {
     accountNumber?: string;
     routingNumber?: string;
     acceptTerms?: boolean;
     plaidAccountID?: string;
     plaidMask?: string;
+};
+
+type CompanyStepProps = {
     companyName?: string;
+    addressStreet?: string;
+    addressCity?: string;
+    addressState?: string;
+    addressZipCode?: string;
     companyPhone?: string;
     website?: string;
     companyTaxID?: string;
@@ -12,13 +21,32 @@ type ReimbursementAccountDraft = {
     incorporationDate?: string | Date;
     incorporationState?: string;
     hasNoConnectionToCannabis?: boolean;
+};
+
+type RequestorStepProps = {
+    firstName?: string;
+    lastName?: string;
+    requestorAddressStreet?: string;
+    requestorAddressCity?: string;
+    requestorAddressState?: string;
+    requestorAddressZipCode?: string;
+    dob?: string | Date;
+    ssnLast4?: string;
     isControllingOfficer?: boolean;
     isOnfidoSetupComplete?: boolean;
+    onfidoData?: OnfidoData;
+};
+
+type ACHContractStepProps = {
     ownsMoreThan25Percent?: boolean;
     hasOtherBeneficialOwners?: boolean;
     acceptTermsAndConditions?: boolean;
     certifyTrueInformation?: boolean;
     beneficialOwners?: string[];
+};
+
+type ReimbursementAccountProps = {
+    bankAccountID?: number;
     isSavings?: boolean;
     bankName?: string;
     plaidAccessToken?: string;
@@ -27,4 +55,7 @@ type ReimbursementAccountDraft = {
     amount3?: string;
 };
 
+type ReimbursementAccountDraft = BankAccountStepProps & CompanyStepProps & RequestorStepProps & ACHContractStepProps & ReimbursementAccountProps;
+
 export default ReimbursementAccountDraft;
+export type {ACHContractStepProps, RequestorStepProps, OnfidoData, BankAccountStepProps, CompanyStepProps, ReimbursementAccountProps};
diff --git a/src/types/onyx/ReportAction.ts b/src/types/onyx/ReportAction.ts
index ec505a7e8d07..5cbb02f08722 100644
--- a/src/types/onyx/ReportAction.ts
+++ b/src/types/onyx/ReportAction.ts
@@ -32,6 +32,9 @@ type Message = {
     isEdited: boolean;
 
     isDeletedParentAction: boolean;
+
+    /** Whether the pending transaction was reversed and didn't post to the card */
+    isReversedTransaction?: boolean;
     whisperedTo: number[];
     reactions: Reaction[];
 };
@@ -73,6 +76,7 @@ type ReportActionBase = {
     automatic?: boolean;
     shouldShow?: boolean;
     childReportID?: string;
+    childReportName?: string;
     childType?: string;
     childOldestFourEmails?: string;
     childOldestFourAccountIDs?: string;
diff --git a/src/types/onyx/Request.ts b/src/types/onyx/Request.ts
index 46106c4685ee..836138ca99ba 100644
--- a/src/types/onyx/Request.ts
+++ b/src/types/onyx/Request.ts
@@ -1,7 +1,13 @@
 import {OnyxUpdate} from 'react-native-onyx';
 import Response from './Response';
 
-type Request = {
+type OnyxData = {
+    successData?: OnyxUpdate[];
+    failureData?: OnyxUpdate[];
+    optimisticData?: OnyxUpdate[];
+};
+
+type RequestData = {
     command: string;
     commandName?: string;
     data?: Record<string, unknown>;
@@ -14,4 +20,7 @@ type Request = {
     reject?: (value?: unknown) => void;
 };
 
+type Request = RequestData & OnyxData;
+
 export default Request;
+export type {OnyxData};
diff --git a/src/types/onyx/Transaction.ts b/src/types/onyx/Transaction.ts
index 73c1846ba73c..9da3ef610571 100644
--- a/src/types/onyx/Transaction.ts
+++ b/src/types/onyx/Transaction.ts
@@ -64,7 +64,7 @@ type Transaction = {
     parentTransactionID?: string;
     reimbursable?: boolean;
     /** The CC for this transaction */
-    cardID?: string;
+    cardID?: number;
     /** If the transaction is pending or posted */
     status?: ValueOf<typeof CONST.TRANSACTION.STATUS>;
     /** If an EReceipt should be generated for this transaction */
diff --git a/src/types/utils/DeepRecord.ts b/src/types/utils/DeepRecord.ts
new file mode 100644
index 000000000000..fba14c75d679
--- /dev/null
+++ b/src/types/utils/DeepRecord.ts
@@ -0,0 +1,7 @@
+/**
+ * Represents a deeply nested record. It maps keys to values,
+ * and those values can either be of type `TValue` or further nested `DeepRecord` instances.
+ */
+type DeepRecord<TKey extends string | number | symbol, TValue> = {[key: string]: TValue | DeepRecord<TKey, TValue>};
+
+export default DeepRecord;
diff --git a/tests/actions/IOUTest.js b/tests/actions/IOUTest.js
index 3df3b137bab3..63fd7a0dd78b 100644
--- a/tests/actions/IOUTest.js
+++ b/tests/actions/IOUTest.js
@@ -1638,7 +1638,7 @@ describe('actions/IOU', () => {
 
             expect(resultAction.message).toEqual(REPORT_ACTION.message);
             expect(resultAction.person).toEqual(REPORT_ACTION.person);
-            expect(resultAction.pendingAction).toBeNull();
+            expect(resultAction.pendingAction).toBeUndefined();
 
             await waitForBatchedUpdates();
 
@@ -1647,7 +1647,7 @@ describe('actions/IOU', () => {
 
             // Then check the loading state of our action
             const resultActionAfterUpdate = reportActions[reportActionID];
-            expect(resultActionAfterUpdate.pendingAction).toBeNull();
+            expect(resultActionAfterUpdate.pendingAction).toBeUndefined();
 
             // When we attempt to delete a money request from the IOU report
             fetch.pause();
@@ -1818,7 +1818,7 @@ describe('actions/IOU', () => {
             // Then the report should have 2 actions
             expect(_.size(reportActions)).toBe(2);
             const resultActionAfter = reportActions[reportActionID];
-            expect(resultActionAfter.pendingAction).toBeNull();
+            expect(resultActionAfter.pendingAction).toBeUndefined();
 
             fetch.pause();
             // When deleting money request
@@ -1903,7 +1903,7 @@ describe('actions/IOU', () => {
 
             expect(resultAction.message).toEqual(REPORT_ACTION.message);
             expect(resultAction.person).toEqual(REPORT_ACTION.person);
-            expect(resultAction.pendingAction).toBeNull();
+            expect(resultAction.pendingAction).toBeUndefined();
 
             await waitForBatchedUpdates();
 
@@ -1913,7 +1913,7 @@ describe('actions/IOU', () => {
             let resultActionAfterUpdate = reportActions[reportActionID];
 
             // Verify that our action is no longer in the loading state
-            expect(resultActionAfterUpdate.pendingAction).toBeNull();
+            expect(resultActionAfterUpdate.pendingAction).toBeUndefined();
 
             await waitForBatchedUpdates();
 
@@ -1935,7 +1935,7 @@ describe('actions/IOU', () => {
 
             expect(resultAction.message).toEqual(REPORT_ACTION.message);
             expect(resultAction.person).toEqual(REPORT_ACTION.person);
-            expect(resultAction.pendingAction).toBeNull();
+            expect(resultAction.pendingAction).toBeUndefined();
 
             await waitForBatchedUpdates();
 
@@ -1945,7 +1945,7 @@ describe('actions/IOU', () => {
             resultActionAfterUpdate = reportActions[reportActionID];
 
             // Verify that our action is no longer in the loading state
-            expect(resultActionAfterUpdate.pendingAction).toBeNull();
+            expect(resultActionAfterUpdate.pendingAction).toBeUndefined();
 
             fetch.pause();
             // When we delete the money request
diff --git a/tests/actions/ReportTest.js b/tests/actions/ReportTest.js
index c7ef68547cdc..68a50fe4f130 100644
--- a/tests/actions/ReportTest.js
+++ b/tests/actions/ReportTest.js
@@ -93,7 +93,7 @@ describe('actions/Report', () => {
 
                 expect(resultAction.message).toEqual(REPORT_ACTION.message);
                 expect(resultAction.person).toEqual(REPORT_ACTION.person);
-                expect(resultAction.pendingAction).toBeNull();
+                expect(resultAction.pendingAction).toBeUndefined();
 
                 // We subscribed to the Pusher channel above and now we need to simulate a reportComment action
                 // Pusher event so we can verify that action was handled correctly and merged into the reportActions.
@@ -130,7 +130,7 @@ describe('actions/Report', () => {
                 const resultAction = reportActions[reportActionID];
 
                 // Verify that our action is no longer in the loading state
-                expect(resultAction.pendingAction).toBeNull();
+                expect(resultAction.pendingAction).toBeUndefined();
             });
     });
 
@@ -608,7 +608,7 @@ describe('actions/Report', () => {
                 // Expect the reaction to have null where the users reaction used to be
                 expect(reportActionsReactions).toHaveProperty(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS_REACTIONS}${reportActionID}`);
                 const reportActionReaction = reportActionsReactions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS_REACTIONS}${reportActionID}`];
-                expect(reportActionReaction[EMOJI.name].users[TEST_USER_ACCOUNT_ID]).toBeNull();
+                expect(reportActionReaction[EMOJI.name].users[TEST_USER_ACCOUNT_ID]).toBeUndefined();
             })
             .then(() => {
                 reportAction = _.first(_.values(reportActions));
@@ -650,7 +650,7 @@ describe('actions/Report', () => {
                         // Expect the reaction to have null where the users reaction used to be
                         expect(reportActionsReactions).toHaveProperty(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS_REACTIONS}${reportActionID}`);
                         const reportActionReaction = reportActionsReactions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS_REACTIONS}${reportActionID}`];
-                        expect(reportActionReaction[EMOJI.name].users[TEST_USER_ACCOUNT_ID]).toBeNull();
+                        expect(reportActionReaction[EMOJI.name].users[TEST_USER_ACCOUNT_ID]).toBeUndefined();
                     });
             });
     });
@@ -717,7 +717,7 @@ describe('actions/Report', () => {
                 // Expect the reaction to have null where the users reaction used to be
                 expect(reportActionsReactions).toHaveProperty(`${ONYXKEYS.COLLECTION.REPORT_ACTIONS_REACTIONS}${resultAction.reportActionID}`);
                 const reportActionReaction = reportActionsReactions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS_REACTIONS}${resultAction.reportActionID}`];
-                expect(reportActionReaction[EMOJI.name].users[TEST_USER_ACCOUNT_ID]).toBeNull();
+                expect(reportActionReaction[EMOJI.name].users[TEST_USER_ACCOUNT_ID]).toBeUndefined();
             });
     });
 });
diff --git a/tests/perf-test/GooglePlacesUtils.perf-test.js b/tests/perf-test/GooglePlacesUtils.perf-test.js
new file mode 100644
index 000000000000..92c3e0eb87b7
--- /dev/null
+++ b/tests/perf-test/GooglePlacesUtils.perf-test.js
@@ -0,0 +1,163 @@
+import {measureFunction} from 'reassure';
+import * as GooglePlacesUtils from '../../src/libs/GooglePlacesUtils';
+
+jest.setTimeout(60000);
+
+const addressComponents = [
+    {
+        long_name: 'Bushwick',
+        short_name: 'Bushwick',
+        types: ['neighborhood', 'political'],
+    },
+    {
+        long_name: 'Brooklyn',
+        short_name: 'Brooklyn',
+        types: ['sublocality_level_1', 'sublocality', 'political'],
+    },
+    {
+        long_name: 'New York',
+        short_name: 'NY',
+        types: ['administrative_area_level_1', 'political'],
+    },
+    {
+        long_name: 'United States',
+        short_name: 'US',
+        types: ['country', 'political'],
+    },
+    {
+        long_name: '11206',
+        short_name: '11206',
+        types: ['postal_code'],
+    },
+    {
+        long_name: 'United Kingdom',
+        short_name: 'UK',
+        types: ['country', 'political'],
+    },
+];
+
+const bigObjectToFind = {
+    sublocality: 'long_name',
+    administrative_area_level_1: 'short_name',
+    postal_code: 'long_name',
+    'doesnt-exist': 'long_name',
+    s1ublocality: 'long_name',
+    a1dministrative_area_level_1: 'short_name',
+    p1ostal_code: 'long_name',
+    '1doesnt-exist': 'long_name',
+    s2ublocality: 'long_name',
+    a2dministrative_area_level_1: 'short_name',
+    p2ostal_code: 'long_name',
+    '2doesnt-exist': 'long_name',
+    s3ublocality: 'long_name',
+    a3dministrative_area_level_1: 'short_name',
+    p3ostal_code: 'long_name',
+    '3doesnt-exist': 'long_name',
+    s4ublocality: 'long_name',
+    a4dministrative_area_level_1: 'short_name',
+    p4ostal_code: 'long_name',
+    '4doesnt-exist': 'long_name',
+    s5ublocality: 'long_name',
+    a5dministrative_area_level_1: 'short_name',
+    p5ostal_code: 'long_name',
+    '5doesnt-exist': 'long_name',
+    s6ublocality: 'long_name',
+    a6dministrative_area_level_1: 'short_name',
+    p6ostal_code: 'long_name',
+    '6doesnt-exist': 'long_name',
+    s7ublocality: 'long_name',
+    a7dministrative_area_level_1: 'short_name',
+    p7ostal_code: 'long_name',
+    '7doesnt-exist': 'long_name',
+    s8ublocality: 'long_name',
+    a8dministrative_area_level_1: 'short_name',
+    p8ostal_code: 'long_name',
+    '8doesnt-exist': 'long_name',
+    s9ublocality: 'long_name',
+    a9dministrative_area_level_1: 'short_name',
+    p9ostal_code: 'long_name',
+    '9doesnt-exist': 'long_name',
+    s10ublocality: 'long_name',
+    a10dministrative_area_level_1: 'short_name',
+    p10ostal_code: 'long_name',
+    '10doesnt-exist': 'long_name',
+    s11ublocality: 'long_name',
+    a11dministrative_area_level_1: 'short_name',
+    p11ostal_code: 'long_name',
+    '11doesnt-exist': 'long_name',
+    s12ublocality: 'long_name',
+    a12dministrative_area_level_1: 'short_name',
+    p12ostal_code: 'long_name',
+    '12doesnt-exist': 'long_name',
+    s13ublocality: 'long_name',
+    a13dministrative_area_level_1: 'short_name',
+    p13ostal_code: 'long_name',
+    '13doesnt-exist': 'long_name',
+    s14ublocality: 'long_name',
+    a14dministrative_area_level_1: 'short_name',
+    p14ostal_code: 'long_name',
+    '14doesnt-exist': 'long_name',
+    s15ublocality: 'long_name',
+    a15dministrative_area_level_1: 'short_name',
+    p15ostal_code: 'long_name',
+    '15doesnt-exist': 'long_name',
+    s16ublocality: 'long_name',
+    a16dministrative_area_level_1: 'short_name',
+    p16ostal_code: 'long_name',
+    '16doesnt-exist': 'long_name',
+    s17ublocality: 'long_name',
+    a17dministrative_area_level_1: 'short_name',
+    p17ostal_code: 'long_name',
+    '17doesnt-exist': 'long_name',
+    s18ublocality: 'long_name',
+    a18dministrative_area_level_1: 'short_name',
+    p18ostal_code: 'long_name',
+    '18doesnt-exist': 'long_name',
+    s19ublocality: 'long_name',
+    a19dministrative_area_level_1: 'short_name',
+    p19ostal_code: 'long_name',
+    '19doesnt-exist': 'long_name',
+    s20ublocality: 'long_name',
+    a20dministrative_area_level_1: 'short_name',
+    p20ostal_code: 'long_name',
+    '20doesnt-exist': 'long_name',
+    s21ublocality: 'long_name',
+    a21dministrative_area_level_1: 'short_name',
+    p21ostal_code: 'long_name',
+    '21doesnt-exist': 'long_name',
+    s22ublocality: 'long_name',
+    a22dministrative_area_level_1: 'short_name',
+    p22ostal_code: 'long_name',
+    '22doesnt-exist': 'long_name',
+    s23ublocality: 'long_name',
+    a23dministrative_area_level_1: 'short_name',
+    p23ostal_code: 'long_name',
+    '23doesnt-exist': 'long_name',
+    s24ublocality: 'long_name',
+    a24dministrative_area_level_1: 'short_name',
+    p24ostal_code: 'long_name',
+    '24doesnt-exist': 'long_name',
+    s25ublocality: 'long_name',
+    a25dministrative_area_level_1: 'short_name',
+    p25ostal_code: 'long_name',
+    '25doesnt-exist': 'long_name',
+};
+
+/**
+ * This function will be executed 20 times and the average time will be used on the comparison.
+ * It will fail based on the CI configuration around Reassure:
+ * @see /.github/workflows/reassurePerformanceTests.yml
+ *
+ * Max deviation on the duration is set to 20% at the time of writing.
+ *
+ * More on the measureFunction API:
+ * @see https://callstack.github.io/reassure/docs/api#measurefunction-function
+ */
+test('getAddressComponents on a big dataset', async () => {
+    await measureFunction(
+        () => {
+            GooglePlacesUtils.getAddressComponents(addressComponents, bigObjectToFind);
+        },
+        {runs: 20},
+    );
+});
diff --git a/tests/perf-test/SidebarLinks.perf-test.js b/tests/perf-test/SidebarLinks.perf-test.js
index 1772c20fbf72..7c2d91b3356c 100644
--- a/tests/perf-test/SidebarLinks.perf-test.js
+++ b/tests/perf-test/SidebarLinks.perf-test.js
@@ -9,7 +9,12 @@ import waitForBatchedUpdates from '../utils/waitForBatchedUpdates';
 import wrapOnyxWithWaitForBatchedUpdates from '../utils/wrapOnyxWithWaitForBatchedUpdates';
 import variables from '../../src/styles/variables';
 
-jest.setTimeout(10000);
+/**
+ * Performance tests with Reassure can require big timeouts as all runs
+ * for a test have to be executed within this limit. (default runs=10)
+ * This also includes manual garbage collection between them.
+ */
+jest.setTimeout(60000);
 
 jest.mock('../../src/libs/Permissions');
 jest.mock('../../src/libs/Navigation/Navigation');
diff --git a/tests/unit/GooglePlacesUtilsTest.js b/tests/unit/GooglePlacesUtilsTest.js
index 4805e180eedc..b94068f521ff 100644
--- a/tests/unit/GooglePlacesUtilsTest.js
+++ b/tests/unit/GooglePlacesUtilsTest.js
@@ -15,93 +15,6 @@ const objectWithCountryToFind = {
     country: 'long_name',
 };
 
-const bigObjectToFind = {
-    sublocality: 'long_name',
-    administrative_area_level_1: 'short_name',
-    postal_code: 'long_name',
-    'doesnt-exist': 'long_name',
-    s1ublocality: 'long_name',
-    a1dministrative_area_level_1: 'short_name',
-    p1ostal_code: 'long_name',
-    '1doesnt-exist': 'long_name',
-    s2ublocality: 'long_name',
-    a2dministrative_area_level_1: 'short_name',
-    p2ostal_code: 'long_name',
-    '2doesnt-exist': 'long_name',
-    s3ublocality: 'long_name',
-    a3dministrative_area_level_1: 'short_name',
-    p3ostal_code: 'long_name',
-    '3doesnt-exist': 'long_name',
-    s4ublocality: 'long_name',
-    a4dministrative_area_level_1: 'short_name',
-    p4ostal_code: 'long_name',
-    '4doesnt-exist': 'long_name',
-    s5ublocality: 'long_name',
-    a5dministrative_area_level_1: 'short_name',
-    p5ostal_code: 'long_name',
-    '5doesnt-exist': 'long_name',
-    s6ublocality: 'long_name',
-    a6dministrative_area_level_1: 'short_name',
-    p6ostal_code: 'long_name',
-    '6doesnt-exist': 'long_name',
-    s7ublocality: 'long_name',
-    a7dministrative_area_level_1: 'short_name',
-    p7ostal_code: 'long_name',
-    '7doesnt-exist': 'long_name',
-    s8ublocality: 'long_name',
-    a8dministrative_area_level_1: 'short_name',
-    p8ostal_code: 'long_name',
-    '8doesnt-exist': 'long_name',
-    s9ublocality: 'long_name',
-    a9dministrative_area_level_1: 'short_name',
-    p9ostal_code: 'long_name',
-    '9doesnt-exist': 'long_name',
-    s10ublocality: 'long_name',
-    a10dministrative_area_level_1: 'short_name',
-    p10ostal_code: 'long_name',
-    '10doesnt-exist': 'long_name',
-    s11ublocality: 'long_name',
-    a11dministrative_area_level_1: 'short_name',
-    p11ostal_code: 'long_name',
-    '11doesnt-exist': 'long_name',
-    s12ublocality: 'long_name',
-    a12dministrative_area_level_1: 'short_name',
-    p12ostal_code: 'long_name',
-    '12doesnt-exist': 'long_name',
-    s13ublocality: 'long_name',
-    a13dministrative_area_level_1: 'short_name',
-    p13ostal_code: 'long_name',
-    '13doesnt-exist': 'long_name',
-    s14ublocality: 'long_name',
-    a14dministrative_area_level_1: 'short_name',
-    p14ostal_code: 'long_name',
-    '14doesnt-exist': 'long_name',
-    s15ublocality: 'long_name',
-    a15dministrative_area_level_1: 'short_name',
-    p15ostal_code: 'long_name',
-    '15doesnt-exist': 'long_name',
-    s16ublocality: 'long_name',
-    a16dministrative_area_level_1: 'short_name',
-    p16ostal_code: 'long_name',
-    '16doesnt-exist': 'long_name',
-    s17ublocality: 'long_name',
-    a17dministrative_area_level_1: 'short_name',
-    p17ostal_code: 'long_name',
-    '17doesnt-exist': 'long_name',
-    s18ublocality: 'long_name',
-    a18dministrative_area_level_1: 'short_name',
-    p18ostal_code: 'long_name',
-    '18doesnt-exist': 'long_name',
-    s19ublocality: 'long_name',
-    a19dministrative_area_level_1: 'short_name',
-    p19ostal_code: 'long_name',
-    '19doesnt-exist': 'long_name',
-    s20ublocality: 'long_name',
-    a20dministrative_area_level_1: 'short_name',
-    p20ostal_code: 'long_name',
-    '20doesnt-exist': 'long_name',
-};
-
 const addressComponents = [
     {
         long_name: 'Bushwick',
@@ -166,35 +79,6 @@ describe('GooglePlacesUtilsTest', () => {
             });
         });
     });
-    describe.skip('getAddressComponents small data set timing', () => {
-        it('should not be slow when executing', () => {
-            const startTime = performance.now();
-            for (let i = 100; i > 0; i--) {
-                GooglePlacesUtils.getAddressComponents(addressComponents, standardObjectToFind);
-            }
-            const endTime = performance.now();
-            const executionTime = endTime - startTime;
-
-            // When timing this method it was roughly 0.45087499999999636ms so this would be almost twice as slow
-            // which I think is a meaningful regression we should avoid
-            expect(executionTime).toBeLessThan(1.0);
-        });
-    });
-    describe.skip('getAddressComponents big data set timing', () => {
-        it('should not be slow when executing', () => {
-            const startTime = performance.now();
-            for (let i = 100; i > 0; i--) {
-                GooglePlacesUtils.getAddressComponents(addressComponents, bigObjectToFind);
-            }
-            const endTime = performance.now();
-            const executionTime = endTime - startTime;
-
-            // When timing this method it was roughly 1.211708999999928ms locally
-            // but 3.2214480000000094ms on github actions so using 5ms arbitrarily here for now
-            // and we can change if needed later.
-            expect(executionTime).toBeLessThan(5.0);
-        });
-    });
     describe('getPlaceAutocompleteTerms', () => {
         it('should find auto complete terms', () => {
             expect(GooglePlacesUtils.getPlaceAutocompleteTerms(autoCompleteTerms)).toStrictEqual({
diff --git a/tests/unit/MigrationTest.js b/tests/unit/MigrationTest.js
index bed273213c90..d0e7f19d3d3f 100644
--- a/tests/unit/MigrationTest.js
+++ b/tests/unit/MigrationTest.js
@@ -37,18 +37,12 @@ describe('Migrations', () => {
             })
                 .then(PersonalDetailsByAccountID)
                 .then(() => {
-                    expect(LogSpy).toHaveBeenCalledWith(
-                        `[Migrate Onyx] Skipped migration PersonalDetailsByAccountID for ${ONYXKEYS.COLLECTION.REPORT_ACTIONS}1 because there were no reportActions`,
-                    );
-                    expect(LogSpy).toHaveBeenCalledWith(
-                        `[Migrate Onyx] Skipped migration PersonalDetailsByAccountID for ${ONYXKEYS.COLLECTION.REPORT_ACTIONS}2 because there were no reportActions`,
-                    );
                     const connectionID = Onyx.connect({
                         key: ONYXKEYS.COLLECTION.REPORT_ACTIONS,
                         waitForCollectionCallback: true,
                         callback: (allReportActions) => {
                             Onyx.disconnect(connectionID);
-                            _.each(allReportActions, (reportActionsForReport) => expect(reportActionsForReport).toBeNull());
+                            _.each(allReportActions, (reportActionsForReport) => expect(reportActionsForReport).toBeUndefined());
                         },
                     });
                 }));
@@ -377,8 +371,8 @@ describe('Migrations', () => {
                         waitForCollectionCallback: true,
                         callback: (allPolicyMemberLists) => {
                             Onyx.disconnect(connectionID);
-                            expect(allPolicyMemberLists[`${ONYXKEYS.COLLECTION.DEPRECATED_POLICY_MEMBER_LIST}1`]).toBeNull();
-                            expect(allPolicyMemberLists[`${ONYXKEYS.COLLECTION.DEPRECATED_POLICY_MEMBER_LIST}2`]).toBeNull();
+
+                            expect(allPolicyMemberLists).toBeFalsy();
                         },
                     });
                 }));
@@ -554,8 +548,8 @@ describe('Migrations', () => {
                             Onyx.disconnect(connectionID);
                             const expectedReportAction = {};
                             expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}1`]).toMatchObject(expectedReportAction);
-                            expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}2`]).toMatchObject(expectedReportAction);
-                            expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}3`]).toMatchObject(expectedReportAction);
+                            expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}2`]).toBeUndefined();
+                            expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}3`]).toBeUndefined();
                             expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}4`]).toMatchObject(expectedReportAction);
                         },
                     });
@@ -597,8 +591,8 @@ describe('Migrations', () => {
                                 },
                             };
                             expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}1`]).toMatchObject(expectedReportAction1);
-                            expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}2`]).toBeNull();
-                            expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}3`]).toBeNull();
+                            expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}2`]).toBeUndefined();
+                            expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}3`]).toBeUndefined();
                             expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}4`]).toMatchObject(expectedReportAction4);
                         },
                     });
@@ -620,10 +614,10 @@ describe('Migrations', () => {
                         callback: (allReportActions) => {
                             Onyx.disconnect(connectionID);
                             const expectedReportAction = {};
-                            expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}1`]).toBeNull();
+                            expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}1`]).toBeUndefined();
                             expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}2`]).toMatchObject(expectedReportAction);
                             expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}3`]).toMatchObject(expectedReportAction);
-                            expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}4`]).toBeNull();
+                            expect(allReportActions[`${ONYXKEYS.COLLECTION.REPORT_ACTIONS}4`]).toBeUndefined();
                         },
                     });
                 }));