From c8e76bab37da90606e79d2ea0a2f7612b963337e Mon Sep 17 00:00:00 2001
From: Bilal Qamar <59555732+BilalQamar95@users.noreply.github.com>
Date: Thu, 4 Aug 2022 13:15:20 +0500
Subject: [PATCH 01/13] refactor: updated frontend-build version

---
 .eslintrc.js      |     3 +-
 package-lock.json | 11898 +++++++++++++++++++-------------------------
 package.json      |     2 +-
 3 files changed, 5125 insertions(+), 6778 deletions(-)

diff --git a/.eslintrc.js b/.eslintrc.js
index b0b3795cd1..28e19bd40c 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,4 +1,5 @@
 const { getBaseConfig } = require('@edx/frontend-build');
+
 const config = getBaseConfig('eslint');
 
 // Ignore linting on module.config.js
@@ -8,7 +9,7 @@ config.ignorePatterns = ['module.config.js'];
 // since they are causing eslint to fail for no apparent reason since
 // upgrading @edx/frontend-build from v3 to v5:
 //  - TypeError: Cannot read property 'range' of null
-config.rules['indent'] = ['error', 2, { 'ignoredNodes': ['TemplateLiteral', 'SwitchCase'] }];
+config.rules.indent = ['error', 2, { ignoredNodes: ['TemplateLiteral', 'SwitchCase'] }];
 config.rules['template-curly-spacing'] = 'off';
 config.rules['import/prefer-default-export'] = 'off';
 
diff --git a/package-lock.json b/package-lock.json
index 4a4de471d2..020658a441 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -58,7 +58,7 @@
         "universal-cookie": "4.0.4"
       },
       "devDependencies": {
-        "@edx/frontend-build": "^11.0.2",
+        "@edx/frontend-build": "^12.0.3",
         "@testing-library/jest-dom": "5.11.9",
         "@testing-library/react": "11.2.7",
         "@testing-library/react-hooks": "3.7.0",
@@ -193,6 +193,32 @@
         "@algolia/requester-common": "4.6.0"
       }
     },
+    "node_modules/@ampproject/remapping": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
+      "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.1.0",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
+    "node_modules/@ampproject/remapping/node_modules/@jridgewell/gen-mapping": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
+      "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
+      "dev": true,
+      "dependencies": {
+        "@jridgewell/set-array": "^1.0.0",
+        "@jridgewell/sourcemap-codec": "^1.4.10"
+      },
+      "engines": {
+        "node": ">=6.0.0"
+      }
+    },
     "node_modules/@babel/cli": {
       "version": "7.16.0",
       "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.16.0.tgz",
@@ -223,20 +249,20 @@
       }
     },
     "node_modules/@babel/code-frame": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
-      "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+      "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
       "dependencies": {
-        "@babel/highlight": "^7.14.5"
+        "@babel/highlight": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz",
-      "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==",
+      "version": "7.18.8",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz",
+      "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
@@ -272,55 +298,34 @@
         "url": "https://opencollective.com/babel"
       }
     },
-    "node_modules/@babel/core/node_modules/@babel/code-frame": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
-      "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/highlight": "^7.16.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/core/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+    "node_modules/@babel/core/node_modules/semver": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
       "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
+      "bin": {
+        "semver": "bin/semver.js"
       }
     },
-    "node_modules/@babel/core/node_modules/@babel/highlight": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
-      "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
+    "node_modules/@babel/eslint-parser": {
+      "version": "7.18.2",
+      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.2.tgz",
+      "integrity": "sha512-oFQYkE8SuH14+uR51JVAmdqwKYXGRjEXx7s+WiagVjqQ+HPE+nnwyF2qlVG8evUsUHmPcA+6YXMEDbIhEyQc5A==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "chalk": "^2.0.0",
-        "js-tokens": "^4.0.0"
+        "eslint-scope": "^5.1.1",
+        "eslint-visitor-keys": "^2.1.0",
+        "semver": "^6.3.0"
       },
       "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/core/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "node": "^10.13.0 || ^12.13.0 || >=14.0.0"
       },
-      "engines": {
-        "node": ">=6.9.0"
+      "peerDependencies": {
+        "@babel/core": ">=7.11.0",
+        "eslint": "^7.5.0 || ^8.0.0"
       }
     },
-    "node_modules/@babel/core/node_modules/semver": {
+    "node_modules/@babel/eslint-parser/node_modules/semver": {
       "version": "6.3.0",
       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
       "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
@@ -330,119 +335,53 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz",
-      "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz",
+      "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.17.0",
-        "jsesc": "^2.5.1",
-        "source-map": "^0.5.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/generator/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/generator/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/types": "^7.18.10",
+        "@jridgewell/gen-mapping": "^0.3.2",
+        "jsesc": "^2.5.1"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-annotate-as-pure": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz",
-      "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
+      "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.16.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-annotate-as-pure/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/types": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz",
-      "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-explode-assignable-expression": "^7.16.7",
-        "@babel/types": "^7.16.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-builder-binary-assignment-operator-visitor/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-builder-binary-assignment-operator-visitor/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz",
+      "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/helper-explode-assignable-expression": "^7.18.6",
+        "@babel/types": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz",
-      "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz",
+      "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==",
       "dev": true,
       "dependencies": {
-        "@babel/compat-data": "^7.17.7",
-        "@babel/helper-validator-option": "^7.16.7",
-        "browserslist": "^4.17.5",
+        "@babel/compat-data": "^7.18.8",
+        "@babel/helper-validator-option": "^7.18.6",
+        "browserslist": "^4.20.2",
         "semver": "^6.3.0"
       },
       "engines": {
@@ -462,18 +401,18 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz",
-      "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz",
+      "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.16.7",
-        "@babel/helper-environment-visitor": "^7.16.7",
-        "@babel/helper-function-name": "^7.17.9",
-        "@babel/helper-member-expression-to-functions": "^7.17.7",
-        "@babel/helper-optimise-call-expression": "^7.16.7",
-        "@babel/helper-replace-supers": "^7.16.7",
-        "@babel/helper-split-export-declaration": "^7.16.7"
+        "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-environment-visitor": "^7.18.9",
+        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-member-expression-to-functions": "^7.18.9",
+        "@babel/helper-optimise-call-expression": "^7.18.6",
+        "@babel/helper-replace-supers": "^7.18.9",
+        "@babel/helper-split-export-declaration": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -483,13 +422,13 @@
       }
     },
     "node_modules/@babel/helper-create-regexp-features-plugin": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz",
-      "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz",
+      "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.16.7",
-        "regexpu-core": "^5.0.1"
+        "@babel/helper-annotate-as-pure": "^7.18.6",
+        "regexpu-core": "^5.1.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -499,15 +438,13 @@
       }
     },
     "node_modules/@babel/helper-define-polyfill-provider": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz",
-      "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==",
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz",
+      "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.13.0",
-        "@babel/helper-module-imports": "^7.12.13",
-        "@babel/helper-plugin-utils": "^7.13.0",
-        "@babel/traverse": "^7.13.0",
+        "@babel/helper-compilation-targets": "^7.17.7",
+        "@babel/helper-plugin-utils": "^7.16.7",
         "debug": "^4.1.1",
         "lodash.debounce": "^4.0.8",
         "resolve": "^1.14.2",
@@ -527,555 +464,244 @@
       }
     },
     "node_modules/@babel/helper-environment-visitor": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz",
-      "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.16.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-environment-visitor/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
+      "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/helper-environment-visitor/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@babel/helper-explode-assignable-expression": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz",
-      "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.16.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-explode-assignable-expression/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-explode-assignable-expression/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz",
+      "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/types": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-function-name": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz",
-      "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
+      "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
       "dev": true,
       "dependencies": {
-        "@babel/template": "^7.16.7",
-        "@babel/types": "^7.17.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-function-name/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-function-name/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/template": "^7.18.6",
+        "@babel/types": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-hoist-variables": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz",
-      "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
+      "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.16.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-hoist-variables/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-hoist-variables/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/types": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz",
-      "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.17.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-member-expression-to-functions/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-member-expression-to-functions/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz",
+      "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/types": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz",
-      "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+      "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
       "dependencies": {
-        "@babel/types": "^7.14.5"
+        "@babel/types": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz",
-      "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-environment-visitor": "^7.16.7",
-        "@babel/helper-module-imports": "^7.16.7",
-        "@babel/helper-simple-access": "^7.17.7",
-        "@babel/helper-split-export-declaration": "^7.16.7",
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.3",
-        "@babel/types": "^7.17.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-module-imports": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz",
-      "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.16.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-module-transforms/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
+      "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/helper-environment-visitor": "^7.18.9",
+        "@babel/helper-module-imports": "^7.18.6",
+        "@babel/helper-simple-access": "^7.18.6",
+        "@babel/helper-split-export-declaration": "^7.18.6",
+        "@babel/helper-validator-identifier": "^7.18.6",
+        "@babel/template": "^7.18.6",
+        "@babel/traverse": "^7.18.9",
+        "@babel/types": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-optimise-call-expression": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz",
-      "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.16.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-optimise-call-expression/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-optimise-call-expression/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz",
+      "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/types": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz",
-      "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+      "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-remap-async-to-generator": {
-      "version": "7.16.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz",
-      "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz",
+      "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.16.7",
-        "@babel/helper-wrap-function": "^7.16.8",
-        "@babel/types": "^7.16.8"
+        "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-environment-visitor": "^7.18.9",
+        "@babel/helper-wrap-function": "^7.18.9",
+        "@babel/types": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
       },
-      "engines": {
-        "node": ">=6.9.0"
+      "peerDependencies": {
+        "@babel/core": "^7.0.0"
       }
     },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz",
-      "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-environment-visitor": "^7.16.7",
-        "@babel/helper-member-expression-to-functions": "^7.16.7",
-        "@babel/helper-optimise-call-expression": "^7.16.7",
-        "@babel/traverse": "^7.16.7",
-        "@babel/types": "^7.16.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-replace-supers/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-replace-supers/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz",
+      "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/helper-environment-visitor": "^7.18.9",
+        "@babel/helper-member-expression-to-functions": "^7.18.9",
+        "@babel/helper-optimise-call-expression": "^7.18.6",
+        "@babel/traverse": "^7.18.9",
+        "@babel/types": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz",
-      "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.17.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-simple-access/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-simple-access/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
+      "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/types": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz",
-      "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.16.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-skip-transparent-expression-wrappers/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz",
+      "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/types": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-split-export-declaration": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz",
-      "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+      "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.16.7"
+        "@babel/types": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
-      },
+    "node_modules/@babel/helper-string-parser": {
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
+      "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.14.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz",
-      "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+      "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-option": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz",
-      "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
+      "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-wrap-function": {
-      "version": "7.16.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz",
-      "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-function-name": "^7.16.7",
-        "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.16.8",
-        "@babel/types": "^7.16.8"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-wrap-function/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helper-wrap-function/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.10.tgz",
+      "integrity": "sha512-95NLBP59VWdfK2lyLKe6eTMq9xg+yWKzxzxbJ1wcYNi1Auz200+83fMDADjRxBvc2QQor5zja2yTQzXGhk2GtQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/helper-function-name": "^7.18.9",
+        "@babel/template": "^7.18.10",
+        "@babel/traverse": "^7.18.10",
+        "@babel/types": "^7.18.10"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz",
-      "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==",
-      "dev": true,
-      "dependencies": {
-        "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.9",
-        "@babel/types": "^7.17.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helpers/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/helpers/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz",
+      "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/template": "^7.18.6",
+        "@babel/traverse": "^7.18.9",
+        "@babel/types": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/highlight": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
-      "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+      "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.14.5",
+        "@babel/helper-validator-identifier": "^7.18.6",
         "chalk": "^2.0.0",
         "js-tokens": "^4.0.0"
       },
@@ -1084,9 +710,9 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz",
-      "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.10.tgz",
+      "integrity": "sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg==",
       "dev": true,
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -1096,12 +722,12 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz",
-      "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz",
+      "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1111,14 +737,14 @@
       }
     },
     "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz",
-      "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz",
+      "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
-        "@babel/plugin-proposal-optional-chaining": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9",
+        "@babel/plugin-proposal-optional-chaining": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1128,13 +754,14 @@
       }
     },
     "node_modules/@babel/plugin-proposal-async-generator-functions": {
-      "version": "7.16.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz",
-      "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz",
+      "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-remap-async-to-generator": "^7.16.8",
+        "@babel/helper-environment-visitor": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-remap-async-to-generator": "^7.18.9",
         "@babel/plugin-syntax-async-generators": "^7.8.4"
       },
       "engines": {
@@ -1161,13 +788,13 @@
       }
     },
     "node_modules/@babel/plugin-proposal-class-static-block": {
-      "version": "7.17.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz",
-      "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz",
+      "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.17.6",
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-create-class-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-class-static-block": "^7.14.5"
       },
       "engines": {
@@ -1178,12 +805,12 @@
       }
     },
     "node_modules/@babel/plugin-proposal-dynamic-import": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz",
-      "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz",
+      "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-dynamic-import": "^7.8.3"
       },
       "engines": {
@@ -1194,12 +821,12 @@
       }
     },
     "node_modules/@babel/plugin-proposal-export-namespace-from": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz",
-      "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz",
+      "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.18.9",
         "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
       },
       "engines": {
@@ -1210,12 +837,12 @@
       }
     },
     "node_modules/@babel/plugin-proposal-json-strings": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz",
-      "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz",
+      "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-json-strings": "^7.8.3"
       },
       "engines": {
@@ -1226,12 +853,12 @@
       }
     },
     "node_modules/@babel/plugin-proposal-logical-assignment-operators": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz",
-      "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz",
+      "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.18.9",
         "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
       },
       "engines": {
@@ -1242,12 +869,12 @@
       }
     },
     "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz",
-      "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
+      "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
       },
       "engines": {
@@ -1258,12 +885,12 @@
       }
     },
     "node_modules/@babel/plugin-proposal-numeric-separator": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz",
-      "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz",
+      "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-numeric-separator": "^7.10.4"
       },
       "engines": {
@@ -1293,12 +920,12 @@
       }
     },
     "node_modules/@babel/plugin-proposal-optional-catch-binding": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz",
-      "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz",
+      "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
       },
       "engines": {
@@ -1309,13 +936,13 @@
       }
     },
     "node_modules/@babel/plugin-proposal-optional-chaining": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz",
-      "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz",
+      "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9",
         "@babel/plugin-syntax-optional-chaining": "^7.8.3"
       },
       "engines": {
@@ -1326,13 +953,13 @@
       }
     },
     "node_modules/@babel/plugin-proposal-private-methods": {
-      "version": "7.16.11",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz",
-      "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz",
+      "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.16.10",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-create-class-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1342,14 +969,14 @@
       }
     },
     "node_modules/@babel/plugin-proposal-private-property-in-object": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz",
-      "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz",
+      "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.16.7",
-        "@babel/helper-create-class-features-plugin": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-create-class-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
       },
       "engines": {
@@ -1360,13 +987,13 @@
       }
     },
     "node_modules/@babel/plugin-proposal-unicode-property-regex": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz",
-      "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
+      "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=4"
@@ -1475,12 +1102,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-jsx": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz",
-      "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
+      "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1592,12 +1219,12 @@
       }
     },
     "node_modules/@babel/plugin-syntax-typescript": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz",
-      "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz",
+      "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1607,12 +1234,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-arrow-functions": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz",
-      "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz",
+      "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1622,14 +1249,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-async-to-generator": {
-      "version": "7.16.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz",
-      "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz",
+      "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-imports": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-remap-async-to-generator": "^7.16.8"
+        "@babel/helper-module-imports": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6",
+        "@babel/helper-remap-async-to-generator": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1638,47 +1265,13 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-module-imports": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz",
-      "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.16.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-async-to-generator/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz",
-      "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz",
+      "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1688,12 +1281,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoping": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz",
-      "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz",
+      "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1703,18 +1296,18 @@
       }
     },
     "node_modules/@babel/plugin-transform-classes": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz",
-      "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz",
+      "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.16.7",
-        "@babel/helper-environment-visitor": "^7.16.7",
-        "@babel/helper-function-name": "^7.16.7",
-        "@babel/helper-optimise-call-expression": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-replace-supers": "^7.16.7",
-        "@babel/helper-split-export-declaration": "^7.16.7",
+        "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-environment-visitor": "^7.18.9",
+        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-optimise-call-expression": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-replace-supers": "^7.18.9",
+        "@babel/helper-split-export-declaration": "^7.18.6",
         "globals": "^11.1.0"
       },
       "engines": {
@@ -1725,12 +1318,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-computed-properties": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz",
-      "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz",
+      "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1740,12 +1333,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-destructuring": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz",
-      "integrity": "sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz",
+      "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1755,13 +1348,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-dotall-regex": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz",
-      "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz",
+      "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1771,12 +1364,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-duplicate-keys": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz",
-      "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz",
+      "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1786,13 +1379,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz",
-      "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz",
+      "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1802,12 +1395,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-for-of": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz",
-      "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==",
+      "version": "7.18.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz",
+      "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1817,14 +1410,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-function-name": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz",
-      "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz",
+      "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-compilation-targets": "^7.16.7",
-        "@babel/helper-function-name": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-compilation-targets": "^7.18.9",
+        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1834,12 +1427,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-literals": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz",
-      "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz",
+      "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1849,12 +1442,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-member-expression-literals": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz",
-      "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz",
+      "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1864,13 +1457,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-amd": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz",
-      "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz",
+      "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-module-transforms": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "babel-plugin-dynamic-import-node": "^2.3.3"
       },
       "engines": {
@@ -1881,14 +1474,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz",
-      "integrity": "sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz",
+      "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.17.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-simple-access": "^7.17.7",
+        "@babel/helper-module-transforms": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6",
+        "@babel/helper-simple-access": "^7.18.6",
         "babel-plugin-dynamic-import-node": "^2.3.3"
       },
       "engines": {
@@ -1899,15 +1492,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-systemjs": {
-      "version": "7.17.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz",
-      "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz",
+      "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-hoist-variables": "^7.16.7",
-        "@babel/helper-module-transforms": "^7.17.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-validator-identifier": "^7.16.7",
+        "@babel/helper-hoist-variables": "^7.18.6",
+        "@babel/helper-module-transforms": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-validator-identifier": "^7.18.6",
         "babel-plugin-dynamic-import-node": "^2.3.3"
       },
       "engines": {
@@ -1917,23 +1510,14 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-transform-modules-systemjs/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@babel/plugin-transform-modules-umd": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz",
-      "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz",
+      "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-module-transforms": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1943,12 +1527,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.16.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz",
-      "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz",
+      "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.16.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1958,12 +1543,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-new-target": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz",
-      "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz",
+      "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1973,13 +1558,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-object-super": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz",
-      "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz",
+      "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-replace-supers": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6",
+        "@babel/helper-replace-supers": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1989,12 +1574,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-parameters": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz",
-      "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==",
+      "version": "7.18.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz",
+      "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2004,12 +1589,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-property-literals": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz",
-      "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz",
+      "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2019,12 +1604,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-constant-elements": {
-      "version": "7.17.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.6.tgz",
-      "integrity": "sha512-OBv9VkyyKtsHZiHLoSfCn+h6yU7YKX8nrs32xUmOa1SRSk+t03FosB6fBZ0Yz4BpD1WV7l73Nsad+2Tz7APpqw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.9.tgz",
+      "integrity": "sha512-IrTYh1I3YCEL1trjknnlLKTp5JggjzhKl/d3ibzPc97JhpFcDTr38Jdek/oX4cFbS6By0bXJcOkpRvJ5ZHK2wQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2034,12 +1619,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-display-name": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz",
-      "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz",
+      "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2049,16 +1634,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-jsx": {
-      "version": "7.17.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz",
-      "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz",
+      "integrity": "sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.16.7",
-        "@babel/helper-module-imports": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/plugin-syntax-jsx": "^7.16.7",
-        "@babel/types": "^7.17.0"
+        "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-module-imports": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/plugin-syntax-jsx": "^7.18.6",
+        "@babel/types": "^7.18.10"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2068,12 +1653,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-jsx-development": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz",
-      "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz",
+      "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==",
       "dev": true,
       "dependencies": {
-        "@babel/plugin-transform-react-jsx": "^7.16.7"
+        "@babel/plugin-transform-react-jsx": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2082,48 +1667,14 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-module-imports": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz",
-      "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/types": "^7.16.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@babel/plugin-transform-react-pure-annotations": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz",
-      "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz",
+      "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-annotate-as-pure": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2133,11 +1684,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-regenerator": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz",
-      "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz",
+      "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==",
       "dev": true,
       "dependencies": {
+        "@babel/helper-plugin-utils": "^7.18.6",
         "regenerator-transform": "^0.15.0"
       },
       "engines": {
@@ -2148,12 +1700,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-reserved-words": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz",
-      "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz",
+      "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2163,12 +1715,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-shorthand-properties": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz",
-      "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz",
+      "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2178,13 +1730,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-spread": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz",
-      "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz",
+      "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0"
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2194,12 +1746,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-sticky-regex": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz",
-      "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz",
+      "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2209,12 +1761,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-template-literals": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz",
-      "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz",
+      "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2224,12 +1776,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-typeof-symbol": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz",
-      "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz",
+      "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2239,14 +1791,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-typescript": {
-      "version": "7.16.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz",
-      "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.10.tgz",
+      "integrity": "sha512-j2HQCJuMbi88QftIb5zlRu3c7PU+sXNnscqsrjqegoGiCgXR569pEdben9vly5QHKL2ilYkfnSwu64zsZo/VYQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/plugin-syntax-typescript": "^7.16.7"
+        "@babel/helper-create-class-features-plugin": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/plugin-syntax-typescript": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2256,12 +1808,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-escapes": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz",
-      "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz",
+      "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2271,13 +1823,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-unicode-regex": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz",
-      "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz",
+      "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2374,28 +1926,6 @@
         "@babel/core": "^7.0.0-0"
       }
     },
-    "node_modules/@babel/preset-env/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/preset-env/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@babel/preset-env/node_modules/semver": {
       "version": "6.3.0",
       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -2442,14 +1972,14 @@
       }
     },
     "node_modules/@babel/preset-typescript": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz",
-      "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz",
+      "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-validator-option": "^7.16.7",
-        "@babel/plugin-transform-typescript": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6",
+        "@babel/helper-validator-option": "^7.18.6",
+        "@babel/plugin-transform-typescript": "^7.18.6"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -2482,81 +2012,33 @@
       }
     },
     "node_modules/@babel/template": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz",
-      "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.16.7",
-        "@babel/parser": "^7.16.7",
-        "@babel/types": "^7.16.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/template/node_modules/@babel/code-frame": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
-      "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
+      "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
       "dev": true,
       "dependencies": {
-        "@babel/highlight": "^7.16.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/template/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/template/node_modules/@babel/highlight": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
-      "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "chalk": "^2.0.0",
-        "js-tokens": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/template/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
+        "@babel/code-frame": "^7.18.6",
+        "@babel/parser": "^7.18.10",
+        "@babel/types": "^7.18.10"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz",
-      "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.16.7",
-        "@babel/generator": "^7.17.9",
-        "@babel/helper-environment-visitor": "^7.16.7",
-        "@babel/helper-function-name": "^7.17.9",
-        "@babel/helper-hoist-variables": "^7.16.7",
-        "@babel/helper-split-export-declaration": "^7.16.7",
-        "@babel/parser": "^7.17.9",
-        "@babel/types": "^7.17.0",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.10.tgz",
+      "integrity": "sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g==",
+      "dev": true,
+      "dependencies": {
+        "@babel/code-frame": "^7.18.6",
+        "@babel/generator": "^7.18.10",
+        "@babel/helper-environment-visitor": "^7.18.9",
+        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-hoist-variables": "^7.18.6",
+        "@babel/helper-split-export-declaration": "^7.18.6",
+        "@babel/parser": "^7.18.10",
+        "@babel/types": "^7.18.10",
         "debug": "^4.1.0",
         "globals": "^11.1.0"
       },
@@ -2564,60 +2046,13 @@
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@babel/traverse/node_modules/@babel/code-frame": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
-      "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/highlight": "^7.16.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/traverse/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/traverse/node_modules/@babel/highlight": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
-      "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "chalk": "^2.0.0",
-        "js-tokens": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@babel/traverse/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@babel/types": {
-      "version": "7.15.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz",
-      "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz",
+      "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==",
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.14.9",
+        "@babel/helper-string-parser": "^7.18.10",
+        "@babel/helper-validator-identifier": "^7.18.6",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -2670,9 +2105,9 @@
       "integrity": "sha512-ne2ZKF1r0akkt0rEzCAQAk4cTDTI2GiWCpc+T7ldQpw9X57OnUB16dKsFNe40C9uEjL5h3Ps/ZsFM5dm4cIkEQ=="
     },
     "node_modules/@edx/eslint-config": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@edx/eslint-config/-/eslint-config-3.0.0.tgz",
-      "integrity": "sha512-3vMX3/vqYxpJK/XKGRjWlsvcIkOQYMxJ1uXcVl70HiQda31xWW4qpg2OTevEdnYo5vThSBVMFe7lRmMpMNDR7Q==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@edx/eslint-config/-/eslint-config-3.1.0.tgz",
+      "integrity": "sha512-Okv8vkmX+qe+joD7h9DcT9JdRIyy6jJSVWbIHr2dAHKuk5swVFO92JvhC2pYtMg2EPKA1P1Hmz8cmmfw6QoTZw==",
       "dev": true,
       "peerDependencies": {
         "eslint": "^6.8.0 || ^7.0.0 || ^8.0.0",
@@ -2684,24 +2119,24 @@
       }
     },
     "node_modules/@edx/frontend-build": {
-      "version": "11.0.2",
-      "resolved": "https://registry.npmjs.org/@edx/frontend-build/-/frontend-build-11.0.2.tgz",
-      "integrity": "sha512-JGR8UEfxX+td1AeNqLVZgvEeHMmoIktHufC168fl55KVkPuQ7gje/anRFETkK9SekvlCeAJ+hecZj6/WSJ+8jA==",
+      "version": "12.0.3",
+      "resolved": "https://registry.npmjs.org/@edx/frontend-build/-/frontend-build-12.0.3.tgz",
+      "integrity": "sha512-q/BoMntXSXSXfSTUpr7G051jrqkAvEFRQHG4+R2rPMQX+Ok2FSE9HTa74kkEP2H2Ij6x5VHXhU5F1powu/x6Zw==",
       "dev": true,
       "dependencies": {
         "@babel/cli": "7.16.0",
         "@babel/core": "7.16.0",
+        "@babel/eslint-parser": "7.18.2",
         "@babel/plugin-proposal-class-properties": "7.16.0",
         "@babel/plugin-proposal-object-rest-spread": "7.16.0",
         "@babel/plugin-syntax-dynamic-import": "7.8.3",
         "@babel/preset-env": "7.16.4",
         "@babel/preset-react": "7.16.0",
-        "@edx/eslint-config": "3.0.0",
+        "@edx/eslint-config": "3.1.0",
         "@edx/new-relic-source-map-webpack-plugin": "1.0.1",
         "@pmmmwh/react-refresh-webpack-plugin": "0.5.3",
         "@svgr/webpack": "6.2.1",
         "autoprefixer": "10.2.6",
-        "babel-eslint": "10.1.0",
         "babel-jest": "26.6.3",
         "babel-loader": "8.2.3",
         "babel-plugin-react-intl": "7.9.4",
@@ -2712,12 +2147,12 @@
         "cssnano": "5.0.12",
         "dotenv": "8.2.0",
         "dotenv-webpack": "7.0.3",
-        "eslint": "6.8.0",
-        "eslint-config-airbnb": "18.1.0",
-        "eslint-plugin-import": "2.22.1",
-        "eslint-plugin-jsx-a11y": "6.2.3",
-        "eslint-plugin-react": "7.19.0",
-        "eslint-plugin-react-hooks": "1.7.0",
+        "eslint": "8.18.0",
+        "eslint-config-airbnb": "19.0.4",
+        "eslint-plugin-import": "2.26.0",
+        "eslint-plugin-jsx-a11y": "6.5.1",
+        "eslint-plugin-react": "7.30.0",
+        "eslint-plugin-react-hooks": "4.6.0",
         "file-loader": "6.2.0",
         "html-webpack-plugin": "5.5.0",
         "identity-obj-proxy": "3.0.0",
@@ -3184,10 +2619,75 @@
       "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz",
       "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA=="
     },
+    "node_modules/@eslint/eslintrc": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
+      "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
+      "dev": true,
+      "dependencies": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.3.2",
+        "globals": "^13.15.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+      "dev": true
+    },
+    "node_modules/@eslint/eslintrc/node_modules/globals": {
+      "version": "13.17.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+      "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+      "dev": true,
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+      "dev": true,
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/type-fest": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/@formatjs/ecma402-abstract": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.5.0.tgz",
-      "integrity": "sha512-wXv36yo+mfWllweN0Fq7sUs7PUiNopn7I0JpLTe3hGu6ZMR4CV7LqK1llhB18pndwpKoafQKb1et2DCJAOW20Q==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.4.0.tgz",
+      "integrity": "sha512-Mv027hcLFjE45K8UJ8PjRpdDGfR0aManEFj1KzoN8zXNveHGEygpZGfFf/FTTMl+QEVSrPAUlyxaCApvmv47AQ==",
       "dev": true,
       "dependencies": {
         "tslib": "^2.0.1"
@@ -3316,15 +2816,6 @@
         "tslib": "^2.0.1"
       }
     },
-    "node_modules/@formatjs/intl-numberformat/node_modules/@formatjs/ecma402-abstract": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.4.0.tgz",
-      "integrity": "sha512-Mv027hcLFjE45K8UJ8PjRpdDGfR0aManEFj1KzoN8zXNveHGEygpZGfFf/FTTMl+QEVSrPAUlyxaCApvmv47AQ==",
-      "dev": true,
-      "dependencies": {
-        "tslib": "^2.0.1"
-      }
-    },
     "node_modules/@formatjs/intl/node_modules/@formatjs/ecma402-abstract": {
       "version": "1.10.0",
       "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.10.0.tgz",
@@ -3353,6 +2844,15 @@
         }
       }
     },
+    "node_modules/@formatjs/ts-transformer/node_modules/@formatjs/ecma402-abstract": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.5.0.tgz",
+      "integrity": "sha512-wXv36yo+mfWllweN0Fq7sUs7PUiNopn7I0JpLTe3hGu6ZMR4CV7LqK1llhB18pndwpKoafQKb1et2DCJAOW20Q==",
+      "dev": true,
+      "dependencies": {
+        "tslib": "^2.0.1"
+      }
+    },
     "node_modules/@formatjs/ts-transformer/node_modules/intl-messageformat-parser": {
       "version": "6.1.2",
       "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-6.1.2.tgz",
@@ -3433,6 +2933,26 @@
         "react": ">=16.x"
       }
     },
+    "node_modules/@humanwhocodes/config-array": {
+      "version": "0.9.5",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
+      "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
+      "dev": true,
+      "dependencies": {
+        "@humanwhocodes/object-schema": "^1.2.1",
+        "debug": "^4.1.1",
+        "minimatch": "^3.0.4"
+      },
+      "engines": {
+        "node": ">=10.10.0"
+      }
+    },
+    "node_modules/@humanwhocodes/object-schema": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+      "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+      "dev": true
+    },
     "node_modules/@istanbuljs/load-nyc-config": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -4357,9 +3877,9 @@
       }
     },
     "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": {
-      "version": "0.7.3",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
-      "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+      "version": "0.7.4",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+      "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
       "dev": true,
       "engines": {
         "node": ">= 8"
@@ -4428,9 +3948,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-add-jsx-attribute": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz",
-      "integrity": "sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.3.1.tgz",
+      "integrity": "sha512-jDBKArXYO1u0B1dmd2Nf8Oy6aTF5vLDfLoO9Oon/GLkqZ/NiggYWZA+a2HpUMH4ITwNqS3z43k8LWApB8S583w==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -4444,9 +3964,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-remove-jsx-attribute": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz",
-      "integrity": "sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.3.1.tgz",
+      "integrity": "sha512-dQzyJ4prwjcFd929T43Z8vSYiTlTu8eafV40Z2gO7zy/SV5GT+ogxRJRBIKWomPBOiaVXFg3jY4S5hyEN3IBjQ==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -4460,9 +3980,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz",
-      "integrity": "sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.3.1.tgz",
+      "integrity": "sha512-HBOUc1XwSU67fU26V5Sfb8MQsT0HvUyxru7d0oBJ4rA2s4HW3PhyAPC7fV/mdsSGpAvOdd8Wpvkjsr0fWPUO7A==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -4476,9 +3996,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz",
-      "integrity": "sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.3.1.tgz",
+      "integrity": "sha512-C12e6aN4BXAolRrI601gPn5MDFCRHO7C4TM8Kks+rDtl8eEq+NN1sak0eAzJu363x3TmHXdZn7+Efd2nr9I5dA==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -4492,9 +4012,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-svg-dynamic-title": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz",
-      "integrity": "sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.3.1.tgz",
+      "integrity": "sha512-6NU55Mmh3M5u2CfCCt6TX29/pPneutrkJnnDCHbKZnjukZmmgUAZLtZ2g6ZoSPdarowaQmAiBRgAHqHmG0vuqA==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -4508,9 +4028,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-svg-em-dimensions": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz",
-      "integrity": "sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.3.1.tgz",
+      "integrity": "sha512-HV1NGHYTTe1vCNKlBgq/gKuCSfaRlKcHIADn7P8w8U3Zvujdw1rmusutghJ1pZJV7pDt3Gt8ws+SVrqHnBO/Qw==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -4524,9 +4044,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-transform-react-native-svg": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz",
-      "integrity": "sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.3.1.tgz",
+      "integrity": "sha512-2wZhSHvTolFNeKDAN/ZmIeSz2O9JSw72XD+o2bNp2QAaWqa8KGpn5Yk5WHso6xqfSAiRzAE+GXlsrBO4UP9LLw==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -4540,9 +4060,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-transform-svg-component": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz",
-      "integrity": "sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.3.1.tgz",
+      "integrity": "sha512-cZ8Tr6ZAWNUFfDeCKn/pGi976iWSkS8ijmEYKosP+6ktdZ7lW9HVLHojyusPw3w0j8PI4VBeWAXAmi/2G7owxw==",
       "dev": true,
       "engines": {
         "node": ">=12"
@@ -4556,19 +4076,19 @@
       }
     },
     "node_modules/@svgr/babel-preset": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.2.0.tgz",
-      "integrity": "sha512-4WQNY0J71JIaL03DRn0vLiz87JXx0b9dYm2aA8XHlQJQoixMl4r/soYHm8dsaJZ3jWtkCiOYy48dp9izvXhDkQ==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.3.1.tgz",
+      "integrity": "sha512-tQtWtzuMMQ3opH7je+MpwfuRA1Hf3cKdSgTtAYwOBDfmhabP7rcTfBi3E7V3MuwJNy/Y02/7/RutvwS1W4Qv9g==",
       "dev": true,
       "dependencies": {
-        "@svgr/babel-plugin-add-jsx-attribute": "^6.0.0",
-        "@svgr/babel-plugin-remove-jsx-attribute": "^6.0.0",
-        "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.0.0",
-        "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.0.0",
-        "@svgr/babel-plugin-svg-dynamic-title": "^6.0.0",
-        "@svgr/babel-plugin-svg-em-dimensions": "^6.0.0",
-        "@svgr/babel-plugin-transform-react-native-svg": "^6.0.0",
-        "@svgr/babel-plugin-transform-svg-component": "^6.2.0"
+        "@svgr/babel-plugin-add-jsx-attribute": "^6.3.1",
+        "@svgr/babel-plugin-remove-jsx-attribute": "^6.3.1",
+        "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.3.1",
+        "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.3.1",
+        "@svgr/babel-plugin-svg-dynamic-title": "^6.3.1",
+        "@svgr/babel-plugin-svg-em-dimensions": "^6.3.1",
+        "@svgr/babel-plugin-transform-react-native-svg": "^6.3.1",
+        "@svgr/babel-plugin-transform-svg-component": "^6.3.1"
       },
       "engines": {
         "node": ">=10"
@@ -4582,12 +4102,12 @@
       }
     },
     "node_modules/@svgr/core": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.2.1.tgz",
-      "integrity": "sha512-NWufjGI2WUyrg46mKuySfviEJ6IxHUOm/8a3Ph38VCWSp+83HBraCQrpEM3F3dB6LBs5x8OElS8h3C0oOJaJAA==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.3.1.tgz",
+      "integrity": "sha512-Sm3/7OdXbQreemf9aO25keerZSbnKMpGEfmH90EyYpj1e8wMD4TuwJIb3THDSgRMWk1kYJfSRulELBy4gVgZUA==",
       "dev": true,
       "dependencies": {
-        "@svgr/plugin-jsx": "^6.2.1",
+        "@svgr/plugin-jsx": "^6.3.1",
         "camelcase": "^6.2.0",
         "cosmiconfig": "^7.0.1"
       },
@@ -4600,13 +4120,13 @@
       }
     },
     "node_modules/@svgr/hast-util-to-babel-ast": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.2.1.tgz",
-      "integrity": "sha512-pt7MMkQFDlWJVy9ULJ1h+hZBDGFfSCwlBNW1HkLnVi7jUhyEXUaGYWi1x6bM2IXuAR9l265khBT4Av4lPmaNLQ==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.3.1.tgz",
+      "integrity": "sha512-NgyCbiTQIwe3wHe/VWOUjyxmpUmsrBjdoIxKpXt3Nqc3TN30BpJG22OxBvVzsAh9jqep0w0/h8Ywvdk3D9niNQ==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.15.6",
-        "entities": "^3.0.1"
+        "@babel/types": "^7.18.4",
+        "entities": "^4.3.0"
       },
       "engines": {
         "node": ">=10"
@@ -4616,32 +4136,10 @@
         "url": "https://github.com/sponsors/gregberge"
       }
     },
-    "node_modules/@svgr/hast-util-to-babel-ast/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/@svgr/hast-util-to-babel-ast/node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-      "dev": true,
-      "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "to-fast-properties": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
     "node_modules/@svgr/hast-util-to-babel-ast/node_modules/entities": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
-      "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz",
+      "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==",
       "dev": true,
       "engines": {
         "node": ">=0.12"
@@ -4651,15 +4149,15 @@
       }
     },
     "node_modules/@svgr/plugin-jsx": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.2.1.tgz",
-      "integrity": "sha512-u+MpjTsLaKo6r3pHeeSVsh9hmGRag2L7VzApWIaS8imNguqoUwDq/u6U/NDmYs/KAsrmtBjOEaAAPbwNGXXp1g==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.3.1.tgz",
+      "integrity": "sha512-r9+0mYG3hD4nNtUgsTXWGYJomv/bNd7kC16zvsM70I/bGeoCi/3lhTmYqeN6ChWX317OtQCSZZbH4wq9WwoXbw==",
       "dev": true,
       "dependencies": {
-        "@babel/core": "^7.15.5",
-        "@svgr/babel-preset": "^6.2.0",
-        "@svgr/hast-util-to-babel-ast": "^6.2.1",
-        "svg-parser": "^2.0.2"
+        "@babel/core": "^7.18.5",
+        "@svgr/babel-preset": "^6.3.1",
+        "@svgr/hast-util-to-babel-ast": "^6.3.1",
+        "svg-parser": "^2.0.4"
       },
       "engines": {
         "node": ">=10"
@@ -4672,15 +4170,54 @@
         "@svgr/core": "^6.0.0"
       }
     },
+    "node_modules/@svgr/plugin-jsx/node_modules/@babel/core": {
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz",
+      "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==",
+      "dev": true,
+      "dependencies": {
+        "@ampproject/remapping": "^2.1.0",
+        "@babel/code-frame": "^7.18.6",
+        "@babel/generator": "^7.18.10",
+        "@babel/helper-compilation-targets": "^7.18.9",
+        "@babel/helper-module-transforms": "^7.18.9",
+        "@babel/helpers": "^7.18.9",
+        "@babel/parser": "^7.18.10",
+        "@babel/template": "^7.18.10",
+        "@babel/traverse": "^7.18.10",
+        "@babel/types": "^7.18.10",
+        "convert-source-map": "^1.7.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.1",
+        "semver": "^6.3.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/babel"
+      }
+    },
+    "node_modules/@svgr/plugin-jsx/node_modules/semver": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+      "dev": true,
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
     "node_modules/@svgr/plugin-svgo": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.2.0.tgz",
-      "integrity": "sha512-oDdMQONKOJEbuKwuy4Np6VdV6qoaLLvoY86hjvQEgU82Vx1MSWRyYms6Sl0f+NtqxLI/rDVufATbP/ev996k3Q==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.3.1.tgz",
+      "integrity": "sha512-yJIjTDKPYqzFVjmsbH5EdIwEsmKxjxdXSGJVLeUgwZOZPAkNQmD1v7LDbOdOKbR44FG8465Du+zWPdbYGnbMbw==",
       "dev": true,
       "dependencies": {
         "cosmiconfig": "^7.0.1",
         "deepmerge": "^4.2.2",
-        "svgo": "^2.5.0"
+        "svgo": "^2.8.0"
       },
       "engines": {
         "node": ">=10"
@@ -5041,9 +4578,9 @@
       "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow=="
     },
     "node_modules/@types/eslint": {
-      "version": "8.4.1",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz",
-      "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==",
+      "version": "8.4.5",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz",
+      "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==",
       "dev": true,
       "dependencies": {
         "@types/estree": "*",
@@ -5051,9 +4588,9 @@
       }
     },
     "node_modules/@types/eslint-scope": {
-      "version": "3.7.3",
-      "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz",
-      "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==",
+      "version": "3.7.4",
+      "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
+      "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
       "dev": true,
       "dependencies": {
         "@types/eslint": "*",
@@ -5079,9 +4616,9 @@
       }
     },
     "node_modules/@types/express-serve-static-core": {
-      "version": "4.17.28",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz",
-      "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==",
+      "version": "4.17.30",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz",
+      "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==",
       "dev": true,
       "dependencies": {
         "@types/node": "*",
@@ -5133,9 +4670,9 @@
       "dev": true
     },
     "node_modules/@types/http-proxy": {
-      "version": "1.17.8",
-      "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz",
-      "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==",
+      "version": "1.17.9",
+      "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz",
+      "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==",
       "dev": true,
       "dependencies": {
         "@types/node": "*"
@@ -5190,9 +4727,9 @@
       "dev": true
     },
     "node_modules/@types/mime": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
-      "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.0.tgz",
+      "integrity": "sha512-fccbsHKqFDXClBZTDLA43zl0+TbxyIwyzIzwwhvoJvhNjOErCdeX2xJbURimv2EbSVUGav001PaCJg4mZxMl4w==",
       "dev": true
     },
     "node_modules/@types/minimatch": {
@@ -5218,9 +4755,9 @@
       "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
     },
     "node_modules/@types/prettier": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz",
-      "integrity": "sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz",
+      "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==",
       "dev": true
     },
     "node_modules/@types/prop-types": {
@@ -5298,12 +4835,12 @@
       }
     },
     "node_modules/@types/serve-static": {
-      "version": "1.13.10",
-      "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz",
-      "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==",
+      "version": "1.15.0",
+      "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz",
+      "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==",
       "dev": true,
       "dependencies": {
-        "@types/mime": "^1",
+        "@types/mime": "*",
         "@types/node": "*"
       }
     },
@@ -5353,9 +4890,9 @@
       }
     },
     "node_modules/@types/uglify-js": {
-      "version": "3.13.2",
-      "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.2.tgz",
-      "integrity": "sha512-/xFrPIo+4zOeNGtVMbf9rUm0N+i4pDf1ynExomqtokIJmVzR3962lJ1UE+MmexMkA0cmN9oTzg5Xcbwge0Ij2Q==",
+      "version": "3.16.0",
+      "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.16.0.tgz",
+      "integrity": "sha512-0yeUr92L3r0GLRnBOvtYK1v2SjqMIqQDHMl7GLb+l2L8+6LSFWEEWEIgVsPdMn5ImLM8qzWT8xFPtQYpp8co0g==",
       "dev": true,
       "dependencies": {
         "source-map": "^0.6.1"
@@ -5401,9 +4938,9 @@
       }
     },
     "node_modules/@types/webpack-sources/node_modules/source-map": {
-      "version": "0.7.3",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
-      "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+      "version": "0.7.4",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+      "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
       "dev": true,
       "engines": {
         "node": ">= 8"
@@ -5653,27 +5190,6 @@
         "node": ">= 0.6"
       }
     },
-    "node_modules/accepts/node_modules/mime-db": {
-      "version": "1.52.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
-      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/accepts/node_modules/mime-types": {
-      "version": "2.1.35",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
-      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-      "dev": true,
-      "dependencies": {
-        "mime-db": "1.52.0"
-      },
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
     "node_modules/acorn": {
       "version": "8.8.0",
       "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
@@ -5736,12 +5252,12 @@
       }
     },
     "node_modules/address": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz",
-      "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz",
+      "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==",
       "dev": true,
       "engines": {
-        "node": ">= 0.12.0"
+        "node": ">= 10.0.0"
       }
     },
     "node_modules/adjust-sourcemap-loader": {
@@ -5915,18 +5431,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/ansi-escapes/node_modules/type-fest": {
-      "version": "0.21.3",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
-      "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/ansi-html-community": {
       "version": "0.0.8",
       "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
@@ -5940,9 +5444,9 @@
       }
     },
     "node_modules/ansi-regex": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-      "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
       "engines": {
         "node": ">=8"
       }
@@ -5995,7 +5499,7 @@
     "node_modules/archive-type": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz",
-      "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=",
+      "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -6008,7 +5512,7 @@
     "node_modules/archive-type/node_modules/file-type": {
       "version": "4.4.0",
       "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
-      "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=",
+      "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -6055,7 +5559,7 @@
     "node_modules/arr-diff": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
-      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+      "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -6073,16 +5577,16 @@
     "node_modules/arr-union": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
-      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+      "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
       }
     },
     "node_modules/array-flatten": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
-      "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+      "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
       "dev": true
     },
     "node_modules/array-includes": {
@@ -6107,7 +5611,7 @@
     "node_modules/array-union": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
-      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+      "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==",
       "dev": true,
       "dependencies": {
         "array-uniq": "^1.0.1"
@@ -6119,7 +5623,7 @@
     "node_modules/array-uniq": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
-      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+      "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -6128,7 +5632,7 @@
     "node_modules/array-unique": {
       "version": "0.3.2",
       "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
-      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+      "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -6183,6 +5687,24 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/array.prototype.flatmap": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz",
+      "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.19.2",
+        "es-shim-unscopables": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/asn1": {
       "version": "0.2.4",
       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
@@ -6209,7 +5731,7 @@
     "node_modules/assign-symbols": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
-      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+      "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -6221,15 +5743,6 @@
       "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==",
       "dev": true
     },
-    "node_modules/astral-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
-      "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/async": {
       "version": "2.6.4",
       "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
@@ -6308,6 +5821,15 @@
       "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
       "dev": true
     },
+    "node_modules/axe-core": {
+      "version": "4.4.3",
+      "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz",
+      "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/axios": {
       "version": "0.21.1",
       "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
@@ -6347,27 +5869,6 @@
       "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==",
       "dev": true
     },
-    "node_modules/babel-eslint": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
-      "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
-      "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.",
-      "dev": true,
-      "dependencies": {
-        "@babel/code-frame": "^7.0.0",
-        "@babel/parser": "^7.7.0",
-        "@babel/traverse": "^7.7.0",
-        "@babel/types": "^7.7.0",
-        "eslint-visitor-keys": "^1.0.0",
-        "resolve": "^1.12.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "peerDependencies": {
-        "eslint": ">= 4.12.1"
-      }
-    },
     "node_modules/babel-jest": {
       "version": "26.6.3",
       "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz",
@@ -6639,13 +6140,13 @@
       }
     },
     "node_modules/babel-plugin-polyfill-corejs2": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz",
-      "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==",
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz",
+      "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==",
       "dev": true,
       "dependencies": {
-        "@babel/compat-data": "^7.13.11",
-        "@babel/helper-define-polyfill-provider": "^0.3.1",
+        "@babel/compat-data": "^7.17.7",
+        "@babel/helper-define-polyfill-provider": "^0.3.2",
         "semver": "^6.1.1"
       },
       "peerDependencies": {
@@ -6741,7 +6242,7 @@
     "node_modules/babel-polyfill": {
       "version": "6.26.0",
       "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
-      "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+      "integrity": "sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ==",
       "dev": true,
       "dependencies": {
         "babel-runtime": "^6.26.0",
@@ -6753,14 +6254,14 @@
       "version": "2.6.12",
       "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
       "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
-      "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.",
+      "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
       "dev": true,
       "hasInstallScript": true
     },
     "node_modules/babel-polyfill/node_modules/regenerator-runtime": {
       "version": "0.10.5",
       "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
-      "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+      "integrity": "sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==",
       "dev": true
     },
     "node_modules/babel-preset-current-node-syntax": {
@@ -6805,7 +6306,7 @@
     "node_modules/babel-runtime": {
       "version": "6.26.0",
       "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
-      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
       "dev": true,
       "dependencies": {
         "core-js": "^2.4.0",
@@ -6816,7 +6317,7 @@
       "version": "2.6.12",
       "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz",
       "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==",
-      "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.",
+      "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.",
       "dev": true,
       "hasInstallScript": true
     },
@@ -6852,7 +6353,7 @@
     "node_modules/base/node_modules/define-property": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-      "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+      "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
       "dev": true,
       "dependencies": {
         "is-descriptor": "^1.0.0"
@@ -6861,44 +6362,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/base/node_modules/is-accessor-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-      "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/base/node_modules/is-data-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-      "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/base/node_modules/is-descriptor": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-      "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-      "dev": true,
-      "dependencies": {
-        "is-accessor-descriptor": "^1.0.0",
-        "is-data-descriptor": "^1.0.0",
-        "kind-of": "^6.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/base64-js": {
       "version": "1.5.1",
       "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -6923,7 +6386,7 @@
     "node_modules/batch": {
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
-      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+      "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
       "dev": true
     },
     "node_modules/bcrypt-pbkdf": {
@@ -6964,7 +6427,7 @@
     "node_modules/bin-build/node_modules/cross-spawn": {
       "version": "5.1.0",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
-      "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+      "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -6976,7 +6439,7 @@
     "node_modules/bin-build/node_modules/execa": {
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
-      "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+      "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -6995,30 +6458,48 @@
     "node_modules/bin-build/node_modules/get-stream": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-      "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+      "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
       "dev": true,
       "optional": true,
       "engines": {
         "node": ">=4"
       }
     },
-    "node_modules/bin-build/node_modules/lru-cache": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+    "node_modules/bin-build/node_modules/shebang-command": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+      "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
       "dev": true,
       "optional": true,
       "dependencies": {
-        "pseudomap": "^1.0.2",
-        "yallist": "^2.1.2"
+        "shebang-regex": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/bin-build/node_modules/yallist": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+    "node_modules/bin-build/node_modules/shebang-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+      "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/bin-build/node_modules/which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
+      "optional": true,
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "which": "bin/which"
+      }
     },
     "node_modules/bin-check": {
       "version": "4.1.0",
@@ -7037,7 +6518,7 @@
     "node_modules/bin-check/node_modules/cross-spawn": {
       "version": "5.1.0",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
-      "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+      "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -7049,7 +6530,7 @@
     "node_modules/bin-check/node_modules/execa": {
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
-      "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+      "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -7068,30 +6549,48 @@
     "node_modules/bin-check/node_modules/get-stream": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-      "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+      "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
       "dev": true,
       "optional": true,
       "engines": {
         "node": ">=4"
       }
     },
-    "node_modules/bin-check/node_modules/lru-cache": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+    "node_modules/bin-check/node_modules/shebang-command": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+      "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
       "dev": true,
       "optional": true,
       "dependencies": {
-        "pseudomap": "^1.0.2",
-        "yallist": "^2.1.2"
+        "shebang-regex": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/bin-check/node_modules/yallist": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+    "node_modules/bin-check/node_modules/shebang-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+      "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/bin-check/node_modules/which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
+      "optional": true,
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "which": "bin/which"
+      }
     },
     "node_modules/bin-version": {
       "version": "3.1.0",
@@ -7167,7 +6666,7 @@
     "node_modules/bin-wrapper/node_modules/download/node_modules/pify": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+      "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -7187,7 +6686,7 @@
     "node_modules/bin-wrapper/node_modules/get-stream": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-      "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+      "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -7226,7 +6725,7 @@
     "node_modules/bin-wrapper/node_modules/got/node_modules/pify": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+      "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -7249,7 +6748,7 @@
     "node_modules/bin-wrapper/node_modules/make-dir/node_modules/pify": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+      "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -7295,7 +6794,7 @@
     "node_modules/bin-wrapper/node_modules/prepend-http": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
-      "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+      "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -7305,7 +6804,7 @@
     "node_modules/bin-wrapper/node_modules/url-parse-lax": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
-      "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+      "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -7359,6 +6858,15 @@
         "npm": "1.2.8000 || >= 1.4.16"
       }
     },
+    "node_modules/body-parser/node_modules/bytes": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/body-parser/node_modules/debug": {
       "version": "2.6.9",
       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -7371,7 +6879,7 @@
     "node_modules/body-parser/node_modules/ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
     "node_modules/body-parser/node_modules/qs": {
@@ -7392,7 +6900,7 @@
     "node_modules/bonjour": {
       "version": "3.5.0",
       "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
-      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+      "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==",
       "dev": true,
       "dependencies": {
         "array-flatten": "^2.1.0",
@@ -7403,12 +6911,6 @@
         "multicast-dns-service-types": "^1.1.0"
       }
     },
-    "node_modules/bonjour/node_modules/array-flatten": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
-      "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
-      "dev": true
-    },
     "node_modules/boolbase": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
@@ -7456,9 +6958,9 @@
       "dev": true
     },
     "node_modules/browserslist": {
-      "version": "4.20.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
-      "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
+      "version": "4.21.3",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
+      "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
       "dev": true,
       "funding": [
         {
@@ -7471,11 +6973,10 @@
         }
       ],
       "dependencies": {
-        "caniuse-lite": "^1.0.30001332",
-        "electron-to-chromium": "^1.4.118",
-        "escalade": "^3.1.1",
-        "node-releases": "^2.0.3",
-        "picocolors": "^1.0.0"
+        "caniuse-lite": "^1.0.30001370",
+        "electron-to-chromium": "^1.4.202",
+        "node-releases": "^2.0.6",
+        "update-browserslist-db": "^1.0.5"
       },
       "bin": {
         "browserslist": "cli.js"
@@ -7539,7 +7040,7 @@
     "node_modules/buffer-crc32": {
       "version": "0.2.13",
       "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
-      "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+      "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -7549,7 +7050,7 @@
     "node_modules/buffer-fill": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
-      "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+      "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==",
       "dev": true,
       "optional": true
     },
@@ -7566,9 +7067,9 @@
       "dev": true
     },
     "node_modules/bytes": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
-      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+      "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
       "dev": true,
       "engines": {
         "node": ">= 0.8"
@@ -7602,7 +7103,7 @@
     "node_modules/cacheable-request": {
       "version": "2.1.4",
       "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
-      "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=",
+      "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -7618,7 +7119,7 @@
     "node_modules/cacheable-request/node_modules/get-stream": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-      "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+      "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -7628,7 +7129,7 @@
     "node_modules/cacheable-request/node_modules/lowercase-keys": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
-      "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
+      "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -7653,7 +7154,7 @@
     "node_modules/cacheable-request/node_modules/prepend-http": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
-      "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+      "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -7663,7 +7164,7 @@
     "node_modules/cacheable-request/node_modules/sort-keys": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
-      "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
+      "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -7728,9 +7229,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001332",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz",
-      "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==",
+      "version": "1.0.30001374",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001374.tgz",
+      "integrity": "sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw==",
       "dev": true,
       "funding": [
         {
@@ -7807,12 +7308,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/chardet": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
-      "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
-      "dev": true
-    },
     "node_modules/charenc": {
       "version": "0.0.2",
       "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
@@ -7924,7 +7419,7 @@
     "node_modules/class-utils/node_modules/define-property": {
       "version": "0.2.5",
       "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-      "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+      "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
       "dev": true,
       "dependencies": {
         "is-descriptor": "^0.1.0"
@@ -7933,6 +7428,83 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/class-utils/node_modules/is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+      "dev": true,
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+      "dev": true,
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/class-utils/node_modules/is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+      "dev": true
+    },
+    "node_modules/class-utils/node_modules/is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+      "dev": true,
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+      "dev": true,
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/class-utils/node_modules/is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "dev": true,
+      "dependencies": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/class-utils/node_modules/kind-of": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+      "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/classnames": {
       "version": "2.2.6",
       "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
@@ -7984,27 +7556,6 @@
         "webpack": "*"
       }
     },
-    "node_modules/cli-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
-      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
-      "dev": true,
-      "dependencies": {
-        "restore-cursor": "^3.1.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/cli-width": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
-      "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
-      "dev": true,
-      "engines": {
-        "node": ">= 10"
-      }
-    },
     "node_modules/cliui": {
       "version": "7.0.4",
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -8033,7 +7584,7 @@
     "node_modules/clone-response": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
-      "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+      "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -8043,7 +7594,7 @@
     "node_modules/co": {
       "version": "4.6.0",
       "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+      "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
       "dev": true,
       "engines": {
         "iojs": ">= 1.0.0",
@@ -8059,7 +7610,7 @@
     "node_modules/collection-visit": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
-      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
       "dev": true,
       "dependencies": {
         "map-visit": "^1.0.0",
@@ -8142,7 +7693,7 @@
     "node_modules/commondir": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
-      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+      "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
       "dev": true
     },
     "node_modules/component-emitter": {
@@ -8181,15 +7732,6 @@
         "node": ">= 0.8.0"
       }
     },
-    "node_modules/compression/node_modules/bytes": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
-      "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.8"
-      }
-    },
     "node_modules/compression/node_modules/debug": {
       "version": "2.6.9",
       "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -8202,7 +7744,7 @@
     "node_modules/compression/node_modules/ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
     "node_modules/concat-map": {
@@ -8256,15 +7798,6 @@
         "redux": "^3.6.0 || ^4.0.0"
       }
     },
-    "node_modules/contains-path": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
-      "integrity": "sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/content-disposition": {
       "version": "0.5.4",
       "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@ -8325,7 +7858,7 @@
     "node_modules/cookie-signature": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
-      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+      "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
       "dev": true
     },
     "node_modules/cookiejar": {
@@ -8337,7 +7870,7 @@
     "node_modules/copy-descriptor": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
-      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+      "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -8354,12 +7887,12 @@
       }
     },
     "node_modules/core-js-compat": {
-      "version": "3.22.2",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.2.tgz",
-      "integrity": "sha512-Fns9lU06ZJ07pdfmPMu7OnkIKGPKDzXKIiuGlSvHHapwqMUF2QnnsWwtueFZtSyZEilP0o6iUeHQwpn7LxtLUw==",
+      "version": "3.24.1",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.24.1.tgz",
+      "integrity": "sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw==",
       "dev": true,
       "dependencies": {
-        "browserslist": "^4.20.2",
+        "browserslist": "^4.21.3",
         "semver": "7.0.0"
       },
       "funding": {
@@ -8428,19 +7961,17 @@
       }
     },
     "node_modules/cross-spawn": {
-      "version": "6.0.5",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
       "dev": true,
       "dependencies": {
-        "nice-try": "^1.0.4",
-        "path-key": "^2.0.1",
-        "semver": "^5.5.0",
-        "shebang-command": "^1.2.0",
-        "which": "^1.2.9"
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
       },
       "engines": {
-        "node": ">=4.8"
+        "node": ">= 8"
       }
     },
     "node_modules/crypt": {
@@ -8463,9 +7994,9 @@
       }
     },
     "node_modules/css-declaration-sorter": {
-      "version": "6.2.2",
-      "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz",
-      "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==",
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz",
+      "integrity": "sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og==",
       "dev": true,
       "engines": {
         "node": "^10 || ^12 || >=14"
@@ -8502,6 +8033,18 @@
         "webpack": "^4.27.0 || ^5.0.0"
       }
     },
+    "node_modules/css-loader/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/css-loader/node_modules/semver": {
       "version": "7.3.7",
       "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
@@ -8517,6 +8060,12 @@
         "node": ">=10"
       }
     },
+    "node_modules/css-loader/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
     "node_modules/css-mediaquery": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz",
@@ -8622,36 +8171,36 @@
       }
     },
     "node_modules/cssnano-preset-default": {
-      "version": "5.2.7",
-      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.7.tgz",
-      "integrity": "sha512-JiKP38ymZQK+zVKevphPzNSGHSlTI+AOwlasoSRtSVMUU285O7/6uZyd5NbW92ZHp41m0sSHe6JoZosakj63uA==",
+      "version": "5.2.12",
+      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz",
+      "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==",
       "dev": true,
       "dependencies": {
-        "css-declaration-sorter": "^6.2.2",
+        "css-declaration-sorter": "^6.3.0",
         "cssnano-utils": "^3.1.0",
         "postcss-calc": "^8.2.3",
         "postcss-colormin": "^5.3.0",
-        "postcss-convert-values": "^5.1.0",
-        "postcss-discard-comments": "^5.1.1",
+        "postcss-convert-values": "^5.1.2",
+        "postcss-discard-comments": "^5.1.2",
         "postcss-discard-duplicates": "^5.1.0",
         "postcss-discard-empty": "^5.1.1",
         "postcss-discard-overridden": "^5.1.0",
-        "postcss-merge-longhand": "^5.1.4",
-        "postcss-merge-rules": "^5.1.1",
+        "postcss-merge-longhand": "^5.1.6",
+        "postcss-merge-rules": "^5.1.2",
         "postcss-minify-font-values": "^5.1.0",
         "postcss-minify-gradients": "^5.1.1",
-        "postcss-minify-params": "^5.1.2",
-        "postcss-minify-selectors": "^5.2.0",
+        "postcss-minify-params": "^5.1.3",
+        "postcss-minify-selectors": "^5.2.1",
         "postcss-normalize-charset": "^5.1.0",
         "postcss-normalize-display-values": "^5.1.0",
-        "postcss-normalize-positions": "^5.1.0",
-        "postcss-normalize-repeat-style": "^5.1.0",
+        "postcss-normalize-positions": "^5.1.1",
+        "postcss-normalize-repeat-style": "^5.1.1",
         "postcss-normalize-string": "^5.1.0",
         "postcss-normalize-timing-functions": "^5.1.0",
         "postcss-normalize-unicode": "^5.1.0",
         "postcss-normalize-url": "^5.1.0",
         "postcss-normalize-whitespace": "^5.1.1",
-        "postcss-ordered-values": "^5.1.1",
+        "postcss-ordered-values": "^5.1.3",
         "postcss-reduce-initial": "^5.1.0",
         "postcss-reduce-transforms": "^5.1.0",
         "postcss-svgo": "^5.1.0",
@@ -8790,7 +8339,7 @@
     "node_modules/decamelize": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+      "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -8834,7 +8383,7 @@
     "node_modules/decompress-response": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
-      "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+      "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -8862,7 +8411,7 @@
     "node_modules/decompress-tar/node_modules/file-type": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
-      "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+      "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -8914,7 +8463,7 @@
     "node_modules/decompress-targz/node_modules/file-type": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
-      "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+      "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -8924,7 +8473,7 @@
     "node_modules/decompress-unzip": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
-      "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
+      "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -8940,7 +8489,7 @@
     "node_modules/decompress-unzip/node_modules/file-type": {
       "version": "3.9.0",
       "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
-      "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
+      "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -8950,7 +8499,7 @@
     "node_modules/decompress-unzip/node_modules/get-stream": {
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
-      "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
+      "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -8964,7 +8513,7 @@
     "node_modules/decompress-unzip/node_modules/pify": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -8987,7 +8536,7 @@
     "node_modules/decompress/node_modules/make-dir/node_modules/pify": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+      "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -8997,7 +8546,7 @@
     "node_modules/decompress/node_modules/pify": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -9048,20 +8597,6 @@
         "node": ">= 10"
       }
     },
-    "node_modules/default-gateway/node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/default-gateway/node_modules/execa": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -9121,51 +8656,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/default-gateway/node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/default-gateway/node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/default-gateway/node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/default-gateway/node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "dev": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/define-lazy-prop": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
@@ -9203,44 +8693,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/define-property/node_modules/is-accessor-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-      "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/define-property/node_modules/is-data-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-      "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/define-property/node_modules/is-descriptor": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-      "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-      "dev": true,
-      "dependencies": {
-        "is-accessor-descriptor": "^1.0.0",
-        "is-data-descriptor": "^1.0.0",
-        "kind-of": "^6.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/del": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz",
@@ -9344,7 +8796,7 @@
     "node_modules/detect-port-alt/node_modules/ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
     "node_modules/diacritics": {
@@ -9382,7 +8834,7 @@
     "node_modules/dns-equal": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
-      "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+      "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==",
       "dev": true
     },
     "node_modules/dns-packet": {
@@ -9398,7 +8850,7 @@
     "node_modules/dns-txt": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
-      "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+      "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==",
       "dev": true,
       "dependencies": {
         "buffer-indexof": "^1.0.0"
@@ -9589,7 +9041,7 @@
     "node_modules/download/node_modules/file-type": {
       "version": "5.2.0",
       "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
-      "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+      "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -9599,7 +9051,7 @@
     "node_modules/download/node_modules/get-stream": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-      "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+      "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -9622,7 +9074,7 @@
     "node_modules/download/node_modules/pify": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+      "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -9636,9 +9088,9 @@
       "dev": true
     },
     "node_modules/duplexer3": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
-      "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz",
+      "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==",
       "dev": true,
       "optional": true
     },
@@ -9655,13 +9107,13 @@
     "node_modules/ee-first": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
       "dev": true
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.123",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.123.tgz",
-      "integrity": "sha512-0pHGE53WkYoFbsgwYcVKEpWa6jbzlvkohIEA2CUoZ9b5KC+w/zlMiQHvW/4IBcOh7YoEFqRNavgTk02TBoUTUw==",
+      "version": "1.4.211",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.211.tgz",
+      "integrity": "sha512-BZSbMpyFQU0KBJ1JG26XGeFI3i4op+qOYGxftmZXFZoHkhLgsSv4DHDJfl8ogII3hIuzGt51PaZ195OVu0yJ9A==",
       "dev": true
     },
     "node_modules/email-prop-type": {
@@ -9693,9 +9145,9 @@
       }
     },
     "node_modules/emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "version": "9.2.2",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
       "dev": true
     },
     "node_modules/emojis-list": {
@@ -9710,7 +9162,7 @@
     "node_modules/encodeurl": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
-      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
       "dev": true,
       "engines": {
         "node": ">= 0.8"
@@ -9726,9 +9178,9 @@
       }
     },
     "node_modules/enhanced-resolve": {
-      "version": "5.9.3",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz",
-      "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==",
+      "version": "5.10.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
+      "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
       "dev": true,
       "dependencies": {
         "graceful-fs": "^4.2.4",
@@ -9860,12 +9312,12 @@
       }
     },
     "node_modules/error-stack-parser": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.7.tgz",
-      "integrity": "sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA==",
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
+      "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
       "dev": true,
       "dependencies": {
-        "stackframe": "^1.1.1"
+        "stackframe": "^1.3.4"
       }
     },
     "node_modules/es-abstract": {
@@ -9953,7 +9405,7 @@
     "node_modules/escape-html": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
-      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
       "dev": true
     },
     "node_modules/escape-string-regexp": {
@@ -9986,13 +9438,43 @@
         "source-map": "~0.6.1"
       }
     },
-    "node_modules/escodegen/node_modules/estraverse": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+    "node_modules/escodegen/node_modules/levn": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+      "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
       "dev": true,
+      "dependencies": {
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
+      },
       "engines": {
-        "node": ">=4.0"
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/escodegen/node_modules/optionator": {
+      "version": "0.8.3",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+      "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+      "dev": true,
+      "dependencies": {
+        "deep-is": "~0.1.3",
+        "fast-levenshtein": "~2.0.6",
+        "levn": "~0.3.0",
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2",
+        "word-wrap": "~1.2.3"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/escodegen/node_modules/prelude-ls": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+      "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
     "node_modules/escodegen/node_modules/source-map": {
@@ -10005,47 +9487,57 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/escodegen/node_modules/type-check": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+      "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
+      "dev": true,
+      "dependencies": {
+        "prelude-ls": "~1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
     "node_modules/eslint": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
-      "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
+      "version": "8.18.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz",
+      "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==",
       "dev": true,
       "dependencies": {
-        "@babel/code-frame": "^7.0.0",
+        "@eslint/eslintrc": "^1.3.0",
+        "@humanwhocodes/config-array": "^0.9.2",
         "ajv": "^6.10.0",
-        "chalk": "^2.1.0",
-        "cross-spawn": "^6.0.5",
-        "debug": "^4.0.1",
+        "chalk": "^4.0.0",
+        "cross-spawn": "^7.0.2",
+        "debug": "^4.3.2",
         "doctrine": "^3.0.0",
-        "eslint-scope": "^5.0.0",
-        "eslint-utils": "^1.4.3",
-        "eslint-visitor-keys": "^1.1.0",
-        "espree": "^6.1.2",
-        "esquery": "^1.0.1",
+        "escape-string-regexp": "^4.0.0",
+        "eslint-scope": "^7.1.1",
+        "eslint-utils": "^3.0.0",
+        "eslint-visitor-keys": "^3.3.0",
+        "espree": "^9.3.2",
+        "esquery": "^1.4.0",
         "esutils": "^2.0.2",
-        "file-entry-cache": "^5.0.1",
+        "fast-deep-equal": "^3.1.3",
+        "file-entry-cache": "^6.0.1",
         "functional-red-black-tree": "^1.0.1",
-        "glob-parent": "^5.0.0",
-        "globals": "^12.1.0",
-        "ignore": "^4.0.6",
+        "glob-parent": "^6.0.1",
+        "globals": "^13.15.0",
+        "ignore": "^5.2.0",
         "import-fresh": "^3.0.0",
         "imurmurhash": "^0.1.4",
-        "inquirer": "^7.0.0",
         "is-glob": "^4.0.0",
-        "js-yaml": "^3.13.1",
+        "js-yaml": "^4.1.0",
         "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.3.0",
-        "lodash": "^4.17.14",
-        "minimatch": "^3.0.4",
-        "mkdirp": "^0.5.1",
+        "levn": "^0.4.1",
+        "lodash.merge": "^4.6.2",
+        "minimatch": "^3.1.2",
         "natural-compare": "^1.4.0",
-        "optionator": "^0.8.3",
-        "progress": "^2.0.0",
-        "regexpp": "^2.0.1",
-        "semver": "^6.1.2",
-        "strip-ansi": "^5.2.0",
-        "strip-json-comments": "^3.0.1",
-        "table": "^5.2.3",
+        "optionator": "^0.9.1",
+        "regexpp": "^3.2.0",
+        "strip-ansi": "^6.0.1",
+        "strip-json-comments": "^3.1.0",
         "text-table": "^0.2.0",
         "v8-compile-cache": "^2.0.3"
       },
@@ -10053,49 +9545,59 @@
         "eslint": "bin/eslint.js"
       },
       "engines": {
-        "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       },
       "funding": {
         "url": "https://opencollective.com/eslint"
       }
     },
     "node_modules/eslint-config-airbnb": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.1.0.tgz",
-      "integrity": "sha512-kZFuQC/MPnH7KJp6v95xsLBf63G/w7YqdPfQ0MUanxQ7zcKUNG8j+sSY860g3NwCBOa62apw16J6pRN+AOgXzw==",
+      "version": "19.0.4",
+      "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz",
+      "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==",
       "dev": true,
       "dependencies": {
-        "eslint-config-airbnb-base": "^14.1.0",
-        "object.assign": "^4.1.0",
-        "object.entries": "^1.1.1"
+        "eslint-config-airbnb-base": "^15.0.0",
+        "object.assign": "^4.1.2",
+        "object.entries": "^1.1.5"
       },
       "engines": {
-        "node": ">= 6"
+        "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0"
       },
       "peerDependencies": {
-        "eslint": "^5.16.0 || ^6.8.0",
-        "eslint-plugin-import": "^2.20.1",
-        "eslint-plugin-jsx-a11y": "^6.2.3",
-        "eslint-plugin-react": "^7.19.0",
-        "eslint-plugin-react-hooks": "^2.5.0 || ^1.7.0"
+        "eslint": "^7.32.0 || ^8.2.0",
+        "eslint-plugin-import": "^2.25.3",
+        "eslint-plugin-jsx-a11y": "^6.5.1",
+        "eslint-plugin-react": "^7.28.0",
+        "eslint-plugin-react-hooks": "^4.3.0"
       }
     },
     "node_modules/eslint-config-airbnb-base": {
-      "version": "14.2.1",
-      "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz",
-      "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==",
+      "version": "15.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
+      "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
       "dev": true,
       "dependencies": {
         "confusing-browser-globals": "^1.0.10",
         "object.assign": "^4.1.2",
-        "object.entries": "^1.1.2"
+        "object.entries": "^1.1.5",
+        "semver": "^6.3.0"
       },
       "engines": {
-        "node": ">= 6"
+        "node": "^10.12.0 || >=12.0.0"
       },
       "peerDependencies": {
-        "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0",
-        "eslint-plugin-import": "^2.22.1"
+        "eslint": "^7.32.0 || ^8.2.0",
+        "eslint-plugin-import": "^2.25.2"
+      }
+    },
+    "node_modules/eslint-config-airbnb-base/node_modules/semver": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+      "dev": true,
+      "bin": {
+        "semver": "bin/semver.js"
       }
     },
     "node_modules/eslint-import-resolver-node": {
@@ -10207,30 +9709,30 @@
       }
     },
     "node_modules/eslint-plugin-import": {
-      "version": "2.22.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz",
-      "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==",
+      "version": "2.26.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
+      "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
       "dev": true,
       "dependencies": {
-        "array-includes": "^3.1.1",
-        "array.prototype.flat": "^1.2.3",
-        "contains-path": "^0.1.0",
+        "array-includes": "^3.1.4",
+        "array.prototype.flat": "^1.2.5",
         "debug": "^2.6.9",
-        "doctrine": "1.5.0",
-        "eslint-import-resolver-node": "^0.3.4",
-        "eslint-module-utils": "^2.6.0",
+        "doctrine": "^2.1.0",
+        "eslint-import-resolver-node": "^0.3.6",
+        "eslint-module-utils": "^2.7.3",
         "has": "^1.0.3",
-        "minimatch": "^3.0.4",
-        "object.values": "^1.1.1",
-        "read-pkg-up": "^2.0.0",
-        "resolve": "^1.17.0",
-        "tsconfig-paths": "^3.9.0"
+        "is-core-module": "^2.8.1",
+        "is-glob": "^4.0.3",
+        "minimatch": "^3.1.2",
+        "object.values": "^1.1.5",
+        "resolve": "^1.22.0",
+        "tsconfig-paths": "^3.14.1"
       },
       "engines": {
         "node": ">=4"
       },
       "peerDependencies": {
-        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0"
+        "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8"
       }
     },
     "node_modules/eslint-plugin-import/node_modules/debug": {
@@ -10243,111 +9745,104 @@
       }
     },
     "node_modules/eslint-plugin-import/node_modules/doctrine": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
-      "integrity": "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+      "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
       "dev": true,
       "dependencies": {
-        "esutils": "^2.0.2",
-        "isarray": "^1.0.0"
+        "esutils": "^2.0.2"
       },
       "engines": {
         "node": ">=0.10.0"
       }
     },
-    "node_modules/eslint-plugin-import/node_modules/isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
-      "dev": true
-    },
     "node_modules/eslint-plugin-import/node_modules/ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
       "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
+    "node_modules/eslint-plugin-import/node_modules/resolve": {
+      "version": "1.22.1",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+      "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+      "dev": true,
+      "dependencies": {
+        "is-core-module": "^2.9.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/eslint-plugin-jsx-a11y": {
-      "version": "6.2.3",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz",
-      "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==",
+      "version": "6.5.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz",
+      "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==",
       "dev": true,
       "dependencies": {
-        "@babel/runtime": "^7.4.5",
-        "aria-query": "^3.0.0",
-        "array-includes": "^3.0.3",
+        "@babel/runtime": "^7.16.3",
+        "aria-query": "^4.2.2",
+        "array-includes": "^3.1.4",
         "ast-types-flow": "^0.0.7",
-        "axobject-query": "^2.0.2",
-        "damerau-levenshtein": "^1.0.4",
-        "emoji-regex": "^7.0.2",
+        "axe-core": "^4.3.5",
+        "axobject-query": "^2.2.0",
+        "damerau-levenshtein": "^1.0.7",
+        "emoji-regex": "^9.2.2",
         "has": "^1.0.3",
-        "jsx-ast-utils": "^2.2.1"
+        "jsx-ast-utils": "^3.2.1",
+        "language-tags": "^1.0.5",
+        "minimatch": "^3.0.4"
       },
       "engines": {
         "node": ">=4.0"
       },
       "peerDependencies": {
-        "eslint": "^3 || ^4 || ^5 || ^6"
+        "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
       }
     },
-    "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz",
-      "integrity": "sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw==",
-      "dev": true,
-      "dependencies": {
-        "ast-types-flow": "0.0.7",
-        "commander": "^2.11.0"
-      }
-    },
-    "node_modules/eslint-plugin-jsx-a11y/node_modules/commander": {
-      "version": "2.20.3",
-      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-      "dev": true
-    },
-    "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
-      "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
-      "dev": true
-    },
     "node_modules/eslint-plugin-react": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz",
-      "integrity": "sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ==",
+      "version": "7.30.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz",
+      "integrity": "sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A==",
       "dev": true,
       "dependencies": {
-        "array-includes": "^3.1.1",
+        "array-includes": "^3.1.5",
+        "array.prototype.flatmap": "^1.3.0",
         "doctrine": "^2.1.0",
-        "has": "^1.0.3",
-        "jsx-ast-utils": "^2.2.3",
-        "object.entries": "^1.1.1",
-        "object.fromentries": "^2.0.2",
-        "object.values": "^1.1.1",
-        "prop-types": "^15.7.2",
-        "resolve": "^1.15.1",
+        "estraverse": "^5.3.0",
+        "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+        "minimatch": "^3.1.2",
+        "object.entries": "^1.1.5",
+        "object.fromentries": "^2.0.5",
+        "object.hasown": "^1.1.1",
+        "object.values": "^1.1.5",
+        "prop-types": "^15.8.1",
+        "resolve": "^2.0.0-next.3",
         "semver": "^6.3.0",
-        "string.prototype.matchall": "^4.0.2",
-        "xregexp": "^4.3.0"
+        "string.prototype.matchall": "^4.0.7"
       },
       "engines": {
         "node": ">=4"
       },
       "peerDependencies": {
-        "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0"
+        "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
       }
     },
     "node_modules/eslint-plugin-react-hooks": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz",
-      "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==",
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+      "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
       "dev": true,
       "engines": {
-        "node": ">=7"
+        "node": ">=10"
       },
       "peerDependencies": {
-        "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0"
+        "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
       }
     },
     "node_modules/eslint-plugin-react/node_modules/doctrine": {
@@ -10362,6 +9857,34 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/eslint-plugin-react/node_modules/prop-types": {
+      "version": "15.8.1",
+      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+      "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+      "dev": true,
+      "dependencies": {
+        "loose-envify": "^1.4.0",
+        "object-assign": "^4.1.1",
+        "react-is": "^16.13.1"
+      }
+    },
+    "node_modules/eslint-plugin-react/node_modules/resolve": {
+      "version": "2.0.0-next.4",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
+      "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
+      "dev": true,
+      "dependencies": {
+        "is-core-module": "^2.9.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/eslint-plugin-react/node_modules/semver": {
       "version": "6.3.0",
       "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -10384,126 +9907,227 @@
         "node": ">=8.0.0"
       }
     },
+    "node_modules/eslint-scope/node_modules/estraverse": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+      "dev": true,
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
     "node_modules/eslint-utils": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
-      "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
       "dev": true,
       "dependencies": {
-        "eslint-visitor-keys": "^1.1.0"
+        "eslint-visitor-keys": "^2.0.0"
       },
       "engines": {
-        "node": ">=6"
+        "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mysticatea"
+      },
+      "peerDependencies": {
+        "eslint": ">=5"
       }
     },
     "node_modules/eslint-visitor-keys": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-      "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+      "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
       "dev": true,
       "engines": {
-        "node": ">=4"
+        "node": ">=10"
       }
     },
-    "node_modules/eslint/node_modules/ansi-regex": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
-      "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
+    "node_modules/eslint/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
       "dev": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
       "engines": {
-        "node": ">=6"
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/eslint/node_modules/globals": {
-      "version": "12.4.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
-      "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
+    "node_modules/eslint/node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+      "dev": true
+    },
+    "node_modules/eslint/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "dependencies": {
-        "type-fest": "^0.8.1"
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/eslint/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/eslint/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true
+    },
+    "node_modules/eslint/node_modules/escape-string-regexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/eslint/node_modules/ignore": {
-      "version": "4.0.6",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
-      "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+    "node_modules/eslint/node_modules/eslint-scope": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+      "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
       "dev": true,
+      "dependencies": {
+        "esrecurse": "^4.3.0",
+        "estraverse": "^5.2.0"
+      },
       "engines": {
-        "node": ">= 4"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
-    "node_modules/eslint/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+    "node_modules/eslint/node_modules/eslint-visitor-keys": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+      "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+      "dev": true,
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
+    "node_modules/eslint/node_modules/glob-parent": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
       "dev": true,
       "dependencies": {
-        "brace-expansion": "^1.1.7"
+        "is-glob": "^4.0.3"
       },
       "engines": {
-        "node": "*"
+        "node": ">=10.13.0"
       }
     },
-    "node_modules/eslint/node_modules/semver": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+    "node_modules/eslint/node_modules/globals": {
+      "version": "13.17.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+      "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
       "dev": true,
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/eslint/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/eslint/node_modules/js-yaml": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+      "dev": true,
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
       "bin": {
-        "semver": "bin/semver.js"
+        "js-yaml": "bin/js-yaml.js"
       }
     },
-    "node_modules/eslint/node_modules/strip-ansi": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-      "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+    "node_modules/eslint/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
       "dev": true,
       "dependencies": {
-        "ansi-regex": "^4.1.0"
+        "has-flag": "^4.0.0"
       },
       "engines": {
-        "node": ">=6"
+        "node": ">=8"
       }
     },
     "node_modules/eslint/node_modules/type-fest": {
-      "version": "0.8.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
-      "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
       "dev": true,
       "engines": {
-        "node": ">=8"
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/espree": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
-      "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
+      "version": "9.3.3",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz",
+      "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==",
       "dev": true,
       "dependencies": {
-        "acorn": "^7.1.1",
-        "acorn-jsx": "^5.2.0",
-        "eslint-visitor-keys": "^1.1.0"
+        "acorn": "^8.8.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.3.0"
       },
       "engines": {
-        "node": ">=6.0.0"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/espree/node_modules/acorn": {
-      "version": "7.4.1",
-      "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-      "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+    "node_modules/espree/node_modules/eslint-visitor-keys": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+      "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
       "dev": true,
-      "bin": {
-        "acorn": "bin/acorn"
-      },
       "engines": {
-        "node": ">=0.4.0"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
     "node_modules/esprima": {
@@ -10531,15 +10155,6 @@
         "node": ">=0.10"
       }
     },
-    "node_modules/esquery/node_modules/estraverse": {
-      "version": "5.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
     "node_modules/esrecurse": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
@@ -10552,7 +10167,7 @@
         "node": ">=4.0"
       }
     },
-    "node_modules/esrecurse/node_modules/estraverse": {
+    "node_modules/estraverse": {
       "version": "5.3.0",
       "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
       "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
@@ -10561,15 +10176,6 @@
         "node": ">=4.0"
       }
     },
-    "node_modules/estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
-      "dev": true,
-      "engines": {
-        "node": ">=4.0"
-      }
-    },
     "node_modules/esutils": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -10582,7 +10188,7 @@
     "node_modules/etag": {
       "version": "1.8.1",
       "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
-      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
       "dev": true,
       "engines": {
         "node": ">= 0.6"
@@ -10594,6 +10200,15 @@
       "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
       "dev": true
     },
+    "node_modules/events": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.8.x"
+      }
+    },
     "node_modules/exec-buffer": {
       "version": "3.2.0",
       "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz",
@@ -10614,7 +10229,7 @@
     "node_modules/exec-buffer/node_modules/cross-spawn": {
       "version": "5.1.0",
       "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
-      "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+      "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -10626,7 +10241,7 @@
     "node_modules/exec-buffer/node_modules/execa": {
       "version": "0.7.0",
       "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
-      "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+      "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -10645,40 +10260,58 @@
     "node_modules/exec-buffer/node_modules/get-stream": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-      "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+      "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
       "dev": true,
       "optional": true,
       "engines": {
         "node": ">=4"
       }
     },
-    "node_modules/exec-buffer/node_modules/lru-cache": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+    "node_modules/exec-buffer/node_modules/pify": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+      "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+      "dev": true,
+      "optional": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/exec-buffer/node_modules/shebang-command": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+      "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
       "dev": true,
       "optional": true,
       "dependencies": {
-        "pseudomap": "^1.0.2",
-        "yallist": "^2.1.2"
+        "shebang-regex": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/exec-buffer/node_modules/pify": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+    "node_modules/exec-buffer/node_modules/shebang-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+      "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
       "dev": true,
       "optional": true,
       "engines": {
-        "node": ">=4"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/exec-buffer/node_modules/yallist": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+    "node_modules/exec-buffer/node_modules/which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
       "dev": true,
-      "optional": true
+      "optional": true,
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "which": "bin/which"
+      }
     },
     "node_modules/exec-sh": {
       "version": "0.3.6",
@@ -10704,6 +10337,64 @@
         "node": ">=6"
       }
     },
+    "node_modules/execa/node_modules/cross-spawn": {
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+      "dev": true,
+      "dependencies": {
+        "nice-try": "^1.0.4",
+        "path-key": "^2.0.1",
+        "semver": "^5.5.0",
+        "shebang-command": "^1.2.0",
+        "which": "^1.2.9"
+      },
+      "engines": {
+        "node": ">=4.8"
+      }
+    },
+    "node_modules/execa/node_modules/path-key": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+      "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/execa/node_modules/shebang-command": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+      "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
+      "dev": true,
+      "dependencies": {
+        "shebang-regex": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/execa/node_modules/shebang-regex": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+      "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/execa/node_modules/which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "which": "bin/which"
+      }
+    },
     "node_modules/executable": {
       "version": "4.1.1",
       "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz",
@@ -10720,7 +10411,7 @@
     "node_modules/executable/node_modules/pify": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -10736,7 +10427,7 @@
     "node_modules/exit": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
-      "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+      "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
       "dev": true,
       "engines": {
         "node": ">= 0.8.0"
@@ -10745,7 +10436,7 @@
     "node_modules/expand-brackets": {
       "version": "2.1.4",
       "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
-      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+      "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
       "dev": true,
       "dependencies": {
         "debug": "^2.3.3",
@@ -10772,7 +10463,7 @@
     "node_modules/expand-brackets/node_modules/define-property": {
       "version": "0.2.5",
       "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-      "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+      "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
       "dev": true,
       "dependencies": {
         "is-descriptor": "^0.1.0"
@@ -10784,7 +10475,7 @@
     "node_modules/expand-brackets/node_modules/extend-shallow": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-      "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+      "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
       "dev": true,
       "dependencies": {
         "is-extendable": "^0.1.0"
@@ -10793,10 +10484,96 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/expand-brackets/node_modules/is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+      "dev": true,
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+      "dev": true,
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+      "dev": true
+    },
+    "node_modules/expand-brackets/node_modules/is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+      "dev": true,
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+      "dev": true,
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "dev": true,
+      "dependencies": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expand-brackets/node_modules/kind-of": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+      "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/expand-brackets/node_modules/ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
     "node_modules/expect": {
@@ -10850,9 +10627,9 @@
       "dev": true
     },
     "node_modules/express": {
-      "version": "4.18.0",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz",
-      "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==",
+      "version": "4.18.1",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
+      "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
       "dev": true,
       "dependencies": {
         "accepts": "~1.3.8",
@@ -10891,6 +10668,12 @@
         "node": ">= 0.10.0"
       }
     },
+    "node_modules/express/node_modules/array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+      "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
+      "dev": true
+    },
     "node_modules/express/node_modules/cookie": {
       "version": "0.5.0",
       "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
@@ -10912,13 +10695,13 @@
     "node_modules/express/node_modules/ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
     "node_modules/express/node_modules/path-to-regexp": {
       "version": "0.1.7",
       "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
-      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+      "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
       "dev": true
     },
     "node_modules/express/node_modules/qs": {
@@ -10992,7 +10775,7 @@
     "node_modules/extend-shallow": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
-      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
       "dev": true,
       "dependencies": {
         "assign-symbols": "^1.0.0",
@@ -11002,32 +10785,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/extend-shallow/node_modules/is-extendable": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-      "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-      "dev": true,
-      "dependencies": {
-        "is-plain-object": "^2.0.4"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/external-editor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
-      "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
-      "dev": true,
-      "dependencies": {
-        "chardet": "^0.7.0",
-        "iconv-lite": "^0.4.24",
-        "tmp": "^0.0.33"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/extglob": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
@@ -11050,7 +10807,7 @@
     "node_modules/extglob/node_modules/define-property": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-      "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+      "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
       "dev": true,
       "dependencies": {
         "is-descriptor": "^1.0.0"
@@ -11062,7 +10819,7 @@
     "node_modules/extglob/node_modules/extend-shallow": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-      "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+      "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
       "dev": true,
       "dependencies": {
         "is-extendable": "^0.1.0"
@@ -11071,40 +10828,11 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/extglob/node_modules/is-accessor-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-      "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/extglob/node_modules/is-data-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-      "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/extglob/node_modules/is-descriptor": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-      "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+    "node_modules/extglob/node_modules/is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
       "dev": true,
-      "dependencies": {
-        "is-accessor-descriptor": "^1.0.0",
-        "is-data-descriptor": "^1.0.0",
-        "kind-of": "^6.0.2"
-      },
       "engines": {
         "node": ">=0.10.0"
       }
@@ -11149,7 +10877,7 @@
     "node_modules/fast-levenshtein": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
       "dev": true
     },
     "node_modules/fast-xml-parser": {
@@ -11170,10 +10898,13 @@
       }
     },
     "node_modules/fastest-levenshtein": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
-      "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
-      "dev": true
+      "version": "1.0.16",
+      "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
+      "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 4.9.1"
+      }
     },
     "node_modules/fastq": {
       "version": "1.13.0",
@@ -11208,38 +10939,23 @@
     "node_modules/fd-slicer": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
-      "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+      "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
       "dev": true,
       "optional": true,
       "dependencies": {
         "pend": "~1.2.0"
       }
     },
-    "node_modules/figures": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
-      "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
-      "dev": true,
-      "dependencies": {
-        "escape-string-regexp": "^1.0.5"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
     "node_modules/file-entry-cache": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
-      "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
       "dev": true,
       "dependencies": {
-        "flat-cache": "^2.0.1"
+        "flat-cache": "^3.0.4"
       },
       "engines": {
-        "node": ">=4"
+        "node": "^10.12.0 || >=12.0.0"
       }
     },
     "node_modules/file-loader": {
@@ -11274,7 +10990,7 @@
     "node_modules/filename-reserved-regex": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
-      "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=",
+      "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -11347,7 +11063,7 @@
     "node_modules/finalhandler/node_modules/ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
     "node_modules/find-cache-dir": {
@@ -11426,35 +11142,37 @@
       }
     },
     "node_modules/flat-cache": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
-      "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
       "dev": true,
       "dependencies": {
-        "flatted": "^2.0.0",
-        "rimraf": "2.6.3",
-        "write": "1.0.3"
+        "flatted": "^3.1.0",
+        "rimraf": "^3.0.2"
       },
       "engines": {
-        "node": ">=4"
+        "node": "^10.12.0 || >=12.0.0"
       }
     },
     "node_modules/flat-cache/node_modules/rimraf": {
-      "version": "2.6.3",
-      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
-      "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
       "dev": true,
       "dependencies": {
         "glob": "^7.1.3"
       },
       "bin": {
         "rimraf": "bin.js"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
     "node_modules/flatted": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
-      "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
+      "version": "3.2.6",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz",
+      "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==",
       "dev": true
     },
     "node_modules/focus-lock": {
@@ -11498,7 +11216,7 @@
     "node_modules/for-in": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
-      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+      "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -11626,6 +11344,18 @@
         "node": ">=8"
       }
     },
+    "node_modules/fork-ts-checker-webpack-plugin/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": {
       "version": "2.7.0",
       "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
@@ -11680,18 +11410,24 @@
         "node": ">=6"
       }
     },
+    "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
     "node_modules/form-data": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
-      "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
+      "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
       "dev": true,
       "dependencies": {
         "asynckit": "^0.4.0",
-        "combined-stream": "^1.0.6",
+        "combined-stream": "^1.0.8",
         "mime-types": "^2.1.12"
       },
       "engines": {
-        "node": ">= 0.12"
+        "node": ">= 6"
       }
     },
     "node_modules/form-urlencoded": {
@@ -11734,7 +11470,7 @@
     "node_modules/fragment-cache": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
-      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
       "dev": true,
       "dependencies": {
         "map-cache": "^0.2.2"
@@ -11746,7 +11482,7 @@
     "node_modules/fresh": {
       "version": "0.5.2",
       "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
-      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+      "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
       "dev": true,
       "engines": {
         "node": ">= 0.6"
@@ -11755,7 +11491,7 @@
     "node_modules/from2": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
-      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+      "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -11841,7 +11577,7 @@
     "node_modules/functional-red-black-tree": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
-      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+      "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
       "dev": true
     },
     "node_modules/functions-have-names": {
@@ -11943,7 +11679,7 @@
     "node_modules/get-value": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
-      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+      "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -11980,21 +11716,6 @@
         "url": "https://github.com/imagemin/gisicle-bin?sponsor=1"
       }
     },
-    "node_modules/gifsicle/node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/gifsicle/node_modules/execa": {
       "version": "5.1.1",
       "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -12058,55 +11779,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/gifsicle/node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true,
-      "optional": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/gifsicle/node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/gifsicle/node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true,
-      "optional": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/gifsicle/node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/glob": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
@@ -12170,6 +11842,18 @@
         "node": ">=6"
       }
     },
+    "node_modules/global-prefix/node_modules/which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "which": "bin/which"
+      }
+    },
     "node_modules/globals": {
       "version": "11.12.0",
       "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -12182,7 +11866,7 @@
     "node_modules/globby": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
-      "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+      "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==",
       "dev": true,
       "dependencies": {
         "array-union": "^1.0.1",
@@ -12198,7 +11882,7 @@
     "node_modules/globby/node_modules/pify": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-      "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -12233,7 +11917,7 @@
     "node_modules/got/node_modules/get-stream": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-      "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+      "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -12249,7 +11933,7 @@
     "node_modules/growly": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
-      "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
+      "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==",
       "dev": true,
       "optional": true
     },
@@ -12325,7 +12009,7 @@
     "node_modules/has-flag": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
       "engines": {
         "node": ">=4"
       }
@@ -12392,7 +12076,7 @@
     "node_modules/has-value": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
-      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
       "dev": true,
       "dependencies": {
         "get-value": "^2.0.6",
@@ -12406,7 +12090,7 @@
     "node_modules/has-values": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
-      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+      "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
       "dev": true,
       "dependencies": {
         "is-number": "^3.0.0",
@@ -12425,7 +12109,7 @@
     "node_modules/has-values/node_modules/is-number": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+      "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
       "dev": true,
       "dependencies": {
         "kind-of": "^3.0.2"
@@ -12437,7 +12121,7 @@
     "node_modules/has-values/node_modules/is-number/node_modules/kind-of": {
       "version": "3.2.2",
       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
       "dev": true,
       "dependencies": {
         "is-buffer": "^1.1.5"
@@ -12449,7 +12133,7 @@
     "node_modules/has-values/node_modules/kind-of": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
-      "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+      "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
       "dev": true,
       "dependencies": {
         "is-buffer": "^1.1.5"
@@ -12497,7 +12181,7 @@
     "node_modules/hpack.js": {
       "version": "2.1.6",
       "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
-      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+      "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==",
       "dev": true,
       "dependencies": {
         "inherits": "^2.0.1",
@@ -12625,7 +12309,7 @@
     "node_modules/http-deceiver": {
       "version": "1.2.7",
       "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
-      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+      "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==",
       "dev": true
     },
     "node_modules/http-errors": {
@@ -12645,9 +12329,9 @@
       }
     },
     "node_modules/http-parser-js": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz",
-      "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==",
+      "version": "0.5.8",
+      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz",
+      "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==",
       "dev": true
     },
     "node_modules/http-proxy": {
@@ -12794,7 +12478,7 @@
     "node_modules/identity-obj-proxy": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz",
-      "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=",
+      "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==",
       "dev": true,
       "dependencies": {
         "harmony-reflect": "^1.4.6"
@@ -12922,21 +12606,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/imagemin-mozjpeg/node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/imagemin-mozjpeg/node_modules/execa": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
@@ -13013,55 +12682,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/imagemin-mozjpeg/node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true,
-      "optional": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/imagemin-mozjpeg/node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/imagemin-mozjpeg/node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true,
-      "optional": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/imagemin-mozjpeg/node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/imagemin-optipng": {
       "version": "8.0.0",
       "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-8.0.0.tgz",
@@ -13094,21 +12714,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/imagemin-pngquant/node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/imagemin-pngquant/node_modules/execa": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
@@ -13185,55 +12790,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/imagemin-pngquant/node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true,
-      "optional": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/imagemin-pngquant/node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/imagemin-pngquant/node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true,
-      "optional": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/imagemin-pngquant/node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/imagemin-svgo": {
       "version": "9.0.0",
       "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-9.0.0.tgz",
@@ -13333,9 +12889,9 @@
       "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
     },
     "node_modules/immer": {
-      "version": "9.0.12",
-      "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.12.tgz",
-      "integrity": "sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA==",
+      "version": "9.0.15",
+      "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz",
+      "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==",
       "dev": true,
       "funding": {
         "type": "opencollective",
@@ -13343,13 +12899,10 @@
       }
     },
     "node_modules/immutable": {
-      "version": "3.8.2",
-      "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
-      "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=",
-      "optional": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz",
+      "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==",
+      "devOptional": true
     },
     "node_modules/import-fresh": {
       "version": "3.3.0",
@@ -13406,7 +12959,7 @@
     "node_modules/imurmurhash": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
       "dev": true,
       "engines": {
         "node": ">=0.8.19"
@@ -13441,100 +12994,6 @@
       "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
       "dev": true
     },
-    "node_modules/inquirer": {
-      "version": "7.3.3",
-      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
-      "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-escapes": "^4.2.1",
-        "chalk": "^4.1.0",
-        "cli-cursor": "^3.1.0",
-        "cli-width": "^3.0.0",
-        "external-editor": "^3.0.3",
-        "figures": "^3.0.0",
-        "lodash": "^4.17.19",
-        "mute-stream": "0.0.8",
-        "run-async": "^2.4.0",
-        "rxjs": "^6.6.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0",
-        "through": "^2.3.6"
-      },
-      "engines": {
-        "node": ">=8.0.0"
-      }
-    },
-    "node_modules/inquirer/node_modules/ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-      "dev": true,
-      "dependencies": {
-        "color-convert": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/inquirer/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/inquirer/node_modules/color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "dev": true,
-      "dependencies": {
-        "color-name": "~1.1.4"
-      },
-      "engines": {
-        "node": ">=7.0.0"
-      }
-    },
-    "node_modules/inquirer/node_modules/color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-      "dev": true
-    },
-    "node_modules/inquirer/node_modules/has-flag": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/inquirer/node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/internal-slot": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
@@ -13608,7 +13067,7 @@
     "node_modules/into-stream": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz",
-      "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=",
+      "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -13628,45 +13087,27 @@
       }
     },
     "node_modules/ip": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
-      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+      "version": "1.1.8",
+      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
+      "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==",
       "dev": true
     },
     "node_modules/ipaddr.js": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
-      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz",
+      "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==",
       "dev": true,
       "engines": {
-        "node": ">= 0.10"
+        "node": ">= 10"
       }
     },
     "node_modules/is-accessor-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
-      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-accessor-descriptor/node_modules/is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-      "dev": true
-    },
-    "node_modules/is-accessor-descriptor/node_modules/kind-of": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+      "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
       "dev": true,
       "dependencies": {
-        "is-buffer": "^1.1.5"
+        "kind-of": "^6.0.0"
       },
       "engines": {
         "node": ">=0.10.0"
@@ -13809,30 +13250,12 @@
       }
     },
     "node_modules/is-data-descriptor": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
-      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/is-data-descriptor/node_modules/is-buffer": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-      "dev": true
-    },
-    "node_modules/is-data-descriptor/node_modules/kind-of": {
-      "version": "3.2.2",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+      "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
       "dev": true,
       "dependencies": {
-        "is-buffer": "^1.1.5"
+        "kind-of": "^6.0.0"
       },
       "engines": {
         "node": ">=0.10.0"
@@ -13853,28 +13276,19 @@
       }
     },
     "node_modules/is-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
-      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+      "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
       "dev": true,
       "dependencies": {
-        "is-accessor-descriptor": "^0.1.6",
-        "is-data-descriptor": "^0.1.4",
-        "kind-of": "^5.0.0"
+        "is-accessor-descriptor": "^1.0.0",
+        "is-data-descriptor": "^1.0.0",
+        "kind-of": "^6.0.2"
       },
       "engines": {
         "node": ">=0.10.0"
       }
     },
-    "node_modules/is-descriptor/node_modules/kind-of": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-      "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/is-docker": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
@@ -13891,10 +13305,13 @@
       }
     },
     "node_modules/is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+      "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
       "dev": true,
+      "dependencies": {
+        "is-plain-object": "^2.0.4"
+      },
       "engines": {
         "node": ">=0.10.0"
       }
@@ -13902,7 +13319,7 @@
     "node_modules/is-extglob": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -13964,7 +13381,7 @@
     "node_modules/is-invalid-path": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz",
-      "integrity": "sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ=",
+      "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==",
       "dev": true,
       "dependencies": {
         "is-glob": "^2.0.0"
@@ -13976,7 +13393,7 @@
     "node_modules/is-invalid-path/node_modules/is-extglob": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
-      "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+      "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -13985,7 +13402,7 @@
     "node_modules/is-invalid-path/node_modules/is-glob": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
-      "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+      "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==",
       "dev": true,
       "dependencies": {
         "is-extglob": "^1.0.0"
@@ -13997,7 +13414,7 @@
     "node_modules/is-jpg": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz",
-      "integrity": "sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=",
+      "integrity": "sha512-ODlO0ruzhkzD3sdynIainVP5eoOFNN85rxA1+cwwnPe4dKyX0r5+hxNO5XpCrxlHcmb9vkOit9mhRD2JVuimHg==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -14007,7 +13424,7 @@
     "node_modules/is-natural-number": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
-      "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=",
+      "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==",
       "dev": true,
       "optional": true
     },
@@ -14091,7 +13508,7 @@
     "node_modules/is-plain-obj": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
-      "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+      "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -14180,7 +13597,7 @@
     "node_modules/is-stream": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+      "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -14245,7 +13662,7 @@
     "node_modules/is-valid-path": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz",
-      "integrity": "sha1-EQ+f90w39mPh7HkV60UfLbk6yd8=",
+      "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==",
       "dev": true,
       "dependencies": {
         "is-invalid-path": "^0.1.0"
@@ -14294,7 +13711,7 @@
     "node_modules/isexe": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
       "dev": true
     },
     "node_modules/iso-639-1": {
@@ -14308,7 +13725,7 @@
     "node_modules/isobject": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+      "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -14437,9 +13854,9 @@
       }
     },
     "node_modules/istanbul-reports": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz",
-      "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==",
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
+      "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
       "dev": true,
       "dependencies": {
         "html-escaper": "^2.0.0",
@@ -14494,20 +13911,6 @@
         "node": ">= 10.14.2"
       }
     },
-    "node_modules/jest-changed-files/node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/jest-changed-files/node_modules/execa": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
@@ -14579,49 +13982,228 @@
         "node": ">=8"
       }
     },
-    "node_modules/jest-changed-files/node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+    "node_modules/jest-cli": {
+      "version": "26.6.3",
+      "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz",
+      "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==",
+      "dev": true,
+      "dependencies": {
+        "@jest/core": "^26.6.3",
+        "@jest/test-result": "^26.6.2",
+        "@jest/types": "^26.6.2",
+        "chalk": "^4.0.0",
+        "exit": "^0.1.2",
+        "graceful-fs": "^4.2.4",
+        "import-local": "^3.0.2",
+        "is-ci": "^2.0.0",
+        "jest-config": "^26.6.3",
+        "jest-util": "^26.6.2",
+        "jest-validate": "^26.6.2",
+        "prompts": "^2.0.1",
+        "yargs": "^15.4.1"
+      },
+      "bin": {
+        "jest": "bin/jest.js"
+      },
+      "engines": {
+        "node": ">= 10.14.2"
+      }
+    },
+    "node_modules/jest-cli/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
       "dev": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
       "engines": {
         "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/jest-changed-files/node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+    "node_modules/jest-cli/node_modules/camelcase": {
+      "version": "5.3.1",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/jest-cli/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
       "dev": true,
       "dependencies": {
-        "shebang-regex": "^3.0.0"
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/jest-cli/node_modules/cliui": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+      "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+      "dev": true,
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^6.2.0"
+      }
+    },
+    "node_modules/jest-cli/node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dev": true,
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/jest-cli/node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+      "dev": true
+    },
+    "node_modules/jest-cli/node_modules/find-up": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+      "dev": true,
+      "dependencies": {
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
       },
       "engines": {
         "node": ">=8"
       }
     },
-    "node_modules/jest-changed-files/node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+    "node_modules/jest-cli/node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
       "dev": true,
       "engines": {
         "node": ">=8"
       }
     },
-    "node_modules/jest-changed-files/node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+    "node_modules/jest-cli/node_modules/locate-path": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
       "dev": true,
       "dependencies": {
-        "isexe": "^2.0.0"
+        "p-locate": "^4.1.0"
       },
-      "bin": {
-        "node-which": "bin/node-which"
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-cli/node_modules/p-limit": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+      "dev": true,
+      "dependencies": {
+        "p-try": "^2.0.0"
       },
       "engines": {
-        "node": ">= 8"
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/jest-cli/node_modules/p-locate": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+      "dev": true,
+      "dependencies": {
+        "p-limit": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-cli/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dev": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-cli/node_modules/wrap-ansi": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+      "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-cli/node_modules/y18n": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+      "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+      "dev": true
+    },
+    "node_modules/jest-cli/node_modules/yargs": {
+      "version": "15.4.1",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+      "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+      "dev": true,
+      "dependencies": {
+        "cliui": "^6.0.0",
+        "decamelize": "^1.2.0",
+        "find-up": "^4.1.0",
+        "get-caller-file": "^2.0.1",
+        "require-directory": "^2.1.1",
+        "require-main-filename": "^2.0.0",
+        "set-blocking": "^2.0.0",
+        "string-width": "^4.2.0",
+        "which-module": "^2.0.0",
+        "y18n": "^4.0.0",
+        "yargs-parser": "^18.1.2"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/jest-cli/node_modules/yargs-parser": {
+      "version": "18.1.3",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+      "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+      "dev": true,
+      "dependencies": {
+        "camelcase": "^5.0.0",
+        "decamelize": "^1.2.0"
+      },
+      "engines": {
+        "node": ">=6"
       }
     },
     "node_modules/jest-config": {
@@ -15402,19 +14984,6 @@
       "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
       "dev": true
     },
-    "node_modules/jest-resolve/node_modules/find-up": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-      "dev": true,
-      "dependencies": {
-        "locate-path": "^5.0.0",
-        "path-exists": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/jest-resolve/node_modules/has-flag": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -15424,86 +14993,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/jest-resolve/node_modules/locate-path": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-      "dev": true,
-      "dependencies": {
-        "p-locate": "^4.1.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest-resolve/node_modules/p-limit": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-      "dev": true,
-      "dependencies": {
-        "p-try": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/jest-resolve/node_modules/p-locate": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-      "dev": true,
-      "dependencies": {
-        "p-limit": "^2.2.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest-resolve/node_modules/read-pkg": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
-      "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
-      "dev": true,
-      "dependencies": {
-        "@types/normalize-package-data": "^2.4.0",
-        "normalize-package-data": "^2.5.0",
-        "parse-json": "^5.0.0",
-        "type-fest": "^0.6.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest-resolve/node_modules/read-pkg-up": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
-      "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
-      "dev": true,
-      "dependencies": {
-        "find-up": "^4.1.0",
-        "read-pkg": "^5.2.0",
-        "type-fest": "^0.8.1"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/jest-resolve/node_modules/read-pkg/node_modules/type-fest": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
-      "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/jest-resolve/node_modules/slash": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -15525,15 +15014,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/jest-resolve/node_modules/type-fest": {
-      "version": "0.8.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
-      "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/jest-runner": {
       "version": "26.6.3",
       "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz",
@@ -15815,15 +15295,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/jest-runtime/node_modules/strip-bom": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
-      "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/jest-runtime/node_modules/supports-color": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -15989,6 +15460,18 @@
         "node": ">=8"
       }
     },
+    "node_modules/jest-snapshot/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/jest-snapshot/node_modules/semver": {
       "version": "7.3.7",
       "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
@@ -16016,6 +15499,12 @@
         "node": ">=8"
       }
     },
+    "node_modules/jest-snapshot/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
     "node_modules/jest-util": {
       "version": "26.6.2",
       "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz",
@@ -16313,230 +15802,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/jest/node_modules/ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-      "dev": true,
-      "dependencies": {
-        "color-convert": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/jest/node_modules/camelcase": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-      "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/jest/node_modules/chalk": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.1.0",
-        "supports-color": "^7.1.0"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/chalk?sponsor=1"
-      }
-    },
-    "node_modules/jest/node_modules/cliui": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
-      "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
-      "dev": true,
-      "dependencies": {
-        "string-width": "^4.2.0",
-        "strip-ansi": "^6.0.0",
-        "wrap-ansi": "^6.2.0"
-      }
-    },
-    "node_modules/jest/node_modules/color-convert": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-      "dev": true,
-      "dependencies": {
-        "color-name": "~1.1.4"
-      },
-      "engines": {
-        "node": ">=7.0.0"
-      }
-    },
-    "node_modules/jest/node_modules/color-name": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-      "dev": true
-    },
-    "node_modules/jest/node_modules/find-up": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-      "dev": true,
-      "dependencies": {
-        "locate-path": "^5.0.0",
-        "path-exists": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest/node_modules/has-flag": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest/node_modules/jest-cli": {
-      "version": "26.6.3",
-      "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz",
-      "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==",
-      "dev": true,
-      "dependencies": {
-        "@jest/core": "^26.6.3",
-        "@jest/test-result": "^26.6.2",
-        "@jest/types": "^26.6.2",
-        "chalk": "^4.0.0",
-        "exit": "^0.1.2",
-        "graceful-fs": "^4.2.4",
-        "import-local": "^3.0.2",
-        "is-ci": "^2.0.0",
-        "jest-config": "^26.6.3",
-        "jest-util": "^26.6.2",
-        "jest-validate": "^26.6.2",
-        "prompts": "^2.0.1",
-        "yargs": "^15.4.1"
-      },
-      "bin": {
-        "jest": "bin/jest.js"
-      },
-      "engines": {
-        "node": ">= 10.14.2"
-      }
-    },
-    "node_modules/jest/node_modules/locate-path": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-      "dev": true,
-      "dependencies": {
-        "p-locate": "^4.1.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest/node_modules/p-limit": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-      "dev": true,
-      "dependencies": {
-        "p-try": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/jest/node_modules/p-locate": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-      "dev": true,
-      "dependencies": {
-        "p-limit": "^2.2.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest/node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest/node_modules/wrap-ansi": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
-      "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest/node_modules/y18n": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
-      "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
-      "dev": true
-    },
-    "node_modules/jest/node_modules/yargs": {
-      "version": "15.4.1",
-      "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
-      "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
-      "dev": true,
-      "dependencies": {
-        "cliui": "^6.0.0",
-        "decamelize": "^1.2.0",
-        "find-up": "^4.1.0",
-        "get-caller-file": "^2.0.1",
-        "require-directory": "^2.1.1",
-        "require-main-filename": "^2.0.0",
-        "set-blocking": "^2.0.0",
-        "string-width": "^4.2.0",
-        "which-module": "^2.0.0",
-        "y18n": "^4.0.0",
-        "yargs-parser": "^18.1.2"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/jest/node_modules/yargs-parser": {
-      "version": "18.1.3",
-      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
-      "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
-      "dev": true,
-      "dependencies": {
-        "camelcase": "^5.0.0",
-        "decamelize": "^1.2.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/jquery": {
       "version": "3.6.0",
       "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz",
@@ -16613,20 +15878,6 @@
         }
       }
     },
-    "node_modules/jsdom/node_modules/form-data": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
-      "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
-      "dev": true,
-      "dependencies": {
-        "asynckit": "^0.4.0",
-        "combined-stream": "^1.0.8",
-        "mime-types": "^2.1.12"
-      },
-      "engines": {
-        "node": ">= 6"
-      }
-    },
     "node_modules/jsesc": {
       "version": "2.5.2",
       "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -16642,7 +15893,7 @@
     "node_modules/json-buffer": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
-      "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
+      "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==",
       "dev": true,
       "optional": true
     },
@@ -16672,7 +15923,7 @@
     "node_modules/json-stable-stringify-without-jsonify": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
       "dev": true
     },
     "node_modules/json-stringify-safe": {
@@ -16721,13 +15972,13 @@
       }
     },
     "node_modules/jsx-ast-utils": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz",
-      "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz",
+      "integrity": "sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q==",
       "dev": true,
       "dependencies": {
-        "array-includes": "^3.1.1",
-        "object.assign": "^4.1.0"
+        "array-includes": "^3.1.5",
+        "object.assign": "^4.1.2"
       },
       "engines": {
         "node": ">=4.0"
@@ -16784,6 +16035,21 @@
         "node": ">= 8"
       }
     },
+    "node_modules/language-subtag-registry": {
+      "version": "0.3.22",
+      "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
+      "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==",
+      "dev": true
+    },
+    "node_modules/language-tags": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
+      "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==",
+      "dev": true,
+      "dependencies": {
+        "language-subtag-registry": "~0.3.2"
+      }
+    },
     "node_modules/lcov-parse": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz",
@@ -16803,13 +16069,13 @@
       }
     },
     "node_modules/levn": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
       "dev": true,
       "dependencies": {
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2"
+        "prelude-ls": "^1.2.1",
+        "type-check": "~0.4.0"
       },
       "engines": {
         "node": ">= 0.8.0"
@@ -16824,9 +16090,9 @@
       }
     },
     "node_modules/lilconfig": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
-      "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==",
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
+      "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -16837,42 +16103,6 @@
       "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
       "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
     },
-    "node_modules/load-json-file": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
-      "integrity": "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==",
-      "dev": true,
-      "dependencies": {
-        "graceful-fs": "^4.1.2",
-        "parse-json": "^2.2.0",
-        "pify": "^2.0.0",
-        "strip-bom": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/load-json-file/node_modules/parse-json": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
-      "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
-      "dev": true,
-      "dependencies": {
-        "error-ex": "^1.2.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/load-json-file/node_modules/pify": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/loader-runner": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
@@ -16994,7 +16224,7 @@
     "node_modules/lodash.uniq": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
-      "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+      "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
       "dev": true
     },
     "node_modules/lodash.uniqby": {
@@ -17042,15 +16272,14 @@
       }
     },
     "node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "version": "4.1.5",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
       "dev": true,
+      "optional": true,
       "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
+        "pseudomap": "^1.0.2",
+        "yallist": "^2.1.2"
       }
     },
     "node_modules/lz-string": {
@@ -17108,7 +16337,7 @@
     "node_modules/map-cache": {
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
-      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+      "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -17117,7 +16346,7 @@
     "node_modules/map-visit": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
-      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+      "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
       "dev": true,
       "dependencies": {
         "object-visit": "^1.0.0"
@@ -17169,19 +16398,19 @@
     "node_modules/media-typer": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
-      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
       "dev": true,
       "engines": {
         "node": ">= 0.6"
       }
     },
     "node_modules/memfs": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz",
-      "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==",
+      "version": "3.4.7",
+      "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz",
+      "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==",
       "dev": true,
       "dependencies": {
-        "fs-monkey": "1.0.3"
+        "fs-monkey": "^1.0.3"
       },
       "engines": {
         "node": ">= 4.0.0"
@@ -17190,7 +16419,7 @@
     "node_modules/merge-descriptors": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
-      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+      "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
       "dev": true
     },
     "node_modules/merge-stream": {
@@ -17211,7 +16440,7 @@
     "node_modules/methods": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
-      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+      "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
       "dev": true,
       "engines": {
         "node": ">= 0.6"
@@ -17243,21 +16472,21 @@
       }
     },
     "node_modules/mime-db": {
-      "version": "1.49.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
-      "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==",
+      "version": "1.52.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
       "dev": true,
       "engines": {
         "node": ">= 0.6"
       }
     },
     "node_modules/mime-types": {
-      "version": "2.1.32",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
-      "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
+      "version": "2.1.35",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
       "dev": true,
       "dependencies": {
-        "mime-db": "1.49.0"
+        "mime-db": "1.52.0"
       },
       "engines": {
         "node": ">= 0.6"
@@ -17332,9 +16561,9 @@
       "dev": true
     },
     "node_modules/minimatch": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dependencies": {
         "brace-expansion": "^1.1.7"
       },
@@ -17361,18 +16590,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/mixin-deep/node_modules/is-extendable": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-      "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-      "dev": true,
-      "dependencies": {
-        "is-plain-object": "^2.0.4"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/mkdirp": {
       "version": "0.5.6",
       "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
@@ -17448,19 +16665,13 @@
     "node_modules/multicast-dns-service-types": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
-      "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
-      "dev": true
-    },
-    "node_modules/mute-stream": {
-      "version": "0.0.8",
-      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
-      "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+      "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==",
       "dev": true
     },
     "node_modules/nanoid": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
-      "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+      "version": "3.3.4",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+      "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
       "dev": true,
       "bin": {
         "nanoid": "bin/nanoid.cjs"
@@ -17494,7 +16705,7 @@
     "node_modules/natural-compare": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
       "dev": true
     },
     "node_modules/nearley": {
@@ -17568,7 +16779,7 @@
     "node_modules/node-int64": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
-      "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
+      "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
       "dev": true
     },
     "node_modules/node-notifier": {
@@ -17586,6 +16797,19 @@
         "which": "^2.0.2"
       }
     },
+    "node_modules/node-notifier/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "optional": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/node-notifier/node_modules/semver": {
       "version": "7.3.7",
       "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
@@ -17612,26 +16836,17 @@
         "uuid": "dist/bin/uuid"
       }
     },
-    "node_modules/node-notifier/node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+    "node_modules/node-notifier/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
       "dev": true,
-      "optional": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
+      "optional": true
     },
     "node_modules/node-releases": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz",
-      "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==",
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
+      "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
       "dev": true
     },
     "node_modules/normalize-package-data": {
@@ -17658,7 +16873,7 @@
     "node_modules/normalize-range": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
-      "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+      "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -17693,7 +16908,7 @@
     "node_modules/npm-conf/node_modules/pify": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+      "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -17703,7 +16918,7 @@
     "node_modules/npm-run-path": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
-      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+      "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
       "dev": true,
       "dependencies": {
         "path-key": "^2.0.0"
@@ -17712,6 +16927,15 @@
         "node": ">=4"
       }
     },
+    "node_modules/npm-run-path/node_modules/path-key": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+      "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/nth-check": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz",
@@ -17725,9 +16949,9 @@
       }
     },
     "node_modules/nwsapi": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
-      "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz",
+      "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==",
       "dev": true
     },
     "node_modules/oauth-sign": {
@@ -17750,7 +16974,7 @@
     "node_modules/object-copy": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
-      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
       "dev": true,
       "dependencies": {
         "copy-descriptor": "^0.1.0",
@@ -17764,7 +16988,7 @@
     "node_modules/object-copy/node_modules/define-property": {
       "version": "0.2.5",
       "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-      "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+      "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
       "dev": true,
       "dependencies": {
         "is-descriptor": "^0.1.0"
@@ -17773,16 +16997,63 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/object-copy/node_modules/is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+      "dev": true,
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/object-copy/node_modules/is-buffer": {
       "version": "1.1.6",
       "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
       "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
       "dev": true
     },
+    "node_modules/object-copy/node_modules/is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+      "dev": true,
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-copy/node_modules/is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "dev": true,
+      "dependencies": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+      "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/object-copy/node_modules/kind-of": {
       "version": "3.2.2",
       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
       "dev": true,
       "dependencies": {
         "is-buffer": "^1.1.5"
@@ -17830,7 +17101,7 @@
     "node_modules/object-visit": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
-      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
       "dev": true,
       "dependencies": {
         "isobject": "^3.0.0"
@@ -17886,10 +17157,23 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/object.hasown": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz",
+      "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==",
+      "dev": true,
+      "dependencies": {
+        "define-properties": "^1.1.4",
+        "es-abstract": "^1.19.5"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/object.pick": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
-      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+      "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
       "dev": true,
       "dependencies": {
         "isobject": "^3.0.1"
@@ -17992,17 +17276,17 @@
       }
     },
     "node_modules/optionator": {
-      "version": "0.8.3",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
-      "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+      "version": "0.9.1",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+      "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
       "dev": true,
       "dependencies": {
-        "deep-is": "~0.1.3",
-        "fast-levenshtein": "~2.0.6",
-        "levn": "~0.3.0",
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2",
-        "word-wrap": "~1.2.3"
+        "deep-is": "^0.1.3",
+        "fast-levenshtein": "^2.0.6",
+        "levn": "^0.4.1",
+        "prelude-ls": "^1.2.1",
+        "type-check": "^0.4.0",
+        "word-wrap": "^1.2.3"
       },
       "engines": {
         "node": ">= 0.8.0"
@@ -18039,15 +17323,6 @@
         "node": ">=4"
       }
     },
-    "node_modules/os-tmpdir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-      "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/ow": {
       "version": "0.17.0",
       "resolved": "https://registry.npmjs.org/ow/-/ow-0.17.0.tgz",
@@ -18102,7 +17377,7 @@
     "node_modules/p-event": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz",
-      "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=",
+      "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -18115,7 +17390,7 @@
     "node_modules/p-finally": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
-      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+      "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
       "dev": true,
       "engines": {
         "node": ">=4"
@@ -18124,7 +17399,7 @@
     "node_modules/p-is-promise": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
-      "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
+      "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -18173,7 +17448,7 @@
     "node_modules/p-map-series": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz",
-      "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=",
+      "integrity": "sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -18198,7 +17473,7 @@
     "node_modules/p-reduce": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
-      "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
+      "integrity": "sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -18221,7 +17496,7 @@
     "node_modules/p-timeout": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz",
-      "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=",
+      "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -18315,7 +17590,7 @@
     "node_modules/pascalcase": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
-      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+      "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -18341,16 +17616,16 @@
     "node_modules/path-is-inside": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
-      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+      "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==",
       "dev": true
     },
     "node_modules/path-key": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
       "dev": true,
       "engines": {
-        "node": ">=4"
+        "node": ">=8"
       }
     },
     "node_modules/path-parse": {
@@ -18377,7 +17652,7 @@
     "node_modules/pend": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
-      "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+      "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
       "dev": true,
       "optional": true
     },
@@ -18417,7 +17692,7 @@
     "node_modules/pinkie": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
-      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+      "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -18426,7 +17701,7 @@
     "node_modules/pinkie-promise": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
-      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+      "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
       "dev": true,
       "dependencies": {
         "pinkie": "^2.0.0"
@@ -18575,7 +17850,7 @@
     "node_modules/pkg-up/node_modules/path-exists": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+      "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
       "dev": true,
       "engines": {
         "node": ">=4"
@@ -18600,21 +17875,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/pngquant-bin/node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/pngquant-bin/node_modules/execa": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
@@ -18691,55 +17951,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/pngquant-bin/node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true,
-      "optional": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/pngquant-bin/node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/pngquant-bin/node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true,
-      "optional": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/pngquant-bin/node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "dev": true,
-      "optional": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/popper.js": {
       "version": "1.16.1",
       "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz",
@@ -18777,7 +17988,7 @@
     "node_modules/posix-character-classes": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
-      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+      "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -18833,11 +18044,12 @@
       }
     },
     "node_modules/postcss-convert-values": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.0.tgz",
-      "integrity": "sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz",
+      "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==",
       "dev": true,
       "dependencies": {
+        "browserslist": "^4.20.3",
         "postcss-value-parser": "^4.2.0"
       },
       "engines": {
@@ -18848,9 +18060,9 @@
       }
     },
     "node_modules/postcss-discard-comments": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz",
-      "integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz",
+      "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==",
       "dev": true,
       "engines": {
         "node": "^10 || ^12 || >=14.0"
@@ -18917,6 +18129,18 @@
         "webpack": "^5.0.0"
       }
     },
+    "node_modules/postcss-loader/node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dev": true,
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/postcss-loader/node_modules/semver": {
       "version": "7.3.7",
       "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
@@ -18932,10 +18156,16 @@
         "node": ">=10"
       }
     },
+    "node_modules/postcss-loader/node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+      "dev": true
+    },
     "node_modules/postcss-merge-longhand": {
-      "version": "5.1.4",
-      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.4.tgz",
-      "integrity": "sha512-hbqRRqYfmXoGpzYKeW0/NCZhvNyQIlQeWVSao5iKWdyx7skLvCfQFGIUsP9NUs3dSbPac2IC4Go85/zG+7MlmA==",
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz",
+      "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==",
       "dev": true,
       "dependencies": {
         "postcss-value-parser": "^4.2.0",
@@ -18949,9 +18179,9 @@
       }
     },
     "node_modules/postcss-merge-rules": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.1.tgz",
-      "integrity": "sha512-8wv8q2cXjEuCcgpIB1Xx1pIy8/rhMPIQqYKNzEdyx37m6gpq83mQQdCxgIkFgliyEnKvdwJf/C61vN4tQDq4Ww==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz",
+      "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==",
       "dev": true,
       "dependencies": {
         "browserslist": "^4.16.6",
@@ -18999,9 +18229,9 @@
       }
     },
     "node_modules/postcss-minify-params": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.2.tgz",
-      "integrity": "sha512-aEP+p71S/urY48HWaRHasyx4WHQJyOYaKpQ6eXl8k0kxg66Wt/30VR6/woh8THgcpRbonJD5IeD+CzNhPi1L8g==",
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz",
+      "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==",
       "dev": true,
       "dependencies": {
         "browserslist": "^4.16.6",
@@ -19016,9 +18246,9 @@
       }
     },
     "node_modules/postcss-minify-selectors": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.0.tgz",
-      "integrity": "sha512-vYxvHkW+iULstA+ctVNx0VoRAR4THQQRkG77o0oa4/mBS0OzGvvzLIvHDv/nNEM0crzN2WIyFU5X7wZhaUK3RA==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz",
+      "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==",
       "dev": true,
       "dependencies": {
         "postcss-selector-parser": "^6.0.5"
@@ -19117,9 +18347,9 @@
       }
     },
     "node_modules/postcss-normalize-positions": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz",
-      "integrity": "sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ==",
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz",
+      "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==",
       "dev": true,
       "dependencies": {
         "postcss-value-parser": "^4.2.0"
@@ -19132,9 +18362,9 @@
       }
     },
     "node_modules/postcss-normalize-repeat-style": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz",
-      "integrity": "sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw==",
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz",
+      "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==",
       "dev": true,
       "dependencies": {
         "postcss-value-parser": "^4.2.0"
@@ -19224,9 +18454,9 @@
       }
     },
     "node_modules/postcss-ordered-values": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.1.tgz",
-      "integrity": "sha512-7lxgXF0NaoMIgyihL/2boNAEZKiW0+HkMhdKMTD93CjW8TdCy2hSdj8lsAo+uwm7EDG16Da2Jdmtqpedl0cMfw==",
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz",
+      "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==",
       "dev": true,
       "dependencies": {
         "cssnano-utils": "^3.1.0",
@@ -19336,9 +18566,9 @@
       "dev": true
     },
     "node_modules/prelude-ls": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
       "dev": true,
       "engines": {
         "node": ">= 0.8.0"
@@ -19347,7 +18577,7 @@
     "node_modules/prepend-http": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
-      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+      "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -19431,15 +18661,6 @@
       "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
       "dev": true
     },
-    "node_modules/progress": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
-      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.4.0"
-      }
-    },
     "node_modules/prompts": {
       "version": "2.4.2",
       "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
@@ -19488,7 +18709,7 @@
     "node_modules/proto-list": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
-      "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+      "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
       "dev": true,
       "optional": true
     },
@@ -19505,10 +18726,19 @@
         "node": ">= 0.10"
       }
     },
+    "node_modules/proxy-addr/node_modules/ipaddr.js": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.10"
+      }
+    },
     "node_modules/pseudomap": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+      "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
       "dev": true,
       "optional": true
     },
@@ -19647,6 +18877,15 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/raw-body/node_modules/bytes": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/react": {
       "version": "16.14.0",
       "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
@@ -19739,62 +18978,19 @@
         "node": ">=14"
       }
     },
-    "node_modules/react-dev-utils/node_modules/@babel/code-frame": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
-      "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
-      "dev": true,
-      "dependencies": {
-        "@babel/highlight": "^7.16.7"
-      },
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/react-dev-utils/node_modules/@babel/helper-validator-identifier": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/react-dev-utils/node_modules/@babel/highlight": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
-      "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
+    "node_modules/react-dev-utils/node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "chalk": "^2.0.0",
-        "js-tokens": "^4.0.0"
+        "color-convert": "^2.0.1"
       },
       "engines": {
-        "node": ">=6.9.0"
-      }
-    },
-    "node_modules/react-dev-utils/node_modules/@babel/highlight/node_modules/chalk": {
-      "version": "2.4.2",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-      "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^3.2.1",
-        "escape-string-regexp": "^1.0.5",
-        "supports-color": "^5.3.0"
+        "node": ">=8"
       },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/react-dev-utils/node_modules/@babel/highlight/node_modules/escape-string-regexp": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.0"
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
     "node_modules/react-dev-utils/node_modules/array-union": {
@@ -19822,33 +19018,6 @@
         "url": "https://github.com/chalk/chalk?sponsor=1"
       }
     },
-    "node_modules/react-dev-utils/node_modules/chalk/node_modules/ansi-styles": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-      "dev": true,
-      "dependencies": {
-        "color-convert": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
-      }
-    },
-    "node_modules/react-dev-utils/node_modules/chalk/node_modules/supports-color": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-      "dev": true,
-      "dependencies": {
-        "has-flag": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/react-dev-utils/node_modules/color-convert": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -19867,20 +19036,6 @@
       "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
       "dev": true
     },
-    "node_modules/react-dev-utils/node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/react-dev-utils/node_modules/escape-string-regexp": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -19931,36 +19086,6 @@
         "node": ">= 12.13.0"
       }
     },
-    "node_modules/react-dev-utils/node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/react-dev-utils/node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/react-dev-utils/node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/react-dev-utils/node_modules/slash": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -19970,19 +19095,16 @@
         "node": ">=8"
       }
     },
-    "node_modules/react-dev-utils/node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+    "node_modules/react-dev-utils/node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
       "dev": true,
       "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
+        "has-flag": "^4.0.0"
       },
       "engines": {
-        "node": ">= 8"
+        "node": ">=8"
       }
     },
     "node_modules/react-dom": {
@@ -20513,118 +19635,105 @@
       }
     },
     "node_modules/read-pkg": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
-      "integrity": "sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==",
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+      "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
       "dev": true,
       "dependencies": {
-        "load-json-file": "^2.0.0",
-        "normalize-package-data": "^2.3.2",
-        "path-type": "^2.0.0"
+        "@types/normalize-package-data": "^2.4.0",
+        "normalize-package-data": "^2.5.0",
+        "parse-json": "^5.0.0",
+        "type-fest": "^0.6.0"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=8"
       }
     },
     "node_modules/read-pkg-up": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
-      "integrity": "sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==",
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+      "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
       "dev": true,
       "dependencies": {
-        "find-up": "^2.0.0",
-        "read-pkg": "^2.0.0"
+        "find-up": "^4.1.0",
+        "read-pkg": "^5.2.0",
+        "type-fest": "^0.8.1"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/read-pkg-up/node_modules/find-up": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
-      "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+      "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
       "dev": true,
       "dependencies": {
-        "locate-path": "^2.0.0"
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=8"
       }
     },
     "node_modules/read-pkg-up/node_modules/locate-path": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
-      "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+      "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
       "dev": true,
       "dependencies": {
-        "p-locate": "^2.0.0",
-        "path-exists": "^3.0.0"
+        "p-locate": "^4.1.0"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=8"
       }
     },
     "node_modules/read-pkg-up/node_modules/p-limit": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-      "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+      "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
       "dev": true,
       "dependencies": {
-        "p-try": "^1.0.0"
+        "p-try": "^2.0.0"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
     "node_modules/read-pkg-up/node_modules/p-locate": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-      "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+      "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
       "dev": true,
       "dependencies": {
-        "p-limit": "^1.1.0"
+        "p-limit": "^2.2.0"
       },
       "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/read-pkg-up/node_modules/p-try": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-      "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/read-pkg-up/node_modules/path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
+        "node": ">=8"
       }
     },
-    "node_modules/read-pkg/node_modules/path-type": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
-      "integrity": "sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==",
+    "node_modules/read-pkg-up/node_modules/type-fest": {
+      "version": "0.8.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+      "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
       "dev": true,
-      "dependencies": {
-        "pify": "^2.0.0"
-      },
       "engines": {
-        "node": ">=4"
+        "node": ">=8"
       }
     },
-    "node_modules/read-pkg/node_modules/pify": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-      "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+    "node_modules/read-pkg/node_modules/type-fest": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+      "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
       "dev": true,
       "engines": {
-        "node": ">=0.10.0"
+        "node": ">=8"
       }
     },
     "node_modules/readable-stream": {
@@ -20645,7 +19754,7 @@
     "node_modules/readable-stream/node_modules/isarray": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
       "dev": true
     },
     "node_modules/readdirp": {
@@ -20684,6 +19793,18 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/recursive-readdir/node_modules/minimatch": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/redent": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz",
@@ -20779,18 +19900,21 @@
       }
     },
     "node_modules/regexpp": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
-      "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
       "dev": true,
       "engines": {
-        "node": ">=6.5.0"
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/mysticatea"
       }
     },
     "node_modules/regexpu-core": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz",
-      "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
+      "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
       "dev": true,
       "dependencies": {
         "regenerate": "^1.4.2",
@@ -20825,7 +19949,7 @@
     "node_modules/regjsparser/node_modules/jsesc": {
       "version": "0.5.0",
       "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-      "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+      "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
       "dev": true,
       "bin": {
         "jsesc": "bin/jsesc"
@@ -20843,7 +19967,7 @@
     "node_modules/remove-trailing-separator": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
-      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+      "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
       "dev": true
     },
     "node_modules/renderkid": {
@@ -20871,7 +19995,7 @@
     "node_modules/repeat-string": {
       "version": "1.6.1",
       "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+      "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
       "dev": true,
       "engines": {
         "node": ">=0.10"
@@ -20948,7 +20072,7 @@
     "node_modules/require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -20972,7 +20096,7 @@
     "node_modules/requires-port": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
-      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
       "dev": true
     },
     "node_modules/reselect": {
@@ -21021,7 +20145,7 @@
     "node_modules/resolve-url": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
-      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+      "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
       "deprecated": "https://github.com/lydell/resolve-url#deprecated",
       "dev": true
     },
@@ -21054,26 +20178,13 @@
     "node_modules/responselike": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
-      "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+      "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==",
       "dev": true,
       "optional": true,
       "dependencies": {
         "lowercase-keys": "^1.0.0"
       }
     },
-    "node_modules/restore-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
-      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
-      "dev": true,
-      "dependencies": {
-        "onetime": "^5.1.0",
-        "signal-exit": "^3.0.2"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/ret": {
       "version": "0.1.15",
       "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
@@ -21148,15 +20259,6 @@
         "rtlcss": "bin/rtlcss.js"
       }
     },
-    "node_modules/run-async": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
-      "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.12.0"
-      }
-    },
     "node_modules/run-parallel": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -21180,24 +20282,6 @@
         "queue-microtask": "^1.2.2"
       }
     },
-    "node_modules/rxjs": {
-      "version": "6.6.7",
-      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
-      "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
-      "dev": true,
-      "dependencies": {
-        "tslib": "^1.9.0"
-      },
-      "engines": {
-        "npm": ">=2.0.0"
-      }
-    },
-    "node_modules/rxjs/node_modules/tslib": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-      "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-      "dev": true
-    },
     "node_modules/safe-buffer": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -21206,7 +20290,7 @@
     "node_modules/safe-regex": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
-      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+      "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
       "dev": true,
       "dependencies": {
         "ret": "~0.1.10"
@@ -21276,7 +20360,7 @@
     "node_modules/sane/node_modules/braces/node_modules/extend-shallow": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-      "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+      "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
       "dev": true,
       "dependencies": {
         "is-extendable": "^0.1.0"
@@ -21288,7 +20372,7 @@
     "node_modules/sane/node_modules/fill-range": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
-      "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+      "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
       "dev": true,
       "dependencies": {
         "extend-shallow": "^2.0.1",
@@ -21303,7 +20387,7 @@
     "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-      "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+      "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
       "dev": true,
       "dependencies": {
         "is-extendable": "^0.1.0"
@@ -21318,10 +20402,19 @@
       "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
       "dev": true
     },
+    "node_modules/sane/node_modules/is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/sane/node_modules/is-number": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+      "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
       "dev": true,
       "dependencies": {
         "kind-of": "^3.0.2"
@@ -21333,7 +20426,7 @@
     "node_modules/sane/node_modules/is-number/node_modules/kind-of": {
       "version": "3.2.2",
       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
       "dev": true,
       "dependencies": {
         "is-buffer": "^1.1.5"
@@ -21369,7 +20462,7 @@
     "node_modules/sane/node_modules/normalize-path": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
-      "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+      "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
       "dev": true,
       "dependencies": {
         "remove-trailing-separator": "^1.0.1"
@@ -21381,7 +20474,7 @@
     "node_modules/sane/node_modules/to-regex-range": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
-      "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+      "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
       "dev": true,
       "dependencies": {
         "is-number": "^3.0.0",
@@ -21446,12 +20539,6 @@
         }
       }
     },
-    "node_modules/sass/node_modules/immutable": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz",
-      "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==",
-      "dev": true
-    },
     "node_modules/saxes": {
       "version": "5.0.1",
       "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
@@ -21521,7 +20608,7 @@
     "node_modules/select-hose": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
-      "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+      "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==",
       "dev": true
     },
     "node_modules/selfsigned": {
@@ -21558,7 +20645,7 @@
     "node_modules/semver-truncate": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz",
-      "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=",
+      "integrity": "sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -21604,7 +20691,7 @@
     "node_modules/send/node_modules/debug/node_modules/ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
     "node_modules/send/node_modules/ms": {
@@ -21625,7 +20712,7 @@
     "node_modules/serve-index": {
       "version": "1.9.1",
       "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
-      "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+      "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
       "dev": true,
       "dependencies": {
         "accepts": "~1.3.4",
@@ -21652,7 +20739,7 @@
     "node_modules/serve-index/node_modules/depd": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-      "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+      "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
       "dev": true,
       "engines": {
         "node": ">= 0.6"
@@ -21661,7 +20748,7 @@
     "node_modules/serve-index/node_modules/http-errors": {
       "version": "1.6.3",
       "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
-      "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+      "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
       "dev": true,
       "dependencies": {
         "depd": "~1.1.2",
@@ -21676,13 +20763,13 @@
     "node_modules/serve-index/node_modules/inherits": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+      "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
       "dev": true
     },
     "node_modules/serve-index/node_modules/ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
     "node_modules/serve-index/node_modules/setprototypeof": {
@@ -21694,7 +20781,7 @@
     "node_modules/serve-index/node_modules/statuses": {
       "version": "1.5.0",
       "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-      "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+      "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
       "dev": true,
       "engines": {
         "node": ">= 0.6"
@@ -21718,7 +20805,7 @@
     "node_modules/set-blocking": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+      "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
       "dev": true
     },
     "node_modules/set-value": {
@@ -21739,7 +20826,7 @@
     "node_modules/set-value/node_modules/extend-shallow": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-      "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+      "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
       "dev": true,
       "dependencies": {
         "is-extendable": "^0.1.0"
@@ -21748,6 +20835,15 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/set-value/node_modules/is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/setprototypeof": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
@@ -21777,24 +20873,24 @@
       "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
     },
     "node_modules/shebang-command": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
       "dev": true,
       "dependencies": {
-        "shebang-regex": "^1.0.0"
+        "shebang-regex": "^3.0.0"
       },
       "engines": {
-        "node": ">=0.10.0"
+        "node": ">=8"
       }
     },
     "node_modules/shebang-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
       "dev": true,
       "engines": {
-        "node": ">=0.10.0"
+        "node": ">=8"
       }
     },
     "node_modules/shell-quote": {
@@ -21871,29 +20967,6 @@
         "node": ">=6"
       }
     },
-    "node_modules/slice-ansi": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
-      "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^3.2.0",
-        "astral-regex": "^1.0.0",
-        "is-fullwidth-code-point": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-      "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/snapdragon": {
       "version": "0.8.2",
       "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
@@ -21930,7 +21003,7 @@
     "node_modules/snapdragon-node/node_modules/define-property": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-      "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+      "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
       "dev": true,
       "dependencies": {
         "is-descriptor": "^1.0.0"
@@ -21939,44 +21012,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-      "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon-node/node_modules/is-data-descriptor": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-      "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-      "dev": true,
-      "dependencies": {
-        "kind-of": "^6.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/snapdragon-node/node_modules/is-descriptor": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-      "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-      "dev": true,
-      "dependencies": {
-        "is-accessor-descriptor": "^1.0.0",
-        "is-data-descriptor": "^1.0.0",
-        "kind-of": "^6.0.2"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/snapdragon-util": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
@@ -21998,7 +21033,7 @@
     "node_modules/snapdragon-util/node_modules/kind-of": {
       "version": "3.2.2",
       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
       "dev": true,
       "dependencies": {
         "is-buffer": "^1.1.5"
@@ -22019,7 +21054,7 @@
     "node_modules/snapdragon/node_modules/define-property": {
       "version": "0.2.5",
       "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-      "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+      "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
       "dev": true,
       "dependencies": {
         "is-descriptor": "^0.1.0"
@@ -22031,7 +21066,7 @@
     "node_modules/snapdragon/node_modules/extend-shallow": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-      "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+      "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
       "dev": true,
       "dependencies": {
         "is-extendable": "^0.1.0"
@@ -22040,10 +21075,96 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/snapdragon/node_modules/is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+      "dev": true,
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+      "dev": true,
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/snapdragon/node_modules/is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+      "dev": true
+    },
+    "node_modules/snapdragon/node_modules/is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+      "dev": true,
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+      "dev": true,
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/snapdragon/node_modules/is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "dev": true,
+      "dependencies": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/snapdragon/node_modules/is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/snapdragon/node_modules/kind-of": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+      "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/snapdragon/node_modules/ms": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+      "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
     "node_modules/snapdragon/node_modules/source-map-resolve": {
@@ -22083,7 +21204,7 @@
     "node_modules/sort-keys": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
-      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+      "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -22096,7 +21217,7 @@
     "node_modules/sort-keys-length": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
-      "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=",
+      "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -22328,6 +21449,7 @@
       "version": "0.1.8",
       "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
       "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
+      "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility",
       "dev": true
     },
     "node_modules/stack-utils": {
@@ -22352,15 +21474,15 @@
       }
     },
     "node_modules/stackframe": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.1.tgz",
-      "integrity": "sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg==",
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
+      "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==",
       "dev": true
     },
     "node_modules/static-extend": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
-      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+      "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
       "dev": true,
       "dependencies": {
         "define-property": "^0.2.5",
@@ -22373,7 +21495,7 @@
     "node_modules/static-extend/node_modules/define-property": {
       "version": "0.2.5",
       "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-      "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+      "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
       "dev": true,
       "dependencies": {
         "is-descriptor": "^0.1.0"
@@ -22382,6 +21504,83 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/static-extend/node_modules/is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+      "dev": true,
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+      "dev": true,
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/static-extend/node_modules/is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+      "dev": true
+    },
+    "node_modules/static-extend/node_modules/is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+      "dev": true,
+      "dependencies": {
+        "kind-of": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+      "dev": true,
+      "dependencies": {
+        "is-buffer": "^1.1.5"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/static-extend/node_modules/is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "dev": true,
+      "dependencies": {
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/static-extend/node_modules/kind-of": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+      "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/statuses": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@@ -22435,6 +21634,12 @@
         "node": ">=8"
       }
     },
+    "node_modules/string-width/node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "dev": true
+    },
     "node_modules/string.prototype.matchall": {
       "version": "4.0.7",
       "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz",
@@ -22509,22 +21714,13 @@
         "node": ">=8"
       }
     },
-    "node_modules/strip-ansi/node_modules/ansi-regex": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+      "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
       "dev": true,
       "engines": {
-        "node": ">=4"
+        "node": ">=8"
       }
     },
     "node_modules/strip-dirs": {
@@ -22540,7 +21736,7 @@
     "node_modules/strip-eof": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
-      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+      "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -22666,6 +21862,20 @@
         "ms": "^2.1.1"
       }
     },
+    "node_modules/superagent/node_modules/form-data": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+      "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+      "dev": true,
+      "dependencies": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.6",
+        "mime-types": "^2.1.12"
+      },
+      "engines": {
+        "node": ">= 0.12"
+      }
+    },
     "node_modules/supports-color": {
       "version": "5.5.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -22711,6 +21921,18 @@
         "node": ">=8"
       }
     },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/svg-parser": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
@@ -22766,71 +21988,6 @@
       "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-4.0.0.tgz",
       "integrity": "sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ=="
     },
-    "node_modules/table": {
-      "version": "5.4.6",
-      "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
-      "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
-      "dev": true,
-      "dependencies": {
-        "ajv": "^6.10.2",
-        "lodash": "^4.17.14",
-        "slice-ansi": "^2.1.0",
-        "string-width": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/table/node_modules/ansi-regex": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
-      "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
-      "dev": true,
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/table/node_modules/emoji-regex": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
-      "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
-      "dev": true
-    },
-    "node_modules/table/node_modules/is-fullwidth-code-point": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-      "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/table/node_modules/string-width": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-      "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-      "dev": true,
-      "dependencies": {
-        "emoji-regex": "^7.0.1",
-        "is-fullwidth-code-point": "^2.0.0",
-        "strip-ansi": "^5.1.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
-    "node_modules/table/node_modules/strip-ansi": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-      "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-      "dev": true,
-      "dependencies": {
-        "ansi-regex": "^4.1.0"
-      },
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/tapable": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
@@ -22862,7 +22019,7 @@
     "node_modules/temp-dir": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
-      "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
+      "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -22872,7 +22029,7 @@
     "node_modules/tempfile": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz",
-      "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=",
+      "integrity": "sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -22918,15 +22075,15 @@
       }
     },
     "node_modules/terser-webpack-plugin": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz",
-      "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==",
+      "version": "5.3.3",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz",
+      "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==",
       "dev": true,
       "dependencies": {
+        "@jridgewell/trace-mapping": "^0.3.7",
         "jest-worker": "^27.4.5",
         "schema-utils": "^3.1.1",
         "serialize-javascript": "^6.0.0",
-        "source-map": "^0.6.1",
         "terser": "^5.7.2"
       },
       "engines": {
@@ -22974,15 +22131,6 @@
         "node": ">= 10.13.0"
       }
     },
-    "node_modules/terser-webpack-plugin/node_modules/source-map": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
     "node_modules/terser-webpack-plugin/node_modules/supports-color": {
       "version": "8.1.1",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
@@ -23021,7 +22169,7 @@
     "node_modules/text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+      "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
       "dev": true
     },
     "node_modules/throat": {
@@ -23033,8 +22181,9 @@
     "node_modules/through": {
       "version": "2.3.8",
       "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
-      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
-      "dev": true
+      "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+      "dev": true,
+      "optional": true
     },
     "node_modules/thunky": {
       "version": "1.1.0",
@@ -23045,7 +22194,7 @@
     "node_modules/timed-out": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
-      "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+      "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -23062,18 +22211,6 @@
       "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
       "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
     },
-    "node_modules/tmp": {
-      "version": "0.0.33",
-      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
-      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
-      "dev": true,
-      "dependencies": {
-        "os-tmpdir": "~1.0.2"
-      },
-      "engines": {
-        "node": ">=0.6.0"
-      }
-    },
     "node_modules/tmpl": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -23098,7 +22235,7 @@
     "node_modules/to-object-path": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
-      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+      "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
       "dev": true,
       "dependencies": {
         "kind-of": "^3.0.2"
@@ -23116,7 +22253,7 @@
     "node_modules/to-object-path/node_modules/kind-of": {
       "version": "3.2.2",
       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+      "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
       "dev": true,
       "dependencies": {
         "is-buffer": "^1.1.5"
@@ -23208,7 +22345,7 @@
     "node_modules/trim-repeated": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
-      "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
+      "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -23242,6 +22379,15 @@
         "json5": "lib/cli.js"
       }
     },
+    "node_modules/tsconfig-paths/node_modules/strip-bom": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+      "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/tslib": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz",
@@ -23266,12 +22412,12 @@
       "dev": true
     },
     "node_modules/type-check": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
       "dev": true,
       "dependencies": {
-        "prelude-ls": "~1.1.2"
+        "prelude-ls": "^1.2.1"
       },
       "engines": {
         "node": ">= 0.8.0"
@@ -23287,14 +22433,12 @@
       }
     },
     "node_modules/type-fest": {
-      "version": "2.13.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.13.1.tgz",
-      "integrity": "sha512-hXYyrPFwETT2swFLHeoKtJrvSF/ftG/sA15/8nGaLuaDGfVAaq8DYFpu4yOyV4tzp082WqnTEoMsm3flKMI2FQ==",
+      "version": "0.21.3",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+      "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
       "dev": true,
-      "optional": true,
-      "peer": true,
       "engines": {
-        "node": ">=12.20"
+        "node": ">=10"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
@@ -23429,6 +22573,15 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/union-value/node_modules/is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+      "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/universal-cookie": {
       "version": "4.0.4",
       "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-4.0.4.tgz",
@@ -23450,7 +22603,7 @@
     "node_modules/unpipe": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
-      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
       "dev": true,
       "engines": {
         "node": ">= 0.8"
@@ -23459,7 +22612,7 @@
     "node_modules/unset-value": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
-      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
       "dev": true,
       "dependencies": {
         "has-value": "^0.3.1",
@@ -23472,7 +22625,7 @@
     "node_modules/unset-value/node_modules/has-value": {
       "version": "0.3.1",
       "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
-      "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+      "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
       "dev": true,
       "dependencies": {
         "get-value": "^2.0.3",
@@ -23486,7 +22639,7 @@
     "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
-      "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+      "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
       "dev": true,
       "dependencies": {
         "isarray": "1.0.0"
@@ -23498,7 +22651,7 @@
     "node_modules/unset-value/node_modules/has-values": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
-      "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+      "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -23507,9 +22660,35 @@
     "node_modules/unset-value/node_modules/isarray": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
       "dev": true
     },
+    "node_modules/update-browserslist-db": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz",
+      "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        }
+      ],
+      "dependencies": {
+        "escalade": "^3.1.1",
+        "picocolors": "^1.0.0"
+      },
+      "bin": {
+        "browserslist-lint": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
+      }
+    },
     "node_modules/uri-js": {
       "version": "4.4.1",
       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -23522,7 +22701,7 @@
     "node_modules/urix": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
-      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+      "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
       "deprecated": "Please see https://github.com/lydell/urix#deprecated",
       "dev": true
     },
@@ -23556,7 +22735,7 @@
     "node_modules/url-parse-lax": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
-      "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+      "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -23569,7 +22748,7 @@
     "node_modules/url-to-options": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
-      "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=",
+      "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==",
       "dev": true,
       "optional": true,
       "engines": {
@@ -23629,7 +22808,7 @@
     "node_modules/util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
       "dev": true
     },
     "node_modules/utila": {
@@ -23641,7 +22820,7 @@
     "node_modules/utils-merge": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
-      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
       "dev": true,
       "engines": {
         "node": ">= 0.4.0"
@@ -23678,9 +22857,9 @@
       }
     },
     "node_modules/v8-to-istanbul/node_modules/source-map": {
-      "version": "0.7.3",
-      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
-      "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+      "version": "0.7.4",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+      "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
       "dev": true,
       "engines": {
         "node": ">= 8"
@@ -23704,7 +22883,7 @@
     "node_modules/vary": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
       "dev": true,
       "engines": {
         "node": ">= 0.8"
@@ -23763,9 +22942,9 @@
       }
     },
     "node_modules/watchpack": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz",
-      "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==",
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
+      "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
       "dev": true,
       "dependencies": {
         "glob-to-regexp": "^0.4.1",
@@ -24013,50 +23192,6 @@
         "node": ">= 10"
       }
     },
-    "node_modules/webpack-cli/node_modules/cross-spawn": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-      "dev": true,
-      "dependencies": {
-        "path-key": "^3.1.0",
-        "shebang-command": "^2.0.0",
-        "which": "^2.0.1"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/webpack-cli/node_modules/path-key": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/webpack-cli/node_modules/shebang-command": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-      "dev": true,
-      "dependencies": {
-        "shebang-regex": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/webpack-cli/node_modules/shebang-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-      "dev": true,
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/webpack-cli/node_modules/webpack-merge": {
       "version": "5.8.0",
       "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz",
@@ -24070,29 +23205,14 @@
         "node": ">=10.0.0"
       }
     },
-    "node_modules/webpack-cli/node_modules/which": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-      "dev": true,
-      "dependencies": {
-        "isexe": "^2.0.0"
-      },
-      "bin": {
-        "node-which": "bin/node-which"
-      },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
     "node_modules/webpack-dev-middleware": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz",
-      "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==",
+      "version": "5.3.3",
+      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz",
+      "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==",
       "dev": true,
       "dependencies": {
         "colorette": "^2.0.10",
-        "memfs": "^3.4.1",
+        "memfs": "^3.4.3",
         "mime-types": "^2.1.31",
         "range-parser": "^1.2.1",
         "schema-utils": "^4.0.0"
@@ -24137,9 +23257,9 @@
       }
     },
     "node_modules/webpack-dev-middleware/node_modules/colorette": {
-      "version": "2.0.16",
-      "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
-      "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
+      "version": "2.0.19",
+      "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
+      "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
       "dev": true
     },
     "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": {
@@ -24268,15 +23388,15 @@
       }
     },
     "node_modules/webpack-dev-server/node_modules/colorette": {
-      "version": "2.0.16",
-      "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
-      "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
+      "version": "2.0.19",
+      "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
+      "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
       "dev": true
     },
     "node_modules/webpack-dev-server/node_modules/del": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz",
-      "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==",
+      "version": "6.1.1",
+      "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
+      "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
       "dev": true,
       "dependencies": {
         "globby": "^11.0.1",
@@ -24315,15 +23435,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/webpack-dev-server/node_modules/ipaddr.js": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz",
-      "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==",
-      "dev": true,
-      "engines": {
-        "node": ">= 10"
-      }
-    },
     "node_modules/webpack-dev-server/node_modules/is-path-inside": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
@@ -24413,9 +23524,9 @@
       }
     },
     "node_modules/webpack-dev-server/node_modules/ws": {
-      "version": "8.5.0",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
-      "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
+      "version": "8.8.1",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
+      "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
       "dev": true,
       "engines": {
         "node": ">=10.0.0"
@@ -24465,15 +23576,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/webpack/node_modules/events": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
-      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.8.x"
-      }
-    },
     "node_modules/webpack/node_modules/webpack-sources": {
       "version": "3.2.3",
       "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
@@ -24536,15 +23638,18 @@
       }
     },
     "node_modules/which": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
       "dev": true,
       "dependencies": {
         "isexe": "^2.0.0"
       },
       "bin": {
-        "which": "bin/which"
+        "node-which": "bin/node-which"
+      },
+      "engines": {
+        "node": ">= 8"
       }
     },
     "node_modules/which-boxed-primitive": {
@@ -24565,7 +23670,7 @@
     "node_modules/which-module": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
-      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+      "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==",
       "dev": true
     },
     "node_modules/wildcard": {
@@ -24638,18 +23743,6 @@
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
     },
-    "node_modules/write": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
-      "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
-      "dev": true,
-      "dependencies": {
-        "mkdirp": "^0.5.1"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/write-file-atomic": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
@@ -24663,9 +23756,9 @@
       }
     },
     "node_modules/ws": {
-      "version": "7.5.7",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
-      "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
+      "version": "7.5.9",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
+      "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
       "dev": true,
       "engines": {
         "node": ">=8.3.0"
@@ -24695,15 +23788,6 @@
       "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
       "dev": true
     },
-    "node_modules/xregexp": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.4.1.tgz",
-      "integrity": "sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==",
-      "dev": true,
-      "dependencies": {
-        "@babel/runtime-corejs3": "^7.12.1"
-      }
-    },
     "node_modules/xtend": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
@@ -24724,10 +23808,11 @@
       }
     },
     "node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+      "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
+      "dev": true,
+      "optional": true
     },
     "node_modules/yaml": {
       "version": "1.10.2",
@@ -24767,7 +23852,7 @@
     "node_modules/yauzl": {
       "version": "2.10.0",
       "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
-      "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+      "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -24909,6 +23994,28 @@
         "@algolia/requester-common": "4.6.0"
       }
     },
+    "@ampproject/remapping": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
+      "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+      "dev": true,
+      "requires": {
+        "@jridgewell/gen-mapping": "^0.1.0",
+        "@jridgewell/trace-mapping": "^0.3.9"
+      },
+      "dependencies": {
+        "@jridgewell/gen-mapping": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
+          "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
+          "dev": true,
+          "requires": {
+            "@jridgewell/set-array": "^1.0.0",
+            "@jridgewell/sourcemap-codec": "^1.4.10"
+          }
+        }
+      }
+    },
     "@babel/cli": {
       "version": "7.16.0",
       "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.16.0.tgz",
@@ -24927,17 +24034,17 @@
       }
     },
     "@babel/code-frame": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
-      "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+      "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
       "requires": {
-        "@babel/highlight": "^7.14.5"
+        "@babel/highlight": "^7.18.6"
       }
     },
     "@babel/compat-data": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz",
-      "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==",
+      "version": "7.18.8",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz",
+      "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==",
       "dev": true
     },
     "@babel/core": {
@@ -24963,42 +24070,6 @@
         "source-map": "^0.5.0"
       },
       "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
-          "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
-          "dev": true,
-          "requires": {
-            "@babel/highlight": "^7.16.7"
-          }
-        },
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/highlight": {
-          "version": "7.17.9",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
-          "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
         "semver": {
           "version": "6.3.0",
           "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -25007,99 +24078,64 @@
         }
       }
     },
-    "@babel/generator": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz",
-      "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==",
+    "@babel/eslint-parser": {
+      "version": "7.18.2",
+      "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.2.tgz",
+      "integrity": "sha512-oFQYkE8SuH14+uR51JVAmdqwKYXGRjEXx7s+WiagVjqQ+HPE+nnwyF2qlVG8evUsUHmPcA+6YXMEDbIhEyQc5A==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.17.0",
-        "jsesc": "^2.5.1",
-        "source-map": "^0.5.0"
+        "eslint-scope": "^5.1.1",
+        "eslint-visitor-keys": "^2.1.0",
+        "semver": "^6.3.0"
       },
       "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
           "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
         }
       }
     },
+    "@babel/generator": {
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz",
+      "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.18.10",
+        "@jridgewell/gen-mapping": "^0.3.2",
+        "jsesc": "^2.5.1"
+      }
+    },
     "@babel/helper-annotate-as-pure": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz",
-      "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
+      "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.16.7"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/types": "^7.18.6"
       }
     },
     "@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz",
-      "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz",
+      "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==",
       "dev": true,
       "requires": {
-        "@babel/helper-explode-assignable-expression": "^7.16.7",
-        "@babel/types": "^7.16.7"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/helper-explode-assignable-expression": "^7.18.6",
+        "@babel/types": "^7.18.9"
       }
     },
     "@babel/helper-compilation-targets": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz",
-      "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz",
+      "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==",
       "dev": true,
       "requires": {
-        "@babel/compat-data": "^7.17.7",
-        "@babel/helper-validator-option": "^7.16.7",
-        "browserslist": "^4.17.5",
+        "@babel/compat-data": "^7.18.8",
+        "@babel/helper-validator-option": "^7.18.6",
+        "browserslist": "^4.20.2",
         "semver": "^6.3.0"
       },
       "dependencies": {
@@ -25112,40 +24148,38 @@
       }
     },
     "@babel/helper-create-class-features-plugin": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz",
-      "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz",
+      "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.16.7",
-        "@babel/helper-environment-visitor": "^7.16.7",
-        "@babel/helper-function-name": "^7.17.9",
-        "@babel/helper-member-expression-to-functions": "^7.17.7",
-        "@babel/helper-optimise-call-expression": "^7.16.7",
-        "@babel/helper-replace-supers": "^7.16.7",
-        "@babel/helper-split-export-declaration": "^7.16.7"
+        "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-environment-visitor": "^7.18.9",
+        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-member-expression-to-functions": "^7.18.9",
+        "@babel/helper-optimise-call-expression": "^7.18.6",
+        "@babel/helper-replace-supers": "^7.18.9",
+        "@babel/helper-split-export-declaration": "^7.18.6"
       }
     },
     "@babel/helper-create-regexp-features-plugin": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz",
-      "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz",
+      "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.16.7",
-        "regexpu-core": "^5.0.1"
+        "@babel/helper-annotate-as-pure": "^7.18.6",
+        "regexpu-core": "^5.1.0"
       }
     },
     "@babel/helper-define-polyfill-provider": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz",
-      "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==",
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz",
+      "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==",
       "dev": true,
       "requires": {
-        "@babel/helper-compilation-targets": "^7.13.0",
-        "@babel/helper-module-imports": "^7.12.13",
-        "@babel/helper-plugin-utils": "^7.13.0",
-        "@babel/traverse": "^7.13.0",
+        "@babel/helper-compilation-targets": "^7.17.7",
+        "@babel/helper-plugin-utils": "^7.16.7",
         "debug": "^4.1.1",
         "lodash.debounce": "^4.0.8",
         "resolve": "^1.14.2",
@@ -25161,480 +24195,223 @@
       }
     },
     "@babel/helper-environment-visitor": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz",
-      "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==",
-      "dev": true,
-      "requires": {
-        "@babel/types": "^7.16.7"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
-      }
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
+      "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
+      "dev": true
     },
     "@babel/helper-explode-assignable-expression": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz",
-      "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz",
+      "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.16.7"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/types": "^7.18.6"
       }
     },
     "@babel/helper-function-name": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz",
-      "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
+      "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
       "dev": true,
       "requires": {
-        "@babel/template": "^7.16.7",
-        "@babel/types": "^7.17.0"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/template": "^7.18.6",
+        "@babel/types": "^7.18.9"
       }
     },
     "@babel/helper-hoist-variables": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz",
-      "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
+      "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.16.7"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/types": "^7.18.6"
       }
     },
     "@babel/helper-member-expression-to-functions": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz",
-      "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz",
+      "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.17.0"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/types": "^7.18.9"
       }
     },
     "@babel/helper-module-imports": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz",
-      "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+      "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
       "requires": {
-        "@babel/types": "^7.14.5"
+        "@babel/types": "^7.18.6"
       }
     },
     "@babel/helper-module-transforms": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz",
-      "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
+      "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
       "dev": true,
       "requires": {
-        "@babel/helper-environment-visitor": "^7.16.7",
-        "@babel/helper-module-imports": "^7.16.7",
-        "@babel/helper-simple-access": "^7.17.7",
-        "@babel/helper-split-export-declaration": "^7.16.7",
-        "@babel/helper-validator-identifier": "^7.16.7",
-        "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.3",
-        "@babel/types": "^7.17.0"
-      },
-      "dependencies": {
-        "@babel/helper-module-imports": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz",
-          "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==",
-          "dev": true,
-          "requires": {
-            "@babel/types": "^7.16.7"
-          }
-        },
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/helper-environment-visitor": "^7.18.9",
+        "@babel/helper-module-imports": "^7.18.6",
+        "@babel/helper-simple-access": "^7.18.6",
+        "@babel/helper-split-export-declaration": "^7.18.6",
+        "@babel/helper-validator-identifier": "^7.18.6",
+        "@babel/template": "^7.18.6",
+        "@babel/traverse": "^7.18.9",
+        "@babel/types": "^7.18.9"
       }
     },
     "@babel/helper-optimise-call-expression": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz",
-      "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz",
+      "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.16.7"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/types": "^7.18.6"
       }
     },
     "@babel/helper-plugin-utils": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz",
-      "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+      "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==",
       "dev": true
     },
     "@babel/helper-remap-async-to-generator": {
-      "version": "7.16.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz",
-      "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz",
+      "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.16.7",
-        "@babel/helper-wrap-function": "^7.16.8",
-        "@babel/types": "^7.16.8"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-environment-visitor": "^7.18.9",
+        "@babel/helper-wrap-function": "^7.18.9",
+        "@babel/types": "^7.18.9"
       }
     },
     "@babel/helper-replace-supers": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz",
-      "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz",
+      "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-environment-visitor": "^7.16.7",
-        "@babel/helper-member-expression-to-functions": "^7.16.7",
-        "@babel/helper-optimise-call-expression": "^7.16.7",
-        "@babel/traverse": "^7.16.7",
-        "@babel/types": "^7.16.7"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/helper-environment-visitor": "^7.18.9",
+        "@babel/helper-member-expression-to-functions": "^7.18.9",
+        "@babel/helper-optimise-call-expression": "^7.18.6",
+        "@babel/traverse": "^7.18.9",
+        "@babel/types": "^7.18.9"
       }
     },
     "@babel/helper-simple-access": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz",
-      "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
+      "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.17.0"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/types": "^7.18.6"
       }
     },
     "@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.16.0",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz",
-      "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz",
+      "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.16.0"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/types": "^7.18.9"
       }
     },
     "@babel/helper-split-export-declaration": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz",
-      "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+      "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.16.7"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/types": "^7.18.6"
       }
     },
+    "@babel/helper-string-parser": {
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
+      "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw=="
+    },
     "@babel/helper-validator-identifier": {
-      "version": "7.14.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz",
-      "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g=="
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+      "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
     },
     "@babel/helper-validator-option": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz",
-      "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
+      "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
       "dev": true
     },
     "@babel/helper-wrap-function": {
-      "version": "7.16.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz",
-      "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.10.tgz",
+      "integrity": "sha512-95NLBP59VWdfK2lyLKe6eTMq9xg+yWKzxzxbJ1wcYNi1Auz200+83fMDADjRxBvc2QQor5zja2yTQzXGhk2GtQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-function-name": "^7.16.7",
-        "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.16.8",
-        "@babel/types": "^7.16.8"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/helper-function-name": "^7.18.9",
+        "@babel/template": "^7.18.10",
+        "@babel/traverse": "^7.18.10",
+        "@babel/types": "^7.18.10"
       }
     },
     "@babel/helpers": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz",
-      "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz",
+      "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==",
       "dev": true,
       "requires": {
-        "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.9",
-        "@babel/types": "^7.17.0"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/template": "^7.18.6",
+        "@babel/traverse": "^7.18.9",
+        "@babel/types": "^7.18.9"
       }
     },
     "@babel/highlight": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
-      "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+      "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
       "requires": {
-        "@babel/helper-validator-identifier": "^7.14.5",
+        "@babel/helper-validator-identifier": "^7.18.6",
         "chalk": "^2.0.0",
         "js-tokens": "^4.0.0"
       }
     },
     "@babel/parser": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz",
-      "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.10.tgz",
+      "integrity": "sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg==",
       "dev": true
     },
     "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz",
-      "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz",
+      "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz",
-      "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz",
+      "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
-        "@babel/plugin-proposal-optional-chaining": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9",
+        "@babel/plugin-proposal-optional-chaining": "^7.18.9"
       }
     },
     "@babel/plugin-proposal-async-generator-functions": {
-      "version": "7.16.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz",
-      "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz",
+      "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-remap-async-to-generator": "^7.16.8",
+        "@babel/helper-environment-visitor": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-remap-async-to-generator": "^7.18.9",
         "@babel/plugin-syntax-async-generators": "^7.8.4"
       }
     },
@@ -25649,73 +24426,73 @@
       }
     },
     "@babel/plugin-proposal-class-static-block": {
-      "version": "7.17.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz",
-      "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz",
+      "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.17.6",
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-create-class-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-class-static-block": "^7.14.5"
       }
     },
     "@babel/plugin-proposal-dynamic-import": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz",
-      "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz",
+      "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-dynamic-import": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-export-namespace-from": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz",
-      "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz",
+      "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.18.9",
         "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-json-strings": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz",
-      "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz",
+      "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-json-strings": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-logical-assignment-operators": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz",
-      "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz",
+      "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.18.9",
         "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
       }
     },
     "@babel/plugin-proposal-nullish-coalescing-operator": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz",
-      "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
+      "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-numeric-separator": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz",
-      "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz",
+      "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-numeric-separator": "^7.10.4"
       }
     },
@@ -25733,56 +24510,56 @@
       }
     },
     "@babel/plugin-proposal-optional-catch-binding": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz",
-      "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz",
+      "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-optional-chaining": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz",
-      "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz",
+      "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9",
         "@babel/plugin-syntax-optional-chaining": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-private-methods": {
-      "version": "7.16.11",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz",
-      "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz",
+      "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.16.10",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-create-class-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-proposal-private-property-in-object": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz",
-      "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz",
+      "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.16.7",
-        "@babel/helper-create-class-features-plugin": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-create-class-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
       }
     },
     "@babel/plugin-proposal-unicode-property-regex": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz",
-      "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
+      "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-syntax-async-generators": {
@@ -25858,12 +24635,12 @@
       }
     },
     "@babel/plugin-syntax-jsx": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz",
-      "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
+      "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-syntax-logical-assignment-operators": {
@@ -25939,449 +24716,389 @@
       }
     },
     "@babel/plugin-syntax-typescript": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz",
-      "integrity": "sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz",
+      "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-arrow-functions": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz",
-      "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz",
+      "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-async-to-generator": {
-      "version": "7.16.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz",
-      "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz",
+      "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-imports": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-remap-async-to-generator": "^7.16.8"
-      },
-      "dependencies": {
-        "@babel/helper-module-imports": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz",
-          "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==",
-          "dev": true,
-          "requires": {
-            "@babel/types": "^7.16.7"
-          }
-        },
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/helper-module-imports": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6",
+        "@babel/helper-remap-async-to-generator": "^7.18.6"
       }
     },
     "@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz",
-      "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz",
+      "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-block-scoping": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz",
-      "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz",
+      "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       }
     },
     "@babel/plugin-transform-classes": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz",
-      "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz",
+      "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.16.7",
-        "@babel/helper-environment-visitor": "^7.16.7",
-        "@babel/helper-function-name": "^7.16.7",
-        "@babel/helper-optimise-call-expression": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-replace-supers": "^7.16.7",
-        "@babel/helper-split-export-declaration": "^7.16.7",
+        "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-environment-visitor": "^7.18.9",
+        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-optimise-call-expression": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-replace-supers": "^7.18.9",
+        "@babel/helper-split-export-declaration": "^7.18.6",
         "globals": "^11.1.0"
       }
     },
     "@babel/plugin-transform-computed-properties": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz",
-      "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz",
+      "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       }
     },
     "@babel/plugin-transform-destructuring": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz",
-      "integrity": "sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz",
+      "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       }
     },
     "@babel/plugin-transform-dotall-regex": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz",
-      "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz",
+      "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-duplicate-keys": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz",
-      "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz",
+      "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       }
     },
     "@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz",
-      "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz",
+      "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==",
       "dev": true,
       "requires": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-for-of": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz",
-      "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==",
+      "version": "7.18.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz",
+      "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-function-name": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz",
-      "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz",
+      "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-compilation-targets": "^7.16.7",
-        "@babel/helper-function-name": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-compilation-targets": "^7.18.9",
+        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.18.9"
       }
     },
     "@babel/plugin-transform-literals": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz",
-      "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz",
+      "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       }
     },
     "@babel/plugin-transform-member-expression-literals": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz",
-      "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz",
+      "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-modules-amd": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz",
-      "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz",
+      "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-module-transforms": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6",
         "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-commonjs": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz",
-      "integrity": "sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz",
+      "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.17.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-simple-access": "^7.17.7",
+        "@babel/helper-module-transforms": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6",
+        "@babel/helper-simple-access": "^7.18.6",
         "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-systemjs": {
-      "version": "7.17.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz",
-      "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz",
+      "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==",
       "dev": true,
       "requires": {
-        "@babel/helper-hoist-variables": "^7.16.7",
-        "@babel/helper-module-transforms": "^7.17.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-validator-identifier": "^7.16.7",
+        "@babel/helper-hoist-variables": "^7.18.6",
+        "@babel/helper-module-transforms": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-validator-identifier": "^7.18.6",
         "babel-plugin-dynamic-import-node": "^2.3.3"
-      },
-      "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        }
       }
     },
     "@babel/plugin-transform-modules-umd": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz",
-      "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz",
+      "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-module-transforms": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.16.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz",
-      "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz",
+      "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.16.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-new-target": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz",
-      "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz",
+      "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-object-super": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz",
-      "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz",
+      "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-replace-supers": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6",
+        "@babel/helper-replace-supers": "^7.18.6"
       }
     },
     "@babel/plugin-transform-parameters": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz",
-      "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==",
+      "version": "7.18.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz",
+      "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-property-literals": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz",
-      "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz",
+      "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-react-constant-elements": {
-      "version": "7.17.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.6.tgz",
-      "integrity": "sha512-OBv9VkyyKtsHZiHLoSfCn+h6yU7YKX8nrs32xUmOa1SRSk+t03FosB6fBZ0Yz4BpD1WV7l73Nsad+2Tz7APpqw==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.9.tgz",
+      "integrity": "sha512-IrTYh1I3YCEL1trjknnlLKTp5JggjzhKl/d3ibzPc97JhpFcDTr38Jdek/oX4cFbS6By0bXJcOkpRvJ5ZHK2wQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       }
     },
     "@babel/plugin-transform-react-display-name": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz",
-      "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz",
+      "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-react-jsx": {
-      "version": "7.17.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz",
-      "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz",
+      "integrity": "sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.16.7",
-        "@babel/helper-module-imports": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/plugin-syntax-jsx": "^7.16.7",
-        "@babel/types": "^7.17.0"
-      },
-      "dependencies": {
-        "@babel/helper-module-imports": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz",
-          "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==",
-          "dev": true,
-          "requires": {
-            "@babel/types": "^7.16.7"
-          }
-        },
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-module-imports": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/plugin-syntax-jsx": "^7.18.6",
+        "@babel/types": "^7.18.10"
       }
     },
     "@babel/plugin-transform-react-jsx-development": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz",
-      "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz",
+      "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==",
       "dev": true,
       "requires": {
-        "@babel/plugin-transform-react-jsx": "^7.16.7"
+        "@babel/plugin-transform-react-jsx": "^7.18.6"
       }
     },
     "@babel/plugin-transform-react-pure-annotations": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz",
-      "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz",
+      "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-regenerator": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz",
-      "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz",
+      "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==",
       "dev": true,
       "requires": {
+        "@babel/helper-plugin-utils": "^7.18.6",
         "regenerator-transform": "^0.15.0"
       }
     },
     "@babel/plugin-transform-reserved-words": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz",
-      "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz",
+      "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-shorthand-properties": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz",
-      "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz",
+      "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-spread": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz",
-      "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz",
+      "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0"
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9"
       }
     },
     "@babel/plugin-transform-sticky-regex": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz",
-      "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz",
+      "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/plugin-transform-template-literals": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz",
-      "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz",
+      "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       }
     },
     "@babel/plugin-transform-typeof-symbol": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz",
-      "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==",
+      "version": "7.18.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz",
+      "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       }
     },
     "@babel/plugin-transform-typescript": {
-      "version": "7.16.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz",
-      "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.10.tgz",
+      "integrity": "sha512-j2HQCJuMbi88QftIb5zlRu3c7PU+sXNnscqsrjqegoGiCgXR569pEdben9vly5QHKL2ilYkfnSwu64zsZo/VYQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/plugin-syntax-typescript": "^7.16.7"
+        "@babel/helper-create-class-features-plugin": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/plugin-syntax-typescript": "^7.18.6"
       }
     },
     "@babel/plugin-transform-unicode-escapes": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz",
-      "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz",
+      "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.9"
       }
     },
     "@babel/plugin-transform-unicode-regex": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz",
-      "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz",
+      "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.16.7",
-        "@babel/helper-plugin-utils": "^7.16.7"
+        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+        "@babel/helper-plugin-utils": "^7.18.6"
       }
     },
     "@babel/preset-env": {
@@ -26466,22 +25183,6 @@
         "semver": "^6.3.0"
       },
       "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
         "semver": {
           "version": "6.3.0",
           "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -26518,14 +25219,14 @@
       }
     },
     "@babel/preset-typescript": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz",
-      "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz",
+      "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.16.7",
-        "@babel/helper-validator-option": "^7.16.7",
-        "@babel/plugin-transform-typescript": "^7.16.7"
+        "@babel/helper-plugin-utils": "^7.18.6",
+        "@babel/helper-validator-option": "^7.18.6",
+        "@babel/plugin-transform-typescript": "^7.18.6"
       }
     },
     "@babel/runtime": {
@@ -26546,116 +25247,41 @@
       }
     },
     "@babel/template": {
-      "version": "7.16.7",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz",
-      "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
+      "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
       "dev": true,
       "requires": {
-        "@babel/code-frame": "^7.16.7",
-        "@babel/parser": "^7.16.7",
-        "@babel/types": "^7.16.7"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
-          "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
-          "dev": true,
-          "requires": {
-            "@babel/highlight": "^7.16.7"
-          }
-        },
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/highlight": {
-          "version": "7.17.9",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
-          "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
+        "@babel/code-frame": "^7.18.6",
+        "@babel/parser": "^7.18.10",
+        "@babel/types": "^7.18.10"
       }
     },
     "@babel/traverse": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz",
-      "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.16.7",
-        "@babel/generator": "^7.17.9",
-        "@babel/helper-environment-visitor": "^7.16.7",
-        "@babel/helper-function-name": "^7.17.9",
-        "@babel/helper-hoist-variables": "^7.16.7",
-        "@babel/helper-split-export-declaration": "^7.16.7",
-        "@babel/parser": "^7.17.9",
-        "@babel/types": "^7.17.0",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.10.tgz",
+      "integrity": "sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g==",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.18.6",
+        "@babel/generator": "^7.18.10",
+        "@babel/helper-environment-visitor": "^7.18.9",
+        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-hoist-variables": "^7.18.6",
+        "@babel/helper-split-export-declaration": "^7.18.6",
+        "@babel/parser": "^7.18.10",
+        "@babel/types": "^7.18.10",
         "debug": "^4.1.0",
         "globals": "^11.1.0"
-      },
-      "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
-          "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
-          "dev": true,
-          "requires": {
-            "@babel/highlight": "^7.16.7"
-          }
-        },
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/highlight": {
-          "version": "7.17.9",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
-          "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          }
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        }
       }
     },
     "@babel/types": {
-      "version": "7.15.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz",
-      "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz",
+      "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==",
       "requires": {
-        "@babel/helper-validator-identifier": "^7.14.9",
+        "@babel/helper-string-parser": "^7.18.10",
+        "@babel/helper-validator-identifier": "^7.18.6",
         "to-fast-properties": "^2.0.0"
       }
     },
@@ -26692,31 +25318,31 @@
       "integrity": "sha512-ne2ZKF1r0akkt0rEzCAQAk4cTDTI2GiWCpc+T7ldQpw9X57OnUB16dKsFNe40C9uEjL5h3Ps/ZsFM5dm4cIkEQ=="
     },
     "@edx/eslint-config": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@edx/eslint-config/-/eslint-config-3.0.0.tgz",
-      "integrity": "sha512-3vMX3/vqYxpJK/XKGRjWlsvcIkOQYMxJ1uXcVl70HiQda31xWW4qpg2OTevEdnYo5vThSBVMFe7lRmMpMNDR7Q==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/@edx/eslint-config/-/eslint-config-3.1.0.tgz",
+      "integrity": "sha512-Okv8vkmX+qe+joD7h9DcT9JdRIyy6jJSVWbIHr2dAHKuk5swVFO92JvhC2pYtMg2EPKA1P1Hmz8cmmfw6QoTZw==",
       "dev": true,
       "requires": {}
     },
     "@edx/frontend-build": {
-      "version": "11.0.2",
-      "resolved": "https://registry.npmjs.org/@edx/frontend-build/-/frontend-build-11.0.2.tgz",
-      "integrity": "sha512-JGR8UEfxX+td1AeNqLVZgvEeHMmoIktHufC168fl55KVkPuQ7gje/anRFETkK9SekvlCeAJ+hecZj6/WSJ+8jA==",
+      "version": "12.0.3",
+      "resolved": "https://registry.npmjs.org/@edx/frontend-build/-/frontend-build-12.0.3.tgz",
+      "integrity": "sha512-q/BoMntXSXSXfSTUpr7G051jrqkAvEFRQHG4+R2rPMQX+Ok2FSE9HTa74kkEP2H2Ij6x5VHXhU5F1powu/x6Zw==",
       "dev": true,
       "requires": {
         "@babel/cli": "7.16.0",
         "@babel/core": "7.16.0",
+        "@babel/eslint-parser": "7.18.2",
         "@babel/plugin-proposal-class-properties": "7.16.0",
         "@babel/plugin-proposal-object-rest-spread": "7.16.0",
         "@babel/plugin-syntax-dynamic-import": "7.8.3",
         "@babel/preset-env": "7.16.4",
         "@babel/preset-react": "7.16.0",
-        "@edx/eslint-config": "3.0.0",
+        "@edx/eslint-config": "3.1.0",
         "@edx/new-relic-source-map-webpack-plugin": "1.0.1",
         "@pmmmwh/react-refresh-webpack-plugin": "0.5.3",
         "@svgr/webpack": "6.2.1",
         "autoprefixer": "10.2.6",
-        "babel-eslint": "10.1.0",
         "babel-jest": "26.6.3",
         "babel-loader": "8.2.3",
         "babel-plugin-react-intl": "7.9.4",
@@ -26727,12 +25353,12 @@
         "cssnano": "5.0.12",
         "dotenv": "8.2.0",
         "dotenv-webpack": "7.0.3",
-        "eslint": "6.8.0",
-        "eslint-config-airbnb": "18.1.0",
-        "eslint-plugin-import": "2.22.1",
-        "eslint-plugin-jsx-a11y": "6.2.3",
-        "eslint-plugin-react": "7.19.0",
-        "eslint-plugin-react-hooks": "1.7.0",
+        "eslint": "8.18.0",
+        "eslint-config-airbnb": "19.0.4",
+        "eslint-plugin-import": "2.26.0",
+        "eslint-plugin-jsx-a11y": "6.5.1",
+        "eslint-plugin-react": "7.30.0",
+        "eslint-plugin-react-hooks": "4.6.0",
         "file-loader": "6.2.0",
         "html-webpack-plugin": "5.5.0",
         "identity-obj-proxy": "3.0.0",
@@ -27111,10 +25737,59 @@
       "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz",
       "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA=="
     },
+    "@eslint/eslintrc": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
+      "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
+      "dev": true,
+      "requires": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.3.2",
+        "globals": "^13.15.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
+      "dependencies": {
+        "argparse": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+          "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+          "dev": true
+        },
+        "globals": {
+          "version": "13.17.0",
+          "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+          "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+          "dev": true,
+          "requires": {
+            "type-fest": "^0.20.2"
+          }
+        },
+        "js-yaml": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+          "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+          "dev": true,
+          "requires": {
+            "argparse": "^2.0.1"
+          }
+        },
+        "type-fest": {
+          "version": "0.20.2",
+          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+          "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+          "dev": true
+        }
+      }
+    },
     "@formatjs/ecma402-abstract": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.5.0.tgz",
-      "integrity": "sha512-wXv36yo+mfWllweN0Fq7sUs7PUiNopn7I0JpLTe3hGu6ZMR4CV7LqK1llhB18pndwpKoafQKb1et2DCJAOW20Q==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.4.0.tgz",
+      "integrity": "sha512-Mv027hcLFjE45K8UJ8PjRpdDGfR0aManEFj1KzoN8zXNveHGEygpZGfFf/FTTMl+QEVSrPAUlyxaCApvmv47AQ==",
       "dev": true,
       "requires": {
         "tslib": "^2.0.1"
@@ -27252,17 +25927,6 @@
       "requires": {
         "@formatjs/ecma402-abstract": "1.4.0",
         "tslib": "^2.0.1"
-      },
-      "dependencies": {
-        "@formatjs/ecma402-abstract": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.4.0.tgz",
-          "integrity": "sha512-Mv027hcLFjE45K8UJ8PjRpdDGfR0aManEFj1KzoN8zXNveHGEygpZGfFf/FTTMl+QEVSrPAUlyxaCApvmv47AQ==",
-          "dev": true,
-          "requires": {
-            "tslib": "^2.0.1"
-          }
-        }
       }
     },
     "@formatjs/ts-transformer": {
@@ -27276,6 +25940,15 @@
         "typescript": "^4.0"
       },
       "dependencies": {
+        "@formatjs/ecma402-abstract": {
+          "version": "1.5.0",
+          "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.5.0.tgz",
+          "integrity": "sha512-wXv36yo+mfWllweN0Fq7sUs7PUiNopn7I0JpLTe3hGu6ZMR4CV7LqK1llhB18pndwpKoafQKb1et2DCJAOW20Q==",
+          "dev": true,
+          "requires": {
+            "tslib": "^2.0.1"
+          }
+        },
         "intl-messageformat-parser": {
           "version": "6.1.2",
           "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-6.1.2.tgz",
@@ -27333,6 +26006,23 @@
         "prop-types": "^15.7.2"
       }
     },
+    "@humanwhocodes/config-array": {
+      "version": "0.9.5",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
+      "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
+      "dev": true,
+      "requires": {
+        "@humanwhocodes/object-schema": "^1.2.1",
+        "debug": "^4.1.1",
+        "minimatch": "^3.0.4"
+      }
+    },
+    "@humanwhocodes/object-schema": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+      "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+      "dev": true
+    },
     "@istanbuljs/load-nyc-config": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -28018,9 +26708,9 @@
       },
       "dependencies": {
         "source-map": {
-          "version": "0.7.3",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
-          "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+          "version": "0.7.4",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+          "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
           "dev": true
         }
       }
@@ -28076,143 +26766,158 @@
       }
     },
     "@svgr/babel-plugin-add-jsx-attribute": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz",
-      "integrity": "sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.3.1.tgz",
+      "integrity": "sha512-jDBKArXYO1u0B1dmd2Nf8Oy6aTF5vLDfLoO9Oon/GLkqZ/NiggYWZA+a2HpUMH4ITwNqS3z43k8LWApB8S583w==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-plugin-remove-jsx-attribute": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz",
-      "integrity": "sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.3.1.tgz",
+      "integrity": "sha512-dQzyJ4prwjcFd929T43Z8vSYiTlTu8eafV40Z2gO7zy/SV5GT+ogxRJRBIKWomPBOiaVXFg3jY4S5hyEN3IBjQ==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-plugin-remove-jsx-empty-expression": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz",
-      "integrity": "sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.3.1.tgz",
+      "integrity": "sha512-HBOUc1XwSU67fU26V5Sfb8MQsT0HvUyxru7d0oBJ4rA2s4HW3PhyAPC7fV/mdsSGpAvOdd8Wpvkjsr0fWPUO7A==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-plugin-replace-jsx-attribute-value": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz",
-      "integrity": "sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.3.1.tgz",
+      "integrity": "sha512-C12e6aN4BXAolRrI601gPn5MDFCRHO7C4TM8Kks+rDtl8eEq+NN1sak0eAzJu363x3TmHXdZn7+Efd2nr9I5dA==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-plugin-svg-dynamic-title": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz",
-      "integrity": "sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.3.1.tgz",
+      "integrity": "sha512-6NU55Mmh3M5u2CfCCt6TX29/pPneutrkJnnDCHbKZnjukZmmgUAZLtZ2g6ZoSPdarowaQmAiBRgAHqHmG0vuqA==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-plugin-svg-em-dimensions": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz",
-      "integrity": "sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.3.1.tgz",
+      "integrity": "sha512-HV1NGHYTTe1vCNKlBgq/gKuCSfaRlKcHIADn7P8w8U3Zvujdw1rmusutghJ1pZJV7pDt3Gt8ws+SVrqHnBO/Qw==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-plugin-transform-react-native-svg": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz",
-      "integrity": "sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.3.1.tgz",
+      "integrity": "sha512-2wZhSHvTolFNeKDAN/ZmIeSz2O9JSw72XD+o2bNp2QAaWqa8KGpn5Yk5WHso6xqfSAiRzAE+GXlsrBO4UP9LLw==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-plugin-transform-svg-component": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz",
-      "integrity": "sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.3.1.tgz",
+      "integrity": "sha512-cZ8Tr6ZAWNUFfDeCKn/pGi976iWSkS8ijmEYKosP+6ktdZ7lW9HVLHojyusPw3w0j8PI4VBeWAXAmi/2G7owxw==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-preset": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.2.0.tgz",
-      "integrity": "sha512-4WQNY0J71JIaL03DRn0vLiz87JXx0b9dYm2aA8XHlQJQoixMl4r/soYHm8dsaJZ3jWtkCiOYy48dp9izvXhDkQ==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.3.1.tgz",
+      "integrity": "sha512-tQtWtzuMMQ3opH7je+MpwfuRA1Hf3cKdSgTtAYwOBDfmhabP7rcTfBi3E7V3MuwJNy/Y02/7/RutvwS1W4Qv9g==",
       "dev": true,
       "requires": {
-        "@svgr/babel-plugin-add-jsx-attribute": "^6.0.0",
-        "@svgr/babel-plugin-remove-jsx-attribute": "^6.0.0",
-        "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.0.0",
-        "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.0.0",
-        "@svgr/babel-plugin-svg-dynamic-title": "^6.0.0",
-        "@svgr/babel-plugin-svg-em-dimensions": "^6.0.0",
-        "@svgr/babel-plugin-transform-react-native-svg": "^6.0.0",
-        "@svgr/babel-plugin-transform-svg-component": "^6.2.0"
+        "@svgr/babel-plugin-add-jsx-attribute": "^6.3.1",
+        "@svgr/babel-plugin-remove-jsx-attribute": "^6.3.1",
+        "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.3.1",
+        "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.3.1",
+        "@svgr/babel-plugin-svg-dynamic-title": "^6.3.1",
+        "@svgr/babel-plugin-svg-em-dimensions": "^6.3.1",
+        "@svgr/babel-plugin-transform-react-native-svg": "^6.3.1",
+        "@svgr/babel-plugin-transform-svg-component": "^6.3.1"
       }
     },
     "@svgr/core": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.2.1.tgz",
-      "integrity": "sha512-NWufjGI2WUyrg46mKuySfviEJ6IxHUOm/8a3Ph38VCWSp+83HBraCQrpEM3F3dB6LBs5x8OElS8h3C0oOJaJAA==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.3.1.tgz",
+      "integrity": "sha512-Sm3/7OdXbQreemf9aO25keerZSbnKMpGEfmH90EyYpj1e8wMD4TuwJIb3THDSgRMWk1kYJfSRulELBy4gVgZUA==",
       "dev": true,
       "requires": {
-        "@svgr/plugin-jsx": "^6.2.1",
+        "@svgr/plugin-jsx": "^6.3.1",
         "camelcase": "^6.2.0",
         "cosmiconfig": "^7.0.1"
       }
     },
     "@svgr/hast-util-to-babel-ast": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.2.1.tgz",
-      "integrity": "sha512-pt7MMkQFDlWJVy9ULJ1h+hZBDGFfSCwlBNW1HkLnVi7jUhyEXUaGYWi1x6bM2IXuAR9l265khBT4Av4lPmaNLQ==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.3.1.tgz",
+      "integrity": "sha512-NgyCbiTQIwe3wHe/VWOUjyxmpUmsrBjdoIxKpXt3Nqc3TN30BpJG22OxBvVzsAh9jqep0w0/h8Ywvdk3D9niNQ==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.15.6",
-        "entities": "^3.0.1"
+        "@babel/types": "^7.18.4",
+        "entities": "^4.3.0"
       },
       "dependencies": {
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/types": {
-          "version": "7.17.0",
-          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-          "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
-          "dev": true,
-          "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "to-fast-properties": "^2.0.0"
-          }
-        },
         "entities": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
-          "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
+          "version": "4.3.1",
+          "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz",
+          "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==",
           "dev": true
         }
       }
     },
     "@svgr/plugin-jsx": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.2.1.tgz",
-      "integrity": "sha512-u+MpjTsLaKo6r3pHeeSVsh9hmGRag2L7VzApWIaS8imNguqoUwDq/u6U/NDmYs/KAsrmtBjOEaAAPbwNGXXp1g==",
-      "dev": true,
-      "requires": {
-        "@babel/core": "^7.15.5",
-        "@svgr/babel-preset": "^6.2.0",
-        "@svgr/hast-util-to-babel-ast": "^6.2.1",
-        "svg-parser": "^2.0.2"
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.3.1.tgz",
+      "integrity": "sha512-r9+0mYG3hD4nNtUgsTXWGYJomv/bNd7kC16zvsM70I/bGeoCi/3lhTmYqeN6ChWX317OtQCSZZbH4wq9WwoXbw==",
+      "dev": true,
+      "requires": {
+        "@babel/core": "^7.18.5",
+        "@svgr/babel-preset": "^6.3.1",
+        "@svgr/hast-util-to-babel-ast": "^6.3.1",
+        "svg-parser": "^2.0.4"
+      },
+      "dependencies": {
+        "@babel/core": {
+          "version": "7.18.10",
+          "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz",
+          "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==",
+          "dev": true,
+          "requires": {
+            "@ampproject/remapping": "^2.1.0",
+            "@babel/code-frame": "^7.18.6",
+            "@babel/generator": "^7.18.10",
+            "@babel/helper-compilation-targets": "^7.18.9",
+            "@babel/helper-module-transforms": "^7.18.9",
+            "@babel/helpers": "^7.18.9",
+            "@babel/parser": "^7.18.10",
+            "@babel/template": "^7.18.10",
+            "@babel/traverse": "^7.18.10",
+            "@babel/types": "^7.18.10",
+            "convert-source-map": "^1.7.0",
+            "debug": "^4.1.0",
+            "gensync": "^1.0.0-beta.2",
+            "json5": "^2.2.1",
+            "semver": "^6.3.0"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "dev": true
+        }
       }
     },
     "@svgr/plugin-svgo": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.2.0.tgz",
-      "integrity": "sha512-oDdMQONKOJEbuKwuy4Np6VdV6qoaLLvoY86hjvQEgU82Vx1MSWRyYms6Sl0f+NtqxLI/rDVufATbP/ev996k3Q==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.3.1.tgz",
+      "integrity": "sha512-yJIjTDKPYqzFVjmsbH5EdIwEsmKxjxdXSGJVLeUgwZOZPAkNQmD1v7LDbOdOKbR44FG8465Du+zWPdbYGnbMbw==",
       "dev": true,
       "requires": {
         "cosmiconfig": "^7.0.1",
         "deepmerge": "^4.2.2",
-        "svgo": "^2.5.0"
+        "svgo": "^2.8.0"
       }
     },
     "@svgr/webpack": {
@@ -28489,9 +27194,9 @@
       "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow=="
     },
     "@types/eslint": {
-      "version": "8.4.1",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz",
-      "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==",
+      "version": "8.4.5",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz",
+      "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==",
       "dev": true,
       "requires": {
         "@types/estree": "*",
@@ -28499,9 +27204,9 @@
       }
     },
     "@types/eslint-scope": {
-      "version": "3.7.3",
-      "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz",
-      "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==",
+      "version": "3.7.4",
+      "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
+      "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
       "dev": true,
       "requires": {
         "@types/eslint": "*",
@@ -28527,9 +27232,9 @@
       }
     },
     "@types/express-serve-static-core": {
-      "version": "4.17.28",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz",
-      "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==",
+      "version": "4.17.30",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz",
+      "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==",
       "dev": true,
       "requires": {
         "@types/node": "*",
@@ -28581,9 +27286,9 @@
       "dev": true
     },
     "@types/http-proxy": {
-      "version": "1.17.8",
-      "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz",
-      "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==",
+      "version": "1.17.9",
+      "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz",
+      "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==",
       "dev": true,
       "requires": {
         "@types/node": "*"
@@ -28638,9 +27343,9 @@
       "dev": true
     },
     "@types/mime": {
-      "version": "1.3.2",
-      "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
-      "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.0.tgz",
+      "integrity": "sha512-fccbsHKqFDXClBZTDLA43zl0+TbxyIwyzIzwwhvoJvhNjOErCdeX2xJbURimv2EbSVUGav001PaCJg4mZxMl4w==",
       "dev": true
     },
     "@types/minimatch": {
@@ -28666,9 +27371,9 @@
       "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
     },
     "@types/prettier": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.0.tgz",
-      "integrity": "sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==",
+      "version": "2.6.4",
+      "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz",
+      "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==",
       "dev": true
     },
     "@types/prop-types": {
@@ -28745,12 +27450,12 @@
       }
     },
     "@types/serve-static": {
-      "version": "1.13.10",
-      "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz",
-      "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==",
+      "version": "1.15.0",
+      "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz",
+      "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==",
       "dev": true,
       "requires": {
-        "@types/mime": "^1",
+        "@types/mime": "*",
         "@types/node": "*"
       }
     },
@@ -28800,9 +27505,9 @@
       }
     },
     "@types/uglify-js": {
-      "version": "3.13.2",
-      "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.13.2.tgz",
-      "integrity": "sha512-/xFrPIo+4zOeNGtVMbf9rUm0N+i4pDf1ynExomqtokIJmVzR3962lJ1UE+MmexMkA0cmN9oTzg5Xcbwge0Ij2Q==",
+      "version": "3.16.0",
+      "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.16.0.tgz",
+      "integrity": "sha512-0yeUr92L3r0GLRnBOvtYK1v2SjqMIqQDHMl7GLb+l2L8+6LSFWEEWEIgVsPdMn5ImLM8qzWT8xFPtQYpp8co0g==",
       "dev": true,
       "requires": {
         "source-map": "^0.6.1"
@@ -28855,9 +27560,9 @@
       },
       "dependencies": {
         "source-map": {
-          "version": "0.7.3",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
-          "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+          "version": "0.7.4",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+          "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
           "dev": true
         }
       }
@@ -29079,23 +27784,6 @@
       "requires": {
         "mime-types": "~2.1.34",
         "negotiator": "0.6.3"
-      },
-      "dependencies": {
-        "mime-db": {
-          "version": "1.52.0",
-          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
-          "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-          "dev": true
-        },
-        "mime-types": {
-          "version": "2.1.35",
-          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
-          "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-          "dev": true,
-          "requires": {
-            "mime-db": "1.52.0"
-          }
-        }
       }
     },
     "acorn": {
@@ -29143,9 +27831,9 @@
       "dev": true
     },
     "address": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz",
-      "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz",
+      "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==",
       "dev": true
     },
     "adjust-sourcemap-loader": {
@@ -29277,14 +27965,6 @@
       "dev": true,
       "requires": {
         "type-fest": "^0.21.3"
-      },
-      "dependencies": {
-        "type-fest": {
-          "version": "0.21.3",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
-          "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
-          "dev": true
-        }
       }
     },
     "ansi-html-community": {
@@ -29294,9 +27974,9 @@
       "dev": true
     },
     "ansi-regex": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
-      "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
     },
     "ansi-styles": {
       "version": "3.2.1",
@@ -29326,7 +28006,7 @@
     "archive-type": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz",
-      "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=",
+      "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -29336,7 +28016,7 @@
         "file-type": {
           "version": "4.4.0",
           "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz",
-          "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=",
+          "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==",
           "dev": true,
           "optional": true
         }
@@ -29378,7 +28058,7 @@
     "arr-diff": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
-      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+      "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
       "dev": true
     },
     "arr-flatten": {
@@ -29390,13 +28070,13 @@
     "arr-union": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
-      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+      "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
       "dev": true
     },
     "array-flatten": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
-      "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+      "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
       "dev": true
     },
     "array-includes": {
@@ -29415,7 +28095,7 @@
     "array-union": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
-      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+      "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==",
       "dev": true,
       "requires": {
         "array-uniq": "^1.0.1"
@@ -29424,13 +28104,13 @@
     "array-uniq": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
-      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+      "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==",
       "dev": true
     },
     "array-unique": {
       "version": "0.3.2",
       "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
-      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+      "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
       "dev": true
     },
     "array.prototype.filter": {
@@ -29467,6 +28147,18 @@
         "es-shim-unscopables": "^1.0.0"
       }
     },
+    "array.prototype.flatmap": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz",
+      "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.19.2",
+        "es-shim-unscopables": "^1.0.0"
+      }
+    },
     "asn1": {
       "version": "0.2.4",
       "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
@@ -29490,7 +28182,7 @@
     "assign-symbols": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
-      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+      "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
       "dev": true
     },
     "ast-types-flow": {
@@ -29499,12 +28191,6 @@
       "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==",
       "dev": true
     },
-    "astral-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
-      "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
-      "dev": true
-    },
     "async": {
       "version": "2.6.4",
       "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
@@ -29558,6 +28244,12 @@
       "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
       "dev": true
     },
+    "axe-core": {
+      "version": "4.4.3",
+      "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz",
+      "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==",
+      "dev": true
+    },
     "axios": {
       "version": "0.21.1",
       "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
@@ -29591,20 +28283,6 @@
       "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==",
       "dev": true
     },
-    "babel-eslint": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz",
-      "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "@babel/parser": "^7.7.0",
-        "@babel/traverse": "^7.7.0",
-        "@babel/types": "^7.7.0",
-        "eslint-visitor-keys": "^1.0.0",
-        "resolve": "^1.12.0"
-      }
-    },
     "babel-jest": {
       "version": "26.6.3",
       "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz",
@@ -29814,13 +28492,13 @@
       }
     },
     "babel-plugin-polyfill-corejs2": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz",
-      "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==",
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz",
+      "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==",
       "dev": true,
       "requires": {
-        "@babel/compat-data": "^7.13.11",
-        "@babel/helper-define-polyfill-provider": "^0.3.1",
+        "@babel/compat-data": "^7.17.7",
+        "@babel/helper-define-polyfill-provider": "^0.3.2",
         "semver": "^6.1.1"
       },
       "dependencies": {
@@ -29900,7 +28578,7 @@
     "babel-polyfill": {
       "version": "6.26.0",
       "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
-      "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+      "integrity": "sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ==",
       "dev": true,
       "requires": {
         "babel-runtime": "^6.26.0",
@@ -29917,7 +28595,7 @@
         "regenerator-runtime": {
           "version": "0.10.5",
           "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
-          "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=",
+          "integrity": "sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==",
           "dev": true
         }
       }
@@ -29955,7 +28633,7 @@
     "babel-runtime": {
       "version": "6.26.0",
       "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
-      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==",
       "dev": true,
       "requires": {
         "core-js": "^2.4.0",
@@ -29999,40 +28677,11 @@
         "define-property": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
           "dev": true,
           "requires": {
             "is-descriptor": "^1.0.0"
           }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
         }
       }
     },
@@ -30046,7 +28695,7 @@
     "batch": {
       "version": "0.6.1",
       "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
-      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+      "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==",
       "dev": true
     },
     "bcrypt-pbkdf": {
@@ -30081,7 +28730,7 @@
         "cross-spawn": {
           "version": "5.1.0",
           "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
-          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
           "dev": true,
           "optional": true,
           "requires": {
@@ -30093,7 +28742,7 @@
         "execa": {
           "version": "0.7.0",
           "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
-          "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+          "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==",
           "dev": true,
           "optional": true,
           "requires": {
@@ -30109,27 +28758,36 @@
         "get-stream": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
           "dev": true,
           "optional": true
         },
-        "lru-cache": {
-          "version": "4.1.5",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+        "shebang-command": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+          "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
           "dev": true,
           "optional": true,
           "requires": {
-            "pseudomap": "^1.0.2",
-            "yallist": "^2.1.2"
+            "shebang-regex": "^1.0.0"
           }
         },
-        "yallist": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+        "shebang-regex": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+          "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
           "dev": true,
           "optional": true
+        },
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
         }
       }
     },
@@ -30147,7 +28805,7 @@
         "cross-spawn": {
           "version": "5.1.0",
           "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
-          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
           "dev": true,
           "optional": true,
           "requires": {
@@ -30159,7 +28817,7 @@
         "execa": {
           "version": "0.7.0",
           "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
-          "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+          "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==",
           "dev": true,
           "optional": true,
           "requires": {
@@ -30175,27 +28833,36 @@
         "get-stream": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
           "dev": true,
           "optional": true
         },
-        "lru-cache": {
-          "version": "4.1.5",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+        "shebang-command": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+          "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
           "dev": true,
           "optional": true,
           "requires": {
-            "pseudomap": "^1.0.2",
-            "yallist": "^2.1.2"
+            "shebang-regex": "^1.0.0"
           }
         },
-        "yallist": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+        "shebang-regex": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+          "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
           "dev": true,
           "optional": true
+        },
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
         }
       }
     },
@@ -30261,7 +28928,7 @@
             "pify": {
               "version": "3.0.0",
               "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-              "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+              "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
               "dev": true,
               "optional": true
             }
@@ -30277,7 +28944,7 @@
         "get-stream": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
           "dev": true,
           "optional": true
         },
@@ -30310,7 +28977,7 @@
             "pify": {
               "version": "3.0.0",
               "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-              "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+              "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
               "dev": true,
               "optional": true
             }
@@ -30329,7 +28996,7 @@
             "pify": {
               "version": "3.0.0",
               "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-              "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+              "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
               "dev": true,
               "optional": true
             }
@@ -30365,14 +29032,14 @@
         "prepend-http": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
-          "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+          "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
           "dev": true,
           "optional": true
         },
         "url-parse-lax": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
-          "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+          "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==",
           "dev": true,
           "optional": true,
           "requires": {
@@ -30418,6 +29085,12 @@
         "unpipe": "1.0.0"
       },
       "dependencies": {
+        "bytes": {
+          "version": "3.1.2",
+          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+          "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+          "dev": true
+        },
         "debug": {
           "version": "2.6.9",
           "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -30430,7 +29103,7 @@
         "ms": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
         },
         "qs": {
@@ -30447,7 +29120,7 @@
     "bonjour": {
       "version": "3.5.0",
       "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
-      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+      "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==",
       "dev": true,
       "requires": {
         "array-flatten": "^2.1.0",
@@ -30456,14 +29129,6 @@
         "dns-txt": "^2.0.2",
         "multicast-dns": "^6.0.1",
         "multicast-dns-service-types": "^1.1.0"
-      },
-      "dependencies": {
-        "array-flatten": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
-          "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==",
-          "dev": true
-        }
       }
     },
     "boolbase": {
@@ -30503,16 +29168,15 @@
       "dev": true
     },
     "browserslist": {
-      "version": "4.20.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
-      "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
+      "version": "4.21.3",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
+      "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
       "dev": true,
       "requires": {
-        "caniuse-lite": "^1.0.30001332",
-        "electron-to-chromium": "^1.4.118",
-        "escalade": "^3.1.1",
-        "node-releases": "^2.0.3",
-        "picocolors": "^1.0.0"
+        "caniuse-lite": "^1.0.30001370",
+        "electron-to-chromium": "^1.4.202",
+        "node-releases": "^2.0.6",
+        "update-browserslist-db": "^1.0.5"
       }
     },
     "bser": {
@@ -30556,14 +29220,14 @@
     "buffer-crc32": {
       "version": "0.2.13",
       "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
-      "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
+      "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
       "dev": true,
       "optional": true
     },
     "buffer-fill": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
-      "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
+      "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==",
       "dev": true,
       "optional": true
     },
@@ -30580,9 +29244,9 @@
       "dev": true
     },
     "bytes": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
-      "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
+      "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==",
       "dev": true
     },
     "cache-base": {
@@ -30610,7 +29274,7 @@
     "cacheable-request": {
       "version": "2.1.4",
       "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
-      "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=",
+      "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -30626,14 +29290,14 @@
         "get-stream": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
           "dev": true,
           "optional": true
         },
         "lowercase-keys": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz",
-          "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=",
+          "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==",
           "dev": true,
           "optional": true
         },
@@ -30652,14 +29316,14 @@
         "prepend-http": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
-          "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
+          "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
           "dev": true,
           "optional": true
         },
         "sort-keys": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
-          "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
+          "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==",
           "dev": true,
           "optional": true,
           "requires": {
@@ -30711,9 +29375,9 @@
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30001332",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz",
-      "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==",
+      "version": "1.0.30001374",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001374.tgz",
+      "integrity": "sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw==",
       "dev": true
     },
     "capture-exit": {
@@ -30768,12 +29432,6 @@
       "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
       "dev": true
     },
-    "chardet": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
-      "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
-      "dev": true
-    },
     "charenc": {
       "version": "0.0.2",
       "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
@@ -30856,11 +29514,74 @@
         "define-property": {
           "version": "0.2.5",
           "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
           "dev": true,
           "requires": {
             "is-descriptor": "^0.1.0"
           }
+        },
+        "is-accessor-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+          "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+          "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+          "dev": true
+        },
+        "is-data-descriptor": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+          "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+          "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^0.1.6",
+            "is-data-descriptor": "^0.1.4",
+            "kind-of": "^5.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+          "dev": true
         }
       }
     },
@@ -30902,21 +29623,6 @@
         "del": "^4.1.1"
       }
     },
-    "cli-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
-      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
-      "dev": true,
-      "requires": {
-        "restore-cursor": "^3.1.0"
-      }
-    },
-    "cli-width": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
-      "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
-      "dev": true
-    },
     "cliui": {
       "version": "7.0.4",
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -30942,7 +29648,7 @@
     "clone-response": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
-      "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+      "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -30952,7 +29658,7 @@
     "co": {
       "version": "4.6.0",
       "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+      "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
       "dev": true
     },
     "collect-v8-coverage": {
@@ -30964,7 +29670,7 @@
     "collection-visit": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
-      "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+      "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
       "dev": true,
       "requires": {
         "map-visit": "^1.0.0",
@@ -31038,7 +29744,7 @@
     "commondir": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
-      "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+      "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
       "dev": true
     },
     "component-emitter": {
@@ -31071,12 +29777,6 @@
         "vary": "~1.1.2"
       },
       "dependencies": {
-        "bytes": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
-          "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=",
-          "dev": true
-        },
         "debug": {
           "version": "2.6.9",
           "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@@ -31089,7 +29789,7 @@
         "ms": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
         }
       }
@@ -31133,12 +29833,6 @@
         "seamless-immutable": "^7.1.3"
       }
     },
-    "contains-path": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
-      "integrity": "sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==",
-      "dev": true
-    },
     "content-disposition": {
       "version": "0.5.4",
       "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@ -31178,7 +29872,7 @@
     "cookie-signature": {
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
-      "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=",
+      "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
       "dev": true
     },
     "cookiejar": {
@@ -31190,7 +29884,7 @@
     "copy-descriptor": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
-      "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+      "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
       "dev": true
     },
     "core-js": {
@@ -31199,12 +29893,12 @@
       "integrity": "sha512-NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA=="
     },
     "core-js-compat": {
-      "version": "3.22.2",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.2.tgz",
-      "integrity": "sha512-Fns9lU06ZJ07pdfmPMu7OnkIKGPKDzXKIiuGlSvHHapwqMUF2QnnsWwtueFZtSyZEilP0o6iUeHQwpn7LxtLUw==",
+      "version": "3.24.1",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.24.1.tgz",
+      "integrity": "sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw==",
       "dev": true,
       "requires": {
-        "browserslist": "^4.20.2",
+        "browserslist": "^4.21.3",
         "semver": "7.0.0"
       },
       "dependencies": {
@@ -31254,16 +29948,14 @@
       }
     },
     "cross-spawn": {
-      "version": "6.0.5",
-      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
-      "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+      "version": "7.0.3",
+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+      "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
       "dev": true,
       "requires": {
-        "nice-try": "^1.0.4",
-        "path-key": "^2.0.1",
-        "semver": "^5.5.0",
-        "shebang-command": "^1.2.0",
-        "which": "^1.2.9"
+        "path-key": "^3.1.0",
+        "shebang-command": "^2.0.0",
+        "which": "^2.0.1"
       }
     },
     "crypt": {
@@ -31291,9 +29983,9 @@
       }
     },
     "css-declaration-sorter": {
-      "version": "6.2.2",
-      "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz",
-      "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==",
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz",
+      "integrity": "sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og==",
       "dev": true,
       "requires": {}
     },
@@ -31315,6 +30007,15 @@
         "semver": "^7.3.5"
       },
       "dependencies": {
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
         "semver": {
           "version": "7.3.7",
           "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
@@ -31323,6 +30024,12 @@
           "requires": {
             "lru-cache": "^6.0.0"
           }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
         }
       }
     },
@@ -31393,36 +30100,36 @@
       }
     },
     "cssnano-preset-default": {
-      "version": "5.2.7",
-      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.7.tgz",
-      "integrity": "sha512-JiKP38ymZQK+zVKevphPzNSGHSlTI+AOwlasoSRtSVMUU285O7/6uZyd5NbW92ZHp41m0sSHe6JoZosakj63uA==",
+      "version": "5.2.12",
+      "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz",
+      "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==",
       "dev": true,
       "requires": {
-        "css-declaration-sorter": "^6.2.2",
+        "css-declaration-sorter": "^6.3.0",
         "cssnano-utils": "^3.1.0",
         "postcss-calc": "^8.2.3",
         "postcss-colormin": "^5.3.0",
-        "postcss-convert-values": "^5.1.0",
-        "postcss-discard-comments": "^5.1.1",
+        "postcss-convert-values": "^5.1.2",
+        "postcss-discard-comments": "^5.1.2",
         "postcss-discard-duplicates": "^5.1.0",
         "postcss-discard-empty": "^5.1.1",
         "postcss-discard-overridden": "^5.1.0",
-        "postcss-merge-longhand": "^5.1.4",
-        "postcss-merge-rules": "^5.1.1",
+        "postcss-merge-longhand": "^5.1.6",
+        "postcss-merge-rules": "^5.1.2",
         "postcss-minify-font-values": "^5.1.0",
         "postcss-minify-gradients": "^5.1.1",
-        "postcss-minify-params": "^5.1.2",
-        "postcss-minify-selectors": "^5.2.0",
+        "postcss-minify-params": "^5.1.3",
+        "postcss-minify-selectors": "^5.2.1",
         "postcss-normalize-charset": "^5.1.0",
         "postcss-normalize-display-values": "^5.1.0",
-        "postcss-normalize-positions": "^5.1.0",
-        "postcss-normalize-repeat-style": "^5.1.0",
+        "postcss-normalize-positions": "^5.1.1",
+        "postcss-normalize-repeat-style": "^5.1.1",
         "postcss-normalize-string": "^5.1.0",
         "postcss-normalize-timing-functions": "^5.1.0",
         "postcss-normalize-unicode": "^5.1.0",
         "postcss-normalize-url": "^5.1.0",
         "postcss-normalize-whitespace": "^5.1.1",
-        "postcss-ordered-values": "^5.1.1",
+        "postcss-ordered-values": "^5.1.3",
         "postcss-reduce-initial": "^5.1.0",
         "postcss-reduce-transforms": "^5.1.0",
         "postcss-svgo": "^5.1.0",
@@ -31522,7 +30229,7 @@
     "decamelize": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+      "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
       "dev": true
     },
     "decimal.js": {
@@ -31567,7 +30274,7 @@
             "pify": {
               "version": "3.0.0",
               "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-              "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+              "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
               "dev": true,
               "optional": true
             }
@@ -31576,7 +30283,7 @@
         "pify": {
           "version": "2.3.0",
           "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
           "dev": true,
           "optional": true
         }
@@ -31585,7 +30292,7 @@
     "decompress-response": {
       "version": "3.3.0",
       "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
-      "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+      "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -31607,7 +30314,7 @@
         "file-type": {
           "version": "5.2.0",
           "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
-          "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+          "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==",
           "dev": true,
           "optional": true
         }
@@ -31651,7 +30358,7 @@
         "file-type": {
           "version": "5.2.0",
           "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
-          "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+          "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==",
           "dev": true,
           "optional": true
         }
@@ -31660,7 +30367,7 @@
     "decompress-unzip": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz",
-      "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=",
+      "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -31673,14 +30380,14 @@
         "file-type": {
           "version": "3.9.0",
           "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
-          "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=",
+          "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==",
           "dev": true,
           "optional": true
         },
         "get-stream": {
           "version": "2.3.1",
           "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz",
-          "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=",
+          "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==",
           "dev": true,
           "optional": true,
           "requires": {
@@ -31691,7 +30398,7 @@
         "pify": {
           "version": "2.3.0",
           "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
           "dev": true,
           "optional": true
         }
@@ -31732,17 +30439,6 @@
         "execa": "^5.0.0"
       },
       "dependencies": {
-        "cross-spawn": {
-          "version": "7.0.3",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-          "dev": true,
-          "requires": {
-            "path-key": "^3.1.0",
-            "shebang-command": "^2.0.0",
-            "which": "^2.0.1"
-          }
-        },
         "execa": {
           "version": "5.1.1",
           "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -31780,36 +30476,6 @@
           "requires": {
             "path-key": "^3.0.0"
           }
-        },
-        "path-key": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-          "dev": true
-        },
-        "shebang-command": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-          "dev": true,
-          "requires": {
-            "shebang-regex": "^3.0.0"
-          }
-        },
-        "shebang-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-          "dev": true
-        },
-        "which": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-          "dev": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
         }
       }
     },
@@ -31836,37 +30502,6 @@
       "requires": {
         "is-descriptor": "^1.0.2",
         "isobject": "^3.0.1"
-      },
-      "dependencies": {
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        }
       }
     },
     "del": {
@@ -31946,7 +30581,7 @@
         "ms": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
         }
       }
@@ -31980,7 +30615,7 @@
     "dns-equal": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
-      "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=",
+      "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==",
       "dev": true
     },
     "dns-packet": {
@@ -31996,7 +30631,7 @@
     "dns-txt": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz",
-      "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=",
+      "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==",
       "dev": true,
       "requires": {
         "buffer-indexof": "^1.0.0"
@@ -32150,14 +30785,14 @@
         "file-type": {
           "version": "5.2.0",
           "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz",
-          "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=",
+          "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==",
           "dev": true,
           "optional": true
         },
         "get-stream": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
           "dev": true,
           "optional": true
         },
@@ -32174,7 +30809,7 @@
         "pify": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
           "dev": true,
           "optional": true
         }
@@ -32187,9 +30822,9 @@
       "dev": true
     },
     "duplexer3": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
-      "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz",
+      "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==",
       "dev": true,
       "optional": true
     },
@@ -32206,13 +30841,13 @@
     "ee-first": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
-      "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
+      "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.4.123",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.123.tgz",
-      "integrity": "sha512-0pHGE53WkYoFbsgwYcVKEpWa6jbzlvkohIEA2CUoZ9b5KC+w/zlMiQHvW/4IBcOh7YoEFqRNavgTk02TBoUTUw==",
+      "version": "1.4.211",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.211.tgz",
+      "integrity": "sha512-BZSbMpyFQU0KBJ1JG26XGeFI3i4op+qOYGxftmZXFZoHkhLgsSv4DHDJfl8ogII3hIuzGt51PaZ195OVu0yJ9A==",
       "dev": true
     },
     "email-prop-type": {
@@ -32235,9 +30870,9 @@
       "dev": true
     },
     "emoji-regex": {
-      "version": "8.0.0",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
-      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+      "version": "9.2.2",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
       "dev": true
     },
     "emojis-list": {
@@ -32249,7 +30884,7 @@
     "encodeurl": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
-      "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+      "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
       "dev": true
     },
     "end-of-stream": {
@@ -32262,9 +30897,9 @@
       }
     },
     "enhanced-resolve": {
-      "version": "5.9.3",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz",
-      "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==",
+      "version": "5.10.0",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
+      "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
       "dev": true,
       "requires": {
         "graceful-fs": "^4.2.4",
@@ -32364,12 +30999,12 @@
       }
     },
     "error-stack-parser": {
-      "version": "2.0.7",
-      "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.7.tgz",
-      "integrity": "sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA==",
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
+      "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
       "dev": true,
       "requires": {
-        "stackframe": "^1.1.1"
+        "stackframe": "^1.3.4"
       }
     },
     "es-abstract": {
@@ -32442,7 +31077,7 @@
     "escape-html": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
-      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
+      "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
       "dev": true
     },
     "escape-string-regexp": {
@@ -32463,10 +31098,34 @@
         "source-map": "~0.6.1"
       },
       "dependencies": {
-        "estraverse": {
-          "version": "5.3.0",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-          "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+        "levn": {
+          "version": "0.3.0",
+          "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+          "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
+          "dev": true,
+          "requires": {
+            "prelude-ls": "~1.1.2",
+            "type-check": "~0.3.2"
+          }
+        },
+        "optionator": {
+          "version": "0.8.3",
+          "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+          "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+          "dev": true,
+          "requires": {
+            "deep-is": "~0.1.3",
+            "fast-levenshtein": "~2.0.6",
+            "levn": "~0.3.0",
+            "prelude-ls": "~1.1.2",
+            "type-check": "~0.3.2",
+            "word-wrap": "~1.2.3"
+          }
+        },
+        "prelude-ls": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+          "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
           "dev": true
         },
         "source-map": {
@@ -32475,127 +31134,202 @@
           "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
           "dev": true,
           "optional": true
+        },
+        "type-check": {
+          "version": "0.3.2",
+          "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+          "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
+          "dev": true,
+          "requires": {
+            "prelude-ls": "~1.1.2"
+          }
         }
       }
     },
     "eslint": {
-      "version": "6.8.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz",
-      "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==",
+      "version": "8.18.0",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz",
+      "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==",
       "dev": true,
       "requires": {
-        "@babel/code-frame": "^7.0.0",
+        "@eslint/eslintrc": "^1.3.0",
+        "@humanwhocodes/config-array": "^0.9.2",
         "ajv": "^6.10.0",
-        "chalk": "^2.1.0",
-        "cross-spawn": "^6.0.5",
-        "debug": "^4.0.1",
+        "chalk": "^4.0.0",
+        "cross-spawn": "^7.0.2",
+        "debug": "^4.3.2",
         "doctrine": "^3.0.0",
-        "eslint-scope": "^5.0.0",
-        "eslint-utils": "^1.4.3",
-        "eslint-visitor-keys": "^1.1.0",
-        "espree": "^6.1.2",
-        "esquery": "^1.0.1",
+        "escape-string-regexp": "^4.0.0",
+        "eslint-scope": "^7.1.1",
+        "eslint-utils": "^3.0.0",
+        "eslint-visitor-keys": "^3.3.0",
+        "espree": "^9.3.2",
+        "esquery": "^1.4.0",
         "esutils": "^2.0.2",
-        "file-entry-cache": "^5.0.1",
+        "fast-deep-equal": "^3.1.3",
+        "file-entry-cache": "^6.0.1",
         "functional-red-black-tree": "^1.0.1",
-        "glob-parent": "^5.0.0",
-        "globals": "^12.1.0",
-        "ignore": "^4.0.6",
+        "glob-parent": "^6.0.1",
+        "globals": "^13.15.0",
+        "ignore": "^5.2.0",
         "import-fresh": "^3.0.0",
         "imurmurhash": "^0.1.4",
-        "inquirer": "^7.0.0",
         "is-glob": "^4.0.0",
-        "js-yaml": "^3.13.1",
+        "js-yaml": "^4.1.0",
         "json-stable-stringify-without-jsonify": "^1.0.1",
-        "levn": "^0.3.0",
-        "lodash": "^4.17.14",
-        "minimatch": "^3.0.4",
-        "mkdirp": "^0.5.1",
+        "levn": "^0.4.1",
+        "lodash.merge": "^4.6.2",
+        "minimatch": "^3.1.2",
         "natural-compare": "^1.4.0",
-        "optionator": "^0.8.3",
-        "progress": "^2.0.0",
-        "regexpp": "^2.0.1",
-        "semver": "^6.1.2",
-        "strip-ansi": "^5.2.0",
-        "strip-json-comments": "^3.0.1",
-        "table": "^5.2.3",
+        "optionator": "^0.9.1",
+        "regexpp": "^3.2.0",
+        "strip-ansi": "^6.0.1",
+        "strip-json-comments": "^3.1.0",
         "text-table": "^0.2.0",
         "v8-compile-cache": "^2.0.3"
       },
       "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
-          "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
+        "argparse": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+          "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
           "dev": true
         },
-        "globals": {
-          "version": "12.4.0",
-          "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
-          "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
           "dev": true,
           "requires": {
-            "type-fest": "^0.8.1"
+            "color-name": "~1.1.4"
           }
         },
-        "ignore": {
-          "version": "4.0.6",
-          "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
-          "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true
+        },
+        "escape-string-regexp": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+          "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
           "dev": true
         },
-        "minimatch": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-          "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+        "eslint-scope": {
+          "version": "7.1.1",
+          "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+          "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
           "dev": true,
           "requires": {
-            "brace-expansion": "^1.1.7"
+            "esrecurse": "^4.3.0",
+            "estraverse": "^5.2.0"
           }
         },
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+        "eslint-visitor-keys": {
+          "version": "3.3.0",
+          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+          "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
           "dev": true
         },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+        "glob-parent": {
+          "version": "6.0.2",
+          "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+          "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+          "dev": true,
+          "requires": {
+            "is-glob": "^4.0.3"
+          }
+        },
+        "globals": {
+          "version": "13.17.0",
+          "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+          "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+          "dev": true,
+          "requires": {
+            "type-fest": "^0.20.2"
+          }
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true
+        },
+        "js-yaml": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+          "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
           "dev": true,
           "requires": {
-            "ansi-regex": "^4.1.0"
+            "argparse": "^2.0.1"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
           }
         },
         "type-fest": {
-          "version": "0.8.1",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
-          "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+          "version": "0.20.2",
+          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+          "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
           "dev": true
         }
       }
     },
     "eslint-config-airbnb": {
-      "version": "18.1.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.1.0.tgz",
-      "integrity": "sha512-kZFuQC/MPnH7KJp6v95xsLBf63G/w7YqdPfQ0MUanxQ7zcKUNG8j+sSY860g3NwCBOa62apw16J6pRN+AOgXzw==",
+      "version": "19.0.4",
+      "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz",
+      "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==",
       "dev": true,
       "requires": {
-        "eslint-config-airbnb-base": "^14.1.0",
-        "object.assign": "^4.1.0",
-        "object.entries": "^1.1.1"
+        "eslint-config-airbnb-base": "^15.0.0",
+        "object.assign": "^4.1.2",
+        "object.entries": "^1.1.5"
       }
     },
     "eslint-config-airbnb-base": {
-      "version": "14.2.1",
-      "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz",
-      "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==",
+      "version": "15.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
+      "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
       "dev": true,
       "requires": {
         "confusing-browser-globals": "^1.0.10",
         "object.assign": "^4.1.2",
-        "object.entries": "^1.1.2"
+        "object.entries": "^1.1.5",
+        "semver": "^6.3.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "dev": true
+        }
       }
     },
     "eslint-import-resolver-node": {
@@ -32690,24 +31424,24 @@
       }
     },
     "eslint-plugin-import": {
-      "version": "2.22.1",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz",
-      "integrity": "sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==",
+      "version": "2.26.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
+      "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
       "dev": true,
       "requires": {
-        "array-includes": "^3.1.1",
-        "array.prototype.flat": "^1.2.3",
-        "contains-path": "^0.1.0",
+        "array-includes": "^3.1.4",
+        "array.prototype.flat": "^1.2.5",
         "debug": "^2.6.9",
-        "doctrine": "1.5.0",
-        "eslint-import-resolver-node": "^0.3.4",
-        "eslint-module-utils": "^2.6.0",
+        "doctrine": "^2.1.0",
+        "eslint-import-resolver-node": "^0.3.6",
+        "eslint-module-utils": "^2.7.3",
         "has": "^1.0.3",
-        "minimatch": "^3.0.4",
-        "object.values": "^1.1.1",
-        "read-pkg-up": "^2.0.0",
-        "resolve": "^1.17.0",
-        "tsconfig-paths": "^3.9.0"
+        "is-core-module": "^2.8.1",
+        "is-glob": "^4.0.3",
+        "minimatch": "^3.1.2",
+        "object.values": "^1.1.5",
+        "resolve": "^1.22.0",
+        "tsconfig-paths": "^3.14.1"
       },
       "dependencies": {
         "debug": {
@@ -32720,88 +31454,73 @@
           }
         },
         "doctrine": {
-          "version": "1.5.0",
-          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
-          "integrity": "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==",
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+          "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
           "dev": true,
           "requires": {
-            "esutils": "^2.0.2",
-            "isarray": "^1.0.0"
+            "esutils": "^2.0.2"
           }
         },
-        "isarray": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
-          "dev": true
-        },
         "ms": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
           "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
+        },
+        "resolve": {
+          "version": "1.22.1",
+          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+          "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+          "dev": true,
+          "requires": {
+            "is-core-module": "^2.9.0",
+            "path-parse": "^1.0.7",
+            "supports-preserve-symlinks-flag": "^1.0.0"
+          }
         }
       }
     },
     "eslint-plugin-jsx-a11y": {
-      "version": "6.2.3",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz",
-      "integrity": "sha512-CawzfGt9w83tyuVekn0GDPU9ytYtxyxyFZ3aSWROmnRRFQFT2BiPJd7jvRdzNDi6oLWaS2asMeYSNMjWTV4eNg==",
+      "version": "6.5.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz",
+      "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==",
       "dev": true,
       "requires": {
-        "@babel/runtime": "^7.4.5",
-        "aria-query": "^3.0.0",
-        "array-includes": "^3.0.3",
+        "@babel/runtime": "^7.16.3",
+        "aria-query": "^4.2.2",
+        "array-includes": "^3.1.4",
         "ast-types-flow": "^0.0.7",
-        "axobject-query": "^2.0.2",
-        "damerau-levenshtein": "^1.0.4",
-        "emoji-regex": "^7.0.2",
+        "axe-core": "^4.3.5",
+        "axobject-query": "^2.2.0",
+        "damerau-levenshtein": "^1.0.7",
+        "emoji-regex": "^9.2.2",
         "has": "^1.0.3",
-        "jsx-ast-utils": "^2.2.1"
-      },
-      "dependencies": {
-        "aria-query": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz",
-          "integrity": "sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw==",
-          "dev": true,
-          "requires": {
-            "ast-types-flow": "0.0.7",
-            "commander": "^2.11.0"
-          }
-        },
-        "commander": {
-          "version": "2.20.3",
-          "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
-          "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
-          "dev": true
-        },
-        "emoji-regex": {
-          "version": "7.0.3",
-          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
-          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
-          "dev": true
-        }
+        "jsx-ast-utils": "^3.2.1",
+        "language-tags": "^1.0.5",
+        "minimatch": "^3.0.4"
       }
     },
     "eslint-plugin-react": {
-      "version": "7.19.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz",
-      "integrity": "sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ==",
+      "version": "7.30.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz",
+      "integrity": "sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A==",
       "dev": true,
       "requires": {
-        "array-includes": "^3.1.1",
+        "array-includes": "^3.1.5",
+        "array.prototype.flatmap": "^1.3.0",
         "doctrine": "^2.1.0",
-        "has": "^1.0.3",
-        "jsx-ast-utils": "^2.2.3",
-        "object.entries": "^1.1.1",
-        "object.fromentries": "^2.0.2",
-        "object.values": "^1.1.1",
-        "prop-types": "^15.7.2",
-        "resolve": "^1.15.1",
+        "estraverse": "^5.3.0",
+        "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+        "minimatch": "^3.1.2",
+        "object.entries": "^1.1.5",
+        "object.fromentries": "^2.0.5",
+        "object.hasown": "^1.1.1",
+        "object.values": "^1.1.5",
+        "prop-types": "^15.8.1",
+        "resolve": "^2.0.0-next.3",
         "semver": "^6.3.0",
-        "string.prototype.matchall": "^4.0.2",
-        "xregexp": "^4.3.0"
+        "string.prototype.matchall": "^4.0.7"
       },
       "dependencies": {
         "doctrine": {
@@ -32813,6 +31532,28 @@
             "esutils": "^2.0.2"
           }
         },
+        "prop-types": {
+          "version": "15.8.1",
+          "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+          "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+          "dev": true,
+          "requires": {
+            "loose-envify": "^1.4.0",
+            "object-assign": "^4.1.1",
+            "react-is": "^16.13.1"
+          }
+        },
+        "resolve": {
+          "version": "2.0.0-next.4",
+          "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
+          "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
+          "dev": true,
+          "requires": {
+            "is-core-module": "^2.9.0",
+            "path-parse": "^1.0.7",
+            "supports-preserve-symlinks-flag": "^1.0.0"
+          }
+        },
         "semver": {
           "version": "6.3.0",
           "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
@@ -32822,9 +31563,9 @@
       }
     },
     "eslint-plugin-react-hooks": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz",
-      "integrity": "sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==",
+      "version": "4.6.0",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+      "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
       "dev": true,
       "requires": {}
     },
@@ -32836,38 +31577,46 @@
       "requires": {
         "esrecurse": "^4.3.0",
         "estraverse": "^4.1.1"
+      },
+      "dependencies": {
+        "estraverse": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+          "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+          "dev": true
+        }
       }
     },
     "eslint-utils": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz",
-      "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+      "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
       "dev": true,
       "requires": {
-        "eslint-visitor-keys": "^1.1.0"
+        "eslint-visitor-keys": "^2.0.0"
       }
     },
     "eslint-visitor-keys": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
-      "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+      "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
       "dev": true
     },
     "espree": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz",
-      "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==",
+      "version": "9.3.3",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz",
+      "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==",
       "dev": true,
       "requires": {
-        "acorn": "^7.1.1",
-        "acorn-jsx": "^5.2.0",
-        "eslint-visitor-keys": "^1.1.0"
+        "acorn": "^8.8.0",
+        "acorn-jsx": "^5.3.2",
+        "eslint-visitor-keys": "^3.3.0"
       },
       "dependencies": {
-        "acorn": {
-          "version": "7.4.1",
-          "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
-          "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+        "eslint-visitor-keys": {
+          "version": "3.3.0",
+          "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+          "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
           "dev": true
         }
       }
@@ -32885,14 +31634,6 @@
       "dev": true,
       "requires": {
         "estraverse": "^5.1.0"
-      },
-      "dependencies": {
-        "estraverse": {
-          "version": "5.3.0",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-          "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-          "dev": true
-        }
       }
     },
     "esrecurse": {
@@ -32902,20 +31643,12 @@
       "dev": true,
       "requires": {
         "estraverse": "^5.2.0"
-      },
-      "dependencies": {
-        "estraverse": {
-          "version": "5.3.0",
-          "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
-          "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
-          "dev": true
-        }
       }
     },
     "estraverse": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
-      "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
       "dev": true
     },
     "esutils": {
@@ -32927,7 +31660,7 @@
     "etag": {
       "version": "1.8.1",
       "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
-      "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+      "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
       "dev": true
     },
     "eventemitter3": {
@@ -32936,6 +31669,12 @@
       "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
       "dev": true
     },
+    "events": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+      "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+      "dev": true
+    },
     "exec-buffer": {
       "version": "3.2.0",
       "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz",
@@ -32953,7 +31692,7 @@
         "cross-spawn": {
           "version": "5.1.0",
           "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
-          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
           "dev": true,
           "optional": true,
           "requires": {
@@ -32965,7 +31704,7 @@
         "execa": {
           "version": "0.7.0",
           "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
-          "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+          "integrity": "sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw==",
           "dev": true,
           "optional": true,
           "requires": {
@@ -32981,34 +31720,43 @@
         "get-stream": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
           "dev": true,
           "optional": true
         },
-        "lru-cache": {
-          "version": "4.1.5",
-          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
-          "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+          "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
+          "dev": true,
+          "optional": true
+        },
+        "shebang-command": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+          "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
           "dev": true,
           "optional": true,
           "requires": {
-            "pseudomap": "^1.0.2",
-            "yallist": "^2.1.2"
+            "shebang-regex": "^1.0.0"
           }
         },
-        "pify": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+        "shebang-regex": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+          "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
           "dev": true,
           "optional": true
         },
-        "yallist": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
           "dev": true,
-          "optional": true
+          "optional": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
         }
       }
     },
@@ -33031,6 +31779,51 @@
         "p-finally": "^1.0.0",
         "signal-exit": "^3.0.0",
         "strip-eof": "^1.0.0"
+      },
+      "dependencies": {
+        "cross-spawn": {
+          "version": "6.0.5",
+          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+          "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+          "dev": true,
+          "requires": {
+            "nice-try": "^1.0.4",
+            "path-key": "^2.0.1",
+            "semver": "^5.5.0",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
+        "path-key": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+          "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+          "dev": true
+        },
+        "shebang-command": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+          "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
+          "dev": true,
+          "requires": {
+            "shebang-regex": "^1.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+          "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
+          "dev": true
+        },
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
       }
     },
     "executable": {
@@ -33046,7 +31839,7 @@
         "pify": {
           "version": "2.3.0",
           "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
           "dev": true,
           "optional": true
         }
@@ -33061,13 +31854,13 @@
     "exit": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
-      "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
+      "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
       "dev": true
     },
     "expand-brackets": {
       "version": "2.1.4",
       "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
-      "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+      "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
       "dev": true,
       "requires": {
         "debug": "^2.3.3",
@@ -33091,7 +31884,7 @@
         "define-property": {
           "version": "0.2.5",
           "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
           "dev": true,
           "requires": {
             "is-descriptor": "^0.1.0"
@@ -33100,16 +31893,85 @@
         "extend-shallow": {
           "version": "2.0.1",
           "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
           "dev": true,
           "requires": {
             "is-extendable": "^0.1.0"
           }
         },
+        "is-accessor-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+          "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+          "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+          "dev": true
+        },
+        "is-data-descriptor": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+          "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+          "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^0.1.6",
+            "is-data-descriptor": "^0.1.4",
+            "kind-of": "^5.0.0"
+          }
+        },
+        "is-extendable": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+          "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+          "dev": true
+        },
         "ms": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
         }
       }
@@ -33155,9 +32017,9 @@
       }
     },
     "express": {
-      "version": "4.18.0",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz",
-      "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==",
+      "version": "4.18.1",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
+      "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
       "dev": true,
       "requires": {
         "accepts": "~1.3.8",
@@ -33193,6 +32055,12 @@
         "vary": "~1.1.2"
       },
       "dependencies": {
+        "array-flatten": {
+          "version": "1.1.1",
+          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+          "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
+          "dev": true
+        },
         "cookie": {
           "version": "0.5.0",
           "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
@@ -33211,13 +32079,13 @@
         "ms": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
         },
         "path-to-regexp": {
           "version": "0.1.7",
           "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
-          "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+          "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
           "dev": true
         },
         "qs": {
@@ -33267,33 +32135,11 @@
     "extend-shallow": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
-      "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+      "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
       "dev": true,
       "requires": {
         "assign-symbols": "^1.0.0",
         "is-extendable": "^1.0.1"
-      },
-      "dependencies": {
-        "is-extendable": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-          "dev": true,
-          "requires": {
-            "is-plain-object": "^2.0.4"
-          }
-        }
-      }
-    },
-    "external-editor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
-      "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
-      "dev": true,
-      "requires": {
-        "chardet": "^0.7.0",
-        "iconv-lite": "^0.4.24",
-        "tmp": "^0.0.33"
       }
     },
     "extglob": {
@@ -33315,7 +32161,7 @@
         "define-property": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
           "dev": true,
           "requires": {
             "is-descriptor": "^1.0.0"
@@ -33324,40 +32170,17 @@
         "extend-shallow": {
           "version": "2.0.1",
           "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
           "dev": true,
           "requires": {
             "is-extendable": "^0.1.0"
           }
         },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
+        "is-extendable": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+          "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+          "dev": true
         }
       }
     },
@@ -33395,7 +32218,7 @@
     "fast-levenshtein": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
-      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
       "dev": true
     },
     "fast-xml-parser": {
@@ -33409,9 +32232,9 @@
       }
     },
     "fastest-levenshtein": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz",
-      "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==",
+      "version": "1.0.16",
+      "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
+      "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
       "dev": true
     },
     "fastq": {
@@ -33444,29 +32267,20 @@
     "fd-slicer": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
-      "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
+      "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
       "dev": true,
       "optional": true,
       "requires": {
         "pend": "~1.2.0"
       }
     },
-    "figures": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
-      "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
-      "dev": true,
-      "requires": {
-        "escape-string-regexp": "^1.0.5"
-      }
-    },
     "file-entry-cache": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
-      "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+      "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
       "dev": true,
       "requires": {
-        "flat-cache": "^2.0.1"
+        "flat-cache": "^3.0.4"
       }
     },
     "file-loader": {
@@ -33488,7 +32302,7 @@
     "filename-reserved-regex": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz",
-      "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=",
+      "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==",
       "dev": true,
       "optional": true
     },
@@ -33546,7 +32360,7 @@
         "ms": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
         }
       }
@@ -33605,20 +32419,19 @@
       }
     },
     "flat-cache": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
-      "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+      "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
       "dev": true,
       "requires": {
-        "flatted": "^2.0.0",
-        "rimraf": "2.6.3",
-        "write": "1.0.3"
+        "flatted": "^3.1.0",
+        "rimraf": "^3.0.2"
       },
       "dependencies": {
         "rimraf": {
-          "version": "2.6.3",
-          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
-          "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+          "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
           "dev": true,
           "requires": {
             "glob": "^7.1.3"
@@ -33627,9 +32440,9 @@
       }
     },
     "flatted": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
-      "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
+      "version": "3.2.6",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz",
+      "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==",
       "dev": true
     },
     "focus-lock": {
@@ -33653,7 +32466,7 @@
     "for-in": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
-      "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+      "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
       "dev": true
     },
     "forever-agent": {
@@ -33736,6 +32549,15 @@
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
         "schema-utils": {
           "version": "2.7.0",
           "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
@@ -33770,17 +32592,23 @@
           "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
           "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
           "dev": true
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
         }
       }
     },
     "form-data": {
-      "version": "2.5.1",
-      "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
-      "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
+      "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
       "dev": true,
       "requires": {
         "asynckit": "^0.4.0",
-        "combined-stream": "^1.0.6",
+        "combined-stream": "^1.0.8",
         "mime-types": "^2.1.12"
       }
     },
@@ -33810,7 +32638,7 @@
     "fragment-cache": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
-      "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+      "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
       "dev": true,
       "requires": {
         "map-cache": "^0.2.2"
@@ -33819,13 +32647,13 @@
     "fresh": {
       "version": "0.5.2",
       "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
-      "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
+      "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
       "dev": true
     },
     "from2": {
       "version": "2.3.0",
       "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
-      "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+      "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -33895,7 +32723,7 @@
     "functional-red-black-tree": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
-      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+      "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
       "dev": true
     },
     "functions-have-names": {
@@ -33967,7 +32795,7 @@
     "get-value": {
       "version": "2.0.6",
       "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
-      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+      "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
       "dev": true
     },
     "getpass": {
@@ -33991,18 +32819,6 @@
         "execa": "^5.0.0"
       },
       "dependencies": {
-        "cross-spawn": {
-          "version": "7.0.3",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "path-key": "^3.1.0",
-            "shebang-command": "^2.0.0",
-            "which": "^2.0.1"
-          }
-        },
         "execa": {
           "version": "5.1.1",
           "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -34044,40 +32860,6 @@
           "requires": {
             "path-key": "^3.0.0"
           }
-        },
-        "path-key": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-          "dev": true,
-          "optional": true
-        },
-        "shebang-command": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "shebang-regex": "^3.0.0"
-          }
-        },
-        "shebang-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-          "dev": true,
-          "optional": true
-        },
-        "which": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
         }
       }
     },
@@ -34127,6 +32909,17 @@
         "ini": "^1.3.5",
         "kind-of": "^6.0.2",
         "which": "^1.3.1"
+      },
+      "dependencies": {
+        "which": {
+          "version": "1.3.1",
+          "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+          "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
+        }
       }
     },
     "globals": {
@@ -34138,7 +32931,7 @@
     "globby": {
       "version": "6.1.0",
       "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
-      "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+      "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==",
       "dev": true,
       "requires": {
         "array-union": "^1.0.1",
@@ -34151,7 +32944,7 @@
         "pify": {
           "version": "2.3.0",
           "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+          "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
           "dev": true
         }
       }
@@ -34182,7 +32975,7 @@
         "get-stream": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
-          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+          "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==",
           "dev": true,
           "optional": true
         }
@@ -34197,7 +32990,7 @@
     "growly": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
-      "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
+      "integrity": "sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==",
       "dev": true,
       "optional": true
     },
@@ -34254,7 +33047,7 @@
     "has-flag": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+      "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
     },
     "has-property-descriptors": {
       "version": "1.0.0",
@@ -34297,7 +33090,7 @@
     "has-value": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
-      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+      "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
       "dev": true,
       "requires": {
         "get-value": "^2.0.6",
@@ -34308,7 +33101,7 @@
     "has-values": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
-      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+      "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
       "dev": true,
       "requires": {
         "is-number": "^3.0.0",
@@ -34324,7 +33117,7 @@
         "is-number": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
           "dev": true,
           "requires": {
             "kind-of": "^3.0.2"
@@ -34333,7 +33126,7 @@
             "kind-of": {
               "version": "3.2.2",
               "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
               "dev": true,
               "requires": {
                 "is-buffer": "^1.1.5"
@@ -34344,7 +33137,7 @@
         "kind-of": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
-          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+          "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
           "dev": true,
           "requires": {
             "is-buffer": "^1.1.5"
@@ -34388,7 +33181,7 @@
     "hpack.js": {
       "version": "2.1.6",
       "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
-      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
+      "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==",
       "dev": true,
       "requires": {
         "inherits": "^2.0.1",
@@ -34486,7 +33279,7 @@
     "http-deceiver": {
       "version": "1.2.7",
       "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz",
-      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
+      "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==",
       "dev": true
     },
     "http-errors": {
@@ -34503,9 +33296,9 @@
       }
     },
     "http-parser-js": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz",
-      "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==",
+      "version": "0.5.8",
+      "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz",
+      "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==",
       "dev": true
     },
     "http-proxy": {
@@ -34610,7 +33403,7 @@
     "identity-obj-proxy": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz",
-      "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=",
+      "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==",
       "dev": true,
       "requires": {
         "harmony-reflect": "^1.4.6"
@@ -34744,18 +33537,6 @@
         "mozjpeg": "^7.0.0"
       },
       "dependencies": {
-        "cross-spawn": {
-          "version": "7.0.3",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "path-key": "^3.1.0",
-            "shebang-command": "^2.0.0",
-            "which": "^2.0.1"
-          }
-        },
         "execa": {
           "version": "4.1.0",
           "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
@@ -34807,40 +33588,6 @@
           "requires": {
             "path-key": "^3.0.0"
           }
-        },
-        "path-key": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-          "dev": true,
-          "optional": true
-        },
-        "shebang-command": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "shebang-regex": "^3.0.0"
-          }
-        },
-        "shebang-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-          "dev": true,
-          "optional": true
-        },
-        "which": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
         }
       }
     },
@@ -34870,18 +33617,6 @@
         "pngquant-bin": "^6.0.0"
       },
       "dependencies": {
-        "cross-spawn": {
-          "version": "7.0.3",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "path-key": "^3.1.0",
-            "shebang-command": "^2.0.0",
-            "which": "^2.0.1"
-          }
-        },
         "execa": {
           "version": "4.1.0",
           "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
@@ -34933,40 +33668,6 @@
           "requires": {
             "path-key": "^3.0.0"
           }
-        },
-        "path-key": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-          "dev": true,
-          "optional": true
-        },
-        "shebang-command": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "shebang-regex": "^3.0.0"
-          }
-        },
-        "shebang-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-          "dev": true,
-          "optional": true
-        },
-        "which": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
         }
       }
     },
@@ -34999,16 +33700,16 @@
       "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
     },
     "immer": {
-      "version": "9.0.12",
-      "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.12.tgz",
-      "integrity": "sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA==",
+      "version": "9.0.15",
+      "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz",
+      "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==",
       "dev": true
     },
     "immutable": {
-      "version": "3.8.2",
-      "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz",
-      "integrity": "sha1-wkOZUUVbs5kT2vKBN28VMOEErfM=",
-      "optional": true
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz",
+      "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==",
+      "devOptional": true
     },
     "import-fresh": {
       "version": "3.3.0",
@@ -35046,7 +33747,7 @@
     "imurmurhash": {
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
-      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
       "dev": true
     },
     "indent-string": {
@@ -35075,78 +33776,6 @@
       "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
       "dev": true
     },
-    "inquirer": {
-      "version": "7.3.3",
-      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
-      "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
-      "dev": true,
-      "requires": {
-        "ansi-escapes": "^4.2.1",
-        "chalk": "^4.1.0",
-        "cli-cursor": "^3.1.0",
-        "cli-width": "^3.0.0",
-        "external-editor": "^3.0.3",
-        "figures": "^3.0.0",
-        "lodash": "^4.17.19",
-        "mute-stream": "0.0.8",
-        "run-async": "^2.4.0",
-        "rxjs": "^6.6.0",
-        "string-width": "^4.1.0",
-        "strip-ansi": "^6.0.0",
-        "through": "^2.3.6"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
-      }
-    },
     "internal-slot": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
@@ -35213,7 +33842,7 @@
     "into-stream": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz",
-      "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=",
+      "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -35230,41 +33859,24 @@
       }
     },
     "ip": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
-      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+      "version": "1.1.8",
+      "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz",
+      "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==",
       "dev": true
     },
     "ipaddr.js": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
-      "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz",
+      "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==",
       "dev": true
     },
     "is-accessor-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
-      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+      "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
       "dev": true,
       "requires": {
-        "kind-of": "^3.0.2"
-      },
-      "dependencies": {
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-          "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-          "dev": true
-        },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
+        "kind-of": "^6.0.0"
       }
     },
     "is-arguments": {
@@ -35356,29 +33968,12 @@
       }
     },
     "is-data-descriptor": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
-      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+      "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
       "dev": true,
       "requires": {
-        "kind-of": "^3.0.2"
-      },
-      "dependencies": {
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
-          "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
-          "dev": true
-        },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
+        "kind-of": "^6.0.0"
       }
     },
     "is-date-object": {
@@ -35390,22 +33985,14 @@
       }
     },
     "is-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
-      "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+      "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
       "dev": true,
       "requires": {
-        "is-accessor-descriptor": "^0.1.6",
-        "is-data-descriptor": "^0.1.4",
-        "kind-of": "^5.0.0"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
-          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
-          "dev": true
-        }
+        "is-accessor-descriptor": "^1.0.0",
+        "is-data-descriptor": "^1.0.0",
+        "kind-of": "^6.0.2"
       }
     },
     "is-docker": {
@@ -35415,15 +34002,18 @@
       "dev": true
     },
     "is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
-      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
-      "dev": true
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+      "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+      "dev": true,
+      "requires": {
+        "is-plain-object": "^2.0.4"
+      }
     },
     "is-extglob": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
       "dev": true
     },
     "is-fullwidth-code-point": {
@@ -35469,7 +34059,7 @@
     "is-invalid-path": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz",
-      "integrity": "sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ=",
+      "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==",
       "dev": true,
       "requires": {
         "is-glob": "^2.0.0"
@@ -35478,13 +34068,13 @@
         "is-extglob": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
-          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+          "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==",
           "dev": true
         },
         "is-glob": {
           "version": "2.0.1",
           "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
-          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+          "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==",
           "dev": true,
           "requires": {
             "is-extglob": "^1.0.0"
@@ -35495,14 +34085,14 @@
     "is-jpg": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-2.0.0.tgz",
-      "integrity": "sha1-LhmX+m6RZuqsAkLarkQ0A+TvHZc=",
+      "integrity": "sha512-ODlO0ruzhkzD3sdynIainVP5eoOFNN85rxA1+cwwnPe4dKyX0r5+hxNO5XpCrxlHcmb9vkOit9mhRD2JVuimHg==",
       "dev": true,
       "optional": true
     },
     "is-natural-number": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz",
-      "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=",
+      "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==",
       "dev": true,
       "optional": true
     },
@@ -35559,7 +34149,7 @@
     "is-plain-obj": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
-      "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+      "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==",
       "dev": true,
       "optional": true
     },
@@ -35624,7 +34214,7 @@
     "is-stream": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
-      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+      "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
       "dev": true
     },
     "is-string": {
@@ -35668,7 +34258,7 @@
     "is-valid-path": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz",
-      "integrity": "sha1-EQ+f90w39mPh7HkV60UfLbk6yd8=",
+      "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==",
       "dev": true,
       "requires": {
         "is-invalid-path": "^0.1.0"
@@ -35705,7 +34295,7 @@
     "isexe": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
       "dev": true
     },
     "iso-639-1": {
@@ -35716,7 +34306,7 @@
     "isobject": {
       "version": "3.0.1",
       "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
-      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+      "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
       "dev": true
     },
     "isstream": {
@@ -35815,9 +34405,9 @@
       }
     },
     "istanbul-reports": {
-      "version": "3.1.4",
-      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz",
-      "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==",
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
+      "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
       "dev": true,
       "requires": {
         "html-escaper": "^2.0.0",
@@ -35844,178 +34434,6 @@
         "@jest/core": "^26.6.3",
         "import-local": "^3.0.2",
         "jest-cli": "^26.6.3"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "camelcase": {
-          "version": "5.3.1",
-          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
-          "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
-          "dev": true
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "cliui": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
-          "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
-          "dev": true,
-          "requires": {
-            "string-width": "^4.2.0",
-            "strip-ansi": "^6.0.0",
-            "wrap-ansi": "^6.2.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true
-        },
-        "find-up": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-          "dev": true,
-          "requires": {
-            "locate-path": "^5.0.0",
-            "path-exists": "^4.0.0"
-          }
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true
-        },
-        "jest-cli": {
-          "version": "26.6.3",
-          "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz",
-          "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==",
-          "dev": true,
-          "requires": {
-            "@jest/core": "^26.6.3",
-            "@jest/test-result": "^26.6.2",
-            "@jest/types": "^26.6.2",
-            "chalk": "^4.0.0",
-            "exit": "^0.1.2",
-            "graceful-fs": "^4.2.4",
-            "import-local": "^3.0.2",
-            "is-ci": "^2.0.0",
-            "jest-config": "^26.6.3",
-            "jest-util": "^26.6.2",
-            "jest-validate": "^26.6.2",
-            "prompts": "^2.0.1",
-            "yargs": "^15.4.1"
-          }
-        },
-        "locate-path": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-          "dev": true,
-          "requires": {
-            "p-locate": "^4.1.0"
-          }
-        },
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
-          "dev": true,
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        },
-        "p-locate": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
-          "dev": true,
-          "requires": {
-            "p-limit": "^2.2.0"
-          }
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        },
-        "wrap-ansi": {
-          "version": "6.2.0",
-          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
-          "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.0.0",
-            "string-width": "^4.1.0",
-            "strip-ansi": "^6.0.0"
-          }
-        },
-        "y18n": {
-          "version": "4.0.3",
-          "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
-          "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
-          "dev": true
-        },
-        "yargs": {
-          "version": "15.4.1",
-          "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
-          "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
-          "dev": true,
-          "requires": {
-            "cliui": "^6.0.0",
-            "decamelize": "^1.2.0",
-            "find-up": "^4.1.0",
-            "get-caller-file": "^2.0.1",
-            "require-directory": "^2.1.1",
-            "require-main-filename": "^2.0.0",
-            "set-blocking": "^2.0.0",
-            "string-width": "^4.2.0",
-            "which-module": "^2.0.0",
-            "y18n": "^4.0.0",
-            "yargs-parser": "^18.1.2"
-          }
-        },
-        "yargs-parser": {
-          "version": "18.1.3",
-          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
-          "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
-          "dev": true,
-          "requires": {
-            "camelcase": "^5.0.0",
-            "decamelize": "^1.2.0"
-          }
-        }
       }
     },
     "jest-changed-files": {
@@ -36029,17 +34447,6 @@
         "throat": "^5.0.0"
       },
       "dependencies": {
-        "cross-spawn": {
-          "version": "7.0.3",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-          "dev": true,
-          "requires": {
-            "path-key": "^3.1.0",
-            "shebang-command": "^2.0.0",
-            "which": "^2.0.1"
-          }
-        },
         "execa": {
           "version": "4.1.0",
           "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
@@ -36086,35 +34493,177 @@
           "requires": {
             "path-key": "^3.0.0"
           }
+        }
+      }
+    },
+    "jest-cli": {
+      "version": "26.6.3",
+      "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz",
+      "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==",
+      "dev": true,
+      "requires": {
+        "@jest/core": "^26.6.3",
+        "@jest/test-result": "^26.6.2",
+        "@jest/types": "^26.6.2",
+        "chalk": "^4.0.0",
+        "exit": "^0.1.2",
+        "graceful-fs": "^4.2.4",
+        "import-local": "^3.0.2",
+        "is-ci": "^2.0.0",
+        "jest-config": "^26.6.3",
+        "jest-util": "^26.6.2",
+        "jest-validate": "^26.6.2",
+        "prompts": "^2.0.1",
+        "yargs": "^15.4.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
         },
-        "path-key": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+          "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
           "dev": true
         },
-        "shebang-command": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
           "dev": true,
           "requires": {
-            "shebang-regex": "^3.0.0"
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
           }
         },
-        "shebang-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+        "cliui": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+          "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+          "dev": true,
+          "requires": {
+            "string-width": "^4.2.0",
+            "strip-ansi": "^6.0.0",
+            "wrap-ansi": "^6.2.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
           "dev": true
         },
-        "which": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+        "find-up": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
           "dev": true,
           "requires": {
-            "isexe": "^2.0.0"
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
+          }
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true
+        },
+        "locate-path": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+          "dev": true,
+          "requires": {
+            "p-locate": "^4.1.0"
+          }
+        },
+        "p-limit": {
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+          "dev": true,
+          "requires": {
+            "p-try": "^2.0.0"
+          }
+        },
+        "p-locate": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.2.0"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
+        "wrap-ansi": {
+          "version": "6.2.0",
+          "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+          "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.0.0",
+            "string-width": "^4.1.0",
+            "strip-ansi": "^6.0.0"
+          }
+        },
+        "y18n": {
+          "version": "4.0.3",
+          "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+          "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
+          "dev": true
+        },
+        "yargs": {
+          "version": "15.4.1",
+          "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+          "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+          "dev": true,
+          "requires": {
+            "cliui": "^6.0.0",
+            "decamelize": "^1.2.0",
+            "find-up": "^4.1.0",
+            "get-caller-file": "^2.0.1",
+            "require-directory": "^2.1.1",
+            "require-main-filename": "^2.0.0",
+            "set-blocking": "^2.0.0",
+            "string-width": "^4.2.0",
+            "which-module": "^2.0.0",
+            "y18n": "^4.0.0",
+            "yargs-parser": "^18.1.2"
+          }
+        },
+        "yargs-parser": {
+          "version": "18.1.3",
+          "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+          "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+          "dev": true,
+          "requires": {
+            "camelcase": "^5.0.0",
+            "decamelize": "^1.2.0"
           }
         }
       }
@@ -36596,170 +35145,102 @@
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
-        "slash": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
-          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
-      }
-    },
-    "jest-mock": {
-      "version": "26.6.2",
-      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz",
-      "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^26.6.2",
-        "@types/node": "*"
-      }
-    },
-    "jest-pnp-resolver": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
-      "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
-      "dev": true,
-      "requires": {}
-    },
-    "jest-regex-util": {
-      "version": "26.0.0",
-      "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz",
-      "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==",
-      "dev": true
-    },
-    "jest-resolve": {
-      "version": "26.6.2",
-      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz",
-      "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==",
-      "dev": true,
-      "requires": {
-        "@jest/types": "^26.6.2",
-        "chalk": "^4.0.0",
-        "graceful-fs": "^4.2.4",
-        "jest-pnp-resolver": "^1.2.2",
-        "jest-util": "^26.6.2",
-        "read-pkg-up": "^7.0.1",
-        "resolve": "^1.18.1",
-        "slash": "^3.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true
-        },
-        "find-up": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
-          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
-          "dev": true,
-          "requires": {
-            "locate-path": "^5.0.0",
-            "path-exists": "^4.0.0"
-          }
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true
-        },
-        "locate-path": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
-          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
-          "dev": true,
-          "requires": {
-            "p-locate": "^4.1.0"
-          }
+        "slash": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+          "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+          "dev": true
         },
-        "p-limit": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
-          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
-            "p-try": "^2.0.0"
+            "has-flag": "^4.0.0"
           }
-        },
-        "p-locate": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
-          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+        }
+      }
+    },
+    "jest-mock": {
+      "version": "26.6.2",
+      "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz",
+      "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^26.6.2",
+        "@types/node": "*"
+      }
+    },
+    "jest-pnp-resolver": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
+      "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
+      "dev": true,
+      "requires": {}
+    },
+    "jest-regex-util": {
+      "version": "26.0.0",
+      "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz",
+      "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==",
+      "dev": true
+    },
+    "jest-resolve": {
+      "version": "26.6.2",
+      "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz",
+      "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==",
+      "dev": true,
+      "requires": {
+        "@jest/types": "^26.6.2",
+        "chalk": "^4.0.0",
+        "graceful-fs": "^4.2.4",
+        "jest-pnp-resolver": "^1.2.2",
+        "jest-util": "^26.6.2",
+        "read-pkg-up": "^7.0.1",
+        "resolve": "^1.18.1",
+        "slash": "^3.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
           "dev": true,
           "requires": {
-            "p-limit": "^2.2.0"
+            "color-convert": "^2.0.1"
           }
         },
-        "read-pkg": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
-          "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
           "dev": true,
           "requires": {
-            "@types/normalize-package-data": "^2.4.0",
-            "normalize-package-data": "^2.5.0",
-            "parse-json": "^5.0.0",
-            "type-fest": "^0.6.0"
-          },
-          "dependencies": {
-            "type-fest": {
-              "version": "0.6.0",
-              "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
-              "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
-              "dev": true
-            }
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
           }
         },
-        "read-pkg-up": {
-          "version": "7.0.1",
-          "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
-          "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
           "dev": true,
           "requires": {
-            "find-up": "^4.1.0",
-            "read-pkg": "^5.2.0",
-            "type-fest": "^0.8.1"
+            "color-name": "~1.1.4"
           }
         },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true
+        },
         "slash": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
@@ -36774,12 +35255,6 @@
           "requires": {
             "has-flag": "^4.0.0"
           }
-        },
-        "type-fest": {
-          "version": "0.8.1",
-          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
-          "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
-          "dev": true
         }
       }
     },
@@ -37008,12 +35483,6 @@
           "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
           "dev": true
         },
-        "strip-bom": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
-          "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
-          "dev": true
-        },
         "supports-color": {
           "version": "7.2.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -37145,6 +35614,15 @@
           "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
           "dev": true
         },
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
         "semver": {
           "version": "7.3.7",
           "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
@@ -37162,6 +35640,12 @@
           "requires": {
             "has-flag": "^4.0.0"
           }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
         }
       }
     },
@@ -37449,19 +35933,6 @@
         "whatwg-url": "^8.5.0",
         "ws": "^7.4.6",
         "xml-name-validator": "^3.0.0"
-      },
-      "dependencies": {
-        "form-data": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
-          "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
-          "dev": true,
-          "requires": {
-            "asynckit": "^0.4.0",
-            "combined-stream": "^1.0.8",
-            "mime-types": "^2.1.12"
-          }
-        }
       }
     },
     "jsesc": {
@@ -37473,7 +35944,7 @@
     "json-buffer": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
-      "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=",
+      "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==",
       "dev": true,
       "optional": true
     },
@@ -37503,7 +35974,7 @@
     "json-stable-stringify-without-jsonify": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
-      "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
       "dev": true
     },
     "json-stringify-safe": {
@@ -37541,13 +36012,13 @@
       }
     },
     "jsx-ast-utils": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz",
-      "integrity": "sha512-z1xSldJ6imESSzOjd3NNkieVJKRlKYSOtMG8SFyCj2FIrvSaSuli/WjpBkEzCBoR9bYYYFgqJw61Xhu7Lcgk+w==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz",
+      "integrity": "sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q==",
       "dev": true,
       "requires": {
-        "array-includes": "^3.1.1",
-        "object.assign": "^4.1.0"
+        "array-includes": "^3.1.5",
+        "object.assign": "^4.1.2"
       }
     },
     "junk": {
@@ -37589,6 +36060,21 @@
       "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==",
       "dev": true
     },
+    "language-subtag-registry": {
+      "version": "0.3.22",
+      "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
+      "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==",
+      "dev": true
+    },
+    "language-tags": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
+      "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==",
+      "dev": true,
+      "requires": {
+        "language-subtag-registry": "~0.3.2"
+      }
+    },
     "lcov-parse": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz",
@@ -37602,13 +36088,13 @@
       "dev": true
     },
     "levn": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
-      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
       "dev": true,
       "requires": {
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2"
+        "prelude-ls": "^1.2.1",
+        "type-check": "~0.4.0"
       }
     },
     "lie": {
@@ -37620,9 +36106,9 @@
       }
     },
     "lilconfig": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz",
-      "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==",
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz",
+      "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==",
       "dev": true
     },
     "lines-and-columns": {
@@ -37630,35 +36116,6 @@
       "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
       "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
     },
-    "load-json-file": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
-      "integrity": "sha512-3p6ZOGNbiX4CdvEd1VcE6yi78UrGNpjHO33noGwHCnT/o2fyllJDepsm8+mFFv/DvtwFHht5HIHSyOy5a+ChVQ==",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "parse-json": "^2.2.0",
-        "pify": "^2.0.0",
-        "strip-bom": "^3.0.0"
-      },
-      "dependencies": {
-        "parse-json": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
-          "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.2.0"
-          }
-        },
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-          "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
-          "dev": true
-        }
-      }
-    },
     "loader-runner": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
@@ -37768,7 +36225,7 @@
     "lodash.uniq": {
       "version": "4.5.0",
       "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
-      "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=",
+      "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
       "dev": true
     },
     "lodash.uniqby": {
@@ -37807,12 +36264,14 @@
       "optional": true
     },
     "lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "version": "4.1.5",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+      "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
       "dev": true,
+      "optional": true,
       "requires": {
-        "yallist": "^4.0.0"
+        "pseudomap": "^1.0.2",
+        "yallist": "^2.1.2"
       }
     },
     "lz-string": {
@@ -37863,13 +36322,13 @@
     "map-cache": {
       "version": "0.2.2",
       "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
-      "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+      "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
       "dev": true
     },
     "map-visit": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
-      "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+      "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
       "dev": true,
       "requires": {
         "object-visit": "^1.0.0"
@@ -37920,22 +36379,22 @@
     "media-typer": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
-      "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
+      "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
       "dev": true
     },
     "memfs": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz",
-      "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==",
+      "version": "3.4.7",
+      "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz",
+      "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==",
       "dev": true,
       "requires": {
-        "fs-monkey": "1.0.3"
+        "fs-monkey": "^1.0.3"
       }
     },
     "merge-descriptors": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
-      "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+      "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
       "dev": true
     },
     "merge-stream": {
@@ -37953,7 +36412,7 @@
     "methods": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
-      "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
+      "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
       "dev": true
     },
     "micromatch": {
@@ -37973,18 +36432,18 @@
       "dev": true
     },
     "mime-db": {
-      "version": "1.49.0",
-      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
-      "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==",
+      "version": "1.52.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
       "dev": true
     },
     "mime-types": {
-      "version": "2.1.32",
-      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
-      "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
+      "version": "2.1.35",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
       "dev": true,
       "requires": {
-        "mime-db": "1.49.0"
+        "mime-db": "1.52.0"
       }
     },
     "mimic-fn": {
@@ -38033,9 +36492,9 @@
       "dev": true
     },
     "minimatch": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "requires": {
         "brace-expansion": "^1.1.7"
       }
@@ -38054,17 +36513,6 @@
       "requires": {
         "for-in": "^1.0.2",
         "is-extendable": "^1.0.1"
-      },
-      "dependencies": {
-        "is-extendable": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
-          "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
-          "dev": true,
-          "requires": {
-            "is-plain-object": "^2.0.4"
-          }
-        }
       }
     },
     "mkdirp": {
@@ -38123,19 +36571,13 @@
     "multicast-dns-service-types": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
-      "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
-      "dev": true
-    },
-    "mute-stream": {
-      "version": "0.0.8",
-      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
-      "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+      "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==",
       "dev": true
     },
     "nanoid": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
-      "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+      "version": "3.3.4",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+      "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
       "dev": true
     },
     "nanomatch": {
@@ -38160,7 +36602,7 @@
     "natural-compare": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
-      "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
       "dev": true
     },
     "nearley": {
@@ -38220,7 +36662,7 @@
     "node-int64": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
-      "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
+      "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
       "dev": true
     },
     "node-notifier": {
@@ -38238,6 +36680,16 @@
         "which": "^2.0.2"
       },
       "dependencies": {
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
         "semver": {
           "version": "7.3.7",
           "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
@@ -38255,22 +36707,19 @@
           "dev": true,
           "optional": true
         },
-        "which": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
           "dev": true,
-          "optional": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
+          "optional": true
         }
       }
     },
     "node-releases": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.3.tgz",
-      "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==",
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
+      "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
       "dev": true
     },
     "normalize-package-data": {
@@ -38294,7 +36743,7 @@
     "normalize-range": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
-      "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
+      "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
       "dev": true
     },
     "normalize-url": {
@@ -38317,7 +36766,7 @@
         "pify": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
-          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
           "dev": true,
           "optional": true
         }
@@ -38326,10 +36775,18 @@
     "npm-run-path": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
-      "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+      "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
       "dev": true,
       "requires": {
         "path-key": "^2.0.0"
+      },
+      "dependencies": {
+        "path-key": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+          "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
+          "dev": true
+        }
       }
     },
     "nth-check": {
@@ -38342,9 +36799,9 @@
       }
     },
     "nwsapi": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
-      "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz",
+      "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==",
       "dev": true
     },
     "oauth-sign": {
@@ -38361,7 +36818,7 @@
     "object-copy": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
-      "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+      "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
       "dev": true,
       "requires": {
         "copy-descriptor": "^0.1.0",
@@ -38372,22 +36829,59 @@
         "define-property": {
           "version": "0.2.5",
           "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
           "dev": true,
           "requires": {
             "is-descriptor": "^0.1.0"
           }
         },
+        "is-accessor-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+          "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          }
+        },
         "is-buffer": {
           "version": "1.1.6",
           "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
           "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
           "dev": true
         },
+        "is-data-descriptor": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+          "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          }
+        },
+        "is-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+          "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^0.1.6",
+            "is-data-descriptor": "^0.1.4",
+            "kind-of": "^5.0.0"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "5.1.0",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+              "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+              "dev": true
+            }
+          }
+        },
         "kind-of": {
           "version": "3.2.2",
           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
           "dev": true,
           "requires": {
             "is-buffer": "^1.1.5"
@@ -38422,7 +36916,7 @@
     "object-visit": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
-      "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+      "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
       "dev": true,
       "requires": {
         "isobject": "^3.0.0"
@@ -38460,10 +36954,20 @@
         "es-abstract": "^1.19.1"
       }
     },
+    "object.hasown": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz",
+      "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==",
+      "dev": true,
+      "requires": {
+        "define-properties": "^1.1.4",
+        "es-abstract": "^1.19.5"
+      }
+    },
     "object.pick": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
-      "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+      "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
       "dev": true,
       "requires": {
         "isobject": "^3.0.1"
@@ -38536,17 +37040,17 @@
       "dev": true
     },
     "optionator": {
-      "version": "0.8.3",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
-      "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+      "version": "0.9.1",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+      "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
       "dev": true,
       "requires": {
-        "deep-is": "~0.1.3",
-        "fast-levenshtein": "~2.0.6",
-        "levn": "~0.3.0",
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2",
-        "word-wrap": "~1.2.3"
+        "deep-is": "^0.1.3",
+        "fast-levenshtein": "^2.0.6",
+        "levn": "^0.4.1",
+        "prelude-ls": "^1.2.1",
+        "type-check": "^0.4.0",
+        "word-wrap": "^1.2.3"
       }
     },
     "optipng-bin": {
@@ -38570,12 +37074,6 @@
         "arch": "^2.1.0"
       }
     },
-    "os-tmpdir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
-      "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
-      "dev": true
-    },
     "ow": {
       "version": "0.17.0",
       "resolved": "https://registry.npmjs.org/ow/-/ow-0.17.0.tgz",
@@ -38611,7 +37109,7 @@
     "p-event": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/p-event/-/p-event-1.3.0.tgz",
-      "integrity": "sha1-jmtPT2XHK8W2/ii3XtqHT5akoIU=",
+      "integrity": "sha512-hV1zbA7gwqPVFcapfeATaNjQ3J0NuzorHPyG8GPL9g/Y/TplWVBVoCKCXL6Ej2zscrCEv195QNWJXuBH6XZuzA==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -38621,13 +37119,13 @@
     "p-finally": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
-      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+      "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
       "dev": true
     },
     "p-is-promise": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
-      "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=",
+      "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==",
       "dev": true,
       "optional": true
     },
@@ -38658,7 +37156,7 @@
     "p-map-series": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz",
-      "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=",
+      "integrity": "sha512-4k9LlvY6Bo/1FcIdV33wqZQES0Py+iKISU9Uc8p8AjWoZPnFKMpVIVD3s0EYn4jzLh1I+WeUZkJ0Yoa4Qfw3Kg==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -38674,7 +37172,7 @@
     "p-reduce": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz",
-      "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=",
+      "integrity": "sha512-3Tx1T3oM1xO/Y8Gj0sWyE78EIJZ+t+aEmXUdvQgvGmSMri7aPTHoovbXEreWKkL5j21Er60XAWLTzKbAKYOujQ==",
       "dev": true,
       "optional": true
     },
@@ -38691,7 +37189,7 @@
     "p-timeout": {
       "version": "1.2.1",
       "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz",
-      "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=",
+      "integrity": "sha512-gb0ryzr+K2qFqFv6qi3khoeqMZF/+ajxQipEF6NteZVnvz9tzdsfAVj3lYtn1gAXvH5lfLwfxEII799gt/mRIA==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -38767,7 +37265,7 @@
     "pascalcase": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
-      "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+      "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
       "dev": true
     },
     "path-exists": {
@@ -38784,13 +37282,13 @@
     "path-is-inside": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
-      "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+      "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==",
       "dev": true
     },
     "path-key": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
-      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
       "dev": true
     },
     "path-parse": {
@@ -38814,7 +37312,7 @@
     "pend": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
-      "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+      "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
       "dev": true,
       "optional": true
     },
@@ -38845,13 +37343,13 @@
     "pinkie": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
-      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+      "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
       "dev": true
     },
     "pinkie-promise": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
-      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+      "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
       "dev": true,
       "requires": {
         "pinkie": "^2.0.0"
@@ -38960,7 +37458,7 @@
         "path-exists": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+          "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
           "dev": true
         }
       }
@@ -38977,18 +37475,6 @@
         "execa": "^4.0.0"
       },
       "dependencies": {
-        "cross-spawn": {
-          "version": "7.0.3",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "path-key": "^3.1.0",
-            "shebang-command": "^2.0.0",
-            "which": "^2.0.1"
-          }
-        },
         "execa": {
           "version": "4.1.0",
           "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
@@ -39040,40 +37526,6 @@
           "requires": {
             "path-key": "^3.0.0"
           }
-        },
-        "path-key": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-          "dev": true,
-          "optional": true
-        },
-        "shebang-command": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "shebang-regex": "^3.0.0"
-          }
-        },
-        "shebang-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-          "dev": true,
-          "optional": true
-        },
-        "which": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
         }
       }
     },
@@ -39108,7 +37560,7 @@
     "posix-character-classes": {
       "version": "0.1.1",
       "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
-      "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+      "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
       "dev": true
     },
     "postcss": {
@@ -39145,18 +37597,19 @@
       }
     },
     "postcss-convert-values": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.0.tgz",
-      "integrity": "sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz",
+      "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==",
       "dev": true,
       "requires": {
+        "browserslist": "^4.20.3",
         "postcss-value-parser": "^4.2.0"
       }
     },
     "postcss-discard-comments": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz",
-      "integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz",
+      "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==",
       "dev": true,
       "requires": {}
     },
@@ -39192,6 +37645,15 @@
         "semver": "^7.3.5"
       },
       "dependencies": {
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+          "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+          "dev": true,
+          "requires": {
+            "yallist": "^4.0.0"
+          }
+        },
         "semver": {
           "version": "7.3.7",
           "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
@@ -39200,13 +37662,19 @@
           "requires": {
             "lru-cache": "^6.0.0"
           }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+          "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+          "dev": true
         }
       }
     },
     "postcss-merge-longhand": {
-      "version": "5.1.4",
-      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.4.tgz",
-      "integrity": "sha512-hbqRRqYfmXoGpzYKeW0/NCZhvNyQIlQeWVSao5iKWdyx7skLvCfQFGIUsP9NUs3dSbPac2IC4Go85/zG+7MlmA==",
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz",
+      "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==",
       "dev": true,
       "requires": {
         "postcss-value-parser": "^4.2.0",
@@ -39214,9 +37682,9 @@
       }
     },
     "postcss-merge-rules": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.1.tgz",
-      "integrity": "sha512-8wv8q2cXjEuCcgpIB1Xx1pIy8/rhMPIQqYKNzEdyx37m6gpq83mQQdCxgIkFgliyEnKvdwJf/C61vN4tQDq4Ww==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz",
+      "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==",
       "dev": true,
       "requires": {
         "browserslist": "^4.16.6",
@@ -39246,9 +37714,9 @@
       }
     },
     "postcss-minify-params": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.2.tgz",
-      "integrity": "sha512-aEP+p71S/urY48HWaRHasyx4WHQJyOYaKpQ6eXl8k0kxg66Wt/30VR6/woh8THgcpRbonJD5IeD+CzNhPi1L8g==",
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz",
+      "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==",
       "dev": true,
       "requires": {
         "browserslist": "^4.16.6",
@@ -39257,9 +37725,9 @@
       }
     },
     "postcss-minify-selectors": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.0.tgz",
-      "integrity": "sha512-vYxvHkW+iULstA+ctVNx0VoRAR4THQQRkG77o0oa4/mBS0OzGvvzLIvHDv/nNEM0crzN2WIyFU5X7wZhaUK3RA==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz",
+      "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==",
       "dev": true,
       "requires": {
         "postcss-selector-parser": "^6.0.5"
@@ -39318,18 +37786,18 @@
       }
     },
     "postcss-normalize-positions": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz",
-      "integrity": "sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ==",
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz",
+      "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==",
       "dev": true,
       "requires": {
         "postcss-value-parser": "^4.2.0"
       }
     },
     "postcss-normalize-repeat-style": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz",
-      "integrity": "sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw==",
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz",
+      "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==",
       "dev": true,
       "requires": {
         "postcss-value-parser": "^4.2.0"
@@ -39383,9 +37851,9 @@
       }
     },
     "postcss-ordered-values": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.1.tgz",
-      "integrity": "sha512-7lxgXF0NaoMIgyihL/2boNAEZKiW0+HkMhdKMTD93CjW8TdCy2hSdj8lsAo+uwm7EDG16Da2Jdmtqpedl0cMfw==",
+      "version": "5.1.3",
+      "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz",
+      "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==",
       "dev": true,
       "requires": {
         "cssnano-utils": "^3.1.0",
@@ -39456,15 +37924,15 @@
       "dev": true
     },
     "prelude-ls": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
-      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
       "dev": true
     },
     "prepend-http": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
-      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+      "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==",
       "dev": true,
       "optional": true
     },
@@ -39529,12 +37997,6 @@
       "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
       "dev": true
     },
-    "progress": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
-      "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
-      "dev": true
-    },
     "prompts": {
       "version": "2.4.2",
       "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
@@ -39577,7 +38039,7 @@
     "proto-list": {
       "version": "1.2.4",
       "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
-      "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
+      "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
       "dev": true,
       "optional": true
     },
@@ -39589,12 +38051,20 @@
       "requires": {
         "forwarded": "0.2.0",
         "ipaddr.js": "1.9.1"
+      },
+      "dependencies": {
+        "ipaddr.js": {
+          "version": "1.9.1",
+          "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+          "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+          "dev": true
+        }
       }
     },
     "pseudomap": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+      "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==",
       "dev": true,
       "optional": true
     },
@@ -39699,6 +38169,14 @@
         "http-errors": "2.0.0",
         "iconv-lite": "0.4.24",
         "unpipe": "1.0.0"
+      },
+      "dependencies": {
+        "bytes": {
+          "version": "3.1.2",
+          "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+          "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+          "dev": true
+        }
       }
     },
     "react": {
@@ -39782,49 +38260,13 @@
         "text-table": "^0.2.0"
       },
       "dependencies": {
-        "@babel/code-frame": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
-          "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
-          "dev": true,
-          "requires": {
-            "@babel/highlight": "^7.16.7"
-          }
-        },
-        "@babel/helper-validator-identifier": {
-          "version": "7.16.7",
-          "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
-          "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
-          "dev": true
-        },
-        "@babel/highlight": {
-          "version": "7.17.9",
-          "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
-          "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
           "dev": true,
           "requires": {
-            "@babel/helper-validator-identifier": "^7.16.7",
-            "chalk": "^2.0.0",
-            "js-tokens": "^4.0.0"
-          },
-          "dependencies": {
-            "chalk": {
-              "version": "2.4.2",
-              "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-              "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-              "dev": true,
-              "requires": {
-                "ansi-styles": "^3.2.1",
-                "escape-string-regexp": "^1.0.5",
-                "supports-color": "^5.3.0"
-              }
-            },
-            "escape-string-regexp": {
-              "version": "1.0.5",
-              "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-              "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
-              "dev": true
-            }
+            "color-convert": "^2.0.1"
           }
         },
         "array-union": {
@@ -39841,26 +38283,6 @@
           "requires": {
             "ansi-styles": "^4.1.0",
             "supports-color": "^7.1.0"
-          },
-          "dependencies": {
-            "ansi-styles": {
-              "version": "4.3.0",
-              "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-              "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-              "dev": true,
-              "requires": {
-                "color-convert": "^2.0.1"
-              }
-            },
-            "supports-color": {
-              "version": "7.2.0",
-              "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-              "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-              "dev": true,
-              "requires": {
-                "has-flag": "^4.0.0"
-              }
-            }
           }
         },
         "color-convert": {
@@ -39878,17 +38300,6 @@
           "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
           "dev": true
         },
-        "cross-spawn": {
-          "version": "7.0.3",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-          "dev": true,
-          "requires": {
-            "path-key": "^3.1.0",
-            "shebang-command": "^2.0.0",
-            "which": "^2.0.1"
-          }
-        },
         "escape-string-regexp": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -39921,40 +38332,19 @@
           "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==",
           "dev": true
         },
-        "path-key": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-          "dev": true
-        },
-        "shebang-command": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-          "dev": true,
-          "requires": {
-            "shebang-regex": "^3.0.0"
-          }
-        },
-        "shebang-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-          "dev": true
-        },
         "slash": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
           "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
           "dev": true
         },
-        "which": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
           "dev": true,
           "requires": {
-            "isexe": "^2.0.0"
+            "has-flag": "^4.0.0"
           }
         }
       }
@@ -40343,90 +38733,77 @@
       "requires": {}
     },
     "read-pkg": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
-      "integrity": "sha512-eFIBOPW7FGjzBuk3hdXEuNSiTZS/xEMlH49HxMyzb0hyPfu4EhVjT2DH32K1hSSmVq4sebAWnZuuY5auISUTGA==",
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
+      "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
       "dev": true,
       "requires": {
-        "load-json-file": "^2.0.0",
-        "normalize-package-data": "^2.3.2",
-        "path-type": "^2.0.0"
+        "@types/normalize-package-data": "^2.4.0",
+        "normalize-package-data": "^2.5.0",
+        "parse-json": "^5.0.0",
+        "type-fest": "^0.6.0"
       },
       "dependencies": {
-        "path-type": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
-          "integrity": "sha512-dUnb5dXUf+kzhC/W/F4e5/SkluXIFf5VUHolW1Eg1irn1hGWjPGdsRcvYJ1nD6lhk8Ir7VM0bHJKsYTx8Jx9OQ==",
-          "dev": true,
-          "requires": {
-            "pify": "^2.0.0"
-          }
-        },
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
-          "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
+        "type-fest": {
+          "version": "0.6.0",
+          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
+          "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
           "dev": true
         }
       }
     },
     "read-pkg-up": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
-      "integrity": "sha512-1orxQfbWGUiTn9XsPlChs6rLie/AV9jwZTGmu2NZw/CUDJQchXJFYE0Fq5j7+n558T1JhDWLdhyd1Zj+wLY//w==",
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
+      "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
       "dev": true,
       "requires": {
-        "find-up": "^2.0.0",
-        "read-pkg": "^2.0.0"
+        "find-up": "^4.1.0",
+        "read-pkg": "^5.2.0",
+        "type-fest": "^0.8.1"
       },
       "dependencies": {
         "find-up": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
-          "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+          "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
           "dev": true,
           "requires": {
-            "locate-path": "^2.0.0"
+            "locate-path": "^5.0.0",
+            "path-exists": "^4.0.0"
           }
         },
         "locate-path": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
-          "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+          "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
           "dev": true,
           "requires": {
-            "p-locate": "^2.0.0",
-            "path-exists": "^3.0.0"
+            "p-locate": "^4.1.0"
           }
         },
         "p-limit": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+          "version": "2.3.0",
+          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+          "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
           "dev": true,
           "requires": {
-            "p-try": "^1.0.0"
+            "p-try": "^2.0.0"
           }
         },
         "p-locate": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-          "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+          "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
           "dev": true,
           "requires": {
-            "p-limit": "^1.1.0"
+            "p-limit": "^2.2.0"
           }
         },
-        "p-try": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-          "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
-          "dev": true
-        },
-        "path-exists": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-          "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+        "type-fest": {
+          "version": "0.8.1",
+          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+          "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
           "dev": true
         }
       }
@@ -40449,7 +38826,7 @@
         "isarray": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
           "dev": true
         }
       }
@@ -40479,6 +38856,17 @@
       "dev": true,
       "requires": {
         "minimatch": "3.0.4"
+      },
+      "dependencies": {
+        "minimatch": {
+          "version": "3.0.4",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        }
       }
     },
     "redent": {
@@ -40561,15 +38949,15 @@
       }
     },
     "regexpp": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
-      "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+      "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
       "dev": true
     },
     "regexpu-core": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz",
-      "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
+      "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
       "dev": true,
       "requires": {
         "regenerate": "^1.4.2",
@@ -40598,7 +38986,7 @@
         "jsesc": {
           "version": "0.5.0",
           "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
-          "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+          "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
           "dev": true
         }
       }
@@ -40612,7 +39000,7 @@
     "remove-trailing-separator": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
-      "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
+      "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
       "dev": true
     },
     "renderkid": {
@@ -40637,7 +39025,7 @@
     "repeat-string": {
       "version": "1.6.1",
       "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
-      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+      "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
       "dev": true
     },
     "replace-ext": {
@@ -40700,7 +39088,7 @@
     "require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
-      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
       "dev": true
     },
     "require-from-string": {
@@ -40718,7 +39106,7 @@
     "requires-port": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
-      "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
+      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
       "dev": true
     },
     "reselect": {
@@ -40758,7 +39146,7 @@
     "resolve-url": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
-      "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+      "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
       "dev": true
     },
     "resolve-url-loader": {
@@ -40785,23 +39173,13 @@
     "responselike": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
-      "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+      "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==",
       "dev": true,
       "optional": true,
       "requires": {
         "lowercase-keys": "^1.0.0"
       }
     },
-    "restore-cursor": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
-      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
-      "dev": true,
-      "requires": {
-        "onetime": "^5.1.0",
-        "signal-exit": "^3.0.2"
-      }
-    },
     "ret": {
       "version": "0.1.15",
       "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
@@ -40857,12 +39235,6 @@
         "strip-json-comments": "^3.1.1"
       }
     },
-    "run-async": {
-      "version": "2.4.1",
-      "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
-      "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
-      "dev": true
-    },
     "run-parallel": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -40872,23 +39244,6 @@
         "queue-microtask": "^1.2.2"
       }
     },
-    "rxjs": {
-      "version": "6.6.7",
-      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
-      "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
-      "dev": true,
-      "requires": {
-        "tslib": "^1.9.0"
-      },
-      "dependencies": {
-        "tslib": {
-          "version": "1.14.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
-          "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
-          "dev": true
-        }
-      }
-    },
     "safe-buffer": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
@@ -40897,7 +39252,7 @@
     "safe-regex": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
-      "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+      "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
       "dev": true,
       "requires": {
         "ret": "~0.1.10"
@@ -40957,7 +39312,7 @@
             "extend-shallow": {
               "version": "2.0.1",
               "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
               "dev": true,
               "requires": {
                 "is-extendable": "^0.1.0"
@@ -40968,7 +39323,7 @@
         "fill-range": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
-          "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+          "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
           "dev": true,
           "requires": {
             "extend-shallow": "^2.0.1",
@@ -40980,7 +39335,7 @@
             "extend-shallow": {
               "version": "2.0.1",
               "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-              "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+              "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
               "dev": true,
               "requires": {
                 "is-extendable": "^0.1.0"
@@ -40994,10 +39349,16 @@
           "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
           "dev": true
         },
+        "is-extendable": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+          "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+          "dev": true
+        },
         "is-number": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
-          "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+          "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
           "dev": true,
           "requires": {
             "kind-of": "^3.0.2"
@@ -41006,7 +39367,7 @@
             "kind-of": {
               "version": "3.2.2",
               "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
               "dev": true,
               "requires": {
                 "is-buffer": "^1.1.5"
@@ -41038,7 +39399,7 @@
         "normalize-path": {
           "version": "2.1.1",
           "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
-          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+          "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
           "dev": true,
           "requires": {
             "remove-trailing-separator": "^1.0.1"
@@ -41047,7 +39408,7 @@
         "to-regex-range": {
           "version": "2.1.1",
           "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
-          "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+          "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
           "dev": true,
           "requires": {
             "is-number": "^3.0.0",
@@ -41065,14 +39426,6 @@
         "chokidar": ">=3.0.0 <4.0.0",
         "immutable": "^4.0.0",
         "source-map-js": ">=0.6.2 <2.0.0"
-      },
-      "dependencies": {
-        "immutable": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz",
-          "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==",
-          "dev": true
-        }
       }
     },
     "sass-loader": {
@@ -41142,7 +39495,7 @@
     "select-hose": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz",
-      "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
+      "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==",
       "dev": true
     },
     "selfsigned": {
@@ -41170,7 +39523,7 @@
     "semver-truncate": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz",
-      "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=",
+      "integrity": "sha512-V1fGg9i4CL3qesB6U0L6XAm4xOJiHmt4QAacazumuasc03BvtFGIMCduv01JWQ69Nv+JST9TqhSCiJoxoY031w==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -41210,7 +39563,7 @@
             "ms": {
               "version": "2.0.0",
               "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-              "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+              "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
               "dev": true
             }
           }
@@ -41235,7 +39588,7 @@
     "serve-index": {
       "version": "1.9.1",
       "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
-      "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
+      "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==",
       "dev": true,
       "requires": {
         "accepts": "~1.3.4",
@@ -41259,13 +39612,13 @@
         "depd": {
           "version": "1.1.2",
           "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
-          "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+          "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
           "dev": true
         },
         "http-errors": {
           "version": "1.6.3",
           "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
-          "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
+          "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==",
           "dev": true,
           "requires": {
             "depd": "~1.1.2",
@@ -41277,13 +39630,13 @@
         "inherits": {
           "version": "2.0.3",
           "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+          "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
           "dev": true
         },
         "ms": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
         },
         "setprototypeof": {
@@ -41295,7 +39648,7 @@
         "statuses": {
           "version": "1.5.0",
           "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-          "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
+          "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
           "dev": true
         }
       }
@@ -41315,7 +39668,7 @@
     "set-blocking": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
-      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+      "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
       "dev": true
     },
     "set-value": {
@@ -41333,11 +39686,17 @@
         "extend-shallow": {
           "version": "2.0.1",
           "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
           "dev": true,
           "requires": {
             "is-extendable": "^0.1.0"
           }
+        },
+        "is-extendable": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+          "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+          "dev": true
         }
       }
     },
@@ -41367,18 +39726,18 @@
       "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
     },
     "shebang-command": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
-      "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
       "dev": true,
       "requires": {
-        "shebang-regex": "^1.0.0"
+        "shebang-regex": "^3.0.0"
       }
     },
     "shebang-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
-      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
       "dev": true
     },
     "shell-quote": {
@@ -41448,25 +39807,6 @@
       "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
       "dev": true
     },
-    "slice-ansi": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
-      "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
-      "dev": true,
-      "requires": {
-        "ansi-styles": "^3.2.0",
-        "astral-regex": "^1.0.0",
-        "is-fullwidth-code-point": "^2.0.0"
-      },
-      "dependencies": {
-        "is-fullwidth-code-point": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-          "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
-          "dev": true
-        }
-      }
-    },
     "snapdragon": {
       "version": "0.8.2",
       "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
@@ -41495,7 +39835,7 @@
         "define-property": {
           "version": "0.2.5",
           "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
           "dev": true,
           "requires": {
             "is-descriptor": "^0.1.0"
@@ -41504,16 +39844,85 @@
         "extend-shallow": {
           "version": "2.0.1",
           "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
           "dev": true,
           "requires": {
             "is-extendable": "^0.1.0"
           }
         },
+        "is-accessor-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+          "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+          "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+          "dev": true
+        },
+        "is-data-descriptor": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+          "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+          "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^0.1.6",
+            "is-data-descriptor": "^0.1.4",
+            "kind-of": "^5.0.0"
+          }
+        },
+        "is-extendable": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+          "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+          "dev": true
+        },
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+          "dev": true
+        },
         "ms": {
           "version": "2.0.0",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
-          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
         },
         "source-map-resolve": {
@@ -41545,40 +39954,11 @@
         "define-property": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
           "dev": true,
           "requires": {
             "is-descriptor": "^1.0.0"
           }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
-          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
         }
       }
     },
@@ -41600,7 +39980,7 @@
         "kind-of": {
           "version": "3.2.2",
           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
           "dev": true,
           "requires": {
             "is-buffer": "^1.1.5"
@@ -41630,7 +40010,7 @@
     "sort-keys": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
-      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+      "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -41640,7 +40020,7 @@
     "sort-keys-length": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz",
-      "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=",
+      "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -41858,15 +40238,15 @@
       }
     },
     "stackframe": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.1.tgz",
-      "integrity": "sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg==",
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
+      "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==",
       "dev": true
     },
     "static-extend": {
       "version": "0.1.2",
       "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
-      "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+      "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
       "dev": true,
       "requires": {
         "define-property": "^0.2.5",
@@ -41876,11 +40256,74 @@
         "define-property": {
           "version": "0.2.5",
           "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
           "dev": true,
           "requires": {
             "is-descriptor": "^0.1.0"
           }
+        },
+        "is-accessor-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+          "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-buffer": {
+          "version": "1.1.6",
+          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+          "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+          "dev": true
+        },
+        "is-data-descriptor": {
+          "version": "0.1.4",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+          "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+          "dev": true,
+          "requires": {
+            "kind-of": "^3.0.2"
+          },
+          "dependencies": {
+            "kind-of": {
+              "version": "3.2.2",
+              "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+              "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+              "dev": true,
+              "requires": {
+                "is-buffer": "^1.1.5"
+              }
+            }
+          }
+        },
+        "is-descriptor": {
+          "version": "0.1.6",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+          "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+          "dev": true,
+          "requires": {
+            "is-accessor-descriptor": "^0.1.6",
+            "is-data-descriptor": "^0.1.4",
+            "kind-of": "^5.0.0"
+          }
+        },
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+          "dev": true
         }
       }
     },
@@ -41923,6 +40366,14 @@
         "emoji-regex": "^8.0.0",
         "is-fullwidth-code-point": "^3.0.0",
         "strip-ansi": "^6.0.1"
+      },
+      "dependencies": {
+        "emoji-regex": {
+          "version": "8.0.0",
+          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+          "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+          "dev": true
+        }
       }
     },
     "string.prototype.matchall": {
@@ -41979,20 +40430,12 @@
       "dev": true,
       "requires": {
         "ansi-regex": "^5.0.1"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "5.0.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
-          "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
-          "dev": true
-        }
       }
     },
     "strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
-      "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+      "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
       "dev": true
     },
     "strip-dirs": {
@@ -42008,7 +40451,7 @@
     "strip-eof": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
-      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+      "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
       "dev": true
     },
     "strip-final-newline": {
@@ -42095,6 +40538,17 @@
           "requires": {
             "ms": "^2.1.1"
           }
+        },
+        "form-data": {
+          "version": "2.5.1",
+          "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+          "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+          "dev": true,
+          "requires": {
+            "asynckit": "^0.4.0",
+            "combined-stream": "^1.0.6",
+            "mime-types": "^2.1.12"
+          }
         }
       }
     },
@@ -42133,6 +40587,12 @@
         }
       }
     },
+    "supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "dev": true
+    },
     "svg-parser": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz",
@@ -42178,58 +40638,6 @@
       "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-4.0.0.tgz",
       "integrity": "sha512-H1XoH1URcBOa/rZZWxLxHCtOdVUEev+9vo5YdYhC9tCY4wnybX+VQrCYuy9ubkg69fCBxCONJOSLGfw0DWMffQ=="
     },
-    "table": {
-      "version": "5.4.6",
-      "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
-      "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
-      "dev": true,
-      "requires": {
-        "ajv": "^6.10.2",
-        "lodash": "^4.17.14",
-        "slice-ansi": "^2.1.0",
-        "string-width": "^3.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
-          "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
-          "dev": true
-        },
-        "emoji-regex": {
-          "version": "7.0.3",
-          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
-          "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
-          "dev": true
-        },
-        "is-fullwidth-code-point": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
-          "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
-          "dev": true
-        },
-        "string-width": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
-          "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
-          "dev": true,
-          "requires": {
-            "emoji-regex": "^7.0.1",
-            "is-fullwidth-code-point": "^2.0.0",
-            "strip-ansi": "^5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
-          "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        }
-      }
-    },
     "tapable": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
@@ -42255,14 +40663,14 @@
     "temp-dir": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz",
-      "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=",
+      "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==",
       "dev": true,
       "optional": true
     },
     "tempfile": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz",
-      "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=",
+      "integrity": "sha512-ZOn6nJUgvgC09+doCEF3oB+r3ag7kUvlsXEGX069QRD60p+P3uP7XG9N2/at+EyIRGSN//ZY3LyEotA1YpmjuA==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -42301,15 +40709,15 @@
       }
     },
     "terser-webpack-plugin": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz",
-      "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==",
+      "version": "5.3.3",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz",
+      "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==",
       "dev": true,
       "requires": {
+        "@jridgewell/trace-mapping": "^0.3.7",
         "jest-worker": "^27.4.5",
         "schema-utils": "^3.1.1",
         "serialize-javascript": "^6.0.0",
-        "source-map": "^0.6.1",
         "terser": "^5.7.2"
       },
       "dependencies": {
@@ -42330,12 +40738,6 @@
             "supports-color": "^8.0.0"
           }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
-          "dev": true
-        },
         "supports-color": {
           "version": "8.1.1",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
@@ -42361,7 +40763,7 @@
     "text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-      "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+      "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
       "dev": true
     },
     "throat": {
@@ -42373,8 +40775,9 @@
     "through": {
       "version": "2.3.8",
       "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
-      "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
-      "dev": true
+      "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+      "dev": true,
+      "optional": true
     },
     "thunky": {
       "version": "1.1.0",
@@ -42385,7 +40788,7 @@
     "timed-out": {
       "version": "4.0.1",
       "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
-      "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+      "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==",
       "dev": true,
       "optional": true
     },
@@ -42399,15 +40802,6 @@
       "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
       "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
     },
-    "tmp": {
-      "version": "0.0.33",
-      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
-      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
-      "dev": true,
-      "requires": {
-        "os-tmpdir": "~1.0.2"
-      }
-    },
     "tmpl": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
@@ -42429,7 +40823,7 @@
     "to-object-path": {
       "version": "0.3.0",
       "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
-      "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+      "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
       "dev": true,
       "requires": {
         "kind-of": "^3.0.2"
@@ -42444,7 +40838,7 @@
         "kind-of": {
           "version": "3.2.2",
           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
           "dev": true,
           "requires": {
             "is-buffer": "^1.1.5"
@@ -42516,7 +40910,7 @@
     "trim-repeated": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
-      "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
+      "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -42543,6 +40937,12 @@
           "requires": {
             "minimist": "^1.2.0"
           }
+        },
+        "strip-bom": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+          "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+          "dev": true
         }
       }
     },
@@ -42567,12 +40967,12 @@
       "dev": true
     },
     "type-check": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
-      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
       "dev": true,
       "requires": {
-        "prelude-ls": "~1.1.2"
+        "prelude-ls": "^1.2.1"
       }
     },
     "type-detect": {
@@ -42582,12 +40982,10 @@
       "dev": true
     },
     "type-fest": {
-      "version": "2.13.1",
-      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.13.1.tgz",
-      "integrity": "sha512-hXYyrPFwETT2swFLHeoKtJrvSF/ftG/sA15/8nGaLuaDGfVAaq8DYFpu4yOyV4tzp082WqnTEoMsm3flKMI2FQ==",
-      "dev": true,
-      "optional": true,
-      "peer": true
+      "version": "0.21.3",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+      "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+      "dev": true
     },
     "type-is": {
       "version": "1.6.18",
@@ -42685,6 +41083,14 @@
         "get-value": "^2.0.6",
         "is-extendable": "^0.1.1",
         "set-value": "^2.0.1"
+      },
+      "dependencies": {
+        "is-extendable": {
+          "version": "0.1.1",
+          "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+          "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+          "dev": true
+        }
       }
     },
     "universal-cookie": {
@@ -42705,13 +41111,13 @@
     "unpipe": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
-      "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
+      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
       "dev": true
     },
     "unset-value": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
-      "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+      "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
       "dev": true,
       "requires": {
         "has-value": "^0.3.1",
@@ -42721,7 +41127,7 @@
         "has-value": {
           "version": "0.3.1",
           "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
-          "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+          "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
           "dev": true,
           "requires": {
             "get-value": "^2.0.3",
@@ -42732,7 +41138,7 @@
             "isobject": {
               "version": "2.1.0",
               "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
-              "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+              "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
               "dev": true,
               "requires": {
                 "isarray": "1.0.0"
@@ -42743,17 +41149,27 @@
         "has-values": {
           "version": "0.1.4",
           "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
-          "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+          "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
           "dev": true
         },
         "isarray": {
           "version": "1.0.0",
           "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
-          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+          "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
           "dev": true
         }
       }
     },
+    "update-browserslist-db": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz",
+      "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==",
+      "dev": true,
+      "requires": {
+        "escalade": "^3.1.1",
+        "picocolors": "^1.0.0"
+      }
+    },
     "uri-js": {
       "version": "4.4.1",
       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -42766,7 +41182,7 @@
     "urix": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
-      "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+      "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
       "dev": true
     },
     "url-loader": {
@@ -42783,7 +41199,7 @@
     "url-parse-lax": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
-      "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+      "integrity": "sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -42793,7 +41209,7 @@
     "url-to-options": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
-      "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=",
+      "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==",
       "dev": true,
       "optional": true
     },
@@ -42823,7 +41239,7 @@
     "util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
       "dev": true
     },
     "utila": {
@@ -42835,7 +41251,7 @@
     "utils-merge": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
-      "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
       "dev": true
     },
     "uuid": {
@@ -42862,9 +41278,9 @@
       },
       "dependencies": {
         "source-map": {
-          "version": "0.7.3",
-          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
-          "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
+          "version": "0.7.4",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+          "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
           "dev": true
         }
       }
@@ -42887,7 +41303,7 @@
     "vary": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-      "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
+      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
       "dev": true
     },
     "verror": {
@@ -42937,9 +41353,9 @@
       }
     },
     "watchpack": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz",
-      "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==",
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
+      "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
       "dev": true,
       "requires": {
         "glob-to-regexp": "^0.4.1",
@@ -42993,12 +41409,6 @@
         "webpack-sources": "^3.2.0"
       },
       "dependencies": {
-        "events": {
-          "version": "3.3.0",
-          "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
-          "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
-          "dev": true
-        },
         "webpack-sources": {
           "version": "3.2.3",
           "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
@@ -43119,38 +41529,6 @@
           "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
           "dev": true
         },
-        "cross-spawn": {
-          "version": "7.0.3",
-          "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
-          "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
-          "dev": true,
-          "requires": {
-            "path-key": "^3.1.0",
-            "shebang-command": "^2.0.0",
-            "which": "^2.0.1"
-          }
-        },
-        "path-key": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
-          "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
-          "dev": true
-        },
-        "shebang-command": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
-          "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
-          "dev": true,
-          "requires": {
-            "shebang-regex": "^3.0.0"
-          }
-        },
-        "shebang-regex": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
-          "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
-          "dev": true
-        },
         "webpack-merge": {
           "version": "5.8.0",
           "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz",
@@ -43160,26 +41538,17 @@
             "clone-deep": "^4.0.1",
             "wildcard": "^2.0.0"
           }
-        },
-        "which": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
-          "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
-          "dev": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
         }
       }
     },
     "webpack-dev-middleware": {
-      "version": "5.3.1",
-      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz",
-      "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==",
+      "version": "5.3.3",
+      "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz",
+      "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==",
       "dev": true,
       "requires": {
         "colorette": "^2.0.10",
-        "memfs": "^3.4.1",
+        "memfs": "^3.4.3",
         "mime-types": "^2.1.31",
         "range-parser": "^1.2.1",
         "schema-utils": "^4.0.0"
@@ -43207,9 +41576,9 @@
           }
         },
         "colorette": {
-          "version": "2.0.16",
-          "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
-          "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
+          "version": "2.0.19",
+          "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
+          "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
           "dev": true
         },
         "json-schema-traverse": {
@@ -43303,15 +41672,15 @@
           "dev": true
         },
         "colorette": {
-          "version": "2.0.16",
-          "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
-          "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
+          "version": "2.0.19",
+          "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz",
+          "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
           "dev": true
         },
         "del": {
-          "version": "6.0.0",
-          "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz",
-          "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==",
+          "version": "6.1.1",
+          "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
+          "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
           "dev": true,
           "requires": {
             "globby": "^11.0.1",
@@ -43338,12 +41707,6 @@
             "slash": "^3.0.0"
           }
         },
-        "ipaddr.js": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz",
-          "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==",
-          "dev": true
-        },
         "is-path-inside": {
           "version": "3.0.3",
           "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
@@ -43402,9 +41765,9 @@
           }
         },
         "ws": {
-          "version": "8.5.0",
-          "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz",
-          "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==",
+          "version": "8.8.1",
+          "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
+          "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
           "dev": true,
           "requires": {}
         }
@@ -43482,9 +41845,9 @@
       }
     },
     "which": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
-      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
       "dev": true,
       "requires": {
         "isexe": "^2.0.0"
@@ -43505,7 +41868,7 @@
     "which-module": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
-      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+      "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==",
       "dev": true
     },
     "wildcard": {
@@ -43562,15 +41925,6 @@
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
       "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
     },
-    "write": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
-      "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
-      "dev": true,
-      "requires": {
-        "mkdirp": "^0.5.1"
-      }
-    },
     "write-file-atomic": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
@@ -43584,9 +41938,9 @@
       }
     },
     "ws": {
-      "version": "7.5.7",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
-      "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==",
+      "version": "7.5.9",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
+      "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
       "dev": true,
       "requires": {}
     },
@@ -43602,15 +41956,6 @@
       "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
       "dev": true
     },
-    "xregexp": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.4.1.tgz",
-      "integrity": "sha512-2u9HwfadaJaY9zHtRRnH6BY6CQVNQKkYm3oLtC9gJXXzfsbACg5X5e4EZZGVAH+YIfa+QA9lsFQTTe3HURF3ag==",
-      "dev": true,
-      "requires": {
-        "@babel/runtime-corejs3": "^7.12.1"
-      }
-    },
     "xtend": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
@@ -43625,10 +41970,11 @@
       "dev": true
     },
     "yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+      "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
+      "dev": true,
+      "optional": true
     },
     "yaml": {
       "version": "1.10.2",
@@ -43659,7 +42005,7 @@
     "yauzl": {
       "version": "2.10.0",
       "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
-      "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
+      "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
       "dev": true,
       "optional": true,
       "requires": {
diff --git a/package.json b/package.json
index 6d8c540825..4f4133403f 100644
--- a/package.json
+++ b/package.json
@@ -53,7 +53,7 @@
     "universal-cookie": "4.0.4"
   },
   "devDependencies": {
-    "@edx/frontend-build": "11.0.2",
+    "@edx/frontend-build": "^12.0.3",
     "@testing-library/jest-dom": "5.11.9",
     "@testing-library/react": "11.2.7",
     "@testing-library/react-hooks": "3.7.0",

From 86e15db0030cd8f273b8e6af571d24dfdc16c81a Mon Sep 17 00:00:00 2001
From: Bilal Qamar <59555732+BilalQamar95@users.noreply.github.com>
Date: Thu, 4 Aug 2022 13:15:40 +0500
Subject: [PATCH 02/13] refactor: resolved eslint issues

---
 .eslintrc.js                                  |   1 +
 src/components/NotFoundPage/index.jsx         |   4 +-
 src/components/TagCloud/index.jsx             |   9 +-
 src/components/Toasts/ToastsProvider.jsx      |   4 +-
 .../app/EnterpriseAppPageRoutes.jsx           |   8 +-
 src/components/app/LoginRefresh.test.jsx      |  28 +-
 src/components/contact-admin-mailto/index.jsx |   6 +-
 .../course/CourseAssociatedPrograms.jsx       |   6 +-
 .../course/CourseEnrollmentFailedAlert.jsx    |  18 +-
 .../course/CourseRecommendationCard.jsx       |   4 +-
 .../course/CourseRecommendations.jsx          |   4 +-
 src/components/course/CourseRunCard.jsx       |   6 +-
 src/components/course/CourseRunCards.jsx      |   4 +-
 src/components/course/CourseSidebarPrice.jsx  |   4 +-
 src/components/course/EnrollModal.jsx         |  12 +-
 .../course/LicenseRequestedAlert.jsx          |   4 +-
 .../course/SubsidyRequestButton.jsx           |   4 +-
 .../course/enrollment/EnrollAction.jsx        |   6 +-
 src/components/course/enrollment/common.jsx   |  30 +-
 .../enrollment/components/DisabledEnroll.jsx  |  16 +-
 .../components/ToCoursewarePage.jsx           |   6 +-
 .../components/ToDataSharingConsent.jsx       |   4 +-
 .../components/ToEcomBasketPage.jsx           |   4 +-
 .../enrollment/components/ViewOnDashboard.jsx |   4 +-
 .../enrollment/tests/EnrollAction.test.jsx    |   7 +-
 .../course/enrollment/tests/hooks.test.jsx    |  22 +-
 .../tests/CourseAssociatedPrograms.test.jsx   |  18 +-
 .../tests/CourseContextProvider.test.jsx      |  18 +-
 .../CourseEnrollmentFailedAlert.test.jsx      |  18 +-
 .../course/tests/CourseHeader.test.jsx        |  38 +-
 .../tests/CourseRecommendationCard.test.jsx   |  12 +-
 .../tests/CourseRecommendations.test.jsx      |  16 +-
 .../course/tests/CourseRunCard.test.jsx       |  14 +-
 .../course/tests/CourseSidebarPrice.test.jsx  |  26 +-
 .../course/tests/CourseSkills.test.jsx        |  22 +-
 .../course/tests/CreatedBy.test.jsx           |  16 +-
 .../course/tests/EnrollModal.test.jsx         |  22 +-
 .../tests/LicenseRequestedAlert.test.jsx      |  62 ++--
 .../tests/SubsidyRequestButton.test.jsx       |  22 +-
 .../dashboard/SubscriptionExpirationModal.jsx |  12 +-
 .../main-content/DashboardMainContent.jsx     |   4 +-
 .../main-content/DashboardPopularCourses.jsx  |   4 +-
 .../course-enrollments/CollapsibleIcon.jsx    |  16 +-
 .../course-enrollments/CourseEnrollments.jsx  |  24 +-
 .../CourseEnrollmentsAlert.jsx                |   6 +-
 .../CourseEnrollmentsContextProvider.jsx      |   4 +-
 .../course-enrollments/CourseSection.jsx      |   2 +-
 ...adeableCourseEnrollmentContextProvider.jsx |   4 +-
 .../course-cards/CompletedCourseCard.jsx      |   4 +-
 .../course-cards/InProgressCourseCard.jsx     |   6 +-
 .../course-cards/Notification.jsx             |  50 +--
 .../course-cards/RequestedCourseCard.jsx      |  16 +-
 .../course-cards/SavedForLaterCourseCard.jsx  |   4 +-
 .../course-cards/UpcomingCourseCard.jsx       |   4 +-
 .../email-settings/EmailSettingsModal.jsx     |   4 +-
 .../mark-complete-modal/MarkCompleteModal.jsx |   6 +-
 .../mark-complete-modal/ModalBody.jsx         |   4 +-
 .../mark-complete-modal/ModalError.jsx        |   4 +-
 .../move-to-in-progress-modal/ModalBody.jsx   |   4 +-
 .../move-to-in-progress-modal/ModalError.jsx  |   4 +-
 .../MoveToInProgressModal.jsx                 |   6 +-
 .../unenroll/UnenrollModal.test.jsx           |  18 +-
 .../tests/CourseSection.test.jsx              |  26 +-
 .../sidebar/CouponCodesSummaryCard.jsx        |   6 +-
 .../dashboard/sidebar/DashboardSidebar.jsx    |  22 +-
 .../sidebar/EnterpriseOffersSummaryCard.jsx   |  78 +++--
 .../dashboard/sidebar/SidebarCard.jsx         |  24 +-
 .../sidebar/SubscriptionSummaryCard.jsx       |   6 +-
 .../dashboard/sidebar/SubsidiesSummary.jsx    |   6 +-
 .../dashboard/sidebar/SupportInformation.jsx  |   4 +-
 .../sidebar/tests/DashboardSidebar.test.jsx   |  26 +-
 .../tests/SubscriptionSummaryCard.test.jsx    |  16 +-
 .../dashboard/tests/DashboardPage.test.jsx    |  38 +-
 .../EnterpriseInvitePage.jsx                  |   4 +-
 .../enterprise-page/EnterprisePage.test.jsx   |   4 +-
 .../EnterpriseCustomerRedirect.jsx            |   4 +-
 .../EnterprisePageRedirect.jsx                |   4 +-
 .../tests/EnterpriseCustomerRedirect.test.jsx |  14 +-
 .../tests/EnterprisePageRedirect.test.jsx     |  14 +-
 .../SubsidyRequestsContextProvider.jsx        |   4 +-
 .../SubsidyRequestsContextProvider.test.jsx   |  22 +-
 .../AutoActivateLicense.jsx                   |   4 +-
 .../enterprise-user-subsidy/UserSubsidy.jsx   |   4 +-
 .../enterprise-user-subsidy/data/hooks.js     |  14 +-
 .../EnterpriseOffersBalanceAlert.jsx          |   4 +-
 .../EnterpriseOffersBalanceAlert.test.jsx     |  24 +-
 .../tests/AutoActivateLicense.test.jsx        |  28 +-
 .../tests/UserSubsidy.test.jsx                |  44 +--
 src/components/error-page/ErrorPage.jsx       |  42 +--
 src/components/error-page/ErrorPage.test.jsx  |   4 +-
 src/components/error-page/ErrorPageHeader.jsx |   4 +-
 .../IntegrationWarningModal.jsx               |   6 +-
 .../integration-warning-modal/ModalBody.jsx   |  20 +-
 src/components/layout/MainContent.jsx         |  12 +-
 src/components/layout/Sidebar.jsx             |  12 +-
 src/components/layout/SidebarBlock.jsx        |   6 +-
 .../license-activation/LicenseActivation.jsx  |   4 +-
 .../LicenseActivationErrorAlert.jsx           |  26 +-
 .../LicenseActivationPage.jsx                 |   4 +-
 .../tests/LicenseActivation.test.jsx          |  80 ++---
 .../tests/LicenseActivationPage.test.jsx      |  38 +-
 .../loading-spinner/LoadingSpinner.jsx        |  14 +-
 src/components/pathway/PathwayModal.jsx       |  16 +-
 src/components/pathway/SearchPathwayCard.jsx  |  10 +-
 .../pathway/tests/PathwayModal.test.jsx       |  20 +-
 .../pathway/tests/SearchPathwayCard.test.jsx  |  20 +-
 .../CouponCodesWarningModal.jsx               |   4 +-
 .../program-progress/ProgramListingCard.jsx   |   4 +-
 .../program-progress/ProgramListingPage.jsx   |  34 +-
 .../ProgramPathwayOpportunity.jsx             |  54 +--
 .../ProgramProgressCircle.jsx                 |  10 +-
 .../ProgramProgressCourses.jsx                |   4 +-
 .../ProgramProgressHeader.jsx                 |  60 ++--
 .../program-progress/ProgramProgressPage.jsx  |   4 +-
 .../ProgramProgressSidebar.jsx                |   4 +-
 .../SubscriptionExpiringWarningModal.jsx      |   6 +-
 .../tests/ProgramListingCard.test.jsx         |  16 +-
 .../tests/ProgramListingPage.test.jsx         |  22 +-
 .../tests/ProgramProgressCircle.test.jsx      |  14 +-
 .../tests/ProgramProgressCourses.test.jsx     |  22 +-
 .../tests/ProgramProgressHeader.test.jsx      |  14 +-
 .../tests/ProgramProgressSidebar.test.jsx     |  14 +-
 src/components/program/BulletList.jsx         |  20 +-
 src/components/program/ProgramCourses.jsx     |   4 +-
 src/components/program/ProgramDataBar.jsx     |   4 +-
 .../program/ProgramDataBarDetails.jsx         |   4 +-
 .../program/ProgramEndorsements.jsx           |   4 +-
 src/components/program/ProgramHeader.jsx      |   4 +-
 src/components/program/ProgramInstructors.jsx |   8 +-
 src/components/program/ProgramMainContent.jsx |   4 +-
 src/components/program/ProgramPage.jsx        |   4 +-
 src/components/program/ProgramSidebar.jsx     |  74 ++--
 .../program/tests/ProgramCTA.test.jsx         |  26 +-
 .../program/tests/ProgramCourses.test.jsx     |  22 +-
 .../program/tests/ProgramDataBar.test.jsx     |  20 +-
 .../tests/ProgramEndorsements.test.jsx        |  22 +-
 .../program/tests/ProgramFAQ.test.jsx         |  22 +-
 .../program/tests/ProgramHeader.test.jsx      |  22 +-
 .../program/tests/ProgramInstructors.test.jsx |  12 +-
 .../program/tests/ProgramMainContent.test.jsx |  22 +-
 .../program/tests/ProgramPage.test.jsx        |  22 +-
 .../program/tests/ProgramSidebar.test.jsx     |  22 +-
 src/components/search/Search.jsx              |   4 +-
 src/components/search/SearchCourse.jsx        |   4 +-
 src/components/search/SearchCourseCard.jsx    |  10 +-
 src/components/search/SearchError.jsx         |   4 +-
 src/components/search/SearchNoResults.jsx     |   4 +-
 src/components/search/SearchPage.jsx          |  12 +-
 src/components/search/SearchPathway.jsx       |   4 +-
 src/components/search/SearchProgram.jsx       |   4 +-
 src/components/search/SearchProgramCard.jsx   |  10 +-
 src/components/search/SearchResults.jsx       |   6 +-
 .../search/data/tests/hooks.test.jsx          |   5 +-
 .../search/popular-results/PopularResults.jsx |   6 +-
 .../popular-results/PopularResultsIndex.jsx   |   4 +-
 .../search/tests/SearchCourseCard.test.jsx    |  20 +-
 .../search/tests/SearchProgramCard.test.jsx   |  20 +-
 .../search/tests/SearchResults.test.jsx       |  24 +-
 src/components/site-header/AvatarDropdown.jsx |   4 +-
 src/components/site-header/SiteHeader.jsx     |   8 +-
 .../site-header/tests/SiteHeader.test.jsx     |  14 +-
 .../skills-quiz/CardLoadingSkeleton.jsx       |  64 ++--
 src/components/skills-quiz/CourseCard.jsx     |   6 +-
 .../skills-quiz/CurrentJobDropdown.jsx        |   4 +-
 src/components/skills-quiz/GoalDropdown.jsx   |   4 +-
 .../skills-quiz/JobCardComponent.jsx          |   4 +-
 .../skills-quiz/SearchCourseCard.jsx          |   4 +-
 .../skills-quiz/SearchCurrentJobCard.jsx      |  22 +-
 src/components/skills-quiz/SearchJobCard.jsx  |  22 +-
 .../skills-quiz/SearchJobDropdown.jsx         |   4 +-
 src/components/skills-quiz/SearchPathways.jsx |   4 +-
 .../skills-quiz/SearchProgramCard.jsx         |   4 +-
 src/components/skills-quiz/SelectJobCard.jsx  |   4 +-
 .../skills-quiz/SelectedJobSkills.jsx         |   4 +-
 src/components/skills-quiz/SkillsCourses.jsx  |   4 +-
 src/components/skills-quiz/SkillsDropDown.jsx |   4 +-
 src/components/skills-quiz/SkillsQuiz.jsx     |   4 +-
 .../skills-quiz/SkillsQuizHeader.jsx          |  28 +-
 .../skills-quiz/SkillsQuizStepper.jsx         | 324 +++++++++---------
 .../__mocks__/react-instantsearch-dom.jsx     |  98 +++---
 .../skills-quiz/data/tests/hooks.test.jsx     |  16 +-
 .../skills-quiz/tests/GoalsDropdown.test.jsx  |  22 +-
 .../tests/SearchCourseCard.test.jsx           |  30 +-
 .../tests/SearchCurrentJobCard.test.jsx       |  22 +-
 .../skills-quiz/tests/SearchJobCard.test.jsx  |  22 +-
 .../skills-quiz/tests/SearchPathways.test.jsx |  30 +-
 .../tests/SearchProgramCard.test.jsx          |  30 +-
 .../skills-quiz/tests/SelectJobCard.test.jsx  |  22 +-
 .../tests/SelectedJobSkills.test.jsx          |  22 +-
 .../skills-quiz/tests/SkillsCourses.test.jsx  |  30 +-
 .../skills-quiz/tests/SkillsQuiz.test.jsx     |  22 +-
 .../SystemWideWarningBanner.jsx               |  14 +-
 src/utils/tests.jsx                           |   6 +-
 193 files changed, 1691 insertions(+), 1525 deletions(-)

diff --git a/.eslintrc.js b/.eslintrc.js
index 28e19bd40c..5b2737cbbd 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,3 +1,4 @@
+// eslint-disable-next-line import/no-extraneous-dependencies
 const { getBaseConfig } = require('@edx/frontend-build');
 
 const config = getBaseConfig('eslint');
diff --git a/src/components/NotFoundPage/index.jsx b/src/components/NotFoundPage/index.jsx
index 24e71abe42..7eda7aa0e0 100644
--- a/src/components/NotFoundPage/index.jsx
+++ b/src/components/NotFoundPage/index.jsx
@@ -4,7 +4,7 @@ import { Helmet } from 'react-helmet';
 import { AppContext } from '@edx/frontend-platform/react';
 import { Container } from '@edx/paragon';
 
-const NotFoundPage = ({ pageTitle, errorHeading, errorMessage }) => {
+function NotFoundPage({ pageTitle, errorHeading, errorMessage }) {
   const { enterpriseConfig } = useContext(AppContext);
 
   let PAGE_TITLE = pageTitle;
@@ -22,7 +22,7 @@ const NotFoundPage = ({ pageTitle, errorHeading, errorMessage }) => {
       </div>
     </Container>
   );
-};
+}
 
 NotFoundPage.defaultProps = {
   pageTitle: 'Page not found',
diff --git a/src/components/TagCloud/index.jsx b/src/components/TagCloud/index.jsx
index 6e4defe7fc..3f8f0c736e 100644
--- a/src/components/TagCloud/index.jsx
+++ b/src/components/TagCloud/index.jsx
@@ -3,8 +3,8 @@ import PropTypes from 'prop-types';
 
 import './styles/TagCloud.scss';
 
-const TagCloud = ({ tags, onRemove }) => (
-  <>
+function TagCloud({ tags, onRemove }) {
+  return (
     <div className="skills-tag">
       <ul className="item">
         {
@@ -19,9 +19,8 @@ const TagCloud = ({ tags, onRemove }) => (
         }
       </ul>
     </div>
-
-  </>
-);
+  );
+}
 
 TagCloud.propTypes = {
   onRemove: PropTypes.func.isRequired,
diff --git a/src/components/Toasts/ToastsProvider.jsx b/src/components/Toasts/ToastsProvider.jsx
index 47a1d77e44..243dbd4fc5 100644
--- a/src/components/Toasts/ToastsProvider.jsx
+++ b/src/components/Toasts/ToastsProvider.jsx
@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
 
 export const ToastsContext = createContext();
 
-const ToastsProvider = ({ children }) => {
+function ToastsProvider({ children }) {
   const [toasts, setToasts] = useState([]);
 
   const addToast = (message) => {
@@ -30,7 +30,7 @@ const ToastsProvider = ({ children }) => {
       {children}
     </ToastsContext.Provider>
   );
-};
+}
 
 ToastsProvider.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/app/EnterpriseAppPageRoutes.jsx b/src/components/app/EnterpriseAppPageRoutes.jsx
index b026928e35..4d77597c24 100644
--- a/src/components/app/EnterpriseAppPageRoutes.jsx
+++ b/src/components/app/EnterpriseAppPageRoutes.jsx
@@ -11,8 +11,8 @@ import AuthenticatedUserSubsidyPage from './AuthenticatedUserSubsidyPage';
 import { features } from '../../config';
 import { LicenseActivationPage } from '../license-activation';
 
-const EnterpriseAppPageRoutes = () => (
-  <>
+function EnterpriseAppPageRoutes() {
+  return (
     <AuthenticatedUserSubsidyPage>
       <PageRoute exact path="/:enterpriseSlug" component={DashboardPage} />
       <PageRoute
@@ -28,7 +28,7 @@ const EnterpriseAppPageRoutes = () => (
       <PageRoute exact path="/:enterpriseSlug/skills-quiz" component={SkillsQuizPage} />
       <PageRoute exact path="/:enterpriseSlug/licenses/:activationKey/activate" component={LicenseActivationPage} />
     </AuthenticatedUserSubsidyPage>
-  </>
-);
+  );
+}
 
 export default EnterpriseAppPageRoutes;
diff --git a/src/components/app/LoginRefresh.test.jsx b/src/components/app/LoginRefresh.test.jsx
index 738174c5c2..3c07ed6435 100644
--- a/src/components/app/LoginRefresh.test.jsx
+++ b/src/components/app/LoginRefresh.test.jsx
@@ -9,19 +9,21 @@ import * as utils from '../../utils/common';
 jest.mock('../../utils/common');
 
 // eslint-disable-next-line react/prop-types
-const LoginRefreshWithContext = ({ roles = [] }) => (
-  <AppContext.Provider value={{
-    authenticatedUser: {
-      userId: 1,
-      roles,
-    },
-  }}
-  >
-    <LoginRefresh>
-      <div>Hello!</div>
-    </LoginRefresh>
-  </AppContext.Provider>
-); /* eslint-enable react/prop-types */
+function LoginRefreshWithContext({ roles = [] }) {
+  return (
+    <AppContext.Provider value={{
+      authenticatedUser: {
+        userId: 1,
+        roles,
+      },
+    }}
+    >
+      <LoginRefresh>
+        <div>Hello!</div>
+      </LoginRefresh>
+    </AppContext.Provider>
+  );
+} /* eslint-enable react/prop-types */
 
 describe('<LoginRefresh />', () => {
   it('should call loginRefresh if the user has no roles', async () => {
diff --git a/src/components/contact-admin-mailto/index.jsx b/src/components/contact-admin-mailto/index.jsx
index bb62606ce9..be6c3fd84b 100644
--- a/src/components/contact-admin-mailto/index.jsx
+++ b/src/components/contact-admin-mailto/index.jsx
@@ -3,9 +3,9 @@ import { AppContext } from '@edx/frontend-platform/react';
 import { MailtoLink } from '@edx/paragon';
 import PropTypes from 'prop-types';
 
-const ContactAdminMailto = ({
+function ContactAdminMailto({
   children,
-}) => {
+}) {
   const { enterpriseConfig: { adminUsers } } = useContext(AppContext);
   const adminEmails = adminUsers.map(user => user.email);
 
@@ -21,7 +21,7 @@ const ContactAdminMailto = ({
   }
 
   return children;
-};
+}
 
 ContactAdminMailto.propTypes = {
   children: PropTypes.node,
diff --git a/src/components/course/CourseAssociatedPrograms.jsx b/src/components/course/CourseAssociatedPrograms.jsx
index f6cc74313a..84f1ca93f6 100644
--- a/src/components/course/CourseAssociatedPrograms.jsx
+++ b/src/components/course/CourseAssociatedPrograms.jsx
@@ -37,12 +37,14 @@ export default function CourseAssociatedPrograms() {
                   : program.marketingUrl}
                 target="_blank"
                 onClick={() => {
-                  sendEnterpriseTrackEvent(enterpriseConfig.uuid,
+                  sendEnterpriseTrackEvent(
+                    enterpriseConfig.uuid,
                     'edx.ui.enterprise.learner_portal.course.sidebar.program.clicked',
                     {
                       program_title: program.title,
                       program_type: program.type,
-                    });
+                    },
+                  );
                 }}
               >
                 {program.title}
diff --git a/src/components/course/CourseEnrollmentFailedAlert.jsx b/src/components/course/CourseEnrollmentFailedAlert.jsx
index 67b1247653..d1b63603f0 100644
--- a/src/components/course/CourseEnrollmentFailedAlert.jsx
+++ b/src/components/course/CourseEnrollmentFailedAlert.jsx
@@ -67,7 +67,7 @@ const createUpgradeFailureMessages = (contactHelpText, enrollmentSource) => ({
  * reasons. The contents of the alert are determined by a ``failureReason`` which is passed
  * from the Data Sharing Consent (DSC) page as a query parameter.
  */
-const CourseEnrollmentFailedAlert = ({ className, enrollmentSource }) => {
+function CourseEnrollmentFailedAlert({ className, enrollmentSource }) {
   const { search } = useLocation();
   const { enterpriseConfig } = useContext(AppContext);
   const renderContactHelpText = useRenderContactHelpText(enterpriseConfig);
@@ -92,12 +92,14 @@ const CourseEnrollmentFailedAlert = ({ className, enrollmentSource }) => {
     [courseEnrollmentsByStatus, courseRunKey],
   );
 
-  const failureReasonMessages = useMemo(() => {
-    const contactHelpText = renderContactHelpText(Alert.Link);
-    return isUpgradeAttempt ? createUpgradeFailureMessages(contactHelpText, enrollmentSource)
-      : createEnrollmentFailureMessages(contactHelpText);
-  },
-  [enrollmentSource, isUpgradeAttempt, renderContactHelpText]);
+  const failureReasonMessages = useMemo(
+    () => {
+      const contactHelpText = renderContactHelpText(Alert.Link);
+      return isUpgradeAttempt ? createUpgradeFailureMessages(contactHelpText, enrollmentSource)
+        : createEnrollmentFailureMessages(contactHelpText);
+    },
+    [enrollmentSource, isUpgradeAttempt, renderContactHelpText],
+  );
 
   if (!hasEnrollmentFailed) {
     return null;
@@ -110,7 +112,7 @@ const CourseEnrollmentFailedAlert = ({ className, enrollmentSource }) => {
       </Alert>
     </Container>
   );
-};
+}
 
 CourseEnrollmentFailedAlert.defaultProps = {
   className: 'mt-3',
diff --git a/src/components/course/CourseRecommendationCard.jsx b/src/components/course/CourseRecommendationCard.jsx
index 2083181758..042bb01341 100644
--- a/src/components/course/CourseRecommendationCard.jsx
+++ b/src/components/course/CourseRecommendationCard.jsx
@@ -11,7 +11,7 @@ import { getPrimaryPartnerLogo, isDefinedAndNotNull } from '../../utils/common';
 export const COURSE_REC_EVENT_NAME = 'edx.ui.enterprise.learner_portal.recommended.course.clicked';
 export const SAME_PART_EVENT_NAME = 'edx.ui.enterprise.learner_portal.same.partner.recommended.course.clicked';
 
-const CourseRecommendationCard = ({ course, isPartnerRecommendation }) => {
+function CourseRecommendationCard({ course, isPartnerRecommendation }) {
   const { enterpriseConfig: { slug, uuid } } = useContext(AppContext);
   const eventName = isPartnerRecommendation ? SAME_PART_EVENT_NAME : COURSE_REC_EVENT_NAME;
   const history = useHistory();
@@ -87,7 +87,7 @@ const CourseRecommendationCard = ({ course, isPartnerRecommendation }) => {
       </Card.Footer>
     </Card>
   );
-};
+}
 
 CourseRecommendationCard.propTypes = {
   course: PropTypes.shape({
diff --git a/src/components/course/CourseRecommendations.jsx b/src/components/course/CourseRecommendations.jsx
index 83eea0b585..1924d78935 100644
--- a/src/components/course/CourseRecommendations.jsx
+++ b/src/components/course/CourseRecommendations.jsx
@@ -3,7 +3,7 @@ import { CardGrid } from '@edx/paragon';
 import { CourseContext } from './CourseContextProvider';
 import CourseRecommendationCard from './CourseRecommendationCard';
 
-const CourseRecommendations = () => {
+function CourseRecommendations() {
   const { state } = useContext(CourseContext);
   const { course, courseRecommendations } = state;
   const { allRecommendations, samePartnerRecommendations } = courseRecommendations;
@@ -36,6 +36,6 @@ const CourseRecommendations = () => {
       )}
     </div>
   );
-};
+}
 
 export default CourseRecommendations;
diff --git a/src/components/course/CourseRunCard.jsx b/src/components/course/CourseRunCard.jsx
index f917d6b3b4..874b6880f8 100644
--- a/src/components/course/CourseRunCard.jsx
+++ b/src/components/course/CourseRunCard.jsx
@@ -32,13 +32,13 @@ import { SubsidyRequestsContext } from '../enterprise-subsidy-requests/SubsidyRe
 const DATE_FORMAT = 'MMM D';
 const DEFAULT_BUTTON_LABEL = 'Enroll';
 
-const CourseRunCard = ({
+function CourseRunCard({
   userEntitlements,
   courseRun,
   userEnrollments,
   courseKey,
   subsidyRequestCatalogsApplicableToCourse,
-}) => {
+}) {
   const {
     availability,
     pacingType,
@@ -224,7 +224,7 @@ const CourseRunCard = ({
       </Card.Section>
     </Card>
   );
-};
+}
 
 CourseRunCard.propTypes = {
   courseKey: PropTypes.string.isRequired,
diff --git a/src/components/course/CourseRunCards.jsx b/src/components/course/CourseRunCards.jsx
index 1e8baf2f5e..65f0f11451 100644
--- a/src/components/course/CourseRunCards.jsx
+++ b/src/components/course/CourseRunCards.jsx
@@ -6,7 +6,7 @@ import {
 import { CourseContext } from './CourseContextProvider';
 import CourseRunCard from './CourseRunCard';
 
-const CourseRunCards = () => {
+function CourseRunCards() {
   const {
     state: courseData,
     subsidyRequestCatalogsApplicableToCourse,
@@ -35,6 +35,6 @@ const CourseRunCards = () => {
       ))}
     </CardGrid>
   );
-};
+}
 
 export default CourseRunCards;
diff --git a/src/components/course/CourseSidebarPrice.jsx b/src/components/course/CourseSidebarPrice.jsx
index 3adec9daf5..410a6acd29 100644
--- a/src/components/course/CourseSidebarPrice.jsx
+++ b/src/components/course/CourseSidebarPrice.jsx
@@ -19,7 +19,7 @@ export const FREE_WHEN_APPROVED_MESSAGE = 'Free to me\n(when approved)';
 export const COVERED_BY_ENTERPRISE_OFFER_MESSAGE = 'This course can be purchased with your organization\'s learner credit';
 export const INSUFFICIENT_ENTERPRISE_OFFER_BALANCE = 'Your organization doesn\'t have enough learner credit remaining.';
 
-const CourseSidebarPrice = () => {
+function CourseSidebarPrice() {
   const { enterpriseConfig } = useContext(AppContext);
   const { state: courseData } = useContext(CourseContext);
   const { activeCourseRun, userSubsidyApplicableToCourse } = courseData;
@@ -117,6 +117,6 @@ const CourseSidebarPrice = () => {
       <small>{discountedPriceMessage}</small>
     </>
   );
-};
+}
 
 export default CourseSidebarPrice;
diff --git a/src/components/course/EnrollModal.jsx b/src/components/course/EnrollModal.jsx
index 8666216ad5..5429e7f2cd 100644
--- a/src/components/course/EnrollModal.jsx
+++ b/src/components/course/EnrollModal.jsx
@@ -41,14 +41,14 @@ export const MODAL_TEXTS = {
   },
 };
 
-const EnrollModal = ({
+function EnrollModal({
   isModalOpen,
   setIsModalOpen,
   enrollmentUrl,
   courseRunPrice,
   userSubsidyApplicableToCourse,
   couponCodesCount,
-}) => {
+}) {
   const {
     state: {
       activeCourseRun: { key: courseRunKey },
@@ -116,16 +116,14 @@ const EnrollModal = ({
           href={enrollmentUrl}
           onClick={handleEnroll}
         >
-          <>
-            {isLoading && <FontAwesomeIcon icon={faSpinner} alt="loading" className="fa-spin mr-2" />}
-            {buttonText}
-          </>
+          {isLoading && <FontAwesomeIcon icon={faSpinner} alt="loading" className="fa-spin mr-2" />}
+          {buttonText}
         </a>,
       ]}
       onClose={() => setIsModalOpen(false)}
     />
   );
-};
+}
 
 EnrollModal.propTypes = {
   isModalOpen: PropTypes.bool.isRequired,
diff --git a/src/components/course/LicenseRequestedAlert.jsx b/src/components/course/LicenseRequestedAlert.jsx
index 4bd0798e99..4dabc3f67a 100644
--- a/src/components/course/LicenseRequestedAlert.jsx
+++ b/src/components/course/LicenseRequestedAlert.jsx
@@ -15,7 +15,7 @@ import { UserSubsidyContext } from '../enterprise-user-subsidy/UserSubsidy';
  * A component to render an alert when a learner has a license request that is pending review.
  * Once dismissed, the learner will not see this alert again until the cookies are cleared.
  */
-const LicenseRequestedAlert = ({ catalogList }) => {
+function LicenseRequestedAlert({ catalogList }) {
   const cookies = new Cookies();
   const previouslyDismissed = cookies.get(LICENSE_REQUESTED_ALERT_DISMISSED_COOKIE_NAME);
   const [isAlertOpen, setIsAlertOpen] = useState(!previouslyDismissed);
@@ -56,7 +56,7 @@ const LicenseRequestedAlert = ({ catalogList }) => {
       </Alert>
     </Container>
   );
-};
+}
 
 LicenseRequestedAlert.propTypes = {
   catalogList: PropTypes.arrayOf(PropTypes.string).isRequired,
diff --git a/src/components/course/SubsidyRequestButton.jsx b/src/components/course/SubsidyRequestButton.jsx
index 62630fece2..b26a0b6905 100644
--- a/src/components/course/SubsidyRequestButton.jsx
+++ b/src/components/course/SubsidyRequestButton.jsx
@@ -24,7 +24,7 @@ const props = {
   className: 'mb-4 mt-1',
 };
 
-const SubsidyRequestButton = ({ enterpriseSlug }) => {
+function SubsidyRequestButton({ enterpriseSlug }) {
   const history = useHistory();
   const { addToast } = useContext(ToastsContext);
   const [loadingRequest, setLoadingRequest] = useState(false);
@@ -122,7 +122,7 @@ const SubsidyRequestButton = ({ enterpriseSlug }) => {
   return (
     <StatefulButton {...props} state={getButtonState()} onClick={handleRequestButtonClick} />
   );
-};
+}
 
 SubsidyRequestButton.propTypes = {
   enterpriseSlug: PropTypes.string.isRequired,
diff --git a/src/components/course/enrollment/EnrollAction.jsx b/src/components/course/enrollment/EnrollAction.jsx
index b153e82321..3209e8230c 100644
--- a/src/components/course/enrollment/EnrollAction.jsx
+++ b/src/components/course/enrollment/EnrollAction.jsx
@@ -29,14 +29,14 @@ const {
  * @param {string} args.userEnrollment enrollment if applicable, or null.
  * @param {string} args.subscriptionLicense user license if applicable, or null.
  */
-const EnrollAction = ({
+function EnrollAction({
   enrollmentType,
   enrollmentUrl,
   enrollLabel,
   userEnrollment,
   subscriptionLicense,
   courseRunPrice,
-}) => {
+}) {
   switch (enrollmentType) {
     case TO_COURSEWARE_PAGE: // scenario 1: already enrolled
         return (
@@ -69,7 +69,7 @@ const EnrollAction = ({
       case HIDE_BUTTON:
       default: return null;
   }
-};
+}
 
 EnrollAction.propTypes = {
   enrollmentType: PropTypes.string.isRequired,
diff --git a/src/components/course/enrollment/common.jsx b/src/components/course/enrollment/common.jsx
index e26332e804..c17da13751 100644
--- a/src/components/course/enrollment/common.jsx
+++ b/src/components/course/enrollment/common.jsx
@@ -5,17 +5,19 @@ import { Button } from '@edx/paragon';
 // Common UI components for enrollment to avoid duplication, consistent styling etc.
 // Each enroll component can use the EnrollButtonCta to render the enroll behavior
 
-const EnrollButtonWrapper = ({
+function EnrollButtonWrapper({
   as: Component,
   children,
   ...props
-}) => (
-  <div>
-    <Component {...props}>
-      {children}
-    </Component>
-  </div>
-);
+}) {
+  return (
+    <div>
+      <Component {...props}>
+        {children}
+      </Component>
+    </div>
+  );
+}
 
 EnrollButtonWrapper.propTypes = {
   children: PropTypes.node.isRequired,
@@ -26,11 +28,13 @@ EnrollButtonWrapper.defaultProps = {
   as: Button,
 };
 
-const EnrollButtonCta = ({ enrollLabel: EnrollLabel, ...props }) => (
-  <EnrollButtonWrapper {...props}>
-    {EnrollLabel}
-  </EnrollButtonWrapper>
-);
+function EnrollButtonCta({ enrollLabel: EnrollLabel, ...props }) {
+  return (
+    <EnrollButtonWrapper {...props}>
+      {EnrollLabel}
+    </EnrollButtonWrapper>
+  );
+}
 
 EnrollButtonCta.propTypes = { enrollLabel: PropTypes.node.isRequired };
 
diff --git a/src/components/course/enrollment/components/DisabledEnroll.jsx b/src/components/course/enrollment/components/DisabledEnroll.jsx
index b619d9f7b9..5243cac42d 100644
--- a/src/components/course/enrollment/components/DisabledEnroll.jsx
+++ b/src/components/course/enrollment/components/DisabledEnroll.jsx
@@ -3,13 +3,15 @@ import PropTypes from 'prop-types';
 
 import { EnrollButtonCta } from '../common';
 
-const EnrollBtnDisabled = ({ enrollLabel }) => (
-  <EnrollButtonCta
-    enrollLabel={enrollLabel}
-    as="div"
-    className="btn btn-light btn-block disabled d-block"
-  />
-);
+function EnrollBtnDisabled({ enrollLabel }) {
+  return (
+    <EnrollButtonCta
+      enrollLabel={enrollLabel}
+      as="div"
+      className="btn btn-light btn-block disabled d-block"
+    />
+  );
+}
 
 EnrollBtnDisabled.propTypes = {
   enrollLabel: PropTypes.node.isRequired,
diff --git a/src/components/course/enrollment/components/ToCoursewarePage.jsx b/src/components/course/enrollment/components/ToCoursewarePage.jsx
index 524c18b033..f8cbf038ea 100644
--- a/src/components/course/enrollment/components/ToCoursewarePage.jsx
+++ b/src/components/course/enrollment/components/ToCoursewarePage.jsx
@@ -13,9 +13,9 @@ import { enrollLinkClass } from '../constants';
  * Renders a hyperlink to the course info url (or enrollment url)
  * Uses the passed in enroll label as the Label shown along with enroll link
  */
-const ToCoursewarePage = ({
+function ToCoursewarePage({
   enrollLabel, enrollmentUrl, userEnrollment, subscriptionLicense,
-}) => {
+}) {
   const shouldUseEnrollmentUrl = shouldUpgradeUserEnrollment({
     userEnrollment,
     subscriptionLicense,
@@ -36,7 +36,7 @@ const ToCoursewarePage = ({
       onClick={handleClick}
     />
   );
-};
+}
 
 ToCoursewarePage.propTypes = {
   enrollLabel: PropTypes.node.isRequired,
diff --git a/src/components/course/enrollment/components/ToDataSharingConsent.jsx b/src/components/course/enrollment/components/ToDataSharingConsent.jsx
index 0b1c87e0dc..d7ec75a06f 100644
--- a/src/components/course/enrollment/components/ToDataSharingConsent.jsx
+++ b/src/components/course/enrollment/components/ToDataSharingConsent.jsx
@@ -13,7 +13,7 @@ import { CourseContext } from '../../CourseContextProvider';
 import { CourseEnrollmentsContext } from '../../../dashboard/main-content/course-enrollments/CourseEnrollmentsContextProvider';
 
 // Data sharing consent
-const ToDataSharingConsentPage = ({ enrollLabel, enrollmentUrl }) => {
+function ToDataSharingConsentPage({ enrollLabel, enrollmentUrl }) {
   const {
     state: {
       activeCourseRun: { key: courseRunKey },
@@ -45,7 +45,7 @@ const ToDataSharingConsentPage = ({ enrollLabel, enrollmentUrl }) => {
       }}
     />
   );
-};
+}
 
 ToDataSharingConsentPage.propTypes = {
   enrollLabel: PropTypes.node.isRequired,
diff --git a/src/components/course/enrollment/components/ToEcomBasketPage.jsx b/src/components/course/enrollment/components/ToEcomBasketPage.jsx
index 9c12cb27b3..16615c3143 100644
--- a/src/components/course/enrollment/components/ToEcomBasketPage.jsx
+++ b/src/components/course/enrollment/components/ToEcomBasketPage.jsx
@@ -15,7 +15,7 @@ import { EnrollButtonCta } from '../common';
  * @param {Component} args.enrollLabel An EnrollLabel component
  * @returns {Component} Rendered enroll button with a enrollment modal behavior included.
  */
-const ToEcomBasketPage = ({ enrollLabel, enrollmentUrl, courseRunPrice }) => {
+function ToEcomBasketPage({ enrollLabel, enrollmentUrl, courseRunPrice }) {
   const { userSubsidyApplicableToCourse, couponCodesCount } = useSubsidyDataForCourse();
   const [isModalOpen, setIsModalOpen] = useState(false);
 
@@ -36,7 +36,7 @@ const ToEcomBasketPage = ({ enrollLabel, enrollmentUrl, courseRunPrice }) => {
       />
     </>
   );
-};
+}
 
 ToEcomBasketPage.propTypes = {
   enrollLabel: PropTypes.node.isRequired,
diff --git a/src/components/course/enrollment/components/ViewOnDashboard.jsx b/src/components/course/enrollment/components/ViewOnDashboard.jsx
index b19c6890c8..14ad0bc37c 100644
--- a/src/components/course/enrollment/components/ViewOnDashboard.jsx
+++ b/src/components/course/enrollment/components/ViewOnDashboard.jsx
@@ -9,7 +9,7 @@ import { EnrollButtonCta } from '../common';
 
 import { enrollLinkClass } from '../constants';
 
-const ViewOnDashboard = ({ enrollLabel }) => {
+function ViewOnDashboard({ enrollLabel }) {
   const { enterpriseConfig } = useContext(AppContext);
   const handleClick = useTrackSearchConversionClickHandler({
     eventName: 'edx.ui.enterprise.learner_portal.course.enroll_button.to_dashboard.clicked',
@@ -24,7 +24,7 @@ const ViewOnDashboard = ({ enrollLabel }) => {
       onClick={handleClick}
     />
   );
-};
+}
 
 ViewOnDashboard.propTypes = {
   enrollLabel: PropTypes.node.isRequired,
diff --git a/src/components/course/enrollment/tests/EnrollAction.test.jsx b/src/components/course/enrollment/tests/EnrollAction.test.jsx
index a672495b62..1da5daea40 100644
--- a/src/components/course/enrollment/tests/EnrollAction.test.jsx
+++ b/src/components/course/enrollment/tests/EnrollAction.test.jsx
@@ -52,10 +52,9 @@ const subscriptionLicense = { uuid: 'a-license' };
    * @param {object} args Arguments.
    * @param {string} args.enrollAction
    */
-const EnrollLabel = (props) => (
-  // eslint-disable-next-line react/prop-types
-  <div>{props.enrollLabelText}</div>
-);
+function EnrollLabel(props) {
+  return <div>{props.enrollLabelText}</div>;
+}
 const renderEnrollAction = ({
   enrollAction,
   courseInitState = selfPacedCourseWithLicenseSubsidy,
diff --git a/src/components/course/enrollment/tests/hooks.test.jsx b/src/components/course/enrollment/tests/hooks.test.jsx
index 11745c04f6..b13fa9c361 100644
--- a/src/components/course/enrollment/tests/hooks.test.jsx
+++ b/src/components/course/enrollment/tests/hooks.test.jsx
@@ -39,20 +39,22 @@ const baseUserSubsidyState = {
   },
 };
 
-const ContextWrapper = ({
+function ContextWrapper({
   initialCourseState,
   initialSubsidyRequestContextValue,
   initialUserSubsidyState,
   children,
-}) => (
-  <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-    <SubsidyRequestsContext.Provider value={initialSubsidyRequestContextValue}>
-      <CourseContextProvider initialState={initialCourseState}>
-        {children}
-      </CourseContextProvider>
-    </SubsidyRequestsContext.Provider>
-  </UserSubsidyContext.Provider>
-);
+}) {
+  return (
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <SubsidyRequestsContext.Provider value={initialSubsidyRequestContextValue}>
+        <CourseContextProvider initialState={initialCourseState}>
+          {children}
+        </CourseContextProvider>
+      </SubsidyRequestsContext.Provider>
+    </UserSubsidyContext.Provider>
+  );
+}
 
 ContextWrapper.propTypes = {
   initialCourseState: PropTypes.shape(),
diff --git a/src/components/course/tests/CourseAssociatedPrograms.test.jsx b/src/components/course/tests/CourseAssociatedPrograms.test.jsx
index 08f934456e..225ef67479 100644
--- a/src/components/course/tests/CourseAssociatedPrograms.test.jsx
+++ b/src/components/course/tests/CourseAssociatedPrograms.test.jsx
@@ -11,16 +11,18 @@ const baseSubsidyRequestContextValue = {
   catalogsForSubsidyRequests: [],
 };
 
-const CourseAssociatedProgramsWithCourseContext = ({
+function CourseAssociatedProgramsWithCourseContext({
   initialState,
   subsidyRequestContextValue,
-}) => (
-  <SubsidyRequestsContext.Provider value={subsidyRequestContextValue}>
-    <CourseContextProvider initialState={initialState}>
-      <CourseAssociatedPrograms />
-    </CourseContextProvider>
-  </SubsidyRequestsContext.Provider>
-);
+}) {
+  return (
+    <SubsidyRequestsContext.Provider value={subsidyRequestContextValue}>
+      <CourseContextProvider initialState={initialState}>
+        <CourseAssociatedPrograms />
+      </CourseContextProvider>
+    </SubsidyRequestsContext.Provider>
+  );
+}
 
 CourseAssociatedProgramsWithCourseContext.propTypes = {
   initialState: PropTypes.shape(),
diff --git a/src/components/course/tests/CourseContextProvider.test.jsx b/src/components/course/tests/CourseContextProvider.test.jsx
index c4edd99262..0f8b908e8a 100644
--- a/src/components/course/tests/CourseContextProvider.test.jsx
+++ b/src/components/course/tests/CourseContextProvider.test.jsx
@@ -18,17 +18,19 @@ const baseInitialCourseState = {
   catalog: { catalogList: [] },
 };
 
-const CourseContextProviderWrapper = ({
+function CourseContextProviderWrapper({
   subsidyRequestsContextValue,
   initialCourseState,
   children,
-}) => (
-  <SubsidyRequestsContext.Provider value={subsidyRequestsContextValue}>
-    <CourseContextProvider initialState={initialCourseState}>
-      {children}
-    </CourseContextProvider>
-  </SubsidyRequestsContext.Provider>
-);
+}) {
+  return (
+    <SubsidyRequestsContext.Provider value={subsidyRequestsContextValue}>
+      <CourseContextProvider initialState={initialCourseState}>
+        {children}
+      </CourseContextProvider>
+    </SubsidyRequestsContext.Provider>
+  );
+}
 
 CourseContextProviderWrapper.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/course/tests/CourseEnrollmentFailedAlert.test.jsx b/src/components/course/tests/CourseEnrollmentFailedAlert.test.jsx
index 675b031012..d4d2854d34 100644
--- a/src/components/course/tests/CourseEnrollmentFailedAlert.test.jsx
+++ b/src/components/course/tests/CourseEnrollmentFailedAlert.test.jsx
@@ -36,17 +36,19 @@ const defaultCourseEnrollmentsState = {
   },
 };
 
-const CourseEnrollmentFailedAlertWrapper = ({
+function CourseEnrollmentFailedAlertWrapper({
   initialAppState = defaultAppState,
   initialCourseEnrollmentsState = defaultCourseEnrollmentsState,
   ...rest
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <CourseEnrollmentsContext.Provider value={initialCourseEnrollmentsState}>
-      <CourseEnrollmentFailedAlert {...rest} />
-    </CourseEnrollmentsContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <CourseEnrollmentsContext.Provider value={initialCourseEnrollmentsState}>
+        <CourseEnrollmentFailedAlert {...rest} />
+      </CourseEnrollmentsContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 describe('<CourseEnrollmentFailedAlert />', () => {
   describe('Upgraded from dashboard', () => {
diff --git a/src/components/course/tests/CourseHeader.test.jsx b/src/components/course/tests/CourseHeader.test.jsx
index d8d0caee65..04db125b1c 100644
--- a/src/components/course/tests/CourseHeader.test.jsx
+++ b/src/components/course/tests/CourseHeader.test.jsx
@@ -21,8 +21,12 @@ useLocation.mockImplementation(() => ({
 }));
 
 // Stub out the enroll button to avoid testing its implementation here
-jest.mock('../CourseRunCards', () => () => <p>Cards</p>);
-jest.mock('../SubsidyRequestButton', () => () => <p>SubsidyRequestButton</p>);
+jest.mock('../CourseRunCards', () => function () {
+  return <p>Cards</p>;
+});
+jest.mock('../SubsidyRequestButton', () => function () {
+  return <p>SubsidyRequestButton</p>;
+});
 
 const defaultSubsidyRequestsState = {
   requestsBySubsidyType: {
@@ -43,25 +47,27 @@ const defaultCourseEnrollmentsState = {
 };
 
 /* eslint-disable react/prop-types */
-const CourseHeaderWrapper = ({
+function CourseHeaderWrapper({
   initialAppState = {},
   initialCourseEnrollmentsState = defaultCourseEnrollmentsState,
   initialCourseState = {},
   initialUserSubsidyState = {},
   initialSubsidyRequestsState = defaultSubsidyRequestsState,
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
-        <CourseEnrollmentsContext.Provider value={initialCourseEnrollmentsState}>
-          <CourseContextProvider initialState={initialCourseState}>
-            <CourseHeader />
-          </CourseContextProvider>
-        </CourseEnrollmentsContext.Provider>
-      </SubsidyRequestsContext.Provider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
+          <CourseEnrollmentsContext.Provider value={initialCourseEnrollmentsState}>
+            <CourseContextProvider initialState={initialCourseState}>
+              <CourseHeader />
+            </CourseContextProvider>
+          </CourseEnrollmentsContext.Provider>
+        </SubsidyRequestsContext.Provider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 describe('<CourseHeader />', () => {
diff --git a/src/components/course/tests/CourseRecommendationCard.test.jsx b/src/components/course/tests/CourseRecommendationCard.test.jsx
index caf254e5ff..6a0a3e934a 100644
--- a/src/components/course/tests/CourseRecommendationCard.test.jsx
+++ b/src/components/course/tests/CourseRecommendationCard.test.jsx
@@ -26,11 +26,13 @@ const initialAppState = {
 };
 
 /* eslint-disable react/prop-types */
-const CourseRecommendationCardWithContext = (props) => (
-  <AppContext.Provider value={initialAppState}>
-    <CourseRecommendationCard {...props} />
-  </AppContext.Provider>
-);
+function CourseRecommendationCardWithContext(props) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <CourseRecommendationCard {...props} />
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 const TEST_COURSE_KEY = 'test-course-key';
diff --git a/src/components/course/tests/CourseRecommendations.test.jsx b/src/components/course/tests/CourseRecommendations.test.jsx
index 76a25b7a7c..e00d049f78 100644
--- a/src/components/course/tests/CourseRecommendations.test.jsx
+++ b/src/components/course/tests/CourseRecommendations.test.jsx
@@ -54,13 +54,15 @@ const initialCourseState = {
 };
 
 /* eslint-disable react/prop-types */
-const CourseRecommendationsWithContext = () => (
-  <AppContext.Provider value={initialAppState}>
-    <CourseContext.Provider value={initialCourseState}>
-      <CourseRecommendations />
-    </CourseContext.Provider>
-  </AppContext.Provider>
-);
+function CourseRecommendationsWithContext() {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <CourseContext.Provider value={initialCourseState}>
+        <CourseRecommendations />
+      </CourseContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 describe('<CourseRecommendations />', () => {
diff --git a/src/components/course/tests/CourseRunCard.test.jsx b/src/components/course/tests/CourseRunCard.test.jsx
index e1fb318eba..0901e1471c 100644
--- a/src/components/course/tests/CourseRunCard.test.jsx
+++ b/src/components/course/tests/CourseRunCard.test.jsx
@@ -28,12 +28,14 @@ const DATE_FORMAT = 'MMM D';
 const COURSE_ID = '123';
 
 jest.mock('../../../config');
-jest.mock('../enrollment/EnrollAction', () => ({ enrollLabel, enrollmentType }) => (
-  <>
-    <span>{enrollLabel}</span>
-    <span>{enrollmentType}</span>
-  </>
-));
+jest.mock('../enrollment/EnrollAction', () => function ({ enrollLabel, enrollmentType }) {
+  return (
+    <>
+      <span>{enrollLabel}</span>
+      <span>{enrollmentType}</span>
+    </>
+  );
+});
 jest.mock('../data/hooks', () => ({
   useUserHasSubsidyRequestForCourse: jest.fn(() => false),
   useCourseEnrollmentUrl: jest.fn(() => false),
diff --git a/src/components/course/tests/CourseSidebarPrice.test.jsx b/src/components/course/tests/CourseSidebarPrice.test.jsx
index 913f190734..c9d661bb91 100644
--- a/src/components/course/tests/CourseSidebarPrice.test.jsx
+++ b/src/components/course/tests/CourseSidebarPrice.test.jsx
@@ -96,22 +96,24 @@ const defaultUserSubsidyState = {
 };
 
 /* eslint-disable react/prop-types */
-const SidebarWithContext = ({
+function SidebarWithContext({
   initialAppState = appStateWithOrigPriceHidden,
   subsidyRequestsState = defaultSubsidyRequestsState,
   initialCourseState,
   initialUserSubsidyState = defaultUserSubsidyState,
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <SubsidyRequestsContext.Provider value={subsidyRequestsState}>
-        <CourseContextProvider initialState={initialCourseState}>
-          <CourseSidebarPrice />
-        </CourseContextProvider>
-      </SubsidyRequestsContext.Provider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <SubsidyRequestsContext.Provider value={subsidyRequestsState}>
+          <CourseContextProvider initialState={initialCourseState}>
+            <CourseSidebarPrice />
+          </CourseContextProvider>
+        </SubsidyRequestsContext.Provider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 const SPONSORED_BY_TEXT = 'Sponsored by test-enterprise';
diff --git a/src/components/course/tests/CourseSkills.test.jsx b/src/components/course/tests/CourseSkills.test.jsx
index a4ff82e679..90006598cb 100644
--- a/src/components/course/tests/CourseSkills.test.jsx
+++ b/src/components/course/tests/CourseSkills.test.jsx
@@ -25,19 +25,21 @@ const baseSubsidyRequestContextValue = {
   catalogsForSubsidyRequests: [],
 };
 
-const CourseSkillsWithContext = ({
+function CourseSkillsWithContext({
   initialAppState,
   initialCourseState,
   initialSubsidyRequestContextValue,
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <SubsidyRequestsContext.Provider value={initialSubsidyRequestContextValue}>
-      <CourseContextProvider initialState={initialCourseState}>
-        <CourseSkills />
-      </CourseContextProvider>
-    </SubsidyRequestsContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <SubsidyRequestsContext.Provider value={initialSubsidyRequestContextValue}>
+        <CourseContextProvider initialState={initialCourseState}>
+          <CourseSkills />
+        </CourseContextProvider>
+      </SubsidyRequestsContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 CourseSkillsWithContext.propTypes = {
   initialAppState: PropTypes.shape(),
diff --git a/src/components/course/tests/CreatedBy.test.jsx b/src/components/course/tests/CreatedBy.test.jsx
index 5f69c34588..d85ac81bfe 100644
--- a/src/components/course/tests/CreatedBy.test.jsx
+++ b/src/components/course/tests/CreatedBy.test.jsx
@@ -13,13 +13,15 @@ const initialSubsidyRequestsState = {
 };
 
 // eslint-disable-next-line react/prop-types
-const CreatedByWithCourseContext = ({ initialState = {} }) => (
-  <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
-    <CourseContextProvider initialState={initialState}>
-      <CreatedBy />
-    </CourseContextProvider>
-  </SubsidyRequestsContext.Provider>
-);
+function CreatedByWithCourseContext({ initialState = {} }) {
+  return (
+    <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
+      <CourseContextProvider initialState={initialState}>
+        <CreatedBy />
+      </CourseContextProvider>
+    </SubsidyRequestsContext.Provider>
+  );
+}
 
 describe('<CreatedBy />', () => {
   const initialState = {
diff --git a/src/components/course/tests/EnrollModal.test.jsx b/src/components/course/tests/EnrollModal.test.jsx
index e09e3c1c44..42739ac77e 100644
--- a/src/components/course/tests/EnrollModal.test.jsx
+++ b/src/components/course/tests/EnrollModal.test.jsx
@@ -14,7 +14,7 @@ jest.mock('../data/hooks', () => ({
   useOptimizelyEnrollmentClickHandler: jest.fn(),
 }));
 
-const EnrollModalWrapper = ({
+function EnrollModalWrapper({
   courseContextValue = {
     state: {
       activeCourseRun: {
@@ -26,13 +26,15 @@ const EnrollModalWrapper = ({
     courseEnrollmentsByStatus: {},
   },
   ...rest
-}) => (
-  <CourseContext.Provider value={courseContextValue}>
-    <CourseEnrollmentsContext.Provider value={CourseEnrollmentsContextVAlue}>
-      <EnrollModal {...rest} />
-    </CourseEnrollmentsContext.Provider>
-  </CourseContext.Provider>
-);
+}) {
+  return (
+    <CourseContext.Provider value={courseContextValue}>
+      <CourseEnrollmentsContext.Provider value={CourseEnrollmentsContextVAlue}>
+        <EnrollModal {...rest} />
+      </CourseEnrollmentsContext.Provider>
+    </CourseContext.Provider>
+  );
+}
 
 describe('<EnrollModal />', () => {
   const basicProps = {
@@ -80,9 +82,7 @@ describe('<EnrollModal />', () => {
       <EnrollModalWrapper {...props} />,
     );
     expect(screen.getByText(MODAL_TEXTS.HAS_ENTERPRISE_OFFER.title)).toBeInTheDocument();
-    expect(screen.getByText(MODAL_TEXTS.HAS_ENTERPRISE_OFFER.body(
-      props.userSubsidyApplicableToCourse, props.courseRunPrice,
-    ))).toBeInTheDocument();
+    expect(screen.getByText(MODAL_TEXTS.HAS_ENTERPRISE_OFFER.body(props.userSubsidyApplicableToCourse, props.courseRunPrice))).toBeInTheDocument();
     expect(screen.getByText(MODAL_TEXTS.HAS_ENTERPRISE_OFFER.button)).toBeInTheDocument();
   });
 
diff --git a/src/components/course/tests/LicenseRequestedAlert.test.jsx b/src/components/course/tests/LicenseRequestedAlert.test.jsx
index 2043aae5ce..c69e74a7e5 100644
--- a/src/components/course/tests/LicenseRequestedAlert.test.jsx
+++ b/src/components/course/tests/LicenseRequestedAlert.test.jsx
@@ -24,36 +24,38 @@ const initialLicenseRequests = [
 ];
 
 /* eslint-disable react/prop-types */
-const LicenseRequestedAlertWrapper = ({
+function LicenseRequestedAlertWrapper({
   subscriptions = initialSubscriptions, licenseRequests = initialLicenseRequests,
-}) => (
-  <UserSubsidyContext.Provider value={{
-    couponCodes: {
-      couponCodes: [],
-      couponCodesCount: 0,
-    },
-    subscriptionLicense: {},
-    customerAgreementConfig: {
-      subscriptions,
-    },
-  }}
-  >
-    <SubsidyRequestsContext.Provider value={
-      {
-        subsidyRequestConfiguration: null,
-        requestsBySubsidyType: {
-          [SUBSIDY_TYPE.LICENSE]: licenseRequests,
-          [SUBSIDY_TYPE.COUPON]: [],
-        },
-      }
-    }
+}) {
+  return (
+    <UserSubsidyContext.Provider value={{
+      couponCodes: {
+        couponCodes: [],
+        couponCodesCount: 0,
+      },
+      subscriptionLicense: {},
+      customerAgreementConfig: {
+        subscriptions,
+      },
+    }}
     >
-      <CourseContext.Provider>
-        <LicenseRequestedAlert catalogList={[mockCatalogUUID]} />
-      </CourseContext.Provider>
-    </SubsidyRequestsContext.Provider>
-  </UserSubsidyContext.Provider>
-);
+      <SubsidyRequestsContext.Provider value={
+        {
+          subsidyRequestConfiguration: null,
+          requestsBySubsidyType: {
+            [SUBSIDY_TYPE.LICENSE]: licenseRequests,
+            [SUBSIDY_TYPE.COUPON]: [],
+          },
+        }
+      }
+      >
+        <CourseContext.Provider>
+          <LicenseRequestedAlert catalogList={[mockCatalogUUID]} />
+        </CourseContext.Provider>
+      </SubsidyRequestsContext.Provider>
+    </UserSubsidyContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 describe('<LicenseRequestedAlert />', () => {
@@ -89,9 +91,7 @@ describe('<LicenseRequestedAlert />', () => {
     Cookies.mockReturnValue({ get: jest.fn(), set: mockSetCookies });
     const { getByText, queryByText } = render(<LicenseRequestedAlertWrapper />);
     fireEvent.click(getByText('Dismiss'));
-    expect(mockSetCookies).toHaveBeenCalledWith(
-      LICENSE_REQUESTED_ALERT_DISMISSED_COOKIE_NAME, true, { sameSite: 'strict' },
-    );
+    expect(mockSetCookies).toHaveBeenCalledWith(LICENSE_REQUESTED_ALERT_DISMISSED_COOKIE_NAME, true, { sameSite: 'strict' });
 
     await waitFor(() => {
       expect(queryByText(LICENSE_REQUESTED_ALERT_HEADING)).toBeNull();
diff --git a/src/components/course/tests/SubsidyRequestButton.test.jsx b/src/components/course/tests/SubsidyRequestButton.test.jsx
index a2dcae6431..e66e231f0e 100644
--- a/src/components/course/tests/SubsidyRequestButton.test.jsx
+++ b/src/components/course/tests/SubsidyRequestButton.test.jsx
@@ -53,18 +53,20 @@ const initialCourseState = {
   subsidyRequestCatalogsApplicableToCourse: new Set([TEST_CATALOG_UUID]),
 };
 
-const SubsidyRequestButtonWrapper = ({
+function SubsidyRequestButtonWrapper({
   subsidyRequestsState = {},
   courseState = {},
-}) => (
-  <ToastsContext.Provider value={initialToastsState}>
-    <SubsidyRequestsContext.Provider value={{ ...initialSubsidyRequestsState, ...subsidyRequestsState }}>
-      <CourseContext.Provider value={{ ...initialCourseState, ...courseState }}>
-        <SubsidyRequestButton enterpriseSlug={mockEnterpriseSlug} />
-      </CourseContext.Provider>
-    </SubsidyRequestsContext.Provider>
-  </ToastsContext.Provider>
-);
+}) {
+  return (
+    <ToastsContext.Provider value={initialToastsState}>
+      <SubsidyRequestsContext.Provider value={{ ...initialSubsidyRequestsState, ...subsidyRequestsState }}>
+        <CourseContext.Provider value={{ ...initialCourseState, ...courseState }}>
+          <SubsidyRequestButton enterpriseSlug={mockEnterpriseSlug} />
+        </CourseContext.Provider>
+      </SubsidyRequestsContext.Provider>
+    </ToastsContext.Provider>
+  );
+}
 
 describe('<SubsidyRequestButton />', () => {
   afterEach(() => jest.clearAllMocks());
diff --git a/src/components/dashboard/SubscriptionExpirationModal.jsx b/src/components/dashboard/SubscriptionExpirationModal.jsx
index 992d70546e..bdebd5474d 100644
--- a/src/components/dashboard/SubscriptionExpirationModal.jsx
+++ b/src/components/dashboard/SubscriptionExpirationModal.jsx
@@ -18,7 +18,7 @@ export const MODAL_DIALOG_CLASS_NAME = 'subscription-expiration';
 export const SUBSCRIPTION_EXPIRED_MODAL_TITLE = 'Your subscription has expired';
 export const SUBSCRIPTION_EXPIRING_MODAL_TITLE = 'Your subscription is expiring';
 
-const SubscriptionExpirationModal = () => {
+function SubscriptionExpirationModal() {
   const {
     enterpriseConfig: { uuid: enterpriseId, adminUsers },
     config,
@@ -52,11 +52,9 @@ const SubscriptionExpirationModal = () => {
   const renderCertificateText = () => {
     const { username } = getAuthenticatedUser();
     return (
-      <>
-        <a href={`${config.LMS_BASE_URL}/u/${username}`} className="font-weight-bold">
-          download your completed certificates
-        </a>
-      </>
+      <a href={`${config.LMS_BASE_URL}/u/${username}`} className="font-weight-bold">
+        download your completed certificates
+      </a>
     );
   };
 
@@ -158,6 +156,6 @@ const SubscriptionExpirationModal = () => {
       open
     />
   );
-};
+}
 
 export default SubscriptionExpirationModal;
diff --git a/src/components/dashboard/main-content/DashboardMainContent.jsx b/src/components/dashboard/main-content/DashboardMainContent.jsx
index 26a683f157..27c6d70d0d 100644
--- a/src/components/dashboard/main-content/DashboardMainContent.jsx
+++ b/src/components/dashboard/main-content/DashboardMainContent.jsx
@@ -12,7 +12,7 @@ import SupportInformation from '../sidebar/SupportInformation';
 import SubsidiesSummary from '../sidebar/SubsidiesSummary';
 import { isExperimentVariant } from '../../../utils/optimizely';
 
-const DashboardMainContent = () => {
+function DashboardMainContent() {
   const {
     enterpriseConfig: {
       name,
@@ -61,6 +61,6 @@ const DashboardMainContent = () => {
       </MediaQuery>
     </>
   );
-};
+}
 
 export default DashboardMainContent;
diff --git a/src/components/dashboard/main-content/DashboardPopularCourses.jsx b/src/components/dashboard/main-content/DashboardPopularCourses.jsx
index 4a86f36f03..bf47e27b3e 100644
--- a/src/components/dashboard/main-content/DashboardPopularCourses.jsx
+++ b/src/components/dashboard/main-content/DashboardPopularCourses.jsx
@@ -11,7 +11,7 @@ import { COURSE_TITLE, SEARCH_FACET_FILTERS } from '../../search/constants';
 
 import { NUM_POPULAR_COURSES_TO_DISPLAY } from './data/constants';
 
-const DashboardPopularCourses = () => {
+function DashboardPopularCourses() {
   const { algolia } = useContext(AppContext);
   const config = getConfig();
 
@@ -30,6 +30,6 @@ const DashboardPopularCourses = () => {
       </InstantSearch>
     </SearchData>
   );
-};
+}
 
 export default DashboardPopularCourses;
diff --git a/src/components/dashboard/main-content/course-enrollments/CollapsibleIcon.jsx b/src/components/dashboard/main-content/course-enrollments/CollapsibleIcon.jsx
index ed33162a4e..22e4bf0bc2 100644
--- a/src/components/dashboard/main-content/course-enrollments/CollapsibleIcon.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/CollapsibleIcon.jsx
@@ -2,13 +2,15 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 
-const CollapsibleIcon = props => (
-  <FontAwesomeIcon
-    className="color-brand-primary mr-2"
-    icon={props.icon}
-    size="2x"
-  />
-);
+function CollapsibleIcon(props) {
+  return (
+    <FontAwesomeIcon
+      className="color-brand-primary mr-2"
+      icon={props.icon}
+      size="2x"
+    />
+  );
+}
 
 CollapsibleIcon.propTypes = {
   icon: PropTypes.shape({
diff --git a/src/components/dashboard/main-content/course-enrollments/CourseEnrollments.jsx b/src/components/dashboard/main-content/course-enrollments/CourseEnrollments.jsx
index c4f3ce25fd..7c3a01c528 100644
--- a/src/components/dashboard/main-content/course-enrollments/CourseEnrollments.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/CourseEnrollments.jsx
@@ -13,7 +13,7 @@ export const COURSE_SECTION_TITLES = {
   savedForLater: 'Saved for later',
 };
 
-const CourseEnrollments = ({ children }) => {
+function CourseEnrollments({ children }) {
   const {
     courseEnrollmentsByStatus,
     fetchCourseEnrollmentsError,
@@ -23,18 +23,16 @@ const CourseEnrollments = ({ children }) => {
     setShowMoveToInProgressCourseSuccess,
   } = useContext(CourseEnrollmentsContext);
 
-  const currentCourseEnrollments = useMemo(
-    () => sortedEnrollmentsByEnrollmentDate(
-      [
-        ...courseEnrollmentsByStatus.inProgress, ...courseEnrollmentsByStatus.upcoming,
-        ...courseEnrollmentsByStatus.requested,
-      ],
-    ), [
-      courseEnrollmentsByStatus.inProgress,
-      courseEnrollmentsByStatus.upcoming,
-      courseEnrollmentsByStatus.requested,
+  const currentCourseEnrollments = useMemo(() => sortedEnrollmentsByEnrollmentDate(
+    [
+      ...courseEnrollmentsByStatus.inProgress, ...courseEnrollmentsByStatus.upcoming,
+      ...courseEnrollmentsByStatus.requested,
     ],
-  );
+  ), [
+    courseEnrollmentsByStatus.inProgress,
+    courseEnrollmentsByStatus.upcoming,
+    courseEnrollmentsByStatus.requested,
+  ]);
 
   const completedCourseEnrollments = useMemo(
     () => sortedEnrollmentsByEnrollmentDate(courseEnrollmentsByStatus.completed),
@@ -90,7 +88,7 @@ const CourseEnrollments = ({ children }) => {
       </>
     </>
   );
-};
+}
 
 CourseEnrollments.propTypes = {
   children: PropTypes.node,
diff --git a/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsAlert.jsx b/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsAlert.jsx
index 049b26c2eb..dad03cd9f6 100644
--- a/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsAlert.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsAlert.jsx
@@ -8,11 +8,11 @@ const iconByVariant = {
   danger: WarningFilled,
 };
 
-const CourseEnrollmentsAlert = ({
+function CourseEnrollmentsAlert({
   children,
   variant,
   onClose,
-}) => {
+}) {
   const icon = iconByVariant[variant];
 
   return (
@@ -26,7 +26,7 @@ const CourseEnrollmentsAlert = ({
       {children}
     </Alert>
   );
-};
+}
 
 CourseEnrollmentsAlert.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsContextProvider.jsx b/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsContextProvider.jsx
index e70c62eff4..e2f6b0130e 100644
--- a/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsContextProvider.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsContextProvider.jsx
@@ -11,7 +11,7 @@ import { transformSubsidyRequest } from './data/utils';
 
 export const CourseEnrollmentsContext = createContext();
 
-const CourseEnrollmentsContextProvider = ({ children }) => {
+function CourseEnrollmentsContextProvider({ children }) {
   const {
     enterpriseConfig: {
       uuid: enterpriseUUID,
@@ -82,7 +82,7 @@ const CourseEnrollmentsContextProvider = ({ children }) => {
       {children}
     </CourseEnrollmentsContext.Provider>
   );
-};
+}
 
 CourseEnrollmentsContextProvider.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/CourseSection.jsx b/src/components/dashboard/main-content/course-enrollments/CourseSection.jsx
index 61ace352c9..d211a1d5b3 100644
--- a/src/components/dashboard/main-content/course-enrollments/CourseSection.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/CourseSection.jsx
@@ -42,7 +42,7 @@ class CourseSection extends React.Component {
     const { subtitle } = this.props;
     if (!subtitle) { return null; }
     return <p className="mt-3 mb-0">{subtitle}</p>;
-  }
+  };
 
   getCourseRunProps = ({
     linkToCertificate,
diff --git a/src/components/dashboard/main-content/course-enrollments/UpgradeableCourseEnrollmentContextProvider.jsx b/src/components/dashboard/main-content/course-enrollments/UpgradeableCourseEnrollmentContextProvider.jsx
index bb10c28ce9..05b75e1457 100644
--- a/src/components/dashboard/main-content/course-enrollments/UpgradeableCourseEnrollmentContextProvider.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/UpgradeableCourseEnrollmentContextProvider.jsx
@@ -9,7 +9,7 @@ import { UserSubsidyContext } from '../../../enterprise-user-subsidy';
 
 export const UpgradeableCourseEnrollmentContext = createContext({ isLoading: false, upgradeUrl: undefined });
 
-export const UpgradeableCourseEnrollmentContextProvider = ({ courseEnrollment, children }) => {
+export function UpgradeableCourseEnrollmentContextProvider({ courseEnrollment, children }) {
   const { enterpriseConfig } = useContext(AppContext);
   const { subscriptionLicense } = useContext(UserSubsidyContext);
   const location = useLocation();
@@ -30,7 +30,7 @@ export const UpgradeableCourseEnrollmentContextProvider = ({ courseEnrollment, c
       {children}
     </UpgradeableCourseEnrollmentContext.Provider>
   );
-};
+}
 
 UpgradeableCourseEnrollmentContextProvider.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/CompletedCourseCard.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/CompletedCourseCard.jsx
index 0ede7c7a4c..24c6114c3a 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/CompletedCourseCard.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/CompletedCourseCard.jsx
@@ -9,7 +9,7 @@ import ContinueLearningButton from './ContinueLearningButton';
 import { isCourseEnded } from '../../../../../utils/common';
 import CertificateImg from './images/edx-verified-mini-cert.png';
 
-const CompletedCourseCard = (props) => {
+function CompletedCourseCard(props) {
   const user = getAuthenticatedUser();
   const { username } = user;
   const {
@@ -69,7 +69,7 @@ const CompletedCourseCard = (props) => {
       {renderCertificateInfo()}
     </BaseCourseCard>
   );
-};
+}
 
 CompletedCourseCard.propTypes = {
   linkToCourse: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/InProgressCourseCard.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/InProgressCourseCard.jsx
index 0da14a6c2a..40f43c56ca 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/InProgressCourseCard.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/InProgressCourseCard.jsx
@@ -13,14 +13,14 @@ import Notification from './Notification';
 import { CourseEnrollmentsContext } from '../CourseEnrollmentsContextProvider';
 import { UpgradeableCourseEnrollmentContext } from '../UpgradeableCourseEnrollmentContextProvider';
 
-export const InProgressCourseCard = ({
+export function InProgressCourseCard({
   linkToCourse,
   courseRunId,
   title,
   notifications,
   courseRunStatus,
   ...rest
-}) => {
+}) {
   const {
     isLoading: isLoadingUpgradeUrl,
     upgradeUrl,
@@ -156,7 +156,7 @@ export const InProgressCourseCard = ({
       />
     </BaseCourseCard>
   );
-};
+}
 
 InProgressCourseCard.propTypes = {
   linkToCourse: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/Notification.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/Notification.jsx
index a03979ab7b..b8a0850c57 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/Notification.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/Notification.jsx
@@ -3,32 +3,34 @@ import PropTypes from 'prop-types';
 import moment from 'moment';
 import { sendEnterpriseTrackEvent } from '@edx/frontend-enterprise-utils';
 
-const Notification = props => (
-  <li>
-    <div className="notification p-2 mb-2 border rounded">
-      <div className="row no-gutters">
-        <div className="col-12">
-          <a
-            href={props.url}
-            onClick={() => sendEnterpriseTrackEvent(
-              props.enterpriseUUID,
-              'edx.ui.enterprise.learner_portal.notification.clicked',
-              { course_run_id: props.courseRunId, name: props.name },
-            )}
-          >
-            {props.name}
-          </a>
-          {' is due '}
-          <span className="font-weight-bold">
-            {moment(props.date).fromNow()}
-          </span>
-          {' on '}
-          {moment(props.date).format('ddd MMMM D, YYYY')}
+function Notification(props) {
+  return (
+    <li>
+      <div className="notification p-2 mb-2 border rounded">
+        <div className="row no-gutters">
+          <div className="col-12">
+            <a
+              href={props.url}
+              onClick={() => sendEnterpriseTrackEvent(
+                props.enterpriseUUID,
+                'edx.ui.enterprise.learner_portal.notification.clicked',
+                { course_run_id: props.courseRunId, name: props.name },
+              )}
+            >
+              {props.name}
+            </a>
+            {' is due '}
+            <span className="font-weight-bold">
+              {moment(props.date).fromNow()}
+            </span>
+            {' on '}
+            {moment(props.date).format('ddd MMMM D, YYYY')}
+          </div>
         </div>
       </div>
-    </div>
-  </li>
-);
+    </li>
+  );
+}
 
 Notification.propTypes = {
   name: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/RequestedCourseCard.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/RequestedCourseCard.jsx
index becab65b8e..0c7c7b6110 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/RequestedCourseCard.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/RequestedCourseCard.jsx
@@ -5,13 +5,15 @@ import BaseCourseCard from './BaseCourseCard';
 
 import { COURSE_STATUSES } from '../data/constants';
 
-const RequestedCourseCard = (props) => (
-  <BaseCourseCard
-    type={COURSE_STATUSES.requested}
-    hasViewCertificateLink={false}
-    {...props}
-  />
-);
+function RequestedCourseCard(props) {
+  return (
+    <BaseCourseCard
+      type={COURSE_STATUSES.requested}
+      hasViewCertificateLink={false}
+      {...props}
+    />
+  );
+}
 
 RequestedCourseCard.propTypes = {
   linkToCourse: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/SavedForLaterCourseCard.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/SavedForLaterCourseCard.jsx
index f5fcbdcbbc..ba3489152f 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/SavedForLaterCourseCard.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/SavedForLaterCourseCard.jsx
@@ -11,7 +11,7 @@ import { isCourseEnded } from '../../../../../utils/common';
 import { COURSE_STATUSES } from '../data/constants';
 import { CourseEnrollmentsContext } from '../CourseEnrollmentsContextProvider';
 
-const SavedForLaterCourseCard = (props) => {
+function SavedForLaterCourseCard(props) {
   const {
     title,
     linkToCourse,
@@ -122,7 +122,7 @@ const SavedForLaterCourseCard = (props) => {
       />
     </BaseCourseCard>
   );
-};
+}
 
 SavedForLaterCourseCard.propTypes = {
   linkToCourse: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/UpcomingCourseCard.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/UpcomingCourseCard.jsx
index 4cee187557..c5455f75ca 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/UpcomingCourseCard.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/UpcomingCourseCard.jsx
@@ -5,7 +5,7 @@ import moment from 'moment';
 import { Button } from '@edx/paragon';
 import BaseCourseCard from './BaseCourseCard';
 
-const UpcomingCourseCard = (props) => {
+function UpcomingCourseCard(props) {
   const renderButtons = () => (
     <Button className="btn-xs-block" variant="light" disabled>
       Available on {moment(props.startDate).format('MMM D')}
@@ -15,7 +15,7 @@ const UpcomingCourseCard = (props) => {
   return (
     <BaseCourseCard type="upcoming" buttons={renderButtons()} {...props} />
   );
-};
+}
 
 UpcomingCourseCard.propTypes = {
   startDate: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/email-settings/EmailSettingsModal.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/email-settings/EmailSettingsModal.jsx
index f0387d3446..c43733c022 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/email-settings/EmailSettingsModal.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/email-settings/EmailSettingsModal.jsx
@@ -41,7 +41,7 @@ class EmailSettingsModal extends Component {
     }
 
     return 'default';
-  }
+  };
 
   getDisabledStates = () => {
     const { isFormChanged } = this.state;
@@ -49,7 +49,7 @@ class EmailSettingsModal extends Component {
       return ['pending', 'complete'];
     }
     return ['pending', 'complete', 'default'];
-  }
+  };
 
   handleSaveButtonClick = () => {
     const { hasEmailsEnabled } = this.state;
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx
index e338d91cc5..81c7d40cfb 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx
@@ -17,14 +17,14 @@ const initialState = {
   confirmSuccessful: false,
 };
 
-const MarkCompleteModal = ({
+function MarkCompleteModal({
   courseId,
   isOpen,
   courseTitle,
   courseLink,
   onSuccess,
   onClose,
-}) => {
+}) {
   const { enterpriseConfig: { uuid } } = useContext(AppContext);
   const [
     { confirmButtonState, confirmError, confirmSuccessful },
@@ -95,7 +95,7 @@ const MarkCompleteModal = ({
       />
     </MarkCompleteModalContext.Provider>
   );
-};
+}
 
 MarkCompleteModal.propTypes = {
   courseId: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalBody.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalBody.jsx
index 7efbde7724..fa6812b8e3 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalBody.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalBody.jsx
@@ -3,7 +3,7 @@ import React, { useContext } from 'react';
 import ModalError from './ModalError';
 import MarkCompleteModalContext from './MarkCompleteModalContext';
 
-const ModalBody = () => {
+function ModalBody() {
   const {
     confirmError,
     courseLink,
@@ -26,6 +26,6 @@ const ModalBody = () => {
       </p>
     </>
   );
-};
+}
 
 export default ModalBody;
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalError.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalError.jsx
index 68e44fcc86..0937fc288c 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalError.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalError.jsx
@@ -4,13 +4,13 @@ import { Error } from '@edx/paragon/icons';
 
 import MarkCompleteModalContext from './MarkCompleteModalContext';
 
-const ModalError = () => {
+function ModalError() {
   const { courseLink, courseTitle } = useContext(MarkCompleteModalContext);
   return (
     <Alert variant="danger" icon={Error}>
       Unable to save <Alert.Link href={courseLink}>{courseTitle}</Alert.Link> for later. Please try again.
     </Alert>
   );
-};
+}
 
 export default ModalError;
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalBody.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalBody.jsx
index 9c2227e2f8..0dc9711a5c 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalBody.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalBody.jsx
@@ -3,7 +3,7 @@ import React, { useContext } from 'react';
 import ModalError from './ModalError';
 import MoveToInProgressModalContext from './MoveToInProgressModalContext';
 
-const ModalBody = () => {
+function ModalBody() {
   const {
     confirmError,
     courseLink,
@@ -24,6 +24,6 @@ const ModalBody = () => {
       </p>
     </>
   );
-};
+}
 
 export default ModalBody;
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalError.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalError.jsx
index a7b41013c5..5034d8c015 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalError.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalError.jsx
@@ -4,13 +4,13 @@ import { Error } from '@edx/paragon/icons';
 
 import MoveToInProgressModalContext from './MoveToInProgressModalContext';
 
-const ModalError = () => {
+function ModalError() {
   const { courseLink, courseTitle } = useContext(MoveToInProgressModalContext);
   return (
     <Alert variant="danger" icon={Error}>
       An error occurred while unarchiving <Alert.Link href={courseLink}>{courseTitle}</Alert.Link>. Please try again.
     </Alert>
   );
-};
+}
 
 export default ModalError;
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx
index ce8423a989..a9b7f6e3b2 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx
@@ -17,14 +17,14 @@ const initialState = {
   confirmSuccessful: false,
 };
 
-const MoveToInProgressModal = ({
+function MoveToInProgressModal({
   courseId,
   isOpen,
   courseTitle,
   courseLink,
   onSuccess,
   onClose,
-}) => {
+}) {
   const { enterpriseConfig: { uuid } } = useContext(AppContext);
   const [
     { confirmButtonState, confirmError, confirmSuccessful },
@@ -86,7 +86,7 @@ const MoveToInProgressModal = ({
       />
     </MoveToInProgressModalContext.Provider>
   );
-};
+}
 
 MoveToInProgressModal.propTypes = {
   courseId: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx
index 8d2928ce28..25237caaa9 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx
@@ -34,17 +34,19 @@ const baseUnenrollModalProps = {
 
 const mockAddToast = jest.fn();
 
-const UnenrollModalWrapper = ({
+function UnenrollModalWrapper({
   // eslint-disable-next-line react/prop-types
   courseEnrollmentsContextValue = defaultCourseEnrollmentsContextValue,
   ...props
-}) => (
-  <ToastsContext.Provider value={{ addToast: mockAddToast }}>
-    <CourseEnrollmentsContext.Provider value={courseEnrollmentsContextValue}>
-      <UnenrollModal {...props} />
-    </CourseEnrollmentsContext.Provider>
-  </ToastsContext.Provider>
-);
+}) {
+  return (
+    <ToastsContext.Provider value={{ addToast: mockAddToast }}>
+      <CourseEnrollmentsContext.Provider value={courseEnrollmentsContextValue}>
+        <UnenrollModal {...props} />
+      </CourseEnrollmentsContext.Provider>
+    </ToastsContext.Provider>
+  );
+}
 
 describe('<UnenrollModal />', () => {
   beforeEach(() => {
diff --git a/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx b/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx
index 7228652ff3..af46b61e4a 100644
--- a/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx
@@ -32,18 +32,20 @@ const CARD_COMPONENT_BY_COURSE_STATUS = {
 };
 const TEST_ENTERPRISE_UUID = 'test-uuid';
 
-const CourseSectionWrapper = (props) => (
-  <AppContext.Provider value={{
-    enterpriseConfig: {
-      uuid: TEST_ENTERPRISE_UUID,
-    },
-  }}
-  >
-    <CourseSection
-      {...props}
-    />
-  </AppContext.Provider>
-);
+function CourseSectionWrapper(props) {
+  return (
+    <AppContext.Provider value={{
+      enterpriseConfig: {
+        uuid: TEST_ENTERPRISE_UUID,
+      },
+    }}
+    >
+      <CourseSection
+        {...props}
+      />
+    </AppContext.Provider>
+  );
+}
 
 describe('<CourseSection />', () => {
   it('should handle collapsible toggle', () => {
diff --git a/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx b/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx
index 82d867ad09..43af361691 100644
--- a/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx
+++ b/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx
@@ -16,9 +16,9 @@ import {
 } from './data/constants';
 import CouponCodesWarningModal from '../../program-progress/CouponCodesWarningModal';
 
-const CouponCodesSummaryCard = ({
+function CouponCodesSummaryCard({
   couponCodesCount, couponCodeRequestsCount, className, totalCoursesEligibleForCertificate, programProgressPage,
-}) => {
+}) {
   const [
     isCouponCodeWarningModalOpen,
     couponCodeWarningModalOpen,
@@ -102,7 +102,7 @@ const CouponCodesSummaryCard = ({
         )}
     </>
   );
-};
+}
 
 CouponCodesSummaryCard.propTypes = {
   couponCodesCount: PropTypes.number,
diff --git a/src/components/dashboard/sidebar/DashboardSidebar.jsx b/src/components/dashboard/sidebar/DashboardSidebar.jsx
index b020d51b51..c1af5fe06d 100644
--- a/src/components/dashboard/sidebar/DashboardSidebar.jsx
+++ b/src/components/dashboard/sidebar/DashboardSidebar.jsx
@@ -4,15 +4,17 @@ import { Card } from '@edx/paragon';
 import SupportInformation from './SupportInformation';
 import SubsidiesSummary from './SubsidiesSummary';
 
-const DashboardSidebar = () => (
-  <div className="mt-3 mt-lg-0">
-    <SubsidiesSummary />
-    <Card>
-      <Card.Section>
-        <SupportInformation />
-      </Card.Section>
-    </Card>
-  </div>
-);
+function DashboardSidebar() {
+  return (
+    <div className="mt-3 mt-lg-0">
+      <SubsidiesSummary />
+      <Card>
+        <Card.Section>
+          <SupportInformation />
+        </Card.Section>
+      </Card>
+    </div>
+  );
+}
 
 export default DashboardSidebar;
diff --git a/src/components/dashboard/sidebar/EnterpriseOffersSummaryCard.jsx b/src/components/dashboard/sidebar/EnterpriseOffersSummaryCard.jsx
index 37d1daa8a0..0a170c3277 100644
--- a/src/components/dashboard/sidebar/EnterpriseOffersSummaryCard.jsx
+++ b/src/components/dashboard/sidebar/EnterpriseOffersSummaryCard.jsx
@@ -13,51 +13,53 @@ import {
 } from './data/constants';
 import SidebarCard from './SidebarCard';
 
-const EnterpriseOffersSummaryCard = ({ className, offer, searchCoursesCta }) => (
-  <SidebarCard
-    title={
-      (
-        <div className="d-flex align-items-center justify-content-between">
-          <h3 className="m-0">{ENTERPRISE_OFFER_SUMMARY_CARD_TITLE}</h3>
-          <Badge
-            variant={ENTERPRISE_OFFER_ACTIVE_BADGE_VARIANT}
-            className="ml-2"
-            data-testid="enterprise-offer-status-badge"
-          >
-            {ENTERPRISE_OFFER_ACTIVE_BADGE_LABEL}
-          </Badge>
-        </div>
-      )
-    }
-    cardClassNames={className}
-  >
-    {offer.remainingBalanceForUser && offer.remainingBalanceForUser !== Number.MAX_VALUE
-      ? (
-        <p data-testid="offer-summary-text-detailed">
-          Apply your <b>${offer.remainingBalanceForUser}</b>{' '}
-          learner credit balance to enroll into courses with no out of pocket cost.
-        </p>
-      )
-      : (
-        <p data-testid="offer-summary-text">
-          Apply your organization&apos;s learner credit balance to enroll into courses with no out of pocket cost.
-        </p>
-      ) }
+function EnterpriseOffersSummaryCard({ className, offer, searchCoursesCta }) {
+  return (
+    <SidebarCard
+      title={
+        (
+          <div className="d-flex align-items-center justify-content-between">
+            <h3 className="m-0">{ENTERPRISE_OFFER_SUMMARY_CARD_TITLE}</h3>
+            <Badge
+              variant={ENTERPRISE_OFFER_ACTIVE_BADGE_VARIANT}
+              className="ml-2"
+              data-testid="enterprise-offer-status-badge"
+            >
+              {ENTERPRISE_OFFER_ACTIVE_BADGE_LABEL}
+            </Badge>
+          </div>
+        )
+      }
+      cardClassNames={className}
+    >
+      {offer.remainingBalanceForUser && offer.remainingBalanceForUser !== Number.MAX_VALUE
+        ? (
+          <p data-testid="offer-summary-text-detailed">
+            Apply your <b>${offer.remainingBalanceForUser}</b>{' '}
+            learner credit balance to enroll into courses with no out of pocket cost.
+          </p>
+        )
+        : (
+          <p data-testid="offer-summary-text">
+            Apply your organization&apos;s learner credit balance to enroll into courses with no out of pocket cost.
+          </p>
+        ) }
 
-    {offer.endDatetime
+      {offer.endDatetime
       && (
         <p data-testid="offer-summary-end-date-text">
           Available until <b>{moment(offer.endDatetime).format('MMM D, YYYY')}</b>
         </p>
       )}
 
-    {searchCoursesCta && (
-      <Row className="mt-3 d-flex justify-content-end">
-        <Col xl={7}>{searchCoursesCta}</Col>
-      </Row>
-    )}
-  </SidebarCard>
-);
+      {searchCoursesCta && (
+        <Row className="mt-3 d-flex justify-content-end">
+          <Col xl={7}>{searchCoursesCta}</Col>
+        </Row>
+      )}
+    </SidebarCard>
+  );
+}
 
 EnterpriseOffersSummaryCard.propTypes = {
   offer: PropTypes.shape({
diff --git a/src/components/dashboard/sidebar/SidebarCard.jsx b/src/components/dashboard/sidebar/SidebarCard.jsx
index 0fa3ea598a..02ed1fd39f 100644
--- a/src/components/dashboard/sidebar/SidebarCard.jsx
+++ b/src/components/dashboard/sidebar/SidebarCard.jsx
@@ -2,21 +2,23 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { Card } from '@edx/paragon';
 
-const SidebarCard = ({
+function SidebarCard({
   title,
   children,
   cardClassNames,
   cardSectionClassNames,
-}) => (
-  <Card className={cardClassNames}>
-    {title && <Card.Header title={title} />}
-    <Card.Section
-      className={cardSectionClassNames}
-    >
-      {children}
-    </Card.Section>
-  </Card>
-);
+}) {
+  return (
+    <Card className={cardClassNames}>
+      {title && <Card.Header title={title} />}
+      <Card.Section
+        className={cardSectionClassNames}
+      >
+        {children}
+      </Card.Section>
+    </Card>
+  );
+}
 
 SidebarCard.propTypes = {
   title: PropTypes.node,
diff --git a/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx b/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx
index 2b1bd3f46c..7cd7c7303d 100644
--- a/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx
+++ b/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx
@@ -22,9 +22,9 @@ import {
 } from './data/constants';
 import SubscriptionExpirationWarningModal from '../../program-progress/SubscriptionExpiringWarningModal';
 
-const SubscriptionSummaryCard = ({
+function SubscriptionSummaryCard({
   subscriptionPlan, licenseRequest, className, courseEndDate, programProgressPage,
-}) => {
+}) {
   const [
     isSubscriptionExpiringWarningModalOpen,
     subscriptionExpiringWarningModalOpen,
@@ -146,7 +146,7 @@ const SubscriptionSummaryCard = ({
         )}
     </>
   );
-};
+}
 
 SubscriptionSummaryCard.propTypes = {
   subscriptionPlan: PropTypes.shape({
diff --git a/src/components/dashboard/sidebar/SubsidiesSummary.jsx b/src/components/dashboard/sidebar/SubsidiesSummary.jsx
index 0b41900010..9cb5ce2ea0 100644
--- a/src/components/dashboard/sidebar/SubsidiesSummary.jsx
+++ b/src/components/dashboard/sidebar/SubsidiesSummary.jsx
@@ -14,9 +14,9 @@ import SidebarCard from './SidebarCard';
 import { CourseEnrollmentsContext } from '../main-content/course-enrollments/CourseEnrollmentsContextProvider';
 import { SubsidyRequestsContext, SUBSIDY_TYPE } from '../../enterprise-subsidy-requests';
 
-const SubsidiesSummary = ({
+function SubsidiesSummary({
   className, showSearchCoursesCta, totalCoursesEligibleForCertificate, courseEndDate, programProgressPage,
-}) => {
+}) {
   const {
     enterpriseConfig: {
       slug,
@@ -121,7 +121,7 @@ const SubsidiesSummary = ({
         )}
     </>
   );
-};
+}
 
 SubsidiesSummary.propTypes = {
   totalCoursesEligibleForCertificate: PropTypes.number,
diff --git a/src/components/dashboard/sidebar/SupportInformation.jsx b/src/components/dashboard/sidebar/SupportInformation.jsx
index 1403098981..78cfed7dad 100644
--- a/src/components/dashboard/sidebar/SupportInformation.jsx
+++ b/src/components/dashboard/sidebar/SupportInformation.jsx
@@ -7,7 +7,7 @@ import PropTypes from 'prop-types';
 import { SidebarBlock } from '../../layout';
 import { CONTACT_HELP_EMAIL_MESSAGE, NEED_HELP_BLOCK_TITLE } from './data/constants';
 
-const SupportInformation = ({ className }) => {
+function SupportInformation({ className }) {
   const config = getConfig();
   const {
     enterpriseConfig: {
@@ -51,7 +51,7 @@ const SupportInformation = ({ className }) => {
       </p>
     </SidebarBlock>
   );
-};
+}
 
 SupportInformation.propTypes = {
   className: PropTypes.string,
diff --git a/src/components/dashboard/sidebar/tests/DashboardSidebar.test.jsx b/src/components/dashboard/sidebar/tests/DashboardSidebar.test.jsx
index edef058841..8acbba31cc 100644
--- a/src/components/dashboard/sidebar/tests/DashboardSidebar.test.jsx
+++ b/src/components/dashboard/sidebar/tests/DashboardSidebar.test.jsx
@@ -20,7 +20,7 @@ import { SubsidyRequestsContext } from '../../../enterprise-subsidy-requests';
 import { SUBSIDY_REQUEST_STATE, SUBSIDY_TYPE } from '../../../enterprise-subsidy-requests/constants';
 
 /* eslint-disable react/prop-types */
-const DashboardSidebarWithContext = ({
+function DashboardSidebarWithContext({
   initialAppState = { fakeContext: 'foo' },
   initialUserSubsidyState = {},
   initialSubsidyRequestsState = {
@@ -34,17 +34,19 @@ const DashboardSidebarWithContext = ({
   initialCourseEnrollmentsState = {
     courseEnrollmentsByStatus: {},
   },
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
-        <CourseEnrollmentsContextProvider value={initialCourseEnrollmentsState}>
-          <DashboardSidebar />
-        </CourseEnrollmentsContextProvider>
-      </SubsidyRequestsContext.Provider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
+          <CourseEnrollmentsContextProvider value={initialCourseEnrollmentsState}>
+            <DashboardSidebar />
+          </CourseEnrollmentsContextProvider>
+        </SubsidyRequestsContext.Provider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 describe('<DashboardSidebar />', () => {
diff --git a/src/components/dashboard/sidebar/tests/SubscriptionSummaryCard.test.jsx b/src/components/dashboard/sidebar/tests/SubscriptionSummaryCard.test.jsx
index 57452becc5..ce6c8d6350 100644
--- a/src/components/dashboard/sidebar/tests/SubscriptionSummaryCard.test.jsx
+++ b/src/components/dashboard/sidebar/tests/SubscriptionSummaryCard.test.jsx
@@ -42,13 +42,15 @@ const initialUserSubsidyState = {
   },
 };
 
-const SubscriptionSummaryCardForProgressPageWithContext = (props) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <SubscriptionSummaryCard {...props} />
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+function SubscriptionSummaryCardForProgressPageWithContext(props) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <SubscriptionSummaryCard {...props} />
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 describe('<SubscriptionSummaryCard />', () => {
   const subscriptionPlan = {
diff --git a/src/components/dashboard/tests/DashboardPage.test.jsx b/src/components/dashboard/tests/DashboardPage.test.jsx
index 684b32e9f7..77badd0cb8 100644
--- a/src/components/dashboard/tests/DashboardPage.test.jsx
+++ b/src/components/dashboard/tests/DashboardPage.test.jsx
@@ -104,24 +104,26 @@ let mockLocation = {
 };
 
 /* eslint-disable react/prop-types */
-const DashboardWithContext = ({
+function DashboardWithContext({
   initialAppState = defaultAppState,
   initialUserSubsidyState = defaultUserSubsidyState,
   initialCourseState = defaultCourseState,
   initialSubsidyRequestState = defaultSubsidyRequestState,
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
-        <CourseEnrollmentsContextProvider>
-          <CourseContextProvider initialState={initialCourseState}>
-            <DashboardPage />
-          </CourseContextProvider>
-        </CourseEnrollmentsContextProvider>
-      </SubsidyRequestsContext.Provider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
+          <CourseEnrollmentsContextProvider>
+            <CourseContextProvider initialState={initialCourseState}>
+              <DashboardPage />
+            </CourseContextProvider>
+          </CourseEnrollmentsContextProvider>
+        </SubsidyRequestsContext.Provider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 jest.mock('react-router-dom', () => ({
@@ -373,9 +375,7 @@ describe('<Dashboard />', () => {
       expect(screen.queryByText(SUBSCRIPTION_EXPIRED_MODAL_TITLE)).toBeFalsy();
       const modal = screen.getByRole('dialog');
       fireEvent.click(modal.querySelector('button'));
-      expect(mockSetCookies).toHaveBeenCalledWith(
-        `${SEEN_SUBSCRIPTION_EXPIRATION_MODAL_COOKIE_PREFIX}60-${defaultAppState.enterpriseConfig.uuid}-${subscriptionPlanId}`, true, { sameSite: 'strict' },
-      );
+      expect(mockSetCookies).toHaveBeenCalledWith(`${SEEN_SUBSCRIPTION_EXPIRATION_MODAL_COOKIE_PREFIX}60-${defaultAppState.enterpriseConfig.uuid}-${subscriptionPlanId}`, true, { sameSite: 'strict' });
     });
 
     it('should not show the modal if 60 >= daysUntilExpiration > 30 and the 60 day cookie has been set', () => {
@@ -418,9 +418,7 @@ describe('<Dashboard />', () => {
       expect(screen.queryByText(SUBSCRIPTION_EXPIRED_MODAL_TITLE)).toBeFalsy();
       const modal = screen.getByRole('dialog');
       fireEvent.click(modal.querySelector('button'));
-      expect(mockSetCookies).toHaveBeenCalledWith(
-        `${SEEN_SUBSCRIPTION_EXPIRATION_MODAL_COOKIE_PREFIX}30-${defaultAppState.enterpriseConfig.uuid}-${subscriptionPlanId}`, true, { sameSite: 'strict' },
-      );
+      expect(mockSetCookies).toHaveBeenCalledWith(`${SEEN_SUBSCRIPTION_EXPIRATION_MODAL_COOKIE_PREFIX}30-${defaultAppState.enterpriseConfig.uuid}-${subscriptionPlanId}`, true, { sameSite: 'strict' });
     });
 
     it('should not show the modal if 30 >= daysUntilExpiration > 0 and the 30 day cookie has been set', () => {
diff --git a/src/components/enterprise-invite/EnterpriseInvitePage.jsx b/src/components/enterprise-invite/EnterpriseInvitePage.jsx
index 2c1f38f57a..2e09af24a6 100644
--- a/src/components/enterprise-invite/EnterpriseInvitePage.jsx
+++ b/src/components/enterprise-invite/EnterpriseInvitePage.jsx
@@ -31,7 +31,7 @@ export const CTA_BUTTON_TEXT = 'Continue to edX.org';
  * If successful, the user is redirected to their enterprise customer's Learner Portal
  * slug. If an error occurred, an appropriate error page is shown and an error is logged.
  */
-const EnterpriseInvitePage = () => {
+function EnterpriseInvitePage() {
   const { enterpriseCustomerInviteKey } = useParams();
   const [inviteError, setInviteError] = useState();
   const [isLoading, setIsLoading] = useState(true);
@@ -114,6 +114,6 @@ const EnterpriseInvitePage = () => {
       )}
     </LoginRedirect>
   );
-};
+}
 
 export default EnterpriseInvitePage;
diff --git a/src/components/enterprise-page/EnterprisePage.test.jsx b/src/components/enterprise-page/EnterprisePage.test.jsx
index 1596333296..f15c5ddedd 100644
--- a/src/components/enterprise-page/EnterprisePage.test.jsx
+++ b/src/components/enterprise-page/EnterprisePage.test.jsx
@@ -56,10 +56,10 @@ describe('<EnterprisePage />', () => {
       slug: 'test-slug',
     };
     jest.spyOn(hooks, 'useEnterpriseCustomerConfig').mockImplementation(() => [mockEnterpriseConfig, undefined]);
-    const ChildComponent = () => {
+    function ChildComponent() {
       const contextValue = useContext(AppContext);
       return <div className="did-i-render" data-contextvalue={contextValue} />;
-    };
+    }
     const wrapper = mount(<EnterprisePage><ChildComponent /></EnterprisePage>);
     const actualContextValue = wrapper.find('.did-i-render').prop('data-contextvalue');
     expect(actualContextValue).toEqual(
diff --git a/src/components/enterprise-redirects/EnterpriseCustomerRedirect.jsx b/src/components/enterprise-redirects/EnterpriseCustomerRedirect.jsx
index 85daaaaf36..4663156f05 100644
--- a/src/components/enterprise-redirects/EnterpriseCustomerRedirect.jsx
+++ b/src/components/enterprise-redirects/EnterpriseCustomerRedirect.jsx
@@ -10,7 +10,7 @@ import {
   useSelectedEnterpriseUUIDByUserRoles,
 } from './data/hooks';
 
-const EnterpriseCustomerRedirect = () => {
+function EnterpriseCustomerRedirect() {
   const { authenticatedUser } = useContext(AppContext);
   const { roles } = authenticatedUser;
   const selectedEnterpriseUUID = useSelectedEnterpriseUUIDByUserRoles(roles);
@@ -29,6 +29,6 @@ const EnterpriseCustomerRedirect = () => {
   }
 
   return <Redirect to={`/${enterpriseCustomer.slug}`} />;
-};
+}
 
 export default EnterpriseCustomerRedirect;
diff --git a/src/components/enterprise-redirects/EnterprisePageRedirect.jsx b/src/components/enterprise-redirects/EnterprisePageRedirect.jsx
index ea555d5826..5756004e47 100644
--- a/src/components/enterprise-redirects/EnterprisePageRedirect.jsx
+++ b/src/components/enterprise-redirects/EnterprisePageRedirect.jsx
@@ -10,7 +10,7 @@ import {
   useSelectedEnterpriseUUIDByUserRoles,
 } from './data/hooks';
 
-const EnterprisePageRedirect = () => {
+function EnterprisePageRedirect() {
   const { authenticatedUser } = useContext(AppContext);
   const { redirectPath } = useParams();
   const { roles } = authenticatedUser;
@@ -34,6 +34,6 @@ const EnterprisePageRedirect = () => {
   }
 
   return <Redirect to={`/${enterpriseCustomer.slug}/${redirectPath}`} />;
-};
+}
 
 export default EnterprisePageRedirect;
diff --git a/src/components/enterprise-redirects/tests/EnterpriseCustomerRedirect.test.jsx b/src/components/enterprise-redirects/tests/EnterpriseCustomerRedirect.test.jsx
index d1fb9a07a5..180f877412 100644
--- a/src/components/enterprise-redirects/tests/EnterpriseCustomerRedirect.test.jsx
+++ b/src/components/enterprise-redirects/tests/EnterpriseCustomerRedirect.test.jsx
@@ -25,13 +25,15 @@ const TEST_ENTERPRISES = [
 ];
 
 /* eslint-disable react/prop-types */
-const EnterpriseCustomerRedirectWithContext = ({
+function EnterpriseCustomerRedirectWithContext({
   initialAppState = {},
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <EnterpriseCustomerRedirect />
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <EnterpriseCustomerRedirect />
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 describe('<EnterpriseCustomerRedirect />', () => {
diff --git a/src/components/enterprise-redirects/tests/EnterprisePageRedirect.test.jsx b/src/components/enterprise-redirects/tests/EnterprisePageRedirect.test.jsx
index 6401340025..abdc2493ea 100644
--- a/src/components/enterprise-redirects/tests/EnterprisePageRedirect.test.jsx
+++ b/src/components/enterprise-redirects/tests/EnterprisePageRedirect.test.jsx
@@ -26,13 +26,15 @@ const TEST_ENTERPRISES = [
 ];
 
 /* eslint-disable react/prop-types */
-const EnterprisePageRedirectWithContext = ({
+function EnterprisePageRedirectWithContext({
   initialAppState = {},
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <EnterprisePageRedirect />
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <EnterprisePageRedirect />
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 describe('<EnterprisePageRedirect />', () => {
diff --git a/src/components/enterprise-subsidy-requests/SubsidyRequestsContextProvider.jsx b/src/components/enterprise-subsidy-requests/SubsidyRequestsContextProvider.jsx
index 07ce904463..a074b2bc96 100644
--- a/src/components/enterprise-subsidy-requests/SubsidyRequestsContextProvider.jsx
+++ b/src/components/enterprise-subsidy-requests/SubsidyRequestsContextProvider.jsx
@@ -13,7 +13,7 @@ import { UserSubsidyContext } from '../enterprise-user-subsidy';
 
 export const SubsidyRequestsContext = createContext();
 
-const SubsidyRequestsContextProvider = ({ children }) => {
+function SubsidyRequestsContextProvider({ children }) {
   const {
     enterpriseConfig: {
       uuid: enterpriseUUID,
@@ -75,7 +75,7 @@ const SubsidyRequestsContextProvider = ({ children }) => {
       {children}
     </SubsidyRequestsContext.Provider>
   );
-};
+}
 
 SubsidyRequestsContextProvider.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/enterprise-subsidy-requests/tests/SubsidyRequestsContextProvider.test.jsx b/src/components/enterprise-subsidy-requests/tests/SubsidyRequestsContextProvider.test.jsx
index 48b9589b71..38f5758eb9 100644
--- a/src/components/enterprise-subsidy-requests/tests/SubsidyRequestsContextProvider.test.jsx
+++ b/src/components/enterprise-subsidy-requests/tests/SubsidyRequestsContextProvider.test.jsx
@@ -15,7 +15,7 @@ const enterpriseConfig = {
   uuid: 'example-enterprise-uuid',
 };
 
-const SubsidyRequestsContextProviderWrapper = ({
+function SubsidyRequestsContextProviderWrapper({
   initialAppState = {
     enterpriseConfig,
   },
@@ -28,15 +28,17 @@ const SubsidyRequestsContextProviderWrapper = ({
       subscriptions: [],
     },
   },
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <SubsidyRequestsContextProvider>
-        <div>children</div>
-      </SubsidyRequestsContextProvider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <SubsidyRequestsContextProvider>
+          <div>children</div>
+        </SubsidyRequestsContextProvider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 describe('<SubsidyRequestsContextProvider />', () => {
   beforeEach(() => {
diff --git a/src/components/enterprise-user-subsidy/AutoActivateLicense.jsx b/src/components/enterprise-user-subsidy/AutoActivateLicense.jsx
index 34c8d60f06..91e537067d 100644
--- a/src/components/enterprise-user-subsidy/AutoActivateLicense.jsx
+++ b/src/components/enterprise-user-subsidy/AutoActivateLicense.jsx
@@ -8,7 +8,7 @@ import { LICENSE_STATUS } from './data/constants';
 /**
  * Redirects users to the license activation page if they have an assigned license.
  */
-const AutoActivateLicense = () => {
+function AutoActivateLicense() {
   const { enterpriseConfig } = useContext(AppContext);
   const { subscriptionLicense } = useContext(UserSubsidyContext);
   const location = useLocation();
@@ -28,6 +28,6 @@ const AutoActivateLicense = () => {
     }}
     />
   );
-};
+}
 
 export default AutoActivateLicense;
diff --git a/src/components/enterprise-user-subsidy/UserSubsidy.jsx b/src/components/enterprise-user-subsidy/UserSubsidy.jsx
index 87d8f60106..6a06d92621 100644
--- a/src/components/enterprise-user-subsidy/UserSubsidy.jsx
+++ b/src/components/enterprise-user-subsidy/UserSubsidy.jsx
@@ -17,7 +17,7 @@ import { LOADING_SCREEN_READER_TEXT } from './data/constants';
 
 export const UserSubsidyContext = createContext();
 
-const UserSubsidy = ({ children }) => {
+function UserSubsidy({ children }) {
   const { enterpriseConfig } = useContext(AppContext);
   const [customerAgreementConfig, isLoadingCustomerAgreementConfig] = useCustomerAgreementData(enterpriseConfig.uuid);
   const {
@@ -115,7 +115,7 @@ const UserSubsidy = ({ children }) => {
       </UserSubsidyContext.Provider>
     </>
   );
-};
+}
 
 UserSubsidy.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/enterprise-user-subsidy/data/hooks.js b/src/components/enterprise-user-subsidy/data/hooks.js
index 5711cc9d4d..ee8b9bce17 100644
--- a/src/components/enterprise-user-subsidy/data/hooks.js
+++ b/src/components/enterprise-user-subsidy/data/hooks.js
@@ -177,12 +177,14 @@ export function useCouponCodes(enterpriseId) {
   useEffect(
     () => {
       if (features.ENROLL_WITH_CODES) {
-        fetchCouponCodeAssignments({
-          enterprise_uuid: enterpriseId,
-          full_discount_only: 'True', // Must be a string because the API does a string compare not a true JSON boolean compare.
-          is_active: 'True',
-        },
-        dispatch);
+        fetchCouponCodeAssignments(
+          {
+            enterprise_uuid: enterpriseId,
+            full_discount_only: 'True', // Must be a string because the API does a string compare not a true JSON boolean compare.
+            is_active: 'True',
+          },
+          dispatch,
+        );
       }
     },
     [enterpriseId],
diff --git a/src/components/enterprise-user-subsidy/enterprise-offers/EnterpriseOffersBalanceAlert.jsx b/src/components/enterprise-user-subsidy/enterprise-offers/EnterpriseOffersBalanceAlert.jsx
index a680856a50..64962b6bac 100644
--- a/src/components/enterprise-user-subsidy/enterprise-offers/EnterpriseOffersBalanceAlert.jsx
+++ b/src/components/enterprise-user-subsidy/enterprise-offers/EnterpriseOffersBalanceAlert.jsx
@@ -16,7 +16,7 @@ import {
   OFFER_BALANCE_CLICK_EVENT,
 } from './data/constants';
 
-const EnterpriseOffersBalanceAlert = ({ hasNoEnterpriseOffersBalance }) => {
+function EnterpriseOffersBalanceAlert({ hasNoEnterpriseOffersBalance }) {
   const {
     enterpriseConfig: { uuid: enterpriseCustomerUUID, adminUsers },
   } = useContext(AppContext);
@@ -59,7 +59,7 @@ const EnterpriseOffersBalanceAlert = ({ hasNoEnterpriseOffersBalance }) => {
       </Alert>
     </Container>
   );
-};
+}
 
 EnterpriseOffersBalanceAlert.propTypes = {
   hasNoEnterpriseOffersBalance: PropTypes.bool.isRequired,
diff --git a/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx b/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx
index 8ffa9239a5..8c80b2eb9d 100644
--- a/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx
+++ b/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx
@@ -10,21 +10,23 @@ import {
   NO_BALANCE_ALERT_TEXT,
 } from '../data/constants';
 
-const EnterpriseOffersBalanceAlertWrapper = ({
+function EnterpriseOffersBalanceAlertWrapper({
   enterpriseConfig = {
     adminUsers: [],
   },
   hasNoEnterpriseOffersBalance,
-}) => (
-  <AppContext.Provider value={{
-    enterpriseConfig,
-  }}
-  >
-    <EnterpriseOffersBalanceAlert
-      hasNoEnterpriseOffersBalance={hasNoEnterpriseOffersBalance}
-    />
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={{
+      enterpriseConfig,
+    }}
+    >
+      <EnterpriseOffersBalanceAlert
+        hasNoEnterpriseOffersBalance={hasNoEnterpriseOffersBalance}
+      />
+    </AppContext.Provider>
+  );
+}
 
 describe('<EnterpriseOffersBalanceAlert />', () => {
   it('should not render mailto link if there are no enterprise admins', () => {
diff --git a/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx b/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx
index 1d06416ac3..a4cb6fb4b8 100644
--- a/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx
+++ b/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx
@@ -12,15 +12,17 @@ const TEST_ENTERPRISE_SLUG = 'test-slug';
 const initialPathname = `/${TEST_ENTERPRISE_SLUG}`;
 
 // eslint-disable-next-line react/prop-types
-const AutoActivateLicenseWrapper = ({ subscriptionLicense }) => (
-  <Route path={initialPathname} exact>
-    <AppContext.Provider value={{ enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG } }}>
-      <UserSubsidyContext.Provider value={{ subscriptionLicense }}>
-        <AutoActivateLicense />
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  </Route>
-);
+function AutoActivateLicenseWrapper({ subscriptionLicense }) {
+  return (
+    <Route path={initialPathname} exact>
+      <AppContext.Provider value={{ enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG } }}>
+        <UserSubsidyContext.Provider value={{ subscriptionLicense }}>
+          <AutoActivateLicense />
+        </UserSubsidyContext.Provider>
+      </AppContext.Provider>
+    </Route>
+  );
+}
 
 describe('<AutoActivationLicense />', () => {
   afterEach(() => jest.clearAllMocks());
@@ -45,11 +47,9 @@ describe('<AutoActivationLicense />', () => {
   test('renders when license status is assigned', () => {
     const activationKey = 'test-uuid';
     const subscriptionLicense = { status: 'assigned', activationKey };
-    const { history } = renderWithRouter(
-      <AutoActivateLicenseWrapper subscriptionLicense={subscriptionLicense} />, {
-        route: initialPathname,
-      },
-    );
+    const { history } = renderWithRouter(<AutoActivateLicenseWrapper subscriptionLicense={subscriptionLicense} />, {
+      route: initialPathname,
+    });
     expect(history.location.pathname).toEqual(`/test-slug/licenses/${activationKey}/activate`);
     expect(history.location.state.from).toEqual(initialPathname);
   });
diff --git a/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx b/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
index 55bcabfa6a..7fad446394 100644
--- a/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
+++ b/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
@@ -56,37 +56,39 @@ const mockEmptyListResponse = {
 };
 
 /* eslint-disable react/prop-types */
-const UserSubsidyWithAppContext = ({
+function UserSubsidyWithAppContext({
   enterpriseConfig = {},
   contextValue = {},
   children,
-}) => (
-  <AppContext.Provider
-    value={{
-      enterpriseConfig: {
-        slug: TEST_ENTERPRISE_SLUG,
-        uuid: TEST_ENTERPRISE_UUID,
-        ...enterpriseConfig,
-      },
-      ...contextValue,
-    }}
-  >
-    <UserSubsidy>
-      {children}
-    </UserSubsidy>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider
+      value={{
+        enterpriseConfig: {
+          slug: TEST_ENTERPRISE_SLUG,
+          uuid: TEST_ENTERPRISE_UUID,
+          ...enterpriseConfig,
+        },
+        ...contextValue,
+      }}
+    >
+      <UserSubsidy>
+        {children}
+      </UserSubsidy>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
-const SubscriptionLicenseConsumer = () => {
+function SubscriptionLicenseConsumer() {
   const { subscriptionLicense } = useContext(UserSubsidyContext);
   return <div>License status: {subscriptionLicense?.status || 'none'}</div>;
-};
+}
 
-const CouponCodesConsumer = () => {
+function CouponCodesConsumer() {
   const { couponCodes } = useContext(UserSubsidyContext);
   return <div>Coupon codes count: {couponCodes?.couponCodesCount || 'none'}</div>;
-};
+}
 
 describe('UserSubsidy', () => {
   describe('without subsidy', () => {
diff --git a/src/components/error-page/ErrorPage.jsx b/src/components/error-page/ErrorPage.jsx
index 91d00d5a3c..8286123035 100644
--- a/src/components/error-page/ErrorPage.jsx
+++ b/src/components/error-page/ErrorPage.jsx
@@ -12,30 +12,32 @@ import ErrorPageHeader from './ErrorPageHeader';
  * React component for the error case when attempting to link a user to a customer. Renders
  * a header, error alert, and a footer.
  */
-const ErrorPage = ({
+function ErrorPage({
   title,
   subtitle,
   showSiteFooter,
   children,
-}) => (
-  <>
-    <ErrorPageHeader />
-    <main id="content" className="error-page-container">
-      <Container>
-        <Col xs={12} lg={{ span: 10, offset: 1 }}>
-          <h1 className="error-page-title h2">{title}</h1>
-          {subtitle && (
-            <h2 className="error-page-subtitle h3">{subtitle}</h2>
-          )}
-          <div className="error-page-message">
-            {children}
-          </div>
-        </Col>
-      </Container>
-    </main>
-    {showSiteFooter && <SiteFooter />}
-  </>
-);
+}) {
+  return (
+    <>
+      <ErrorPageHeader />
+      <main id="content" className="error-page-container">
+        <Container>
+          <Col xs={12} lg={{ span: 10, offset: 1 }}>
+            <h1 className="error-page-title h2">{title}</h1>
+            {subtitle && (
+              <h2 className="error-page-subtitle h3">{subtitle}</h2>
+            )}
+            <div className="error-page-message">
+              {children}
+            </div>
+          </Col>
+        </Container>
+      </main>
+      {showSiteFooter && <SiteFooter />}
+    </>
+  );
+}
 
 ErrorPage.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/error-page/ErrorPage.test.jsx b/src/components/error-page/ErrorPage.test.jsx
index bf03686320..de190136a8 100644
--- a/src/components/error-page/ErrorPage.test.jsx
+++ b/src/components/error-page/ErrorPage.test.jsx
@@ -8,7 +8,9 @@ import ErrorPage from './ErrorPage';
 
 jest.mock('@edx/frontend-platform/auth');
 jest.mock('@edx/frontend-platform/config');
-jest.mock('@edx/frontend-component-footer', () => () => <div data-testid="site-footer" />);
+jest.mock('@edx/frontend-component-footer', () => function () {
+  return <div data-testid="site-footer" />;
+});
 
 getAuthenticatedUser.mockReturnValue({
   id: 1,
diff --git a/src/components/error-page/ErrorPageHeader.jsx b/src/components/error-page/ErrorPageHeader.jsx
index 03cf67a1c7..308c3e0957 100644
--- a/src/components/error-page/ErrorPageHeader.jsx
+++ b/src/components/error-page/ErrorPageHeader.jsx
@@ -16,7 +16,7 @@ import { getConfig } from '@edx/frontend-platform/config';
  * This component also acts as a message page for the logout case, hence adding some checks for
  * non existent variables.
  */
-const ErrorPageHeader = () => {
+function ErrorPageHeader() {
   const config = getConfig();
   const authenticatedUser = getAuthenticatedUser();
   const { username, profileImage } = authenticatedUser || { username: '', profileImage: '' };
@@ -55,6 +55,6 @@ const ErrorPageHeader = () => {
       </Navbar>
     </header>
   );
-};
+}
 
 export default ErrorPageHeader;
diff --git a/src/components/integration-warning-modal/IntegrationWarningModal.jsx b/src/components/integration-warning-modal/IntegrationWarningModal.jsx
index 073557a7d6..d0fee67c57 100644
--- a/src/components/integration-warning-modal/IntegrationWarningModal.jsx
+++ b/src/components/integration-warning-modal/IntegrationWarningModal.jsx
@@ -6,9 +6,9 @@ import { getConfig } from '@edx/frontend-platform/config';
 import { MODAL_BUTTON_TEXT, MODAL_TITLE } from './data/constants';
 import ModalBody from './ModalBody';
 
-const IntegrationWarningModal = ({
+function IntegrationWarningModal({
   isOpen,
-}) => {
+}) {
   const config = getConfig();
   const cookies = new Cookies();
   const isWarningDismissed = () => {
@@ -45,7 +45,7 @@ const IntegrationWarningModal = ({
       />
     </div>
   );
-};
+}
 
 IntegrationWarningModal.propTypes = {
   isOpen: PropTypes.bool,
diff --git a/src/components/integration-warning-modal/ModalBody.jsx b/src/components/integration-warning-modal/ModalBody.jsx
index bc0e98fed8..90d9a9edc4 100644
--- a/src/components/integration-warning-modal/ModalBody.jsx
+++ b/src/components/integration-warning-modal/ModalBody.jsx
@@ -1,13 +1,15 @@
 import React from 'react';
 
-const ModalBody = () => (
-  <div>
-    <p className="m-0">
-      You are viewing only the edX courses that your organization has made available to you.
-      There may be other learning resources from different sources available in your learning
-      management system.
-    </p>
-  </div>
-);
+function ModalBody() {
+  return (
+    <div>
+      <p className="m-0">
+        You are viewing only the edX courses that your organization has made available to you.
+        There may be other learning resources from different sources available in your learning
+        management system.
+      </p>
+    </div>
+  );
+}
 
 export default ModalBody;
diff --git a/src/components/layout/MainContent.jsx b/src/components/layout/MainContent.jsx
index ae975940ee..e89b406033 100644
--- a/src/components/layout/MainContent.jsx
+++ b/src/components/layout/MainContent.jsx
@@ -1,11 +1,13 @@
 import React from 'react';
 import PropTypes from 'prop-types';
 
-const MainContent = props => (
-  <article className="col-xs-12 col-lg-8">
-    {props.children}
-  </article>
-);
+function MainContent(props) {
+  return (
+    <article className="col-xs-12 col-lg-8">
+      {props.children}
+    </article>
+  );
+}
 
 MainContent.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/layout/Sidebar.jsx b/src/components/layout/Sidebar.jsx
index dd06aca1e7..5789b2396a 100644
--- a/src/components/layout/Sidebar.jsx
+++ b/src/components/layout/Sidebar.jsx
@@ -1,11 +1,13 @@
 import React from 'react';
 import PropTypes from 'prop-types';
 
-const Sidebar = props => (
-  <aside className="col-12 col-lg-4 pl-5" {...props}>
-    {props.children}
-  </aside>
-);
+function Sidebar(props) {
+  return (
+    <aside className="col-12 col-lg-4 pl-5" {...props}>
+      {props.children}
+    </aside>
+  );
+}
 
 Sidebar.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/layout/SidebarBlock.jsx b/src/components/layout/SidebarBlock.jsx
index 91a5da9432..4b9adef600 100644
--- a/src/components/layout/SidebarBlock.jsx
+++ b/src/components/layout/SidebarBlock.jsx
@@ -2,12 +2,12 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
 
-const SidebarBlock = ({
+function SidebarBlock({
   className,
   title,
   children,
   titleOptions,
-}) => {
+}) {
   const { tag: TitleTag } = titleOptions;
   return (
     <div className={className}>
@@ -19,7 +19,7 @@ const SidebarBlock = ({
       {children}
     </div>
   );
-};
+}
 
 SidebarBlock.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/license-activation/LicenseActivation.jsx b/src/components/license-activation/LicenseActivation.jsx
index 127b3de0bd..a326bbf1e4 100644
--- a/src/components/license-activation/LicenseActivation.jsx
+++ b/src/components/license-activation/LicenseActivation.jsx
@@ -12,7 +12,7 @@ import { UserSubsidyContext } from '../enterprise-user-subsidy/UserSubsidy';
 
 export const LOADING_MESSAGE = 'Your enterprise license is being activated! You will be automatically redirected to your organization\'s learner portal shortly.';
 
-const LicenseActivation = () => {
+function LicenseActivation() {
   const { enterpriseConfig } = useContext(AppContext);
   const renderContactHelpText = useRenderContactHelpText(enterpriseConfig);
   const location = useLocation();
@@ -66,6 +66,6 @@ const LicenseActivation = () => {
       </Container>
     </>
   );
-};
+}
 
 export default LicenseActivation;
diff --git a/src/components/license-activation/LicenseActivationErrorAlert.jsx b/src/components/license-activation/LicenseActivationErrorAlert.jsx
index 264a821cb4..93f9cf1118 100644
--- a/src/components/license-activation/LicenseActivationErrorAlert.jsx
+++ b/src/components/license-activation/LicenseActivationErrorAlert.jsx
@@ -4,18 +4,20 @@ import PropTypes from 'prop-types';
 import { Helmet } from 'react-helmet';
 import { Alert, Container } from '@edx/paragon';
 
-const LicenseActivationErrorAlert = ({ title, contactHelpText }) => (
-  <>
-    <Helmet title={title} />
-    <Container size="lg" className="mt-3">
-      <Alert variant="danger">
-        We were unable to activate a license for this user. Please double-check that you have an
-        assigned license and verify the email to which it was sent. If you run into further issues,
-        please {contactHelpText} for assistance.
-      </Alert>
-    </Container>
-  </>
-);
+function LicenseActivationErrorAlert({ title, contactHelpText }) {
+  return (
+    <>
+      <Helmet title={title} />
+      <Container size="lg" className="mt-3">
+        <Alert variant="danger">
+          We were unable to activate a license for this user. Please double-check that you have an
+          assigned license and verify the email to which it was sent. If you run into further issues,
+          please {contactHelpText} for assistance.
+        </Alert>
+      </Container>
+    </>
+  );
+}
 
 LicenseActivationErrorAlert.propTypes = {
   title: PropTypes.string.isRequired,
diff --git a/src/components/license-activation/LicenseActivationPage.jsx b/src/components/license-activation/LicenseActivationPage.jsx
index 80b5391598..2499d86ad9 100644
--- a/src/components/license-activation/LicenseActivationPage.jsx
+++ b/src/components/license-activation/LicenseActivationPage.jsx
@@ -14,7 +14,7 @@ import { useRenderContactHelpText } from '../../utils/hooks';
 
 export const LOADING_MESSAGE = 'Your enterprise license is being activated! You will be automatically redirected to your organization\'s learner portal shortly.';
 
-const LicenseActivationPage = () => {
+function LicenseActivationPage() {
   const user = getAuthenticatedUser();
   const { enterpriseConfig } = useContext(AppContext);
   const { subscriptionLicense } = useContext(UserSubsidyContext);
@@ -55,6 +55,6 @@ const LicenseActivationPage = () => {
   }
 
   return <LicenseActivation />;
-};
+}
 
 export default LicenseActivationPage;
diff --git a/src/components/license-activation/tests/LicenseActivation.test.jsx b/src/components/license-activation/tests/LicenseActivation.test.jsx
index e3891a515c..a61dfe6fab 100644
--- a/src/components/license-activation/tests/LicenseActivation.test.jsx
+++ b/src/components/license-activation/tests/LicenseActivation.test.jsx
@@ -21,27 +21,29 @@ const TEST_ENTERPRISE_SLUG = 'test-enterprise-slug';
 const TEST_ACTIVATION_KEY = '00000000-0000-0000-0000-000000000000';
 const TEST_ROUTE = `/${TEST_ENTERPRISE_SLUG}/licenses/${TEST_ACTIVATION_KEY}/activate`;
 
-const LicenseActivationWithAppContext = ({
+function LicenseActivationWithAppContext({
   initialUserSubsidyState = {
     activateUserLicense: jest.fn(() => true),
   },
-}) => (
-  <AppContext.Provider
-    value={{
-      enterpriseConfig: {
-        uuid: TEST_ENTERPRISE_UUID,
-        slug: TEST_ENTERPRISE_SLUG,
-        name: 'Test Enterprise',
-      },
-    }}
-  >
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <Route exact path="/:enterpriseSlug/licenses/:activationKey/activate">
-        <LicenseActivation />
-      </Route>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider
+      value={{
+        enterpriseConfig: {
+          uuid: TEST_ENTERPRISE_UUID,
+          slug: TEST_ENTERPRISE_SLUG,
+          name: 'Test Enterprise',
+        },
+      }}
+    >
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <Route exact path="/:enterpriseSlug/licenses/:activationKey/activate">
+          <LicenseActivation />
+        </Route>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 describe('LicenseActivation', () => {
   beforeEach(() => jest.clearAllMocks());
@@ -50,14 +52,12 @@ describe('LicenseActivation', () => {
     // For the initial state, there is no activation success or error
     const mockActivateUserLicense = jest.fn();
 
-    const { history } = renderWithRouter(
-      <LicenseActivationWithAppContext initialUserSubsidyState={{
-        activateUserLicense: mockActivateUserLicense,
-      }}
-      />, {
-        route: TEST_ROUTE,
-      },
-    );
+    const { history } = renderWithRouter(<LicenseActivationWithAppContext initialUserSubsidyState={{
+      activateUserLicense: mockActivateUserLicense,
+    }}
+    />, {
+      route: TEST_ROUTE,
+    });
 
     await waitFor(() => {
       expect(mockActivateUserLicense).toHaveBeenCalledWith(false);
@@ -75,14 +75,12 @@ describe('LicenseActivation', () => {
       new Error("Couldn't activate license"),
     );
 
-    const { history } = renderWithRouter(
-      <LicenseActivationWithAppContext initialUserSubsidyState={{
-        activateUserLicense: mockActivateUserLicense,
-      }}
-      />, {
-        route: TEST_ROUTE,
-      },
-    );
+    const { history } = renderWithRouter(<LicenseActivationWithAppContext initialUserSubsidyState={{
+      activateUserLicense: mockActivateUserLicense,
+    }}
+    />, {
+      route: TEST_ROUTE,
+    });
 
     expect(mockActivateUserLicense).toHaveBeenCalledWith(false);
 
@@ -105,14 +103,12 @@ describe('LicenseActivation', () => {
     }
 
     const mockActivateUserLicense = jest.fn();
-    const { history } = renderWithRouter(
-      <LicenseActivationWithAppContext initialUserSubsidyState={{
-        activateUserLicense: mockActivateUserLicense,
-      }}
-      />, {
-        route: TEST_ROUTE,
-      },
-    );
+    const { history } = renderWithRouter(<LicenseActivationWithAppContext initialUserSubsidyState={{
+      activateUserLicense: mockActivateUserLicense,
+    }}
+    />, {
+      route: TEST_ROUTE,
+    });
 
     await waitFor(() => {
       expect(mockActivateUserLicense).toHaveBeenCalledWith(!!redirectedFrom);
diff --git a/src/components/license-activation/tests/LicenseActivationPage.test.jsx b/src/components/license-activation/tests/LicenseActivationPage.test.jsx
index 5edb513e4c..be4381dcf4 100644
--- a/src/components/license-activation/tests/LicenseActivationPage.test.jsx
+++ b/src/components/license-activation/tests/LicenseActivationPage.test.jsx
@@ -35,7 +35,7 @@ const TEST_ENTERPRISE_SLUG = 'test-enterprise-slug';
 const TEST_ACTIVATION_KEY = '00000000-0000-0000-0000-000000000000';
 const TEST_ROUTE = `/${TEST_ENTERPRISE_SLUG}/licenses/${TEST_ACTIVATION_KEY}/activate`;
 
-const LicenseActivationPageWithContext = ({
+function LicenseActivationPageWithContext({
   initialUserSubsidyState = {
     subscriptionLicense: undefined,
     couponCodes: {
@@ -43,23 +43,25 @@ const LicenseActivationPageWithContext = ({
       couponCodesCount: 0,
     },
   },
-}) => (
-  <AppContext.Provider
-    value={{
-      enterpriseConfig: {
-        uuid: TEST_ENTERPRISE_UUID,
-        slug: TEST_ENTERPRISE_SLUG,
-        name: 'Test Enterprise',
-      },
-    }}
-  >
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <Route exact path="/:enterpriseSlug/licenses/:activationKey/activate">
-        <LicenseActivationPage />
-      </Route>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider
+      value={{
+        enterpriseConfig: {
+          uuid: TEST_ENTERPRISE_UUID,
+          slug: TEST_ENTERPRISE_SLUG,
+          name: 'Test Enterprise',
+        },
+      }}
+    >
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <Route exact path="/:enterpriseSlug/licenses/:activationKey/activate">
+          <LicenseActivationPage />
+        </Route>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 describe('<LicenseActivationPageWithAppContext />', () => {
   it.each(
diff --git a/src/components/loading-spinner/LoadingSpinner.jsx b/src/components/loading-spinner/LoadingSpinner.jsx
index 58954d52c2..ba80877dc8 100644
--- a/src/components/loading-spinner/LoadingSpinner.jsx
+++ b/src/components/loading-spinner/LoadingSpinner.jsx
@@ -3,13 +3,15 @@ import PropTypes from 'prop-types';
 
 import './styles/LoadingSpinner.scss';
 
-const LoadingSpinner = ({ screenReaderText }) => (
-  <div className="loading-spinner d-flex justify-content-center align-items-center">
-    <div className="spinner-border text-primary" role="status">
-      <span className="sr-only">{screenReaderText}</span>
+function LoadingSpinner({ screenReaderText }) {
+  return (
+    <div className="loading-spinner d-flex justify-content-center align-items-center">
+      <div className="spinner-border text-primary" role="status">
+        <span className="sr-only">{screenReaderText}</span>
+      </div>
     </div>
-  </div>
-);
+  );
+}
 
 LoadingSpinner.propTypes = {
   screenReaderText: PropTypes.string.isRequired,
diff --git a/src/components/pathway/PathwayModal.jsx b/src/components/pathway/PathwayModal.jsx
index ae38e62609..40bc5d772c 100644
--- a/src/components/pathway/PathwayModal.jsx
+++ b/src/components/pathway/PathwayModal.jsx
@@ -34,8 +34,10 @@ const renderStepNodes = (step, slug) => [].concat(step.courses, step.programs).m
         </h3>
         {/* eslint-disable react/no-danger */}
         <div dangerouslySetInnerHTML={{
-          __html: DOMPurify.sanitize(node.shortDescription,
-            { USE_PROFILES: { html: true } }),
+          __html: DOMPurify.sanitize(
+            node.shortDescription,
+            { USE_PROFILES: { html: true } },
+          ),
         }}
         />
       </Col>
@@ -52,7 +54,7 @@ const renderStepNodes = (step, slug) => [].concat(step.courses, step.programs).m
   );
 });
 
-const PathwayModal = ({ learnerPathwayUuid, isOpen, onClose }) => {
+function PathwayModal({ learnerPathwayUuid, isOpen, onClose }) {
   const { enterpriseConfig: { slug } } = useContext(AppContext);
   const pathwayUuid = isOpen ? learnerPathwayUuid : null;
   const [pathway, isLoading] = useLearnerPathwayData({ learnerPathwayUuid: pathwayUuid });
@@ -165,11 +167,11 @@ const PathwayModal = ({ learnerPathwayUuid, isOpen, onClose }) => {
 
     </MarketingModal>
   );
-};
+}
 
-const SkeletonPathwayModal = (props) => (
-  <PathwayModal {...props} isLoading />
-);
+function SkeletonPathwayModal(props) {
+  return <PathwayModal {...props} isLoading />;
+}
 
 PathwayModal.propTypes = {
   learnerPathwayUuid: PropTypes.string.isRequired,
diff --git a/src/components/pathway/SearchPathwayCard.jsx b/src/components/pathway/SearchPathwayCard.jsx
index 215ac9f044..7231956cd4 100644
--- a/src/components/pathway/SearchPathwayCard.jsx
+++ b/src/components/pathway/SearchPathwayCard.jsx
@@ -37,7 +37,7 @@ const filterSkillNames = skillNames => {
   return skillsToReturn;
 };
 
-const SearchPathwayCard = ({ hit, isLoading, isSkillQuizResult }) => {
+function SearchPathwayCard({ hit, isLoading, isSkillQuizResult }) {
   const { enterpriseConfig: { uuid: enterpriseCustomerUUID, slug } } = useContext(AppContext);
 
   const pathway = useMemo(() => {
@@ -158,11 +158,11 @@ const SearchPathwayCard = ({ hit, isLoading, isSkillQuizResult }) => {
       </Link>
     </div>
   );
-};
+}
 
-const SkeletonPathwayCard = (props) => (
-  <SearchPathwayCard {...props} isLoading />
-);
+function SkeletonPathwayCard(props) {
+  return <SearchPathwayCard {...props} isLoading />;
+}
 
 SearchPathwayCard.propTypes = {
   hit: PropTypes.shape({
diff --git a/src/components/pathway/tests/PathwayModal.test.jsx b/src/components/pathway/tests/PathwayModal.test.jsx
index 3c4c268eb7..e3b33c18df 100644
--- a/src/components/pathway/tests/PathwayModal.test.jsx
+++ b/src/components/pathway/tests/PathwayModal.test.jsx
@@ -26,15 +26,17 @@ jest.mock('react-loading-skeleton', () => ({
   default: (props = {}) => <div data-testid={props['data-testid']} />,
 }));
 
-const PathwayModalWithAppContext = (props) => (
-  <AppContext.Provider
-    value={{
-      enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG },
-    }}
-  >
-    <PathwayModal {...props} />
-  </AppContext.Provider>
-);
+function PathwayModalWithAppContext(props) {
+  return (
+    <AppContext.Provider
+      value={{
+        enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG },
+      }}
+    >
+      <PathwayModal {...props} />
+    </AppContext.Provider>
+  );
+}
 
 const defaultProps = {
   learnerPathwayUuid: TEST_PATHWAY_DATA.uuid,
diff --git a/src/components/pathway/tests/SearchPathwayCard.test.jsx b/src/components/pathway/tests/SearchPathwayCard.test.jsx
index 08f657284a..ae91dbf180 100644
--- a/src/components/pathway/tests/SearchPathwayCard.test.jsx
+++ b/src/components/pathway/tests/SearchPathwayCard.test.jsx
@@ -28,15 +28,17 @@ jest.mock('@edx/frontend-enterprise-utils', () => {
   });
 });
 
-const SearchPathwayCardWithAppContext = (props) => (
-  <AppContext.Provider
-    value={{
-      enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG, uuid: TEST_ENTERPRISE_UUID },
-    }}
-  >
-    <SearchPathwayCard {...props} />
-  </AppContext.Provider>
-);
+function SearchPathwayCardWithAppContext(props) {
+  return (
+    <AppContext.Provider
+      value={{
+        enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG, uuid: TEST_ENTERPRISE_UUID },
+      }}
+    >
+      <SearchPathwayCard {...props} />
+    </AppContext.Provider>
+  );
+}
 
 const TEST_PATHWAY_UUID = 'test-pathway-uuid';
 const TEST_TITLE = 'Test Title';
diff --git a/src/components/program-progress/CouponCodesWarningModal.jsx b/src/components/program-progress/CouponCodesWarningModal.jsx
index d50102de98..5e8fdf9b37 100644
--- a/src/components/program-progress/CouponCodesWarningModal.jsx
+++ b/src/components/program-progress/CouponCodesWarningModal.jsx
@@ -6,7 +6,7 @@ import { AppContext } from '@edx/frontend-platform/react';
 import PropTypes from 'prop-types';
 import { COUPON_CODE_EXPIRING_MODAL_TITLE } from './data/constants';
 
-const CouponCodesWarningModal = ({ isCouponCodeWarningModalOpen, onCouponCodeWarningModalClose, couponCodesCount }) => {
+function CouponCodesWarningModal({ isCouponCodeWarningModalOpen, onCouponCodeWarningModalClose, couponCodesCount }) {
   const {
     enterpriseConfig: { contactEmail },
   } = useContext(AppContext);
@@ -55,7 +55,7 @@ const CouponCodesWarningModal = ({ isCouponCodeWarningModalOpen, onCouponCodeWar
       {renderExpiredBody()}
     </StandardModal>
   );
-};
+}
 CouponCodesWarningModal.propTypes = {
   isCouponCodeWarningModalOpen: PropTypes.bool.isRequired,
   onCouponCodeWarningModalClose: PropTypes.func.isRequired,
diff --git a/src/components/program-progress/ProgramListingCard.jsx b/src/components/program-progress/ProgramListingCard.jsx
index 947f25fe50..55257cc8cc 100644
--- a/src/components/program-progress/ProgramListingCard.jsx
+++ b/src/components/program-progress/ProgramListingCard.jsx
@@ -10,7 +10,7 @@ import { AppContext } from '@edx/frontend-platform/react';
 import Truncate from 'react-truncate';
 import { getProgramIcon } from '../course/data/utils';
 
-const ProgramListingCard = ({ program }) => {
+function ProgramListingCard({ program }) {
   const { enterpriseConfig } = useContext(AppContext);
   const [windowWidth, setWindowWidth] = useState(window.innerWidth);
   const history = useHistory();
@@ -114,7 +114,7 @@ const ProgramListingCard = ({ program }) => {
       </Card.Section>
     </Card>
   );
-};
+}
 
 ProgramListingCard.propTypes = {
   program: PropTypes.shape({
diff --git a/src/components/program-progress/ProgramListingPage.jsx b/src/components/program-progress/ProgramListingPage.jsx
index 7fbb41b2cf..ce11795c54 100644
--- a/src/components/program-progress/ProgramListingPage.jsx
+++ b/src/components/program-progress/ProgramListingPage.jsx
@@ -20,7 +20,7 @@ import ProgramListingCard from './ProgramListingCard';
 
 import { CONTENT_TYPE_PROGRAM } from '../search/constants';
 
-const ProgramListingPage = () => {
+function ProgramListingPage() {
   const { enterpriseConfig } = useContext(AppContext);
 
   const [learnerProgramsData, fetchError] = useLearnerProgramsListData(enterpriseConfig.uuid);
@@ -38,23 +38,21 @@ const ProgramListingPage = () => {
   }
 
   return (
-    <>
-      <Container size="lg" className="py-5 w-100">
-        <Row>
-          {learnerProgramsData.length > 0 ? (
-            learnerProgramsData.map((program) => <ProgramListingCard program={program} key={program.title} />)
-          ) : (
-            <div className="no-programs-message">
-              <h2>{NO_PROGRAMS_ERROR_MESSAGE}</h2>
-              <Link to={`/${enterpriseConfig.slug}/search?content_type=${CONTENT_TYPE_PROGRAM}`}>
-                <Button variant="primary" iconBefore={Search} className="mt-2">Explore programs</Button>
-              </Link>
-            </div>
-          )}
-        </Row>
-      </Container>
-    </>
+    <Container size="lg" className="py-5 w-100">
+      <Row>
+        {learnerProgramsData.length > 0 ? (
+          learnerProgramsData.map((program) => <ProgramListingCard program={program} key={program.title} />)
+        ) : (
+          <div className="no-programs-message">
+            <h2>{NO_PROGRAMS_ERROR_MESSAGE}</h2>
+            <Link to={`/${enterpriseConfig.slug}/search?content_type=${CONTENT_TYPE_PROGRAM}`}>
+              <Button variant="primary" iconBefore={Search} className="mt-2">Explore programs</Button>
+            </Link>
+          </div>
+        )}
+      </Row>
+    </Container>
   );
-};
+}
 
 export default ProgramListingPage;
diff --git a/src/components/program-progress/ProgramPathwayOpportunity.jsx b/src/components/program-progress/ProgramPathwayOpportunity.jsx
index 535a98e9f9..fdec733d68 100644
--- a/src/components/program-progress/ProgramPathwayOpportunity.jsx
+++ b/src/components/program-progress/ProgramPathwayOpportunity.jsx
@@ -2,33 +2,35 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { Button } from '@edx/paragon';
 
-const ProgramPathwayOpportunity = ({ pathways, title, pathwayClass }) => (
-  <div className={pathwayClass}>
-    <h2 className="divider-heading"> { title } </h2>
-    {pathways.map((pathway) => (
-      <div className="pathway-wrapper">
-        <div className="pathway-info">
-          <h2 className="pathway-heading"> { pathway.name } </h2>
-          { pathway.description && <p> {pathway.description}</p> }
-          { pathway.destinationUrl && (
-            <div className="sidebar-button-wrapper">
-              <a href={pathway.destinationUrl} className="pathway-link">
-                <Button
-                  variant="outline-primary"
-                  className="btn pathway-button sidebar-button"
-                  data-pathway-uuid={pathway.uuid}
-                  data-pathway-name={pathway.name}
-                >
-                  Learn More
-                </Button>
-              </a>
-            </div>
-          )}
+function ProgramPathwayOpportunity({ pathways, title, pathwayClass }) {
+  return (
+    <div className={pathwayClass}>
+      <h2 className="divider-heading"> { title } </h2>
+      {pathways.map((pathway) => (
+        <div className="pathway-wrapper">
+          <div className="pathway-info">
+            <h2 className="pathway-heading"> { pathway.name } </h2>
+            { pathway.description && <p> {pathway.description}</p> }
+            { pathway.destinationUrl && (
+              <div className="sidebar-button-wrapper">
+                <a href={pathway.destinationUrl} className="pathway-link">
+                  <Button
+                    variant="outline-primary"
+                    className="btn pathway-button sidebar-button"
+                    data-pathway-uuid={pathway.uuid}
+                    data-pathway-name={pathway.name}
+                  >
+                    Learn More
+                  </Button>
+                </a>
+              </div>
+            )}
+          </div>
         </div>
-      </div>
-    ))}
-  </div>
-);
+      ))}
+    </div>
+  );
+}
 
 export default ProgramPathwayOpportunity;
 
diff --git a/src/components/program-progress/ProgramProgressCircle.jsx b/src/components/program-progress/ProgramProgressCircle.jsx
index 905a648844..600f04f47b 100644
--- a/src/components/program-progress/ProgramProgressCircle.jsx
+++ b/src/components/program-progress/ProgramProgressCircle.jsx
@@ -5,9 +5,9 @@ import {
   X_AXIS, Y_AXIS, CIRCLE_RADIUS, CIRCLE_DEGREES, STROKE_WIDTH, CIRCLE_LABEL,
 } from './data/constants';
 
-const CircleSegment = ({
+function CircleSegment({
   total, index, classList,
-}) => {
+}) {
   const segmentDash = 2 * Math.PI * CIRCLE_RADIUS;
   const degreeInc = 360 / total;
   // Remove strokeWidth to show a gap between the segments
@@ -33,9 +33,9 @@ const CircleSegment = ({
       strokeDashoffset={offset}
     />
   );
-};
+}
 
-const ProgramProgressCircle = () => {
+function ProgramProgressCircle() {
   const { programData, courseData } = useContext(ProgramProgressContext);
   const { inProgress, completed, notStarted } = courseData;
   const totalCourses = inProgress.length + completed.length + notStarted.length;
@@ -63,7 +63,7 @@ const ProgramProgressCircle = () => {
       </div>
     </>
   );
-};
+}
 
 export default ProgramProgressCircle;
 
diff --git a/src/components/program-progress/ProgramProgressCourses.jsx b/src/components/program-progress/ProgramProgressCourses.jsx
index af97c9e7ae..5d47ffd8c8 100644
--- a/src/components/program-progress/ProgramProgressCourses.jsx
+++ b/src/components/program-progress/ProgramProgressCourses.jsx
@@ -18,7 +18,7 @@ import {
 } from './data/utils';
 import { NotCurrentlyAvailable } from './data/constants';
 
-const ProgramProgressCourses = ({ courseData }) => {
+function ProgramProgressCourses({ courseData }) {
   const { enterpriseConfig } = useContext(AppContext);
   const {
     subscriptionPlan,
@@ -244,7 +244,7 @@ const ProgramProgressCourses = ({ courseData }) => {
     </div>
 
   );
-};
+}
 ProgramProgressCourses.propTypes = {
   courseData: PropTypes.shape([]).isRequired,
 };
diff --git a/src/components/program-progress/ProgramProgressHeader.jsx b/src/components/program-progress/ProgramProgressHeader.jsx
index 01c5c2513c..ec95df34cc 100644
--- a/src/components/program-progress/ProgramProgressHeader.jsx
+++ b/src/components/program-progress/ProgramProgressHeader.jsx
@@ -2,42 +2,40 @@ import React, { useContext } from 'react';
 import { ProgramProgressContext } from './ProgramProgressContextProvider';
 import { getProgramIcon } from './data/utils';
 
-const ProgramProgressHeader = () => {
+function ProgramProgressHeader() {
   const { programData } = useContext(ProgramProgressContext);
   const programIcon = getProgramIcon(programData.type);
 
   return (
-    <>
-      <div className="program-details-header">
-        <div className="meta-info grid-container">
-          { programIcon && (
-            <img
-              src={programIcon}
-              alt="Program Type Logo"
-              className={`program-details-icon ${programData.type.toLowerCase()}`}
-            />
-          )}
-          <h2 className="hd-1 program-title"> {programData.title} </h2>
-        </div>
-        <div className="authoring-organizations">
-          <h2 className="heading">Institutions</h2>
-          {programData.authoringOrganizations.length > 0 && (
-            <div className="orgs">
-              {programData.authoringOrganizations.map(org => (
-                <img
-                  id="org-image"
-                  key={org.name}
-                  src={org.certificateLogoImageUrl || org.logoImageUrl}
-                  className="org-logo"
-                  alt={`${org.name}'s logo`}
-                />
-              ))}
-            </div>
-          )}
-        </div>
+    <div className="program-details-header">
+      <div className="meta-info grid-container">
+        { programIcon && (
+          <img
+            src={programIcon}
+            alt="Program Type Logo"
+            className={`program-details-icon ${programData.type.toLowerCase()}`}
+          />
+        )}
+        <h2 className="hd-1 program-title"> {programData.title} </h2>
       </div>
-    </>
+      <div className="authoring-organizations">
+        <h2 className="heading">Institutions</h2>
+        {programData.authoringOrganizations.length > 0 && (
+          <div className="orgs">
+            {programData.authoringOrganizations.map(org => (
+              <img
+                id="org-image"
+                key={org.name}
+                src={org.certificateLogoImageUrl || org.logoImageUrl}
+                className="org-logo"
+                alt={`${org.name}'s logo`}
+              />
+            ))}
+          </div>
+        )}
+      </div>
+    </div>
   );
-};
+}
 
 export default ProgramProgressHeader;
diff --git a/src/components/program-progress/ProgramProgressPage.jsx b/src/components/program-progress/ProgramProgressPage.jsx
index ecd2b8f315..2532e6a0cd 100644
--- a/src/components/program-progress/ProgramProgressPage.jsx
+++ b/src/components/program-progress/ProgramProgressPage.jsx
@@ -23,7 +23,7 @@ import {
 
 import SubsidiesSummary from '../dashboard/sidebar/SubsidiesSummary';
 
-const ProgramProgressPage = () => {
+function ProgramProgressPage() {
   const { programUUID } = useParams();
   const [program, fetchError] = useLearnerProgramProgressData(programUUID);
 
@@ -116,6 +116,6 @@ const ProgramProgressPage = () => {
       </CourseEnrollmentsContextProvider>
     </>
   );
-};
+}
 
 export default ProgramProgressPage;
diff --git a/src/components/program-progress/ProgramProgressSidebar.jsx b/src/components/program-progress/ProgramProgressSidebar.jsx
index bbc613acba..3db1770ab3 100644
--- a/src/components/program-progress/ProgramProgressSidebar.jsx
+++ b/src/components/program-progress/ProgramProgressSidebar.jsx
@@ -7,7 +7,7 @@ import ProgramPathwayOpportunity from './ProgramPathwayOpportunity';
 import { getProgramCertImage } from './data/utils';
 import progSampleCertImage from './images/sample-cert.png';
 
-const ProgramProgressSideBar = () => {
+function ProgramProgressSideBar() {
   const {
     programData, industryPathways, creditPathways, certificateData, urls: { programRecordUrl },
   } = useContext(ProgramProgressContext);
@@ -99,6 +99,6 @@ const ProgramProgressSideBar = () => {
       )}
     </div>
   );
-};
+}
 
 export default ProgramProgressSideBar;
diff --git a/src/components/program-progress/SubscriptionExpiringWarningModal.jsx b/src/components/program-progress/SubscriptionExpiringWarningModal.jsx
index a4f2c79597..c993ebbfd6 100644
--- a/src/components/program-progress/SubscriptionExpiringWarningModal.jsx
+++ b/src/components/program-progress/SubscriptionExpiringWarningModal.jsx
@@ -9,10 +9,10 @@ import PropTypes from 'prop-types';
 import { UserSubsidyContext } from '../enterprise-user-subsidy';
 import { SUBSCRIPTION_EXPIRING_MODAL_TITLE } from './data/constants';
 
-const SubscriptionExpirationWarningModal = ({
+function SubscriptionExpirationWarningModal({
   isSubscriptionExpiringWarningModalOpen,
   onSubscriptionExpiringWarningModalClose,
-}) => {
+}) {
   const {
     enterpriseConfig: { name, contactEmail },
   } = useContext(AppContext);
@@ -63,7 +63,7 @@ const SubscriptionExpirationWarningModal = ({
       {renderExpiredBody()}
     </StandardModal>
   );
-};
+}
 SubscriptionExpirationWarningModal.propTypes = {
   isSubscriptionExpiringWarningModalOpen: PropTypes.bool.isRequired,
   onSubscriptionExpiringWarningModalClose: PropTypes.func.isRequired,
diff --git a/src/components/program-progress/tests/ProgramListingCard.test.jsx b/src/components/program-progress/tests/ProgramListingCard.test.jsx
index 79bddc0e71..346dae2310 100644
--- a/src/components/program-progress/tests/ProgramListingCard.test.jsx
+++ b/src/components/program-progress/tests/ProgramListingCard.test.jsx
@@ -19,13 +19,15 @@ jest.mock('react-router-dom', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-const ProgramListingCardWithContext = ({ initialAppState, initialUserSubsidyState, programData }) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <ProgramListingCard program={programData} />
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+function ProgramListingCardWithContext({ initialAppState, initialUserSubsidyState, programData }) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <ProgramListingCard program={programData} />
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 const appState = {
   enterpriseConfig: {
diff --git a/src/components/program-progress/tests/ProgramListingPage.test.jsx b/src/components/program-progress/tests/ProgramListingPage.test.jsx
index cdc052191b..1db59a1972 100644
--- a/src/components/program-progress/tests/ProgramListingPage.test.jsx
+++ b/src/components/program-progress/tests/ProgramListingPage.test.jsx
@@ -64,18 +64,20 @@ jest.mock('../data/hooks', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-const ProgramListingWithContext = ({
+function ProgramListingWithContext({
   initialAppState = {},
   initialUserSubsidyState = {},
-}) => (
-  <IntlProvider locale="en">
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <ProgramListingPage />
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  </IntlProvider>
-);
+}) {
+  return (
+    <IntlProvider locale="en">
+      <AppContext.Provider value={initialAppState}>
+        <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+          <ProgramListingPage />
+        </UserSubsidyContext.Provider>
+      </AppContext.Provider>
+    </IntlProvider>
+  );
+}
 
 describe('<ProgramListing />', () => {
   const initialAppState = {
diff --git a/src/components/program-progress/tests/ProgramProgressCircle.test.jsx b/src/components/program-progress/tests/ProgramProgressCircle.test.jsx
index 2c7f144f34..5a9017cec9 100644
--- a/src/components/program-progress/tests/ProgramProgressCircle.test.jsx
+++ b/src/components/program-progress/tests/ProgramProgressCircle.test.jsx
@@ -9,13 +9,15 @@ import {
 } from '../data/constants';
 
 /* eslint-disable react/prop-types */
-const ProgramProgressCircleWithContext = ({
+function ProgramProgressCircleWithContext({
   initialProgramProgressContext = {},
-}) => (
-  <ProgramProgressContext.Provider value={initialProgramProgressContext}>
-    <ProgramProgressCircle />
-  </ProgramProgressContext.Provider>
-);
+}) {
+  return (
+    <ProgramProgressContext.Provider value={initialProgramProgressContext}>
+      <ProgramProgressCircle />
+    </ProgramProgressContext.Provider>
+  );
+}
 
 const testProgramData = {
   type: 'MicroMasters',
diff --git a/src/components/program-progress/tests/ProgramProgressCourses.test.jsx b/src/components/program-progress/tests/ProgramProgressCourses.test.jsx
index cd84377391..0b735219fd 100644
--- a/src/components/program-progress/tests/ProgramProgressCourses.test.jsx
+++ b/src/components/program-progress/tests/ProgramProgressCourses.test.jsx
@@ -43,18 +43,20 @@ const subsidyRequestsState = {
   },
 };
 
-const ProgramProgressCoursesWithContext = ({
+function ProgramProgressCoursesWithContext({
   // eslint-disable-next-line react/prop-types
   initialAppState, initialUserSubsidyState, courseData, initialSubsidyRequestsState,
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
-        <ProgramProgressCourses courseData={courseData} />
-      </SubsidyRequestsContext.Provider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
+          <ProgramProgressCourses courseData={courseData} />
+        </SubsidyRequestsContext.Provider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 describe('<ProgramProgressCourses />', () => {
   it('displays the completed course with enrolled course run', () => {
diff --git a/src/components/program-progress/tests/ProgramProgressHeader.test.jsx b/src/components/program-progress/tests/ProgramProgressHeader.test.jsx
index 118b5fb3f1..5c57b6e3cf 100644
--- a/src/components/program-progress/tests/ProgramProgressHeader.test.jsx
+++ b/src/components/program-progress/tests/ProgramProgressHeader.test.jsx
@@ -7,13 +7,15 @@ import { ProgramProgressContext } from '../ProgramProgressContextProvider';
 import { getProgramIcon } from '../data/utils';
 
 /* eslint-disable react/prop-types */
-const ProgramProgressHeaderWithContext = ({
+function ProgramProgressHeaderWithContext({
   initialProgramProgressContext = {},
-}) => (
-  <ProgramProgressContext.Provider value={initialProgramProgressContext}>
-    <ProgramProgressHeader />
-  </ProgramProgressContext.Provider>
-);
+}) {
+  return (
+    <ProgramProgressContext.Provider value={initialProgramProgressContext}>
+      <ProgramProgressHeader />
+    </ProgramProgressContext.Provider>
+  );
+}
 
 const testProgramData = {
   type: 'MicroMasters',
diff --git a/src/components/program-progress/tests/ProgramProgressSidebar.test.jsx b/src/components/program-progress/tests/ProgramProgressSidebar.test.jsx
index 40ca0d0f9d..36f665e7c6 100644
--- a/src/components/program-progress/tests/ProgramProgressSidebar.test.jsx
+++ b/src/components/program-progress/tests/ProgramProgressSidebar.test.jsx
@@ -8,13 +8,15 @@ import { getProgramCertImage } from '../data/utils';
 import progSampleCertImage from '../images/sample-cert.png';
 
 /* eslint-disable react/prop-types */
-const ProgramProgressSideBarWithContext = ({
+function ProgramProgressSideBarWithContext({
   initialProgramProgressContext = {},
-}) => (
-  <ProgramProgressContext.Provider value={initialProgramProgressContext}>
-    <ProgramProgressSidebar />
-  </ProgramProgressContext.Provider>
-);
+}) {
+  return (
+    <ProgramProgressContext.Provider value={initialProgramProgressContext}>
+      <ProgramProgressSidebar />
+    </ProgramProgressContext.Provider>
+  );
+}
 
 const testProgramData = {
   type: 'MicroMasters',
diff --git a/src/components/program/BulletList.jsx b/src/components/program/BulletList.jsx
index 4c5aa2966f..fa6a886206 100644
--- a/src/components/program/BulletList.jsx
+++ b/src/components/program/BulletList.jsx
@@ -1,15 +1,17 @@
 import React from 'react';
 import PropTypes from 'prop-types';
 
-const BulletList = ({ items }) => (
-  <ul>
-    {items.map(item => (
-      <li className="bullet-point mb-2" key={item}>
-        {item}
-      </li>
-    ))}
-  </ul>
-);
+function BulletList({ items }) {
+  return (
+    <ul>
+      {items.map(item => (
+        <li className="bullet-point mb-2" key={item}>
+          {item}
+        </li>
+      ))}
+    </ul>
+  );
+}
 
 BulletList.propTypes = {
   items: PropTypes.arrayOf(PropTypes.string).isRequired,
diff --git a/src/components/program/ProgramCourses.jsx b/src/components/program/ProgramCourses.jsx
index 8a9665c7ba..8f69ab6fc0 100644
--- a/src/components/program/ProgramCourses.jsx
+++ b/src/components/program/ProgramCourses.jsx
@@ -24,7 +24,7 @@ const getCourseRun = course => (
   )[0]
 );
 
-const ProgramCourses = () => {
+function ProgramCourses() {
   const { enterpriseConfig: { slug, uuid } } = useContext(AppContext);
   const { program } = useContext(ProgramContext);
   const { programUuid } = useParams();
@@ -103,6 +103,6 @@ const ProgramCourses = () => {
       </div>
     </>
   );
-};
+}
 
 export default ProgramCourses;
diff --git a/src/components/program/ProgramDataBar.jsx b/src/components/program/ProgramDataBar.jsx
index f1a1d98259..54cefdd610 100644
--- a/src/components/program/ProgramDataBar.jsx
+++ b/src/components/program/ProgramDataBar.jsx
@@ -7,7 +7,7 @@ import { faChevronCircleDown } from '@fortawesome/free-solid-svg-icons';
 import { ProgramContext } from './ProgramContextProvider';
 import ProgramDataBarDetails from './ProgramDataBarDetails';
 
-const ProgramDataBar = () => {
+function ProgramDataBar() {
   const [stickProgramDataBar, setStickProgramDataBar] = useState(false);
   const {
     program: { authoringOrganizations: owners, isProgramEligibleForOneClickPurchase },
@@ -54,5 +54,5 @@ const ProgramDataBar = () => {
       </div>
     </div>
   );
-};
+}
 export default ProgramDataBar;
diff --git a/src/components/program/ProgramDataBarDetails.jsx b/src/components/program/ProgramDataBarDetails.jsx
index 7c2b7b642c..4401f34335 100644
--- a/src/components/program/ProgramDataBarDetails.jsx
+++ b/src/components/program/ProgramDataBarDetails.jsx
@@ -5,7 +5,7 @@ import PropTypes from 'prop-types';
 import { ProgramContext } from './ProgramContextProvider';
 import { appendProgramToProgramType } from './data/utils';
 
-const ProgramDataBarDetails = ({ handleStick, handleRelease }) => {
+function ProgramDataBarDetails({ handleStick, handleRelease }) {
   const {
     program: {
       title, authoringOrganizations: owners, type,
@@ -66,7 +66,7 @@ const ProgramDataBarDetails = ({ handleStick, handleRelease }) => {
       <div className="institution">{partnerList}</div>
     </div>
   );
-};
+}
 
 ProgramDataBarDetails.propTypes = {
   handleStick: PropTypes.func.isRequired,
diff --git a/src/components/program/ProgramEndorsements.jsx b/src/components/program/ProgramEndorsements.jsx
index 251507f916..5e586e9277 100644
--- a/src/components/program/ProgramEndorsements.jsx
+++ b/src/components/program/ProgramEndorsements.jsx
@@ -4,7 +4,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { breakpoints, MediaQuery } from '@edx/paragon';
 import { ProgramContext } from './ProgramContextProvider';
 
-const ProgramEndorsements = () => {
+function ProgramEndorsements() {
   const { program: { corporateEndorsements } } = useContext(ProgramContext);
   const formatAuthorFullName = endorser => `${endorser.givenName} ${endorser.familyName}`;
   const title = endorser => (endorser.position ? endorser.position.title : '');
@@ -54,6 +54,6 @@ const ProgramEndorsements = () => {
         </div>
       </div>
     ) : null;
-};
+}
 
 export default ProgramEndorsements;
diff --git a/src/components/program/ProgramHeader.jsx b/src/components/program/ProgramHeader.jsx
index 026a0cfcd4..fd833ea44d 100644
--- a/src/components/program/ProgramHeader.jsx
+++ b/src/components/program/ProgramHeader.jsx
@@ -6,7 +6,7 @@ import { useParams } from 'react-router-dom';
 import { ProgramContext } from './ProgramContextProvider';
 import { fixedEncodeURIComponent } from '../../utils/common';
 
-const ProgramHeader = () => {
+function ProgramHeader() {
   const config = getConfig();
   const { enterpriseSlug } = useParams();
   const {
@@ -92,6 +92,6 @@ const ProgramHeader = () => {
         : ''}
     </>
   );
-};
+}
 
 export default ProgramHeader;
diff --git a/src/components/program/ProgramInstructors.jsx b/src/components/program/ProgramInstructors.jsx
index 279f492fd2..26e235380d 100644
--- a/src/components/program/ProgramInstructors.jsx
+++ b/src/components/program/ProgramInstructors.jsx
@@ -7,7 +7,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 
 import { ProgramContext } from './ProgramContextProvider';
 
-const ProgramStaff = ({ program }) => {
+function ProgramStaff({ program }) {
   const { config } = useContext(AppContext);
   const formatStaffFullName = staff => `${staff.givenName} ${staff.familyName}`;
 
@@ -40,7 +40,7 @@ const ProgramStaff = ({ program }) => {
       ))}
     </div>
   );
-};
+}
 
 ProgramStaff.propTypes = {
   program: PropTypes.shape({
@@ -57,7 +57,7 @@ ProgramStaff.propTypes = {
   }).isRequired,
 };
 
-const ProgramInstructors = () => {
+function ProgramInstructors() {
   const { program } = useContext(ProgramContext);
 
   return (
@@ -106,6 +106,6 @@ const ProgramInstructors = () => {
       )}
     </div>
   );
-};
+}
 
 export default ProgramInstructors;
diff --git a/src/components/program/ProgramMainContent.jsx b/src/components/program/ProgramMainContent.jsx
index 0af387c275..d8972d353b 100644
--- a/src/components/program/ProgramMainContent.jsx
+++ b/src/components/program/ProgramMainContent.jsx
@@ -5,7 +5,7 @@ import { PreviewExpand } from '../preview-expand';
 import { ProgramContext } from './ProgramContextProvider';
 import BulletList from './BulletList';
 
-const ProgramMainContent = () => {
+function ProgramMainContent() {
   const { program } = useContext(ProgramContext);
   const { expectedLearningItems } = program;
   const { overview } = program;
@@ -42,6 +42,6 @@ const ProgramMainContent = () => {
       <ProgramInstructors />
     </div>
   );
-};
+}
 
 export default ProgramMainContent;
diff --git a/src/components/program/ProgramPage.jsx b/src/components/program/ProgramPage.jsx
index 12a2090ae1..a85c33166d 100644
--- a/src/components/program/ProgramPage.jsx
+++ b/src/components/program/ProgramPage.jsx
@@ -22,7 +22,7 @@ import NotFoundPage from '../NotFoundPage';
 import { PROGRAM_NOT_FOUND_MESSAGE, PROGRAM_NOT_FOUND_TITLE } from './data/constants';
 import ProgramDataBar from './ProgramDataBar';
 
-const ProgramPage = () => {
+function ProgramPage() {
   const { programUuid } = useParams();
   const { enterpriseConfig } = useContext(AppContext);
 
@@ -94,6 +94,6 @@ const ProgramPage = () => {
       </ProgramContextProvider>
     </>
   );
-};
+}
 
 export default ProgramPage;
diff --git a/src/components/program/ProgramSidebar.jsx b/src/components/program/ProgramSidebar.jsx
index cb26329949..3c1c9ade2d 100644
--- a/src/components/program/ProgramSidebar.jsx
+++ b/src/components/program/ProgramSidebar.jsx
@@ -13,7 +13,7 @@ import {
   getVerboseProgramPacing,
 } from './data/utils';
 
-const ProgramSidebar = () => {
+function ProgramSidebar() {
   const { program } = useContext(ProgramContext);
   const expertInstructionSecondaryContent = getExpertInstructionSecondaryContent(program);
   const programPacingType = getProgramPacing(program);
@@ -23,44 +23,42 @@ const ProgramSidebar = () => {
   const totalEstimatedEffortInHoursPerWeek = getTotalEstimatedEffortInHoursPerWeek(program);
 
   return (
-    <>
-      <ul className="pl-0 mb-5 program-details-sidebar">
-        <ProgramSidebarListItem
-          icon={faBook}
-          label="Expert instruction"
-          content={expertInstructionSecondaryContent}
-        />
+    <ul className="pl-0 mb-5 program-details-sidebar">
+      <ProgramSidebarListItem
+        icon={faBook}
+        label="Expert instruction"
+        content={expertInstructionSecondaryContent}
+      />
 
-        {
-          verboseProgramPacingType && programPacingTypeContent && (
-            <ProgramSidebarListItem
-              icon={faUser}
-              label={verboseProgramPacingType}
-              content={programPacingTypeContent}
-            />
-          )
-        }
-        {
-          programDuration && (
-            <ProgramSidebarListItem
-              icon={faClock}
-              label="Length"
-              content={programDuration}
-            />
-          )
-        }
-        {
-          totalEstimatedEffortInHoursPerWeek && (
-            <ProgramSidebarListItem
-              icon={faTachometerAlt}
-              label="Effort"
-              content={totalEstimatedEffortInHoursPerWeek}
-            />
-          )
-        }
-      </ul>
-    </>
+      {
+        verboseProgramPacingType && programPacingTypeContent && (
+          <ProgramSidebarListItem
+            icon={faUser}
+            label={verboseProgramPacingType}
+            content={programPacingTypeContent}
+          />
+        )
+      }
+      {
+        programDuration && (
+          <ProgramSidebarListItem
+            icon={faClock}
+            label="Length"
+            content={programDuration}
+          />
+        )
+      }
+      {
+        totalEstimatedEffortInHoursPerWeek && (
+          <ProgramSidebarListItem
+            icon={faTachometerAlt}
+            label="Effort"
+            content={totalEstimatedEffortInHoursPerWeek}
+          />
+        )
+      }
+    </ul>
   );
-};
+}
 
 export default ProgramSidebar;
diff --git a/src/components/program/tests/ProgramCTA.test.jsx b/src/components/program/tests/ProgramCTA.test.jsx
index a701bbc0cd..e7ccbbdc2b 100644
--- a/src/components/program/tests/ProgramCTA.test.jsx
+++ b/src/components/program/tests/ProgramCTA.test.jsx
@@ -30,21 +30,23 @@ jest.mock('@edx/frontend-enterprise-utils', () => {
 });
 
 /* eslint-disable react/prop-types */
-const ProgramCTAtWithContext = ({
+function ProgramCTAtWithContext({
   initialAppState = {},
   initialProgramState = {},
   initialUserSubsidyState = {},
-}) => (
-  <IntlProvider locale="en">
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <ProgramContextProvider initialState={initialProgramState}>
-          <ProgramCTA />
-        </ProgramContextProvider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  </IntlProvider>
-);
+}) {
+  return (
+    <IntlProvider locale="en">
+      <AppContext.Provider value={initialAppState}>
+        <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+          <ProgramContextProvider initialState={initialProgramState}>
+            <ProgramCTA />
+          </ProgramContextProvider>
+        </UserSubsidyContext.Provider>
+      </AppContext.Provider>
+    </IntlProvider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 describe('<ProgramCTA />', () => {
diff --git a/src/components/program/tests/ProgramCourses.test.jsx b/src/components/program/tests/ProgramCourses.test.jsx
index ce4e581445..ff7557579e 100644
--- a/src/components/program/tests/ProgramCourses.test.jsx
+++ b/src/components/program/tests/ProgramCourses.test.jsx
@@ -31,19 +31,21 @@ jest.mock('@edx/frontend-enterprise-utils', () => {
 });
 
 /* eslint-disable react/prop-types */
-const ProgramCoursestWithContext = ({
+function ProgramCoursestWithContext({
   initialAppState = {},
   initialProgramState = {},
   initialUserSubsidyState = {},
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <ProgramContextProvider initialState={initialProgramState}>
-        <ProgramCourses />
-      </ProgramContextProvider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <ProgramContextProvider initialState={initialProgramState}>
+          <ProgramCourses />
+        </ProgramContextProvider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 describe('<ProgramCourses />', () => {
diff --git a/src/components/program/tests/ProgramDataBar.test.jsx b/src/components/program/tests/ProgramDataBar.test.jsx
index e689027ae3..4d6181acb7 100644
--- a/src/components/program/tests/ProgramDataBar.test.jsx
+++ b/src/components/program/tests/ProgramDataBar.test.jsx
@@ -14,15 +14,17 @@ jest.mock('react-router-dom', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-const ProgramDataBarWithContext = ({ initialAppState, initialUserSubsidyState, initialProgramState }) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <ProgramContextProvider initialState={initialProgramState}>
-        <ProgramDataBar />
-      </ProgramContextProvider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+function ProgramDataBarWithContext({ initialAppState, initialUserSubsidyState, initialProgramState }) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <ProgramContextProvider initialState={initialProgramState}>
+          <ProgramDataBar />
+        </ProgramContextProvider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 const appState = {
   enterpriseConfig: {
diff --git a/src/components/program/tests/ProgramEndorsements.test.jsx b/src/components/program/tests/ProgramEndorsements.test.jsx
index 4b5bcf74a7..3798384b9f 100644
--- a/src/components/program/tests/ProgramEndorsements.test.jsx
+++ b/src/components/program/tests/ProgramEndorsements.test.jsx
@@ -12,19 +12,21 @@ jest.mock('react-router-dom', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-const ProgramEndorsementsWithContext = ({
+function ProgramEndorsementsWithContext({
   initialAppState = {},
   initialProgramState = {},
   initialUserSubsidyState = {},
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <ProgramContextProvider initialState={initialProgramState}>
-        <ProgramEndorsements />
-      </ProgramContextProvider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <ProgramContextProvider initialState={initialProgramState}>
+          <ProgramEndorsements />
+        </ProgramContextProvider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 describe('<ProgramEndorsements />', () => {
diff --git a/src/components/program/tests/ProgramFAQ.test.jsx b/src/components/program/tests/ProgramFAQ.test.jsx
index 6fe13e57f4..f1eb2f4d77 100644
--- a/src/components/program/tests/ProgramFAQ.test.jsx
+++ b/src/components/program/tests/ProgramFAQ.test.jsx
@@ -14,19 +14,21 @@ jest.mock('react-router-dom', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-const ProgramFAQWithContext = ({
+function ProgramFAQWithContext({
   initialAppState = {},
   initialProgramState = {},
   initialUserSubsidyState = {},
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <ProgramContextProvider initialState={initialProgramState}>
-        <ProgramFAQ />
-      </ProgramContextProvider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <ProgramContextProvider initialState={initialProgramState}>
+          <ProgramFAQ />
+        </ProgramContextProvider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 describe('<ProgramFAQ />', () => {
diff --git a/src/components/program/tests/ProgramHeader.test.jsx b/src/components/program/tests/ProgramHeader.test.jsx
index 45b0a41ebb..c3150a4194 100644
--- a/src/components/program/tests/ProgramHeader.test.jsx
+++ b/src/components/program/tests/ProgramHeader.test.jsx
@@ -13,19 +13,21 @@ jest.mock('react-router-dom', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-const ProgramHeaderWithContext = ({
+function ProgramHeaderWithContext({
   initialAppState = {},
   initialProgramState = {},
   initialUserSubsidyState = {},
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <ProgramContextProvider initialState={initialProgramState}>
-        <ProgramHeader />
-      </ProgramContextProvider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <ProgramContextProvider initialState={initialProgramState}>
+          <ProgramHeader />
+        </ProgramContextProvider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 describe('<ProgramHeader />', () => {
diff --git a/src/components/program/tests/ProgramInstructors.test.jsx b/src/components/program/tests/ProgramInstructors.test.jsx
index 4104be0da3..60c4302ac6 100644
--- a/src/components/program/tests/ProgramInstructors.test.jsx
+++ b/src/components/program/tests/ProgramInstructors.test.jsx
@@ -6,11 +6,13 @@ import { ProgramContextProvider } from '../ProgramContextProvider';
 import ProgramInstructors from '../ProgramInstructors';
 
 // eslint-disable-next-line react/prop-types
-const ProgramInstructorsWithContext = ({ initialState = {} }) => (
-  <ProgramContextProvider initialState={initialState}>
-    <ProgramInstructors />
-  </ProgramContextProvider>
-);
+function ProgramInstructorsWithContext({ initialState = {} }) {
+  return (
+    <ProgramContextProvider initialState={initialState}>
+      <ProgramInstructors />
+    </ProgramContextProvider>
+  );
+}
 
 describe('<ProgramInstructors />', () => {
   const initialState = {
diff --git a/src/components/program/tests/ProgramMainContent.test.jsx b/src/components/program/tests/ProgramMainContent.test.jsx
index 916e232eef..9f4eb91b56 100644
--- a/src/components/program/tests/ProgramMainContent.test.jsx
+++ b/src/components/program/tests/ProgramMainContent.test.jsx
@@ -17,19 +17,21 @@ jest.mock('@edx/frontend-platform/auth', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-const ProgramMainContentWithContext = ({
+function ProgramMainContentWithContext({
   initialAppState = {},
   initialProgramState = {},
   initialUserSubsidyState = {},
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <ProgramContextProvider initialState={initialProgramState}>
-        <ProgramMainContent />
-      </ProgramContextProvider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <ProgramContextProvider initialState={initialProgramState}>
+          <ProgramMainContent />
+        </ProgramContextProvider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 describe('<ProgramMainContent />', () => {
diff --git a/src/components/program/tests/ProgramPage.test.jsx b/src/components/program/tests/ProgramPage.test.jsx
index 15f0ea692b..2f2b330199 100644
--- a/src/components/program/tests/ProgramPage.test.jsx
+++ b/src/components/program/tests/ProgramPage.test.jsx
@@ -39,18 +39,20 @@ jest.mock('../data/hooks', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-const ProgramWithContext = ({
+function ProgramWithContext({
   initialAppState = {},
   initialUserSubsidyState = {},
-}) => (
-  <IntlProvider locale="en">
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <ProgramPage />
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  </IntlProvider>
-);
+}) {
+  return (
+    <IntlProvider locale="en">
+      <AppContext.Provider value={initialAppState}>
+        <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+          <ProgramPage />
+        </UserSubsidyContext.Provider>
+      </AppContext.Provider>
+    </IntlProvider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 describe('<Program />', () => {
diff --git a/src/components/program/tests/ProgramSidebar.test.jsx b/src/components/program/tests/ProgramSidebar.test.jsx
index d34df59950..62a528cf1e 100644
--- a/src/components/program/tests/ProgramSidebar.test.jsx
+++ b/src/components/program/tests/ProgramSidebar.test.jsx
@@ -15,19 +15,21 @@ jest.mock('react-router-dom', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-const ProgramSidebarWithContext = ({
+function ProgramSidebarWithContext({
   initialAppState = {},
   initialProgramState = {},
   initialUserSubsidyState = {},
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <ProgramContextProvider initialState={initialProgramState}>
-        <ProgramSidebar />
-      </ProgramContextProvider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <ProgramContextProvider initialState={initialProgramState}>
+          <ProgramSidebar />
+        </ProgramContextProvider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 describe('<ProgramSidebar />', () => {
diff --git a/src/components/search/Search.jsx b/src/components/search/Search.jsx
index cef27a7b2f..4dd217d34f 100644
--- a/src/components/search/Search.jsx
+++ b/src/components/search/Search.jsx
@@ -35,7 +35,7 @@ import SearchPathwayCard from '../pathway/SearchPathwayCard';
 import { SubsidyRequestsContext } from '../enterprise-subsidy-requests';
 import PathwayModal from '../pathway/PathwayModal';
 
-const Search = () => {
+function Search() {
   const { pathwayUUID } = useParams();
   const history = useHistory();
   const { refinements: { content_type: contentType } } = useContext(SearchContext);
@@ -150,6 +150,6 @@ const Search = () => {
       <IntegrationWarningModal isOpen={enterpriseConfig.showIntegrationWarning} />
     </>
   );
-};
+}
 
 export default Search;
diff --git a/src/components/search/SearchCourse.jsx b/src/components/search/SearchCourse.jsx
index e73211807c..3c7f3ea3b7 100644
--- a/src/components/search/SearchCourse.jsx
+++ b/src/components/search/SearchCourse.jsx
@@ -6,7 +6,7 @@ import { NUM_RESULTS_COURSE, CONTENT_TYPE_COURSE, COURSE_TITLE } from './constan
 import SearchResults from './SearchResults';
 import SearchCourseCard from './SearchCourseCard';
 
-const SearchCourse = ({ filter }) => {
+function SearchCourse({ filter }) {
   const defaultFilter = `content_type:${CONTENT_TYPE_COURSE} AND ${filter}`;
   const config = getConfig();
 
@@ -20,7 +20,7 @@ const SearchCourse = ({ filter }) => {
       <SearchResults hitComponent={SearchCourseCard} title={COURSE_TITLE} />
     </Index>
   );
-};
+}
 
 SearchCourse.propTypes = {
   filter: PropTypes.string.isRequired,
diff --git a/src/components/search/SearchCourseCard.jsx b/src/components/search/SearchCourseCard.jsx
index ebd768a170..456d802c8d 100644
--- a/src/components/search/SearchCourseCard.jsx
+++ b/src/components/search/SearchCourseCard.jsx
@@ -11,7 +11,7 @@ import { sendEnterpriseTrackEvent } from '@edx/frontend-enterprise-utils';
 
 import { getPrimaryPartnerLogo, isDefinedAndNotNull } from '../../utils/common';
 
-const SearchCourseCard = ({ hit, isLoading }) => {
+function SearchCourseCard({ hit, isLoading }) {
   const { enterpriseConfig: { slug, uuid } } = useContext(AppContext);
 
   const course = hit ? camelCaseObject(hit) : {};
@@ -152,11 +152,11 @@ const SearchCourseCard = ({ hit, isLoading }) => {
       </Link>
     </div>
   );
-};
+}
 
-const SkeletonCourseCard = (props) => (
-  <SearchCourseCard {...props} isLoading />
-);
+function SkeletonCourseCard(props) {
+  return <SearchCourseCard {...props} isLoading />;
+}
 
 SearchCourseCard.propTypes = {
   hit: PropTypes.shape({
diff --git a/src/components/search/SearchError.jsx b/src/components/search/SearchError.jsx
index b69b7aed17..0d7685bfc1 100644
--- a/src/components/search/SearchError.jsx
+++ b/src/components/search/SearchError.jsx
@@ -5,7 +5,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';
 import { getSearchErrorMessage } from '../utils/search';
 
-const SearchError = ({ title }) => {
+function SearchError({ title }) {
   const searchErrorMessage = getSearchErrorMessage(title);
   const renderDialog = useCallback(
     () => (
@@ -32,7 +32,7 @@ const SearchError = ({ title }) => {
       open
     />
   );
-};
+}
 
 SearchError.propTypes = {
   title: PropTypes.string.isRequired,
diff --git a/src/components/search/SearchNoResults.jsx b/src/components/search/SearchNoResults.jsx
index 71f7bbfde0..226aed307c 100644
--- a/src/components/search/SearchNoResults.jsx
+++ b/src/components/search/SearchNoResults.jsx
@@ -7,7 +7,7 @@ import { faSearchMinus } from '@fortawesome/free-solid-svg-icons';
 import { PopularResults } from './popular-results';
 import { getNoResultsMessage } from '../utils/search';
 
-const SearchNoResults = ({ title }) => {
+function SearchNoResults({ title }) {
   const noResultsMessage = getNoResultsMessage(title);
   const renderDialog = useCallback(
     () => (
@@ -38,7 +38,7 @@ const SearchNoResults = ({ title }) => {
       <PopularResults title={title} />
     </>
   );
-};
+}
 
 SearchNoResults.propTypes = {
   title: PropTypes.string.isRequired,
diff --git a/src/components/search/SearchPage.jsx b/src/components/search/SearchPage.jsx
index 05811ad062..c2405c12d6 100644
--- a/src/components/search/SearchPage.jsx
+++ b/src/components/search/SearchPage.jsx
@@ -4,10 +4,12 @@ import { SearchData } from '@edx/frontend-enterprise-catalog-search';
 import Search from './Search';
 import { SEARCH_FACET_FILTERS } from './constants';
 
-const SearchPage = () => (
-  <SearchData searchFacetFilters={SEARCH_FACET_FILTERS}>
-    <Search />
-  </SearchData>
-);
+function SearchPage() {
+  return (
+    <SearchData searchFacetFilters={SEARCH_FACET_FILTERS}>
+      <Search />
+    </SearchData>
+  );
+}
 
 export default SearchPage;
diff --git a/src/components/search/SearchPathway.jsx b/src/components/search/SearchPathway.jsx
index dc7d90dc3c..446bf19925 100644
--- a/src/components/search/SearchPathway.jsx
+++ b/src/components/search/SearchPathway.jsx
@@ -7,7 +7,7 @@ import { NUM_RESULTS_PATHWAY, CONTENT_TYPE_PATHWAY, PATHWAY_TITLE } from './cons
 import SearchResults from './SearchResults';
 import SearchPathwayCard from '../pathway/SearchPathwayCard';
 
-const SearchPathway = ({ filter }) => {
+function SearchPathway({ filter }) {
   const defaultFilter = `content_type:${CONTENT_TYPE_PATHWAY}  AND ${filter}`;
   const config = getConfig();
 
@@ -21,7 +21,7 @@ const SearchPathway = ({ filter }) => {
       <SearchResults hitComponent={SearchPathwayCard} title={PATHWAY_TITLE} />
     </Index>
   );
-};
+}
 
 SearchPathway.propTypes = {
   filter: PropTypes.string.isRequired,
diff --git a/src/components/search/SearchProgram.jsx b/src/components/search/SearchProgram.jsx
index fe3e971ecc..1b86dd4322 100644
--- a/src/components/search/SearchProgram.jsx
+++ b/src/components/search/SearchProgram.jsx
@@ -7,7 +7,7 @@ import { NUM_RESULTS_PROGRAM, CONTENT_TYPE_PROGRAM, PROGRAM_TITLE } from './cons
 import SearchResults from './SearchResults';
 import SearchProgramCard from './SearchProgramCard';
 
-const SearchProgram = ({ filter }) => {
+function SearchProgram({ filter }) {
   const defaultFilter = `content_type:${CONTENT_TYPE_PROGRAM} AND ${filter}`;
   const config = getConfig();
 
@@ -21,7 +21,7 @@ const SearchProgram = ({ filter }) => {
       <SearchResults hitComponent={SearchProgramCard} title={PROGRAM_TITLE} />
     </Index>
   );
-};
+}
 
 SearchProgram.propTypes = {
   filter: PropTypes.string.isRequired,
diff --git a/src/components/search/SearchProgramCard.jsx b/src/components/search/SearchProgramCard.jsx
index 1e15f0795b..bef15becc7 100644
--- a/src/components/search/SearchProgramCard.jsx
+++ b/src/components/search/SearchProgramCard.jsx
@@ -36,7 +36,7 @@ export const ProgramType = ({ type }) => {
   return programTypeToDisplay;
 };
 
-const SearchProgramCard = ({ hit, isLoading }) => {
+function SearchProgramCard({ hit, isLoading }) {
   const { enterpriseConfig: { slug, uuid } } = useContext(AppContext);
   const program = useMemo(() => {
     if (!hit) {
@@ -191,11 +191,11 @@ const SearchProgramCard = ({ hit, isLoading }) => {
       </Link>
     </div>
   );
-};
+}
 
-const SkeletonProgramCard = (props) => (
-  <SearchProgramCard {...props} isLoading />
-);
+function SkeletonProgramCard(props) {
+  return <SearchProgramCard {...props} isLoading />;
+}
 
 SearchProgramCard.propTypes = {
   hit: PropTypes.shape({
diff --git a/src/components/search/SearchResults.jsx b/src/components/search/SearchResults.jsx
index e1dbf5361b..905697fbcc 100644
--- a/src/components/search/SearchResults.jsx
+++ b/src/components/search/SearchResults.jsx
@@ -17,7 +17,7 @@ import {
 } from './constants';
 import { getContentTypeFromTitle, getNoOfResultsFromTitle, getSkeletonCardFromTitle } from '../utils/search';
 
-const SearchResults = ({
+function SearchResults({
   searchResults,
   searchState,
   isSearchStalled,
@@ -25,7 +25,7 @@ const SearchResults = ({
   hitComponent,
   title,
   contentType,
-}) => {
+}) {
   const { refinements, dispatch } = useContext(SearchContext);
   const nbHits = useNbHitsFromSearchResults(searchResults);
   const linkText = `Show (${nbHits}) >`;
@@ -137,7 +137,7 @@ const SearchResults = ({
       </>
     </Container>
   );
-};
+}
 
 SearchResults.propTypes = {
   searchState: PropTypes.shape({
diff --git a/src/components/search/data/tests/hooks.test.jsx b/src/components/search/data/tests/hooks.test.jsx
index 62a76b209a..cf01d57576 100644
--- a/src/components/search/data/tests/hooks.test.jsx
+++ b/src/components/search/data/tests/hooks.test.jsx
@@ -118,8 +118,9 @@ describe('useSearchCatalogs', () => {
   });
 });
 
-const SearchWrapper = (value) => ({ children }) => (
-  <SearchContext.Provider value={value}>{children}</SearchContext.Provider>);
+const SearchWrapper = (value) => function ({ children }) {
+  return <SearchContext.Provider value={value}>{children}</SearchContext.Provider>;
+};
 
 describe('useDefaultSearchFilters', () => {
   const refinementsShowAll = { refinements: { [SHOW_ALL_NAME]: 1 } };
diff --git a/src/components/search/popular-results/PopularResults.jsx b/src/components/search/popular-results/PopularResults.jsx
index b088224d0d..4ff81cefdc 100644
--- a/src/components/search/popular-results/PopularResults.jsx
+++ b/src/components/search/popular-results/PopularResults.jsx
@@ -10,13 +10,13 @@ import { isDefinedAndNotNull } from '../../../utils/common';
 import { NUM_RESULTS_TO_DISPLAY } from './data/constants';
 import { getHitComponentFromTitle, getSkeletonCardFromTitle } from '../../utils/search';
 
-const PopularResults = ({
+function PopularResults({
   searchResults,
   isSearchStalled,
   error,
   title,
   numberResultsToDisplay,
-}) => {
+}) {
   const nbHits = useNbHitsFromSearchResults(searchResults);
 
   return (
@@ -48,7 +48,7 @@ const PopularResults = ({
       )}
     </>
   );
-};
+}
 
 PopularResults.propTypes = {
   searchResults: PropTypes.shape(),
diff --git a/src/components/search/popular-results/PopularResultsIndex.jsx b/src/components/search/popular-results/PopularResultsIndex.jsx
index b5fdac246d..a55f5e3a53 100644
--- a/src/components/search/popular-results/PopularResultsIndex.jsx
+++ b/src/components/search/popular-results/PopularResultsIndex.jsx
@@ -10,7 +10,7 @@ import { NUM_RESULTS_TO_DISPLAY } from './data/constants';
 import { getContentTypeFromTitle } from '../../utils/search';
 import { SubsidyRequestsContext } from '../../enterprise-subsidy-requests';
 
-const PopularResultsIndex = ({ title, numberResultsToDisplay }) => {
+function PopularResultsIndex({ title, numberResultsToDisplay }) {
   const { enterpriseConfig } = useContext(AppContext);
   const {
     subscriptionPlan, subscriptionLicense, couponCodes: { couponCodes }, enterpriseOffers,
@@ -43,7 +43,7 @@ const PopularResultsIndex = ({ title, numberResultsToDisplay }) => {
       <PopularResults title={title} numberResultsToDisplay={numberResultsToDisplay} />
     </Index>
   );
-};
+}
 
 PopularResultsIndex.propTypes = {
   title: PropTypes.string.isRequired,
diff --git a/src/components/search/tests/SearchCourseCard.test.jsx b/src/components/search/tests/SearchCourseCard.test.jsx
index 6e4d1625cc..0f3eebb867 100644
--- a/src/components/search/tests/SearchCourseCard.test.jsx
+++ b/src/components/search/tests/SearchCourseCard.test.jsx
@@ -19,15 +19,17 @@ jest.mock('react-loading-skeleton', () => ({
   default: (props = {}) => <div data-testid={props['data-testid']} />,
 }));
 
-const SearchCourseCardWithAppContext = (props) => (
-  <AppContext.Provider
-    value={{
-      enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG },
-    }}
-  >
-    <SearchCourseCard {...props} />
-  </AppContext.Provider>
-);
+function SearchCourseCardWithAppContext(props) {
+  return (
+    <AppContext.Provider
+      value={{
+        enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG },
+      }}
+    >
+      <SearchCourseCard {...props} />
+    </AppContext.Provider>
+  );
+}
 
 const TEST_COURSE_KEY = 'test-course-key';
 const TEST_TITLE = 'Test Title';
diff --git a/src/components/search/tests/SearchProgramCard.test.jsx b/src/components/search/tests/SearchProgramCard.test.jsx
index ff8013a937..ce66a83d47 100644
--- a/src/components/search/tests/SearchProgramCard.test.jsx
+++ b/src/components/search/tests/SearchProgramCard.test.jsx
@@ -30,15 +30,17 @@ jest.mock('@edx/frontend-enterprise-utils', () => ({
   sendEnterpriseTrackEvent: jest.fn(),
 }));
 
-const SearchProgramCardWithAppContext = (props) => (
-  <AppContext.Provider
-    value={{
-      enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG, uuid: enterpriseUuid },
-    }}
-  >
-    <SearchProgramCard {...props} />
-  </AppContext.Provider>
-);
+function SearchProgramCardWithAppContext(props) {
+  return (
+    <AppContext.Provider
+      value={{
+        enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG, uuid: enterpriseUuid },
+      }}
+    >
+      <SearchProgramCard {...props} />
+    </AppContext.Provider>
+  );
+}
 
 const PROGRAM_UUID = 'a9cbdeb6-5fc0-44ef-97f7-9ed605a149db';
 const PROGRAM_TITLE = 'Intro to BatVerse';
diff --git a/src/components/search/tests/SearchResults.test.jsx b/src/components/search/tests/SearchResults.test.jsx
index dc318ea114..d522fa3679 100644
--- a/src/components/search/tests/SearchResults.test.jsx
+++ b/src/components/search/tests/SearchResults.test.jsx
@@ -84,17 +84,19 @@ const initialSubsidyRequestsState = {
 };
 
 /* eslint-enable react/prop-types */
-const SearchResultsWithContext = (props) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
-        <SearchContext.Provider value={searchContext}>
-          <SearchResults {...props} />
-        </SearchContext.Provider>
-      </SubsidyRequestsContext.Provider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+function SearchResultsWithContext(props) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
+          <SearchContext.Provider value={searchContext}>
+            <SearchResults {...props} />
+          </SearchContext.Provider>
+        </SubsidyRequestsContext.Provider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 const TEST_COURSE_KEY = 'test-course-key';
diff --git a/src/components/site-header/AvatarDropdown.jsx b/src/components/site-header/AvatarDropdown.jsx
index 14d80a156d..1e9e3262c4 100644
--- a/src/components/site-header/AvatarDropdown.jsx
+++ b/src/components/site-header/AvatarDropdown.jsx
@@ -6,7 +6,7 @@ import { AppContext } from '@edx/frontend-platform/react';
 import { AvatarButton, Dropdown } from '@edx/paragon';
 import { isDefinedAndNotNull } from '../../utils/common';
 
-const AvatarDropdown = ({ showLabel }) => {
+function AvatarDropdown({ showLabel }) {
   const {
     BASE_URL,
     LMS_BASE_URL,
@@ -55,7 +55,7 @@ const AvatarDropdown = ({ showLabel }) => {
       </Dropdown.Menu>
     </Dropdown>
   );
-};
+}
 
 AvatarDropdown.propTypes = {
   showLabel: PropTypes.bool,
diff --git a/src/components/site-header/SiteHeader.jsx b/src/components/site-header/SiteHeader.jsx
index 19d5b68cd7..347c4987a4 100644
--- a/src/components/site-header/SiteHeader.jsx
+++ b/src/components/site-header/SiteHeader.jsx
@@ -27,11 +27,9 @@ export default function SiteHeader() {
       return image;
     }
     return (
-      <>
-        <Link to={`/${enterpriseConfig.slug}`} data-testid="header-logo-link-id">
-          {image}
-        </Link>
-      </>
+      <Link to={`/${enterpriseConfig.slug}`} data-testid="header-logo-link-id">
+        {image}
+      </Link>
     );
   };
 
diff --git a/src/components/site-header/tests/SiteHeader.test.jsx b/src/components/site-header/tests/SiteHeader.test.jsx
index c5cf1c9f64..21b048b430 100644
--- a/src/components/site-header/tests/SiteHeader.test.jsx
+++ b/src/components/site-header/tests/SiteHeader.test.jsx
@@ -29,13 +29,15 @@ const appState = {
 };
 
 /* eslint-disable react/prop-types */
-const SiteHeaderWithContext = ({
+function SiteHeaderWithContext({
   initialAppState = appState,
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <SiteHeader />
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <SiteHeader />
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 const mockWindowConfig = {
diff --git a/src/components/skills-quiz/CardLoadingSkeleton.jsx b/src/components/skills-quiz/CardLoadingSkeleton.jsx
index 68fa9d4b49..b5ce4691b4 100644
--- a/src/components/skills-quiz/CardLoadingSkeleton.jsx
+++ b/src/components/skills-quiz/CardLoadingSkeleton.jsx
@@ -4,38 +4,40 @@ import { Card } from '@edx/paragon';
 import Skeleton from 'react-loading-skeleton';
 import { LOADING_NO_OF_CARDS } from './constants';
 
-const CardLoadingSkeleton = () => (
-  <div className="row col col-12 p-0">
-    <div className="skill-quiz-results align-items-l-between col col-xl-10">
-      {Array.from({ length: LOADING_NO_OF_CARDS }, (_, i) => (
-        <div
-          className="search-result-card mb-4"
-          role="group"
-          key={i}
-        >
-          {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
-          <Link to="#">
-            <Card>
-              <Card.ImageCap
-                as={Skeleton}
-                duration={0}
-              />
+function CardLoadingSkeleton() {
+  return (
+    <div className="row col col-12 p-0">
+      <div className="skill-quiz-results align-items-l-between col col-xl-10">
+        {Array.from({ length: LOADING_NO_OF_CARDS }, (_, i) => (
+          <div
+            className="search-result-card mb-4"
+            role="group"
+            key={i}
+          >
+            {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
+            <Link to="#">
+              <Card>
+                <Card.ImageCap
+                  as={Skeleton}
+                  duration={0}
+                />
 
-              <Card.Header
-                title={
-                  <Skeleton count={2} data-testid="course-title-loading" />
-                }
-              />
-              <Card.Section>
-                <Skeleton duration={0} data-testid="partner-name-loading" />
-                <Skeleton count={1} data-testid="skills-loading" />
-              </Card.Section>
-            </Card>
-          </Link>
-        </div>
-      ))}
+                <Card.Header
+                  title={
+                    <Skeleton count={2} data-testid="course-title-loading" />
+                  }
+                />
+                <Card.Section>
+                  <Skeleton duration={0} data-testid="partner-name-loading" />
+                  <Skeleton count={1} data-testid="skills-loading" />
+                </Card.Section>
+              </Card>
+            </Link>
+          </div>
+        ))}
+      </div>
     </div>
-  </div>
-);
+  );
+}
 
 export default CardLoadingSkeleton;
diff --git a/src/components/skills-quiz/CourseCard.jsx b/src/components/skills-quiz/CourseCard.jsx
index 1cad78e481..49e8276c55 100644
--- a/src/components/skills-quiz/CourseCard.jsx
+++ b/src/components/skills-quiz/CourseCard.jsx
@@ -11,9 +11,9 @@ import { ELLIPSIS_STR } from '../course/data/constants';
 import { isDefinedAndNotNull } from '../../utils/common';
 import { MAX_VISIBLE_SKILLS_COURSE, SKILL_NAME_CUTOFF_LIMIT } from './constants';
 
-const CourseCard = ({
+function CourseCard({
   isLoading, course, allSkills,
-}) => {
+}) {
   const { enterpriseConfig } = useContext(AppContext);
   const { slug, uuid } = enterpriseConfig;
   const partnerDetails = useMemo(() => {
@@ -133,7 +133,7 @@ const CourseCard = ({
       </Link>
     </div>
   );
-};
+}
 
 CourseCard.propTypes = {
   course: PropTypes.shape({
diff --git a/src/components/skills-quiz/CurrentJobDropdown.jsx b/src/components/skills-quiz/CurrentJobDropdown.jsx
index f9b2c1a881..c9562d4613 100644
--- a/src/components/skills-quiz/CurrentJobDropdown.jsx
+++ b/src/components/skills-quiz/CurrentJobDropdown.jsx
@@ -4,7 +4,7 @@ import FacetListRefinement from '@edx/frontend-enterprise-catalog-search/FacetLi
 
 import { CURRENT_JOB_FACET } from './constants';
 
-const CurrentJobDropdown = () => {
+function CurrentJobDropdown() {
   const { refinements } = useContext(SearchContext);
   const {
     title, attribute, typeaheadOptions, facetValueType, customAttribute,
@@ -25,6 +25,6 @@ const CurrentJobDropdown = () => {
       showBadge={false}
     />
   );
-};
+}
 
 export default CurrentJobDropdown;
diff --git a/src/components/skills-quiz/GoalDropdown.jsx b/src/components/skills-quiz/GoalDropdown.jsx
index 6871f95115..76feddbd58 100644
--- a/src/components/skills-quiz/GoalDropdown.jsx
+++ b/src/components/skills-quiz/GoalDropdown.jsx
@@ -7,7 +7,7 @@ import {
 import { SET_KEY_VALUE } from './data/constants';
 import { SkillsContext } from './SkillsContextProvider';
 
-const GoalDropdown = () => {
+function GoalDropdown() {
   const { dispatch, state } = useContext(SkillsContext);
   const { goal } = state;
   const selectGoal = (selectedGoal) => {
@@ -30,6 +30,6 @@ const GoalDropdown = () => {
       </Dropdown.Menu>
     </Dropdown>
   );
-};
+}
 
 export default GoalDropdown;
diff --git a/src/components/skills-quiz/JobCardComponent.jsx b/src/components/skills-quiz/JobCardComponent.jsx
index 0179c4ab5e..94a38af4e3 100644
--- a/src/components/skills-quiz/JobCardComponent.jsx
+++ b/src/components/skills-quiz/JobCardComponent.jsx
@@ -6,7 +6,7 @@ import PropTypes from 'prop-types';
 import { formatStringAsNumber } from '../../utils/common';
 import { NOT_AVAILABLE } from './constants';
 
-const JobCardComponent = ({ jobs, isLoading }) => {
+function JobCardComponent({ jobs, isLoading }) {
   const { enterpriseConfig: { hideLaborMarketData } } = useContext(AppContext);
   return (
     <>
@@ -58,7 +58,7 @@ const JobCardComponent = ({ jobs, isLoading }) => {
       ))}
     </>
   );
-};
+}
 
 JobCardComponent.defaultProps = {
   jobs: undefined,
diff --git a/src/components/skills-quiz/SearchCourseCard.jsx b/src/components/skills-quiz/SearchCourseCard.jsx
index 70c2090bf1..0a212c782f 100644
--- a/src/components/skills-quiz/SearchCourseCard.jsx
+++ b/src/components/skills-quiz/SearchCourseCard.jsx
@@ -28,7 +28,7 @@ const renderDialog = () => (
   </div>
 );
 
-const SearchCourseCard = ({ index }) => {
+function SearchCourseCard({ index }) {
   const { enterpriseConfig } = useContext(AppContext);
   const {
     subscriptionPlan, subscriptionLicense, couponCodes: { couponCodes }, enterpriseOffers,
@@ -111,7 +111,7 @@ const SearchCourseCard = ({ index }) => {
       </div>
     </div>
   );
-};
+}
 
 SearchCourseCard.propTypes = {
   index: PropTypes.shape({
diff --git a/src/components/skills-quiz/SearchCurrentJobCard.jsx b/src/components/skills-quiz/SearchCurrentJobCard.jsx
index b17d4a7fd0..87631f1b8d 100644
--- a/src/components/skills-quiz/SearchCurrentJobCard.jsx
+++ b/src/components/skills-quiz/SearchCurrentJobCard.jsx
@@ -8,20 +8,22 @@ import { SkillsContext } from './SkillsContextProvider';
 import JobCardComponent from './JobCardComponent';
 import { SET_KEY_VALUE } from './data/constants';
 
-const SearchCurrentJobCard = ({ index }) => {
+function SearchCurrentJobCard({ index }) {
   const { refinements } = useContext(SearchContext);
   const { current_job: currentJob } = refinements;
   const [isLoading, setIsLoading] = useState(true);
   const { dispatch, state } = useContext(SkillsContext);
   const { currentJobRole } = state;
-  const jobToFetch = useMemo(() => {
-    const jobsArray = [];
-    if (currentJob?.length > 0) {
-      jobsArray.push(`name:${currentJob[0]}`);
-    }
-    return jobsArray;
-  },
-  [currentJob]);
+  const jobToFetch = useMemo(
+    () => {
+      const jobsArray = [];
+      if (currentJob?.length > 0) {
+        jobsArray.push(`name:${currentJob[0]}`);
+      }
+      return jobsArray;
+    },
+    [currentJob],
+  );
 
   useEffect(
     () => {
@@ -49,7 +51,7 @@ const SearchCurrentJobCard = ({ index }) => {
       <JobCardComponent jobs={currentJobRole} isLoading={isLoading} />
     </div>
   );
-};
+}
 
 SearchCurrentJobCard.propTypes = {
   index: PropTypes.shape({
diff --git a/src/components/skills-quiz/SearchJobCard.jsx b/src/components/skills-quiz/SearchJobCard.jsx
index d38a96afa5..eeee8fd185 100644
--- a/src/components/skills-quiz/SearchJobCard.jsx
+++ b/src/components/skills-quiz/SearchJobCard.jsx
@@ -7,20 +7,22 @@ import { SkillsContext } from './SkillsContextProvider';
 import { SET_KEY_VALUE } from './data/constants';
 import JobCardComponent from './JobCardComponent';
 
-const SearchJobCard = ({ index }) => {
+function SearchJobCard({ index }) {
   const { refinements } = useContext(SearchContext);
   const { name: jobs } = refinements;
   const [isLoading, setIsLoading] = useState(true);
   const { dispatch, state } = useContext(SkillsContext);
   const { interestedJobs } = state;
-  const jobsToFetch = useMemo(() => {
-    const jobsArray = [];
-    if (jobs) {
-      jobs.forEach(job => jobsArray.push(`name:${job}`));
-    }
-    return jobsArray;
-  },
-  [jobs]);
+  const jobsToFetch = useMemo(
+    () => {
+      const jobsArray = [];
+      if (jobs) {
+        jobs.forEach(job => jobsArray.push(`name:${job}`));
+      }
+      return jobsArray;
+    },
+    [jobs],
+  );
 
   useEffect(
     () => {
@@ -49,7 +51,7 @@ const SearchJobCard = ({ index }) => {
       <JobCardComponent jobs={interestedJobs} isLoading={isLoading} />
     </div>
   );
-};
+}
 
 SearchJobCard.propTypes = {
   index: PropTypes.shape({
diff --git a/src/components/skills-quiz/SearchJobDropdown.jsx b/src/components/skills-quiz/SearchJobDropdown.jsx
index 25a31ec1e6..07280c6c6a 100644
--- a/src/components/skills-quiz/SearchJobDropdown.jsx
+++ b/src/components/skills-quiz/SearchJobDropdown.jsx
@@ -4,7 +4,7 @@ import FacetListRefinement from '@edx/frontend-enterprise-catalog-search/FacetLi
 
 import { DESIRED_JOB_FACET } from './constants';
 
-const SearchJobDropdown = () => {
+function SearchJobDropdown() {
   const { refinements } = useContext(SearchContext);
   const { title, attribute, typeaheadOptions } = DESIRED_JOB_FACET;
 
@@ -22,6 +22,6 @@ const SearchJobDropdown = () => {
       showBadge={false}
     />
   );
-};
+}
 
 export default SearchJobDropdown;
diff --git a/src/components/skills-quiz/SearchPathways.jsx b/src/components/skills-quiz/SearchPathways.jsx
index 4a2bff56ee..32bd56f35a 100644
--- a/src/components/skills-quiz/SearchPathways.jsx
+++ b/src/components/skills-quiz/SearchPathways.jsx
@@ -13,7 +13,7 @@ import { UserSubsidyContext } from '../enterprise-user-subsidy';
 import SearchPathwayCard from '../pathway/SearchPathwayCard';
 import { SubsidyRequestsContext } from '../enterprise-subsidy-requests';
 
-const SearchPathways = ({ index }) => {
+function SearchPathways({ index }) {
   const { enterpriseConfig } = useContext(AppContext);
   const {
     subscriptionPlan, subscriptionLicense, couponCodes: { couponCodes }, enterpriseOffers,
@@ -86,7 +86,7 @@ const SearchPathways = ({ index }) => {
       </div>
     </div>
   );
-};
+}
 
 SearchPathways.propTypes = {
   index: PropTypes.shape({
diff --git a/src/components/skills-quiz/SearchProgramCard.jsx b/src/components/skills-quiz/SearchProgramCard.jsx
index 296f9a2f33..abb12b1fbc 100644
--- a/src/components/skills-quiz/SearchProgramCard.jsx
+++ b/src/components/skills-quiz/SearchProgramCard.jsx
@@ -55,7 +55,7 @@ const renderDialog = () => (
   </div>
 );
 
-const SearchProgramCard = ({ index }) => {
+function SearchProgramCard({ index }) {
   const { enterpriseConfig } = useContext(AppContext);
   const { slug, uuid } = enterpriseConfig;
   const {
@@ -290,7 +290,7 @@ const SearchProgramCard = ({ index }) => {
       </div>
     </div>
   );
-};
+}
 
 SearchProgramCard.propTypes = {
   index: PropTypes.shape({
diff --git a/src/components/skills-quiz/SelectJobCard.jsx b/src/components/skills-quiz/SelectJobCard.jsx
index 6e4c4b09d3..7feee2d8e5 100644
--- a/src/components/skills-quiz/SelectJobCard.jsx
+++ b/src/components/skills-quiz/SelectJobCard.jsx
@@ -7,7 +7,7 @@ import { formatStringAsNumber } from '../../utils/common';
 import { checkValidGoalAndJobSelected } from '../utils/skills-quiz';
 import { NOT_AVAILABLE } from './constants';
 
-const SelectJobCard = () => {
+function SelectJobCard() {
   const { dispatch, state } = useContext(SkillsContext);
   const { enterpriseConfig: { hideLaborMarketData } } = useContext(AppContext);
   const {
@@ -64,6 +64,6 @@ const SelectJobCard = () => {
       </SelectableBox.Set>
     </div>
   );
-};
+}
 
 export default SelectJobCard;
diff --git a/src/components/skills-quiz/SelectedJobSkills.jsx b/src/components/skills-quiz/SelectedJobSkills.jsx
index 8bbd7d7204..9e572ed85a 100644
--- a/src/components/skills-quiz/SelectedJobSkills.jsx
+++ b/src/components/skills-quiz/SelectedJobSkills.jsx
@@ -3,7 +3,7 @@ import { Badge } from '@edx/paragon';
 import { SkillsContext } from './SkillsContextProvider';
 import { DROPDOWN_OPTION_IMPROVE_CURRENT_ROLE } from './constants';
 
-const SelectedJobSkills = () => {
+function SelectedJobSkills() {
   const { state } = useContext(SkillsContext);
   const {
     interestedJobs, selectedJob, goal, currentJobRole,
@@ -32,6 +32,6 @@ const SelectedJobSkills = () => {
       </div>
     </div>
   );
-};
+}
 
 export default SelectedJobSkills;
diff --git a/src/components/skills-quiz/SkillsCourses.jsx b/src/components/skills-quiz/SkillsCourses.jsx
index c679cdf8b0..9ae49dea88 100644
--- a/src/components/skills-quiz/SkillsCourses.jsx
+++ b/src/components/skills-quiz/SkillsCourses.jsx
@@ -36,7 +36,7 @@ const renderDialog = () => (
   </div>
 );
 
-const SkillsCourses = ({ index }) => {
+function SkillsCourses({ index }) {
   const { enterpriseConfig } = useContext(AppContext);
   const { state: { selectedJob } } = useContext(SkillsContext);
   const [isLoading, setIsLoading] = useState(false);
@@ -163,7 +163,7 @@ const SkillsCourses = ({ index }) => {
       </div>
     </div>
   );
-};
+}
 
 SkillsCourses.propTypes = {
   index: PropTypes.shape({
diff --git a/src/components/skills-quiz/SkillsDropDown.jsx b/src/components/skills-quiz/SkillsDropDown.jsx
index e9ce7c214f..af4fe24aee 100644
--- a/src/components/skills-quiz/SkillsDropDown.jsx
+++ b/src/components/skills-quiz/SkillsDropDown.jsx
@@ -4,7 +4,7 @@ import FacetListRefinement from '@edx/frontend-enterprise-catalog-search/FacetLi
 
 import { SKILLS_FACET } from './constants';
 
-const SkillsDropDown = () => {
+function SkillsDropDown() {
   const { refinements } = useContext(SearchContext);
   const {
     title, attribute, typeaheadOptions, facetValueType,
@@ -23,6 +23,6 @@ const SkillsDropDown = () => {
       doRefinement={false}
     />
   );
-};
+}
 
 export default SkillsDropDown;
diff --git a/src/components/skills-quiz/SkillsQuiz.jsx b/src/components/skills-quiz/SkillsQuiz.jsx
index d2f6c34e4a..a2635baa8c 100644
--- a/src/components/skills-quiz/SkillsQuiz.jsx
+++ b/src/components/skills-quiz/SkillsQuiz.jsx
@@ -12,7 +12,7 @@ import { MainContent } from '../layout';
 import SkillsQuizStepper from './SkillsQuizStepper';
 import { SkillsContextProvider } from './SkillsContextProvider';
 
-const SkillsQuiz = () => {
+function SkillsQuiz() {
   const { enterpriseConfig } = useContext(AppContext);
   const PAGE_TITLE = `Skills Quiz - ${enterpriseConfig.name}`;
 
@@ -33,6 +33,6 @@ const SkillsQuiz = () => {
       </Container>
     </>
   );
-};
+}
 
 export default SkillsQuiz;
diff --git a/src/components/skills-quiz/SkillsQuizHeader.jsx b/src/components/skills-quiz/SkillsQuizHeader.jsx
index 2066e3440e..623fc609eb 100644
--- a/src/components/skills-quiz/SkillsQuizHeader.jsx
+++ b/src/components/skills-quiz/SkillsQuizHeader.jsx
@@ -1,19 +1,21 @@
 import React from 'react';
 import edxLogo from './images/edx-logo.svg';
 
-const SkillsQuizHeader = () => (
-  <div style={{ display: 'flex' }} className="ml-2">
-    <img src={edxLogo} alt="edx-logo" height="110px" />
-    <div
-      className="ml-5 vertical-line"
-    />
-    <div style={{ minWidth: 'max-content' }} className="ml-5 header-text">
-      <h1 className="heading">Skills Builder</h1>
-      <h2 className="subheading">
-        Start your learning journey with edX
-      </h2>
+function SkillsQuizHeader() {
+  return (
+    <div style={{ display: 'flex' }} className="ml-2">
+      <img src={edxLogo} alt="edx-logo" height="110px" />
+      <div
+        className="ml-5 vertical-line"
+      />
+      <div style={{ minWidth: 'max-content' }} className="ml-5 header-text">
+        <h1 className="heading">Skills Builder</h1>
+        <h2 className="subheading">
+          Start your learning journey with edX
+        </h2>
+      </div>
     </div>
-  </div>
-);
+  );
+}
 
 export default SkillsQuizHeader;
diff --git a/src/components/skills-quiz/SkillsQuizStepper.jsx b/src/components/skills-quiz/SkillsQuizStepper.jsx
index cc06683d46..0082faf94c 100644
--- a/src/components/skills-quiz/SkillsQuizStepper.jsx
+++ b/src/components/skills-quiz/SkillsQuizStepper.jsx
@@ -45,7 +45,7 @@ import SkillsQuizHeader from './SkillsQuizHeader';
 import headerImage from './images/headerImage.png';
 import { SubsidyRequestsContext } from '../enterprise-subsidy-requests';
 
-const SkillsQuizStepper = () => {
+function SkillsQuizStepper() {
   const config = getConfig();
   const { userId } = getAuthenticatedUser();
   const [searchClient, courseIndex, jobIndex] = useMemo(
@@ -176,140 +176,139 @@ const SkillsQuizStepper = () => {
   }, [skillsVisible, selectedSkills]);
 
   return (
-    <>
-      <Stepper activeKey={currentStep}>
-        <ModalDialog
-          title="Skills Quiz"
-          size="fullscreen"
-          className="bg-light-200 skills-quiz-modal"
-          isOpen
-          onClose={() => closeSkillsQuiz()}
-        >
-          <ModalDialog.Hero className="bg-img">
-            <ModalDialog.Hero.Background
-              backgroundSrc={headerImage}
-            />
-            <ModalDialog.Hero.Content style={{ maxWidth: '15rem' }}>
-              <SkillsQuizHeader />
-            </ModalDialog.Hero.Content>
-          </ModalDialog.Hero>
-          <ModalDialog.Body>
-            <Container size="lg">
-              <Stepper.Step eventKey="skills-search" title="Skills Search">
+    <Stepper activeKey={currentStep}>
+      <ModalDialog
+        title="Skills Quiz"
+        size="fullscreen"
+        className="bg-light-200 skills-quiz-modal"
+        isOpen
+        onClose={() => closeSkillsQuiz()}
+      >
+        <ModalDialog.Hero className="bg-img">
+          <ModalDialog.Hero.Background
+            backgroundSrc={headerImage}
+          />
+          <ModalDialog.Hero.Content style={{ maxWidth: '15rem' }}>
+            <SkillsQuizHeader />
+          </ModalDialog.Hero.Content>
+        </ModalDialog.Hero>
+        <ModalDialog.Body>
+          <Container size="lg">
+            <Stepper.Step eventKey="skills-search" title="Skills Search">
 
-                <div className="row skills-quiz-dropdown mt-4">
-                  <div className="col col-12">
-                    <p>
-                      {SKILLS_QUIZ_SEARCH_PAGE_MESSAGE}
-                    </p>
-                    <p className="mt-4.5">
-                      First, tell us a bit more about what you want to achieve.
-                    </p>
+              <div className="row skills-quiz-dropdown mt-4">
+                <div className="col col-12">
+                  <p>
+                    {SKILLS_QUIZ_SEARCH_PAGE_MESSAGE}
+                  </p>
+                  <p className="mt-4.5">
+                    First, tell us a bit more about what you want to achieve.
+                  </p>
 
-                    <div className="col col-8 p-0 mt-2">
-                      <GoalDropdown />
-                    </div>
-                    {
-                      skillsVisible && (
-                        <InstantSearch
-                          indexName={config.ALGOLIA_INDEX_NAME}
-                          searchClient={searchClient}
-                        >
-                          <Configure
-                            filters={filters}
-                            facetingAfterDistinct
-                          />
-                          <div className="skills-drop-down">
-                            <div className="mt-4.5">
-                              Second, which skills are you interested in developing? (select at least one)
-                            </div>
-                            <div className="col col-8 p-0 mt-1">
-                              <SkillsDropDown />
-                            </div>
-                          </div>
-                        </InstantSearch>
-                      )
-                    }
-
-                    <div className="col col-8 p-0">
-                      {skillsVisible && (
-                        <TagCloud
-                          tags={selectedSkills}
-                          onRemove={
-                            (skillMetadata) => {
-                              if (selectedSkills.length > 1) {
-                                dispatch(removeFromRefinementArray('skill_names', skillMetadata.title));
-                              } else {
-                                dispatch(deleteRefinementAction('skill_names'));
-                              }
-                            }
-                          }
+                  <div className="col col-8 p-0 mt-2">
+                    <GoalDropdown />
+                  </div>
+                  {
+                    skillsVisible && (
+                      <InstantSearch
+                        indexName={config.ALGOLIA_INDEX_NAME}
+                        searchClient={searchClient}
+                      >
+                        <Configure
+                          filters={filters}
+                          facetingAfterDistinct
                         />
-                      )}
-                    </div>
-
-                    {
-                      jobsDropdownsVisible && (
-                        <div>
+                        <div className="skills-drop-down">
                           <div className="mt-4.5">
-                            Next, tell us about your current job title.
+                            Second, which skills are you interested in developing? (select at least one)
+                          </div>
+                          <div className="col col-8 p-0 mt-1">
+                            <SkillsDropDown />
                           </div>
-
-                          <InstantSearch
-                            indexName={config.ALGOLIA_INDEX_NAME_JOBS}
-                            searchClient={searchClient}
-                          >
-                            <div className="col col-8 p-0 mt-3">
-                              <CurrentJobDropdown />
-                              <Form.Checkbox
-                                checked={isStudentChecked}
-                                onChange={handleIsStudentCheckedChange}
-                                disabled={goal === DROPDOWN_OPTION_IMPROVE_CURRENT_ROLE}
-                                data-testid="is-student-checkbox"
-                              >
-                                I am currently a student
-                              </Form.Checkbox>
-                            </div>
-                            <div className="col col-8 p-0 mt-n2">
-                              { goal !== DROPDOWN_OPTION_IMPROVE_CURRENT_ROLE
-                                ? (
-                                  <div className="mt-4.5">
-                                    Lastly, tell us about career paths you&apos;re interested in (select up to three)
-                                    <SearchJobDropdown />
-                                  </div>
-                                ) : null }
-                            </div>
-                          </InstantSearch>
-
                         </div>
-                      )
-                    }
+                      </InstantSearch>
+                    )
+                  }
 
+                  <div className="col col-8 p-0">
+                    {skillsVisible && (
+                      <TagCloud
+                        tags={selectedSkills}
+                        onRemove={
+                          (skillMetadata) => {
+                            if (selectedSkills.length > 1) {
+                              dispatch(removeFromRefinementArray('skill_names', skillMetadata.title));
+                            } else {
+                              dispatch(deleteRefinementAction('skill_names'));
+                            }
+                          }
+                        }
+                      />
+                    )}
                   </div>
 
                   {
                     jobsDropdownsVisible && (
-                      <div className="col-12 mt-4">
-                        { goalExceptImproveAndJobSelected
-                          ? <SearchJobCard index={jobIndex} /> : null }
-                        { improveGoalAndCurrentJobSelected
-                          ? <SearchCurrentJobCard index={jobIndex} /> : null }
+                      <div>
+                        <div className="mt-4.5">
+                          Next, tell us about your current job title.
+                        </div>
+
+                        <InstantSearch
+                          indexName={config.ALGOLIA_INDEX_NAME_JOBS}
+                          searchClient={searchClient}
+                        >
+                          <div className="col col-8 p-0 mt-3">
+                            <CurrentJobDropdown />
+                            <Form.Checkbox
+                              checked={isStudentChecked}
+                              onChange={handleIsStudentCheckedChange}
+                              disabled={goal === DROPDOWN_OPTION_IMPROVE_CURRENT_ROLE}
+                              data-testid="is-student-checkbox"
+                            >
+                              I am currently a student
+                            </Form.Checkbox>
+                          </div>
+                          <div className="col col-8 p-0 mt-n2">
+                            { goal !== DROPDOWN_OPTION_IMPROVE_CURRENT_ROLE
+                              ? (
+                                <div className="mt-4.5">
+                                  Lastly, tell us about career paths you&apos;re interested in (select up to three)
+                                  <SearchJobDropdown />
+                                </div>
+                              ) : null }
+                          </div>
+                        </InstantSearch>
+
                       </div>
                     )
                   }
+
                 </div>
-              </Stepper.Step>
-              <Stepper.Step eventKey="courses-with-jobs" title="Recommended Courses With Jobs">
-                <div style={{ paddingLeft: '10%' }}>
-                  <div className="row mb-4 pl-2 mt-4">
-                    <h2>Start Exploring Courses!</h2>
-                  </div>
-                  <div className="search-job-card mb-4">
-                    { canContinueToRecommendedCourses ? <SelectJobCard /> : null}
-                  </div>
-                  <SelectedJobSkills />
-                  <div>
-                    { (selectedJob || skills || goal === DROPDOWN_OPTION_IMPROVE_CURRENT_ROLE)
+
+                {
+                  jobsDropdownsVisible && (
+                    <div className="col-12 mt-4">
+                      { goalExceptImproveAndJobSelected
+                        ? <SearchJobCard index={jobIndex} /> : null }
+                      { improveGoalAndCurrentJobSelected
+                        ? <SearchCurrentJobCard index={jobIndex} /> : null }
+                    </div>
+                  )
+                }
+              </div>
+            </Stepper.Step>
+            <Stepper.Step eventKey="courses-with-jobs" title="Recommended Courses With Jobs">
+              <div style={{ paddingLeft: '10%' }}>
+                <div className="row mb-4 pl-2 mt-4">
+                  <h2>Start Exploring Courses!</h2>
+                </div>
+                <div className="search-job-card mb-4">
+                  { canContinueToRecommendedCourses ? <SelectJobCard /> : null}
+                </div>
+                <SelectedJobSkills />
+                <div>
+                  { (selectedJob || skills || goal === DROPDOWN_OPTION_IMPROVE_CURRENT_ROLE)
                       && (
                         <div>
                           <SearchCourseCard index={courseIndex} />
@@ -317,50 +316,49 @@ const SkillsQuizStepper = () => {
                           <SearchPathways index={courseIndex} />
                         </div>
                       )}
-                  </div>
-                </div>
-                <div className="row justify-content-center">
-                  <Button variant="outline-primary" onClick={() => setCurrentStep(STEP3)}>See more course recommendations</Button>
                 </div>
-              </Stepper.Step>
-            </Container>
-            <Container size="xl">
-              <Stepper.Step eventKey="courses-with-skills" title="Recommended Courses With Skills">
-                <SkillsCourses index={courseIndex} />
-              </Stepper.Step>
-            </Container>
-          </ModalDialog.Body>
-          <ModalDialog.Footer>
-            <Stepper.ActionRow eventKey="skills-search">
-              <Button variant="outline-primary" onClick={() => closeSkillsQuiz()}>
-                Cancel
-              </Button>
-              <Stepper.ActionRow.Spacer />
-              <Button
-                disabled={!canContinueToRecommendedCourses}
-                onClick={() => flipToRecommendedCourses()}
-              >Continue
-              </Button>
-            </Stepper.ActionRow>
-            <Stepper.ActionRow eventKey="courses-with-jobs">
-              <Button variant="outline-primary" onClick={() => setCurrentStep(STEP1)}>
-                Go back
-              </Button>
-              <Stepper.ActionRow.Spacer />
-              <Button onClick={() => setCurrentStep(STEP3)}>Continue</Button>
-            </Stepper.ActionRow>
-            <Stepper.ActionRow eventKey="courses-with-skills">
-              <Button variant="outline-primary" onClick={() => setCurrentStep(STEP2)}>
-                Go back
-              </Button>
-              <Stepper.ActionRow.Spacer />
-              <Button onClick={() => closeSkillsQuiz()}>Done</Button>
-            </Stepper.ActionRow>
-          </ModalDialog.Footer>
-        </ModalDialog>
-      </Stepper>
-    </>
+              </div>
+              <div className="row justify-content-center">
+                <Button variant="outline-primary" onClick={() => setCurrentStep(STEP3)}>See more course recommendations</Button>
+              </div>
+            </Stepper.Step>
+          </Container>
+          <Container size="xl">
+            <Stepper.Step eventKey="courses-with-skills" title="Recommended Courses With Skills">
+              <SkillsCourses index={courseIndex} />
+            </Stepper.Step>
+          </Container>
+        </ModalDialog.Body>
+        <ModalDialog.Footer>
+          <Stepper.ActionRow eventKey="skills-search">
+            <Button variant="outline-primary" onClick={() => closeSkillsQuiz()}>
+              Cancel
+            </Button>
+            <Stepper.ActionRow.Spacer />
+            <Button
+              disabled={!canContinueToRecommendedCourses}
+              onClick={() => flipToRecommendedCourses()}
+            >Continue
+            </Button>
+          </Stepper.ActionRow>
+          <Stepper.ActionRow eventKey="courses-with-jobs">
+            <Button variant="outline-primary" onClick={() => setCurrentStep(STEP1)}>
+              Go back
+            </Button>
+            <Stepper.ActionRow.Spacer />
+            <Button onClick={() => setCurrentStep(STEP3)}>Continue</Button>
+          </Stepper.ActionRow>
+          <Stepper.ActionRow eventKey="courses-with-skills">
+            <Button variant="outline-primary" onClick={() => setCurrentStep(STEP2)}>
+              Go back
+            </Button>
+            <Stepper.ActionRow.Spacer />
+            <Button onClick={() => closeSkillsQuiz()}>Done</Button>
+          </Stepper.ActionRow>
+        </ModalDialog.Footer>
+      </ModalDialog>
+    </Stepper>
   );
-};
+}
 
 export default SkillsQuizStepper;
diff --git a/src/components/skills-quiz/__mocks__/react-instantsearch-dom.jsx b/src/components/skills-quiz/__mocks__/react-instantsearch-dom.jsx
index dc5cb4eb08..cf9888e2a8 100644
--- a/src/components/skills-quiz/__mocks__/react-instantsearch-dom.jsx
+++ b/src/components/skills-quiz/__mocks__/react-instantsearch-dom.jsx
@@ -11,50 +11,66 @@ const fakeHits = [
   { objectID: '2', title: 'blp', key: 'Wasps200' },
 ];
 
-MockReactInstantSearch.connectStateResults = Component => (props) => (
-  <Component
-    searchResults={{
-      hits: fakeHits,
-      hitsPerPage: 25,
-      nbHits: 2,
-      nbPages: 1,
-      page: 1,
-    }}
-    isSearchStalled={false}
-    searchState={{
-      page: 1,
-    }}
-    {...props}
-  />
-);
+MockReactInstantSearch.connectStateResults = Component => function (props) {
+  return (
+    <Component
+      searchResults={{
+        hits: fakeHits,
+        hitsPerPage: 25,
+        nbHits: 2,
+        nbPages: 1,
+        page: 1,
+      }}
+      isSearchStalled={false}
+      searchState={{
+        page: 1,
+      }}
+      {...props}
+    />
+  );
+};
 
-MockReactInstantSearch.connectPagination = Component => (props) => (
-  <Component
-    nbPages={1}
-    currentRefinement={1}
-    maxPagesDisplayed={1}
-    {...props}
-  />
-);
+MockReactInstantSearch.connectPagination = Component => function (props) {
+  return (
+    <Component
+      nbPages={1}
+      currentRefinement={1}
+      maxPagesDisplayed={1}
+      {...props}
+    />
+  );
+};
 
-MockReactInstantSearch.InstantSearch = ({ children }) => <div>{children}</div>;
-
-MockReactInstantSearch.connectRefinementList = Component => (props) => (
-  <Component
-    attribute="skills"
-    currentRefinement={[]}
-    items={[]}
-    refinements={{}}
-    title="Foo"
-    searchForItems={() => {}}
-    {...props}
-  />
-);
+MockReactInstantSearch.InstantSearch = function ({ children }) {
+  return <div>{children}</div>;
+};
+
+MockReactInstantSearch.connectRefinementList = Component => function (props) {
+  return (
+    <Component
+      attribute="skills"
+      currentRefinement={[]}
+      items={[]}
+      refinements={{}}
+      title="Foo"
+      searchForItems={() => {}}
+      {...props}
+    />
+  );
+};
 
-MockReactInstantSearch.InstantSearch = ({ children }) => <>{children}</>;
-MockReactInstantSearch.Configure = () => <div>CONFIGURED</div>;
-MockReactInstantSearch.Hits = () => <div>HIT</div>;
-MockReactInstantSearch.Index = ({ children }) => <>{children}</>;
+MockReactInstantSearch.InstantSearch = function ({ children }) {
+  return <>{children}</>;
+};
+MockReactInstantSearch.Configure = function () {
+  return <div>CONFIGURED</div>;
+};
+MockReactInstantSearch.Hits = function () {
+  return <div>HIT</div>;
+};
+MockReactInstantSearch.Index = function ({ children }) {
+  return <>{children}</>;
+};
 
 // It is necessary to export this way, or tests not using the mock will fail
 module.exports = MockReactInstantSearch;
diff --git a/src/components/skills-quiz/data/tests/hooks.test.jsx b/src/components/skills-quiz/data/tests/hooks.test.jsx
index b941701bfc..d2991da736 100644
--- a/src/components/skills-quiz/data/tests/hooks.test.jsx
+++ b/src/components/skills-quiz/data/tests/hooks.test.jsx
@@ -6,13 +6,15 @@ import { useSelectedSkillsAndJobSkills } from '../hooks';
 import { SkillsContext } from '../../SkillsContextProvider';
 import { DROPDOWN_OPTION_IMPROVE_CURRENT_ROLE, DROPDOWN_OPTION_GET_PROMOTED } from '../../constants';
 
-const SearchWrapper = (searchContext, initialSkillsState) => ({ children }) => (
-  <SearchContext.Provider value={searchContext}>
-    <SkillsContext.Provider value={initialSkillsState}>
-      {children}
-    </SkillsContext.Provider>
-  </SearchContext.Provider>
-);
+const SearchWrapper = (searchContext, initialSkillsState) => function ({ children }) {
+  return (
+    <SearchContext.Provider value={searchContext}>
+      <SkillsContext.Provider value={initialSkillsState}>
+        {children}
+      </SkillsContext.Provider>
+    </SearchContext.Provider>
+  );
+};
 
 const skills = ['test-skill-1', 'test-skill-2'];
 const SELECTED_JOB_SKILL_NAME = 'test-skill-3';
diff --git a/src/components/skills-quiz/tests/GoalsDropdown.test.jsx b/src/components/skills-quiz/tests/GoalsDropdown.test.jsx
index 18189c6b9e..9c2bd8cec1 100644
--- a/src/components/skills-quiz/tests/GoalsDropdown.test.jsx
+++ b/src/components/skills-quiz/tests/GoalsDropdown.test.jsx
@@ -13,18 +13,20 @@ import GoalDropdown from '../GoalDropdown';
 import { SkillsContextProvider } from '../SkillsContextProvider';
 
 /* eslint-disable react/prop-types */
-const GoalDropdownWithContext = ({
+function GoalDropdownWithContext({
   initialAppState = {},
   initialUserSubsidyState = {},
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <SkillsContextProvider>
-        <GoalDropdown />
-      </SkillsContextProvider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <SkillsContextProvider>
+          <GoalDropdown />
+        </SkillsContextProvider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 const mockLocation = {
diff --git a/src/components/skills-quiz/tests/SearchCourseCard.test.jsx b/src/components/skills-quiz/tests/SearchCourseCard.test.jsx
index 91b52226b5..c12ccebbb0 100644
--- a/src/components/skills-quiz/tests/SearchCourseCard.test.jsx
+++ b/src/components/skills-quiz/tests/SearchCourseCard.test.jsx
@@ -105,26 +105,28 @@ const defaultSubsidyRequestState = {
   catalogsForSubsidyRequests: [],
 };
 
-const SearchCourseCardWithContext = ({
+function SearchCourseCardWithContext({
   initialAppState = defaultAppState,
   initialSkillsState = defaultSkillsState,
   initialUserSubsidyState = defaultUserSubsidyState,
   initialSubsidyRequestState = defaultSubsidyRequestState,
   searchContext = defaultSearchContext,
   index,
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
-        <SearchContext.Provider value={searchContext}>
-          <SkillsContext.Provider value={initialSkillsState}>
-            <SearchCourseCard index={index} />
-          </SkillsContext.Provider>
-        </SearchContext.Provider>
-      </SubsidyRequestsContext.Provider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
+          <SearchContext.Provider value={searchContext}>
+            <SkillsContext.Provider value={initialSkillsState}>
+              <SearchCourseCard index={index} />
+            </SkillsContext.Provider>
+          </SearchContext.Provider>
+        </SubsidyRequestsContext.Provider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 describe('<SearchCourseCard />', () => {
   test('renders the correct data', async () => {
diff --git a/src/components/skills-quiz/tests/SearchCurrentJobCard.test.jsx b/src/components/skills-quiz/tests/SearchCurrentJobCard.test.jsx
index 50d245e57d..b3feda1ae0 100644
--- a/src/components/skills-quiz/tests/SearchCurrentJobCard.test.jsx
+++ b/src/components/skills-quiz/tests/SearchCurrentJobCard.test.jsx
@@ -19,20 +19,22 @@ jest.mock('react-loading-skeleton', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-const SearchCurrentJobCardWithContext = ({
+function SearchCurrentJobCardWithContext({
   index,
   initialAppState,
   initialSearchState,
   initialJobsState,
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <SearchContext.Provider value={initialSearchState}>
-      <SkillsContextProvider initialState={initialJobsState}>
-        <SearchCurrentJobCard index={index} />
-      </SkillsContextProvider>
-    </SearchContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <SearchContext.Provider value={initialSearchState}>
+        <SkillsContextProvider initialState={initialJobsState}>
+          <SearchCurrentJobCard index={index} />
+        </SkillsContextProvider>
+      </SearchContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 const TEST_JOB_KEY = 'test-job-key';
diff --git a/src/components/skills-quiz/tests/SearchJobCard.test.jsx b/src/components/skills-quiz/tests/SearchJobCard.test.jsx
index ac4ec4fb4e..1b3225764e 100644
--- a/src/components/skills-quiz/tests/SearchJobCard.test.jsx
+++ b/src/components/skills-quiz/tests/SearchJobCard.test.jsx
@@ -19,20 +19,22 @@ jest.mock('react-loading-skeleton', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-const SearchJobCardWithContext = ({
+function SearchJobCardWithContext({
   index,
   initialAppState,
   initialSearchState,
   initialJobsState,
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <SearchContext.Provider value={initialSearchState}>
-      <SkillsContextProvider initialState={initialJobsState}>
-        <SearchJobCard index={index} />
-      </SkillsContextProvider>
-    </SearchContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <SearchContext.Provider value={initialSearchState}>
+        <SkillsContextProvider initialState={initialJobsState}>
+          <SearchJobCard index={index} />
+        </SkillsContextProvider>
+      </SearchContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 const TEST_JOB_KEY = 'test-job-key';
diff --git a/src/components/skills-quiz/tests/SearchPathways.test.jsx b/src/components/skills-quiz/tests/SearchPathways.test.jsx
index e1a8bb664b..3027a57d34 100644
--- a/src/components/skills-quiz/tests/SearchPathways.test.jsx
+++ b/src/components/skills-quiz/tests/SearchPathways.test.jsx
@@ -100,26 +100,28 @@ const defaultSubsidyRequestState = {
   catalogsForSubsidyRequests: [],
 };
 
-const SearchPathwaysWithContext = ({
+function SearchPathwaysWithContext({
   initialAppState = defaultAppState,
   initialSkillsState = defaultSkillsState,
   initialUserSubsidyState = defaultUserSubsidyState,
   initialSubsidyRequestState = defaultSubsidyRequestState,
   initialSearchContext = defaultSearchContext,
   index,
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
-        <SearchContext.Provider value={initialSearchContext}>
-          <SkillsContext.Provider value={initialSkillsState}>
-            <SearchPathways index={index} />
-          </SkillsContext.Provider>
-        </SearchContext.Provider>
-      </SubsidyRequestsContext.Provider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
+          <SearchContext.Provider value={initialSearchContext}>
+            <SkillsContext.Provider value={initialSkillsState}>
+              <SearchPathways index={index} />
+            </SkillsContext.Provider>
+          </SearchContext.Provider>
+        </SubsidyRequestsContext.Provider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 describe('<SearchPathways />', () => {
   test('renders the correct data', async () => {
diff --git a/src/components/skills-quiz/tests/SearchProgramCard.test.jsx b/src/components/skills-quiz/tests/SearchProgramCard.test.jsx
index 95e5a7d962..33b952a20b 100644
--- a/src/components/skills-quiz/tests/SearchProgramCard.test.jsx
+++ b/src/components/skills-quiz/tests/SearchProgramCard.test.jsx
@@ -118,25 +118,27 @@ const defaultSubsidyRequestState = {
   catalogsForSubsidyRequests: [],
 };
 
-const SearchProgramCardWithContext = ({
+function SearchProgramCardWithContext({
   initialAppState = defaultAppState,
   initialSkillsState = defaultSkillsState,
   initialUserSubsidyState = defaultUserSubsidyState,
   initialSearchContext = defaultSearchContext,
   index,
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <SubsidyRequestsContext.Provider value={defaultSubsidyRequestState}>
-        <SearchContext.Provider value={initialSearchContext}>
-          <SkillsContext.Provider value={initialSkillsState}>
-            <SearchProgramCard index={index} />
-          </SkillsContext.Provider>
-        </SearchContext.Provider>
-      </SubsidyRequestsContext.Provider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <SubsidyRequestsContext.Provider value={defaultSubsidyRequestState}>
+          <SearchContext.Provider value={initialSearchContext}>
+            <SkillsContext.Provider value={initialSkillsState}>
+              <SearchProgramCard index={index} />
+            </SkillsContext.Provider>
+          </SearchContext.Provider>
+        </SubsidyRequestsContext.Provider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 describe('<SearchProgramCard />', () => {
   test('renders the correct data', async () => {
diff --git a/src/components/skills-quiz/tests/SelectJobCard.test.jsx b/src/components/skills-quiz/tests/SelectJobCard.test.jsx
index 2c00cbdd11..0e21b9d08a 100644
--- a/src/components/skills-quiz/tests/SelectJobCard.test.jsx
+++ b/src/components/skills-quiz/tests/SelectJobCard.test.jsx
@@ -8,18 +8,20 @@ import SelectJobCard from '../SelectJobCard';
 import { NOT_AVAILABLE } from '../constants';
 
 /* eslint-disable react/prop-types */
-const SelectJobCardWithContext = ({
+function SelectJobCardWithContext({
   initialJobCardState = {},
   initialAppState,
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <SearchContext.Provider>
-      <SkillsContextProvider initialState={initialJobCardState}>
-        <SelectJobCard />
-      </SkillsContextProvider>
-    </SearchContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <SearchContext.Provider>
+        <SkillsContextProvider initialState={initialJobCardState}>
+          <SelectJobCard />
+        </SkillsContextProvider>
+      </SearchContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 const TEST_MEDIAN_SALARY = '100000';
diff --git a/src/components/skills-quiz/tests/SelectedJobSkills.test.jsx b/src/components/skills-quiz/tests/SelectedJobSkills.test.jsx
index 1db847f071..35d13443f7 100644
--- a/src/components/skills-quiz/tests/SelectedJobSkills.test.jsx
+++ b/src/components/skills-quiz/tests/SelectedJobSkills.test.jsx
@@ -7,18 +7,20 @@ import { SkillsContextProvider } from '../SkillsContextProvider';
 import SelectedJobSkills from '../SelectedJobSkills';
 
 /* eslint-disable react/prop-types */
-const SelectedJobSkillsWithContext = ({
+function SelectedJobSkillsWithContext({
   initialSelectedJobSkillsState = {},
   initialAppState,
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <SearchContext.Provider>
-      <SkillsContextProvider initialState={initialSelectedJobSkillsState}>
-        <SelectedJobSkills />
-      </SkillsContextProvider>
-    </SearchContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <SearchContext.Provider>
+        <SkillsContextProvider initialState={initialSelectedJobSkillsState}>
+          <SelectedJobSkills />
+        </SkillsContextProvider>
+      </SearchContext.Provider>
+    </AppContext.Provider>
+  );
+}
 /* eslint-enable react/prop-types */
 
 const PROGRAMMING = 'Programming';
diff --git a/src/components/skills-quiz/tests/SkillsCourses.test.jsx b/src/components/skills-quiz/tests/SkillsCourses.test.jsx
index 48c38a5a04..be6fa3eb3c 100644
--- a/src/components/skills-quiz/tests/SkillsCourses.test.jsx
+++ b/src/components/skills-quiz/tests/SkillsCourses.test.jsx
@@ -107,26 +107,28 @@ const defaultSubsidyRequestState = {
   catalogsForSubsidyRequests: [],
 };
 
-const SkillsCoursesWithContext = ({
+function SkillsCoursesWithContext({
   initialAppState = defaultAppState,
   initialSkillsState = defaultSkillsState,
   initialUserSubsidyState = defaultUserSubsidyState,
   initialSubsidyRequestState = defaultSubsidyRequestState,
   searchContext = defaultSearchContext,
   index,
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
-        <SearchContext.Provider value={searchContext}>
-          <SkillsContext.Provider value={initialSkillsState}>
-            <SkillsCourses index={index} />
-          </SkillsContext.Provider>
-        </SearchContext.Provider>
-      </SubsidyRequestsContext.Provider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
+          <SearchContext.Provider value={searchContext}>
+            <SkillsContext.Provider value={initialSkillsState}>
+              <SkillsCourses index={index} />
+            </SkillsContext.Provider>
+          </SearchContext.Provider>
+        </SubsidyRequestsContext.Provider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 describe('<SkillsCourses />', () => {
   test('renders the correct data', async () => {
diff --git a/src/components/skills-quiz/tests/SkillsQuiz.test.jsx b/src/components/skills-quiz/tests/SkillsQuiz.test.jsx
index 3150373e75..6e977d0154 100644
--- a/src/components/skills-quiz/tests/SkillsQuiz.test.jsx
+++ b/src/components/skills-quiz/tests/SkillsQuiz.test.jsx
@@ -59,19 +59,21 @@ const defaultSubsidyRequestState = {
   catalogsForSubsidyRequests: [],
 };
 
-const SkillsQuizWithContext = ({
+function SkillsQuizWithContext({
   initialAppState = defaultAppState,
   initialUserSubsidyState = defaultUserSubsidyState,
   initialSubsidyRequestState = defaultSubsidyRequestState,
-}) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
-        <SkillsQuiz />
-      </SubsidyRequestsContext.Provider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
+          <SkillsQuiz />
+        </SubsidyRequestsContext.Provider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 describe('<SkillsQuiz />', () => {
   afterAll(() => {
diff --git a/src/components/system-wide-banner/SystemWideWarningBanner.jsx b/src/components/system-wide-banner/SystemWideWarningBanner.jsx
index c6a4d034b2..7fd7c4a191 100644
--- a/src/components/system-wide-banner/SystemWideWarningBanner.jsx
+++ b/src/components/system-wide-banner/SystemWideWarningBanner.jsx
@@ -3,12 +3,14 @@ import PropTypes from 'prop-types';
 import { PageBanner, Icon } from '@edx/paragon';
 import { WarningFilled } from '@edx/paragon/icons';
 
-const SystemWideWarningBanner = ({ children }) => (
-  <PageBanner variant="warning">
-    <Icon src={WarningFilled} className="mr-2" />
-    {children}
-  </PageBanner>
-);
+function SystemWideWarningBanner({ children }) {
+  return (
+    <PageBanner variant="warning">
+      <Icon src={WarningFilled} className="mr-2" />
+      {children}
+    </PageBanner>
+  );
+}
 
 SystemWideWarningBanner.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/utils/tests.jsx b/src/utils/tests.jsx
index 0792f52665..e960d6bd07 100644
--- a/src/utils/tests.jsx
+++ b/src/utils/tests.jsx
@@ -13,9 +13,9 @@ export function renderWithRouter(
   } = {},
 ) {
   // eslint-disable-next-line react/prop-types
-  const Wrapper = ({ children }) => (
-    <Router history={history}>{children}</Router>
-  );
+  function Wrapper({ children }) {
+    return <Router history={history}>{children}</Router>;
+  }
   return {
     ...render(ui, { wrapper: Wrapper }),
     // adding `history` to the returned utilities to allow us

From 9f917d82671afbe5f00ad2094465f0727d94f87e Mon Sep 17 00:00:00 2001
From: Bilal Qamar <59555732+BilalQamar95@users.noreply.github.com>
Date: Thu, 4 Aug 2022 13:42:32 +0500
Subject: [PATCH 03/13] refactor: resolved eslint issues

---
 src/components/TagCloud/index.jsx             |   2 +-
 src/components/app/LoginRefresh.jsx           |   1 +
 .../enrollment/tests/EnrollAction.test.jsx    |   1 +
 .../course/tests/CourseRunCard.test.jsx       |   1 +
 .../course/tests/EnrollModal.test.jsx         |   4 +-
 .../tests/MarkCompleteModal.test.jsx          |   3 +
 .../sidebar/CouponCodesSummaryCard.jsx        | 100 +++++++-------
 .../sidebar/SubscriptionSummaryCard.jsx       | 130 +++++++++---------
 .../sidebar/tests/SidebarCard.test.jsx        |   2 +-
 .../coupons/data/reducer.js                   |   2 +-
 src/components/notices-provider/index.js      |   1 +
 src/components/pathway/data/utils.js          |   4 +-
 src/components/program/ProgramHeader.jsx      |  44 +++---
 .../program/tests/ProgramPage.test.jsx        |   2 +-
 src/components/search/SearchCourseCard.jsx    |  16 +--
 src/components/search/SearchProgramCard.jsx   |   4 +-
 .../search/data/tests/hooks.test.jsx          |   1 +
 src/components/skills-quiz/CourseCard.jsx     |  48 ++++---
 .../skills-quiz/JobCardComponent.jsx          |  33 +++--
 .../skills-quiz/SearchProgramCard.jsx         |  28 ++--
 .../__mocks__/react-instantsearch-dom.jsx     |   5 +-
 .../skills-quiz/data/tests/hooks.test.jsx     |   1 +
 22 files changed, 216 insertions(+), 217 deletions(-)

diff --git a/src/components/TagCloud/index.jsx b/src/components/TagCloud/index.jsx
index 3f8f0c736e..d716203422 100644
--- a/src/components/TagCloud/index.jsx
+++ b/src/components/TagCloud/index.jsx
@@ -27,7 +27,7 @@ TagCloud.propTypes = {
   tags: PropTypes.arrayOf(
     PropTypes.shape({
       title: PropTypes.string.isRequired,
-      metadata: PropTypes.object.isRequired,
+      metadata: PropTypes.shape({}).isRequired,
     }),
   ).isRequired,
 };
diff --git a/src/components/app/LoginRefresh.jsx b/src/components/app/LoginRefresh.jsx
index e1906b5d90..c3c6b41203 100644
--- a/src/components/app/LoginRefresh.jsx
+++ b/src/components/app/LoginRefresh.jsx
@@ -5,6 +5,7 @@ import { Container } from '@edx/paragon';
 import { LoadingSpinner } from '../loading-spinner';
 import { loginRefresh } from '../../utils/common';
 
+// eslint-disable-next-line react/prop-types
 export default function LoginRefresh({ children }) {
   const { authenticatedUser } = useContext(AppContext);
   const { roles } = authenticatedUser;
diff --git a/src/components/course/enrollment/tests/EnrollAction.test.jsx b/src/components/course/enrollment/tests/EnrollAction.test.jsx
index 1da5daea40..9b2df7bc29 100644
--- a/src/components/course/enrollment/tests/EnrollAction.test.jsx
+++ b/src/components/course/enrollment/tests/EnrollAction.test.jsx
@@ -53,6 +53,7 @@ const subscriptionLicense = { uuid: 'a-license' };
    * @param {string} args.enrollAction
    */
 function EnrollLabel(props) {
+  // eslint-disable-next-line react/prop-types
   return <div>{props.enrollLabelText}</div>;
 }
 const renderEnrollAction = ({
diff --git a/src/components/course/tests/CourseRunCard.test.jsx b/src/components/course/tests/CourseRunCard.test.jsx
index 0901e1471c..37a54bad35 100644
--- a/src/components/course/tests/CourseRunCard.test.jsx
+++ b/src/components/course/tests/CourseRunCard.test.jsx
@@ -28,6 +28,7 @@ const DATE_FORMAT = 'MMM D';
 const COURSE_ID = '123';
 
 jest.mock('../../../config');
+// eslint-disable-next-line react/prop-types
 jest.mock('../enrollment/EnrollAction', () => function ({ enrollLabel, enrollmentType }) {
   return (
     <>
diff --git a/src/components/course/tests/EnrollModal.test.jsx b/src/components/course/tests/EnrollModal.test.jsx
index 42739ac77e..b3833b7c1d 100644
--- a/src/components/course/tests/EnrollModal.test.jsx
+++ b/src/components/course/tests/EnrollModal.test.jsx
@@ -82,7 +82,9 @@ describe('<EnrollModal />', () => {
       <EnrollModalWrapper {...props} />,
     );
     expect(screen.getByText(MODAL_TEXTS.HAS_ENTERPRISE_OFFER.title)).toBeInTheDocument();
-    expect(screen.getByText(MODAL_TEXTS.HAS_ENTERPRISE_OFFER.body(props.userSubsidyApplicableToCourse, props.courseRunPrice))).toBeInTheDocument();
+    expect(screen.getByText(
+      MODAL_TEXTS.HAS_ENTERPRISE_OFFER.body(props.userSubsidyApplicableToCourse, props.courseRunPrice),
+    )).toBeInTheDocument();
     expect(screen.getByText(MODAL_TEXTS.HAS_ENTERPRISE_OFFER.button)).toBeInTheDocument();
   });
 
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx
index d12ef5b3f8..c2634f66c9 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx
@@ -1,3 +1,4 @@
+/* eslint-disable react/jsx-no-constructed-context-values */
 import React from 'react';
 import { mount } from 'enzyme';
 import { act } from 'react-dom/test-utils';
@@ -23,6 +24,7 @@ describe('<MarkCompleteModal />', () => {
   };
 
   it('handles confirm click with success', () => {
+    // eslint-disable-next-line no-import-assign
     service.markCourseAsCompleteRequest = jest.fn()
       .mockImplementation(() => Promise.resolve({
         data: {
@@ -46,6 +48,7 @@ describe('<MarkCompleteModal />', () => {
   });
 
   it('handles confirm click with error', async () => {
+    // eslint-disable-next-line no-import-assign
     service.markCourseAsCompleteRequest = jest.fn()
       .mockImplementation(() => Promise.reject(new Error('test error')));
     const wrapper = mount((
diff --git a/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx b/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx
index 43af361691..a9188826a4 100644
--- a/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx
+++ b/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx
@@ -48,59 +48,57 @@ function CouponCodesSummaryCard({
   }
 
   return (
-    <>
-      {programProgressPage ? (
-        <>
-          <CouponCodesWarningModal
-            isCouponCodeWarningModalOpen={isCouponCodeWarningModalOpen}
-            onCouponCodeWarningModalClose={onCouponCodeWarningModalClose}
-            couponCodesCount={couponCodesCount}
-          />
+    programProgressPage ? (
+      <>
+        <CouponCodesWarningModal
+          isCouponCodeWarningModalOpen={isCouponCodeWarningModalOpen}
+          onCouponCodeWarningModalClose={onCouponCodeWarningModalClose}
+          couponCodesCount={couponCodesCount}
+        />
 
-          <SidebarCard
-            title={(
-              <div className="d-flex align-items-start justify-content-between">
-                <h3>{COUPON_CODES_SUMMARY_REMAINING_CODES}</h3>
-                {totalCoursesEligibleForCertificate > couponCodesCount && (
-                  <WarningFilled
-                    className="ml-2"
-                    onClick={() => { couponCodeWarningModalOpen(); }}
-                  />
-                )}
-              </div>
-            )}
-            cardClassNames={className}
-          >
-            <p className="m-0">
-              <h3 className="float-left"> {couponCodesCount > 0 ? couponCodesCount : 0}</h3>{' '}<span className="ml-2">{COUPON_CODES_SUMMARY_DETAIL}</span>
-            </p>
-          </SidebarCard>
-        </>
+        <SidebarCard
+          title={(
+            <div className="d-flex align-items-start justify-content-between">
+              <h3>{COUPON_CODES_SUMMARY_REMAINING_CODES}</h3>
+              {totalCoursesEligibleForCertificate > couponCodesCount && (
+                <WarningFilled
+                  className="ml-2"
+                  onClick={() => { couponCodeWarningModalOpen(); }}
+                />
+              )}
+            </div>
+          )}
+          cardClassNames={className}
+        >
+          <p className="m-0">
+            <h3 className="float-left"> {couponCodesCount > 0 ? couponCodesCount : 0}</h3>{' '}<span className="ml-2">{COUPON_CODES_SUMMARY_DETAIL}</span>
+          </p>
+        </SidebarCard>
+      </>
+    )
+      : (
+        <SidebarCard
+          title={(
+            <div className="d-flex align-items-start justify-content-between">
+              {`${COUPON_CODES_SUMMARY_TITLE}${couponCodesCount > 0 ? `: ${couponCodesCount}` : ''}`}
+              {badgeVariantAndLabel && (
+                <Badge
+                  variant={badgeVariantAndLabel.variant}
+                  className="ml-2"
+                  data-testid="subscription-status-badge"
+                >
+                  {badgeVariantAndLabel.label}
+                </Badge>
+              )}
+            </div>
+          )}
+          cardClassNames={className}
+        >
+          <p className="m-0">
+            {COUPON_CODES_SUMMARY_NOTICE}
+          </p>
+        </SidebarCard>
       )
-        : (
-          <SidebarCard
-            title={(
-              <div className="d-flex align-items-start justify-content-between">
-                {`${COUPON_CODES_SUMMARY_TITLE}${couponCodesCount > 0 ? `: ${couponCodesCount}` : ''}`}
-                {badgeVariantAndLabel && (
-                  <Badge
-                    variant={badgeVariantAndLabel.variant}
-                    className="ml-2"
-                    data-testid="subscription-status-badge"
-                  >
-                    {badgeVariantAndLabel.label}
-                  </Badge>
-                )}
-              </div>
-            )}
-            cardClassNames={className}
-          >
-            <p className="m-0">
-              {COUPON_CODES_SUMMARY_NOTICE}
-            </p>
-          </SidebarCard>
-        )}
-    </>
   );
 }
 
diff --git a/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx b/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx
index 7cd7c7303d..9bfed0ca9c 100644
--- a/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx
+++ b/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx
@@ -76,75 +76,73 @@ function SubscriptionSummaryCard({
   }
 
   return (
-    <>
-      {programProgressPage ? (
-        <>
-          {subscriptionPlan && (
-            <SubscriptionExpirationWarningModal
-              isSubscriptionExpiringWarningModalOpen={isSubscriptionExpiringWarningModalOpen}
-              onSubscriptionExpiringWarningModalClose={onSubscriptionExpiringWarningModalClose}
-            />
+    programProgressPage ? (
+      <>
+        {subscriptionPlan && (
+          <SubscriptionExpirationWarningModal
+            isSubscriptionExpiringWarningModalOpen={isSubscriptionExpiringWarningModalOpen}
+            onSubscriptionExpiringWarningModalClose={onSubscriptionExpiringWarningModalClose}
+          />
+        )}
+        <SidebarCard
+          title={(
+            <div className="d-flex align-items-start justify-content-between">
+              <h3>{SUBSCRIPTION_SUMMARY_CARD_TITLE}</h3>
+              <div>
+                <Badge
+                  variant={badgeVariantAndLabel.variant}
+                  className="ml-2"
+                  data-testid="subscription-status-badge"
+                >
+                  {badgeVariantAndLabel.label}
+                </Badge>
+                {(subscriptionPlan && courseEndDate > subscriptionPlan.expirationDate) && <WarningFilled data-testid="warning-icon" className="ml-2" onClick={() => { subscriptionExpiringWarningModalOpen(); }} />}
+              </div>
+            </div>
           )}
-          <SidebarCard
-            title={(
-              <div className="d-flex align-items-start justify-content-between">
-                <h3>{SUBSCRIPTION_SUMMARY_CARD_TITLE}</h3>
-                <div>
-                  <Badge
-                    variant={badgeVariantAndLabel.variant}
-                    className="ml-2"
-                    data-testid="subscription-status-badge"
-                  >
-                    {badgeVariantAndLabel.label}
-                  </Badge>
-                  {(subscriptionPlan && courseEndDate > subscriptionPlan.expirationDate) && <WarningFilled data-testid="warning-icon" className="ml-2" onClick={() => { subscriptionExpiringWarningModalOpen(); }} />}
-                </div>
+          cardClassNames={className}
+        >
+          {
+            subscriptionPlan ? (
+              <>
+                {subscriptionPlan.daysUntilExpiration > SUBSCRIPTION_EXPIRED
+                  ? SUBSCRIPTION_ACTIVE_DATE_PREFIX : SUBSCRIPTION_EXPIRED_DATE_PREFIX}
+                {' '}<span className="font-weight-bold">{moment(subscriptionPlan.expirationDate).format('MMMM Do, YYYY')}</span>
+              </>
+            ) : <span>{LICENSE_REQUESTED_NOTICE}</span>
+          }
+        </SidebarCard>
+      </>
+    )
+      : (
+        <SidebarCard
+          title={(
+            <div className="d-flex align-items-start justify-content-between">
+              <div>{SUBSCRIPTION_SUMMARY_CARD_TITLE}</div>
+              <div>
+                <Badge
+                  variant={badgeVariantAndLabel.variant}
+                  className="ml-2"
+                  data-testid="subscription-status-badge"
+                >
+                  {badgeVariantAndLabel.label}
+                </Badge>
               </div>
-            )}
-            cardClassNames={className}
-          >
-            {
-              subscriptionPlan ? (
-                <>
-                  {subscriptionPlan.daysUntilExpiration > SUBSCRIPTION_EXPIRED
-                    ? SUBSCRIPTION_ACTIVE_DATE_PREFIX : SUBSCRIPTION_EXPIRED_DATE_PREFIX}
-                  {' '}<span className="font-weight-bold">{moment(subscriptionPlan.expirationDate).format('MMMM Do, YYYY')}</span>
-                </>
-              ) : <span>{LICENSE_REQUESTED_NOTICE}</span>
-            }
-          </SidebarCard>
-        </>
+            </div>
+          )}
+          cardClassNames={className}
+        >
+          {
+            subscriptionPlan ? (
+              <>
+                {subscriptionPlan.daysUntilExpiration > SUBSCRIPTION_EXPIRED
+                  ? SUBSCRIPTION_ACTIVE_DATE_PREFIX : SUBSCRIPTION_EXPIRED_DATE_PREFIX}
+                {' '}<span className="font-weight-bold">{moment(subscriptionPlan.expirationDate).format('MMMM Do, YYYY')}</span>
+              </>
+            ) : <span>{LICENSE_REQUESTED_NOTICE}</span>
+          }
+        </SidebarCard>
       )
-        : (
-          <SidebarCard
-            title={(
-              <div className="d-flex align-items-start justify-content-between">
-                <div>{SUBSCRIPTION_SUMMARY_CARD_TITLE}</div>
-                <div>
-                  <Badge
-                    variant={badgeVariantAndLabel.variant}
-                    className="ml-2"
-                    data-testid="subscription-status-badge"
-                  >
-                    {badgeVariantAndLabel.label}
-                  </Badge>
-                </div>
-              </div>
-            )}
-            cardClassNames={className}
-          >
-            {
-              subscriptionPlan ? (
-                <>
-                  {subscriptionPlan.daysUntilExpiration > SUBSCRIPTION_EXPIRED
-                    ? SUBSCRIPTION_ACTIVE_DATE_PREFIX : SUBSCRIPTION_EXPIRED_DATE_PREFIX}
-                  {' '}<span className="font-weight-bold">{moment(subscriptionPlan.expirationDate).format('MMMM Do, YYYY')}</span>
-                </>
-              ) : <span>{LICENSE_REQUESTED_NOTICE}</span>
-            }
-          </SidebarCard>
-        )}
-    </>
   );
 }
 
diff --git a/src/components/dashboard/sidebar/tests/SidebarCard.test.jsx b/src/components/dashboard/sidebar/tests/SidebarCard.test.jsx
index c53a200254..350f4ca261 100644
--- a/src/components/dashboard/sidebar/tests/SidebarCard.test.jsx
+++ b/src/components/dashboard/sidebar/tests/SidebarCard.test.jsx
@@ -8,7 +8,7 @@ import SidebarCard from '../SidebarCard';
 describe('<SidebarCard />', () => {
   const childrenText = 'Some text goes here';
   const defaultProps = {
-    children: <>{childrenText}</>,
+    children: childrenText,
     buttonLink: 'http://bears.party',
   };
   it('renders the card children', () => {
diff --git a/src/components/enterprise-user-subsidy/coupons/data/reducer.js b/src/components/enterprise-user-subsidy/coupons/data/reducer.js
index 381f4351ed..ac91034a4c 100644
--- a/src/components/enterprise-user-subsidy/coupons/data/reducer.js
+++ b/src/components/enterprise-user-subsidy/coupons/data/reducer.js
@@ -11,7 +11,7 @@ export const initialCouponCodesState = {
   error: null,
 };
 
-const couponCodesReducer = (state = initialCouponCodesState, action) => {
+const couponCodesReducer = (state = initialCouponCodesState, action = {}) => {
   switch (action.type) {
     case FETCH_COUPON_CODES_REQUEST:
       return {
diff --git a/src/components/notices-provider/index.js b/src/components/notices-provider/index.js
index 436d09a981..7c154b573b 100644
--- a/src/components/notices-provider/index.js
+++ b/src/components/notices-provider/index.js
@@ -1 +1,2 @@
+// eslint-disable-next-line no-restricted-exports
 export { default } from './NoticesProvider';
diff --git a/src/components/pathway/data/utils.js b/src/components/pathway/data/utils.js
index 32fb6f60a3..bd87e2b058 100644
--- a/src/components/pathway/data/utils.js
+++ b/src/components/pathway/data/utils.js
@@ -6,8 +6,8 @@ export default function coursesAndProgramsText(pathway) {
   let message;
 
   for (let i = 0; i < pathway.steps.length; i++) {
-    courseCount += pathway.steps[i].courses?.length;
-    programCount += pathway.steps[i].programs?.length;
+    courseCount += pathway.steps[i].courses ? pathway.steps[i].courses.length : 0;
+    programCount += pathway.steps[i].programs ? pathway.steps[i].programs.length : 0;
   }
 
   textCourse = courseCount === 1 ? 'course' : 'courses';
diff --git a/src/components/program/ProgramHeader.jsx b/src/components/program/ProgramHeader.jsx
index fd833ea44d..0d31ca9210 100644
--- a/src/components/program/ProgramHeader.jsx
+++ b/src/components/program/ProgramHeader.jsx
@@ -67,30 +67,28 @@ function ProgramHeader() {
   }
 
   return (
-    <>
-      {subjectSlug
-        ? (
-          <Parallax
-            blur={0}
-            bgImage={backgroundImage}
-            bgImageAlt=""
-            strength={600}
-          >
-            <header className="program-header">
-              <div className="container mw-lg program-header-container">
-                <div className="header-breadcrumbs ml-2">
-                  <Breadcrumb
-                    links={links}
-                    activeLabel={prependProgramOrganizationsToTitle()}
-                  />
-                </div>
-                <h1 className="display-3">{marketingHook}</h1>
+    subjectSlug
+      ? (
+        <Parallax
+          blur={0}
+          bgImage={backgroundImage}
+          bgImageAlt=""
+          strength={600}
+        >
+          <header className="program-header">
+            <div className="container mw-lg program-header-container">
+              <div className="header-breadcrumbs ml-2">
+                <Breadcrumb
+                  links={links}
+                  activeLabel={prependProgramOrganizationsToTitle()}
+                />
               </div>
-            </header>
-          </Parallax>
-        )
-        : ''}
-    </>
+              <h1 className="display-3">{marketingHook}</h1>
+            </div>
+          </header>
+        </Parallax>
+      )
+      : ''
   );
 }
 
diff --git a/src/components/program/tests/ProgramPage.test.jsx b/src/components/program/tests/ProgramPage.test.jsx
index 2f2b330199..e9bda0c76e 100644
--- a/src/components/program/tests/ProgramPage.test.jsx
+++ b/src/components/program/tests/ProgramPage.test.jsx
@@ -9,7 +9,7 @@ import ProgramPage from '../ProgramPage';
 import { useAllProgramData } from '../data/hooks';
 import { PROGRAM_NOT_FOUND_MESSAGE, PROGRAM_NOT_FOUND_TITLE } from '../data/constants';
 
-const waitForAsync = () => new Promise(resolve => setImmediate(resolve));
+const waitForAsync = () => new Promise(resolve => { setImmediate(resolve); });
 
 const programData = {
   title: 'Test Program Title',
diff --git a/src/components/search/SearchCourseCard.jsx b/src/components/search/SearchCourseCard.jsx
index 456d802c8d..2b548ca3e4 100644
--- a/src/components/search/SearchCourseCard.jsx
+++ b/src/components/search/SearchCourseCard.jsx
@@ -106,15 +106,13 @@ function SearchCourseCard({ hit, isLoading }) {
         <Card.Section
           className="py-3"
         >
-          <>
-            {course.partners?.length > 0 && (
-              <p className="partner text-muted m-0">
-                <Truncate lines={1} trimWhitespace>
-                  {course.partners.map(partner => partner.name).join(', ')}
-                </Truncate>
-              </p>
-            )}
-          </>
+          {course.partners?.length > 0 && (
+            <p className="partner text-muted m-0">
+              <Truncate lines={1} trimWhitespace>
+                {course.partners.map(partner => partner.name).join(', ')}
+              </Truncate>
+            </p>
+          )}
         </Card.Section>
 
         <Card.Footer textElement={
diff --git a/src/components/search/SearchProgramCard.jsx b/src/components/search/SearchProgramCard.jsx
index bef15becc7..00e6eee3b3 100644
--- a/src/components/search/SearchProgramCard.jsx
+++ b/src/components/search/SearchProgramCard.jsx
@@ -27,10 +27,10 @@ export const ProgramType = ({ type }) => {
       programTypeToDisplay = <>Master&apos;s Degree Program</>;
       break;
     case 'Professional Certificate':
-      programTypeToDisplay = <>{type}</>;
+      programTypeToDisplay = type;
       break;
     default:
-      programTypeToDisplay = <>{type}</>;
+      programTypeToDisplay = type;
   }
 
   return programTypeToDisplay;
diff --git a/src/components/search/data/tests/hooks.test.jsx b/src/components/search/data/tests/hooks.test.jsx
index cf01d57576..ffd2b912b6 100644
--- a/src/components/search/data/tests/hooks.test.jsx
+++ b/src/components/search/data/tests/hooks.test.jsx
@@ -118,6 +118,7 @@ describe('useSearchCatalogs', () => {
   });
 });
 
+// eslint-disable-next-line react/prop-types
 const SearchWrapper = (value) => function ({ children }) {
   return <SearchContext.Provider value={value}>{children}</SearchContext.Provider>;
 };
diff --git a/src/components/skills-quiz/CourseCard.jsx b/src/components/skills-quiz/CourseCard.jsx
index 49e8276c55..f31f77816d 100644
--- a/src/components/skills-quiz/CourseCard.jsx
+++ b/src/components/skills-quiz/CourseCard.jsx
@@ -88,30 +88,28 @@ function CourseCard({
         />
 
         <Card.Section className="py-1">
-          <>
-            {course.skillNames?.length > 0 && (
-              <div className="mb-2">
-                {getCommonSkills(
-                  course,
-                  allSkills,
-                  MAX_VISIBLE_SKILLS_COURSE,
-                )
-                  .map((skill) => (
-                    <Badge
-                      key={skill}
-                      className="skill-badge"
-                      variant="light"
-                    >
-                      {shortenString(
-                        skill,
-                        SKILL_NAME_CUTOFF_LIMIT,
-                        ELLIPSIS_STR,
-                      )}
-                    </Badge>
-                  ))}
-              </div>
-            )}
-          </>
+          {course.skillNames?.length > 0 && (
+            <div className="mb-2">
+              {getCommonSkills(
+                course,
+                allSkills,
+                MAX_VISIBLE_SKILLS_COURSE,
+              )
+                .map((skill) => (
+                  <Badge
+                    key={skill}
+                    className="skill-badge"
+                    variant="light"
+                  >
+                    {shortenString(
+                      skill,
+                      SKILL_NAME_CUTOFF_LIMIT,
+                      ELLIPSIS_STR,
+                    )}
+                  </Badge>
+                ))}
+            </div>
+          )}
         </Card.Section>
       </Card>
     );
@@ -141,7 +139,7 @@ CourseCard.propTypes = {
     cardImageUrl: PropTypes.string.isRequired,
     key: PropTypes.string.isRequired,
     partners: PropTypes.shape.isRequired,
-    skillNames: PropTypes.array.isRequired,
+    skillNames: PropTypes.shape([]).isRequired,
   }).isRequired,
   allSkills: PropTypes.shape.isRequired,
   isLoading: PropTypes.bool.isRequired,
diff --git a/src/components/skills-quiz/JobCardComponent.jsx b/src/components/skills-quiz/JobCardComponent.jsx
index 94a38af4e3..c2bbc6dbc9 100644
--- a/src/components/skills-quiz/JobCardComponent.jsx
+++ b/src/components/skills-quiz/JobCardComponent.jsx
@@ -9,6 +9,7 @@ import { NOT_AVAILABLE } from './constants';
 function JobCardComponent({ jobs, isLoading }) {
   const { enterpriseConfig: { hideLaborMarketData } } = useContext(AppContext);
   return (
+    // eslint-disable-next-line react/jsx-no-useless-fragment
     <>
       {jobs?.map(job => (
         <div
@@ -34,23 +35,21 @@ function JobCardComponent({ jobs, isLoading }) {
               {isLoading ? (
                 <Skeleton duration={0} data-testid="job-content-loading" />
               ) : (
-                <>
-                  {!hideLaborMarketData
-                   && (
-                     <div className="text-gray-700">
-                       <p className="m-0 medium-font">
-                         <span style={{ fontWeight: 700 }}>Median U.S. Salary: </span>
-                         {job.job_postings?.length > 0 ? `$${ formatStringAsNumber(job.job_postings[0].median_salary)}`
-                           : NOT_AVAILABLE }
-                       </p>
-                       <p className="m-0 medium-font">
-                         <span style={{ fontWeight: 700 }}>Job Postings: </span>
-                         {job.job_postings?.length > 0 ? formatStringAsNumber(job.job_postings[0].unique_postings)
-                           : NOT_AVAILABLE }
-                       </p>
-                     </div>
-                   )}
-                </>
+                !hideLaborMarketData
+                  && (
+                    <div className="text-gray-700">
+                      <p className="m-0 medium-font">
+                        <span style={{ fontWeight: 700 }}>Median U.S. Salary: </span>
+                        {job.job_postings?.length > 0 ? `$${ formatStringAsNumber(job.job_postings[0].median_salary)}`
+                          : NOT_AVAILABLE }
+                      </p>
+                      <p className="m-0 medium-font">
+                        <span style={{ fontWeight: 700 }}>Job Postings: </span>
+                        {job.job_postings?.length > 0 ? formatStringAsNumber(job.job_postings[0].unique_postings)
+                          : NOT_AVAILABLE }
+                      </p>
+                    </div>
+                  )
               )}
             </Card.Section>
           </Card>
diff --git a/src/components/skills-quiz/SearchProgramCard.jsx b/src/components/skills-quiz/SearchProgramCard.jsx
index abb12b1fbc..9c4b7b35ae 100644
--- a/src/components/skills-quiz/SearchProgramCard.jsx
+++ b/src/components/skills-quiz/SearchProgramCard.jsx
@@ -217,21 +217,19 @@ function SearchProgramCard({ index }) {
         />
 
         <Card.Section className="py-1">
-          <>
-            {program.skillNames?.length > 0 && (
-              <div className="mb-2 d-inline">
-                {getCommonSkills(program, selectedJobSkills, MAX_VISIBLE_SKILLS_PROGRAM).map((skill) => (
-                  <Badge
-                    key={skill}
-                    className="skill-badge"
-                    variant="light"
-                  >
-                    { shortenString(skill, SKILL_NAME_CUTOFF_LIMIT, ELLIPSIS_STR) }
-                  </Badge>
-                ))}
-              </div>
-            )}
-          </>
+          {program.skillNames?.length > 0 && (
+            <div className="mb-2 d-inline">
+              {getCommonSkills(program, selectedJobSkills, MAX_VISIBLE_SKILLS_PROGRAM).map((skill) => (
+                <Badge
+                  key={skill}
+                  className="skill-badge"
+                  variant="light"
+                >
+                  { shortenString(skill, SKILL_NAME_CUTOFF_LIMIT, ELLIPSIS_STR) }
+                </Badge>
+              ))}
+            </div>
+          )}
         </Card.Section>
 
         <Card.Section className="py-1">
diff --git a/src/components/skills-quiz/__mocks__/react-instantsearch-dom.jsx b/src/components/skills-quiz/__mocks__/react-instantsearch-dom.jsx
index cf9888e2a8..43d8f2c1e5 100644
--- a/src/components/skills-quiz/__mocks__/react-instantsearch-dom.jsx
+++ b/src/components/skills-quiz/__mocks__/react-instantsearch-dom.jsx
@@ -1,5 +1,6 @@
 /* eslint-disable object-curly-newline */
 /* eslint-disable react/prop-types */
+// eslint-disable-next-line import/no-import-module-exports
 import React from 'react';
 
 const MockReactInstantSearch = jest.genMockFromModule(
@@ -60,7 +61,7 @@ MockReactInstantSearch.connectRefinementList = Component => function (props) {
 };
 
 MockReactInstantSearch.InstantSearch = function ({ children }) {
-  return <>{children}</>;
+  return children;
 };
 MockReactInstantSearch.Configure = function () {
   return <div>CONFIGURED</div>;
@@ -69,7 +70,7 @@ MockReactInstantSearch.Hits = function () {
   return <div>HIT</div>;
 };
 MockReactInstantSearch.Index = function ({ children }) {
-  return <>{children}</>;
+  return children;
 };
 
 // It is necessary to export this way, or tests not using the mock will fail
diff --git a/src/components/skills-quiz/data/tests/hooks.test.jsx b/src/components/skills-quiz/data/tests/hooks.test.jsx
index d2991da736..33d2ea27fb 100644
--- a/src/components/skills-quiz/data/tests/hooks.test.jsx
+++ b/src/components/skills-quiz/data/tests/hooks.test.jsx
@@ -6,6 +6,7 @@ import { useSelectedSkillsAndJobSkills } from '../hooks';
 import { SkillsContext } from '../../SkillsContextProvider';
 import { DROPDOWN_OPTION_IMPROVE_CURRENT_ROLE, DROPDOWN_OPTION_GET_PROMOTED } from '../../constants';
 
+// eslint-disable-next-line react/prop-types
 const SearchWrapper = (searchContext, initialSkillsState) => function ({ children }) {
   return (
     <SearchContext.Provider value={searchContext}>

From d5dd932391a23db10a14d48a4ebbef382f6cef05 Mon Sep 17 00:00:00 2001
From: Bilal Qamar <59555732+BilalQamar95@users.noreply.github.com>
Date: Thu, 4 Aug 2022 14:16:23 +0500
Subject: [PATCH 04/13] refactor: resolved eslint issues

---
 src/components/Toasts/ToastsProvider.jsx      | 13 ++++++---
 src/components/app/LoginRefresh.test.jsx      | 16 ++++++-----
 src/components/course/data/hooks.jsx          |  5 ++--
 .../tests/LicenseRequestedAlert.test.jsx      | 28 ++++++++++---------
 .../tests/SubsidyRequestButton.test.jsx       | 12 ++++++--
 .../mark-complete-modal/MarkCompleteModal.jsx | 14 ++++++----
 .../MoveToInProgressModal.jsx                 | 14 ++++++----
 .../tests/BaseCourseCard.test.jsx             |  1 +
 .../unenroll/UnenrollModal.test.jsx           |  1 +
 .../tests/CourseEnrollments.test.jsx          |  1 +
 .../tests/CourseSection.test.jsx              |  1 +
 .../tests/EnterpriseBanner.test.jsx           |  1 +
 .../enterprise-page/EnterprisePage.jsx        |  1 +
 .../EnterpriseOffersBalanceAlert.test.jsx     |  1 +
 .../tests/AutoActivateLicense.test.jsx        |  1 +
 .../tests/UserSubsidy.test.jsx                |  1 +
 .../tests/LicenseActivation.test.jsx          |  1 +
 .../tests/LicenseActivationPage.test.jsx      |  1 +
 .../pathway/tests/PathwayModal.test.jsx       |  1 +
 .../pathway/tests/SearchPathwayCard.test.jsx  |  1 +
 .../program-progress/ProgramProgressPage.jsx  | 10 ++++---
 src/components/search/SearchCourseCard.jsx    |  1 +
 .../search/tests/SearchCourseCard.test.jsx    |  1 +
 .../search/tests/SearchProgramCard.test.jsx   |  1 +
 .../skills-quiz/SkillsContextProvider.jsx     |  1 +
 .../tests/SkillsQuizStepper.test.jsx          |  1 +
 26 files changed, 85 insertions(+), 45 deletions(-)

diff --git a/src/components/Toasts/ToastsProvider.jsx b/src/components/Toasts/ToastsProvider.jsx
index 243dbd4fc5..c349c681df 100644
--- a/src/components/Toasts/ToastsProvider.jsx
+++ b/src/components/Toasts/ToastsProvider.jsx
@@ -1,4 +1,6 @@
-import React, { createContext, useState } from 'react';
+import React, {
+  createContext, useCallback, useState, useMemo,
+} from 'react';
 import PropTypes from 'prop-types';
 
 export const ToastsContext = createContext();
@@ -16,17 +18,20 @@ function ToastsProvider({ children }) {
     ]);
   };
 
-  const removeToast = (id) => {
+  const removeToast = useCallback((id) => {
     const index = toasts.findIndex(toast => toast.id === id);
     setToasts((prevToasts) => {
       const newToasts = [...prevToasts];
       newToasts.splice(index, 1);
       return newToasts;
     });
-  };
+  }, [toasts]);
 
   return (
-    <ToastsContext.Provider value={{ toasts, addToast, removeToast }}>
+    <ToastsContext.Provider value={
+      useMemo(() => ({ toasts, addToast, removeToast }), [removeToast, toasts])
+    }
+    >
       {children}
     </ToastsContext.Provider>
   );
diff --git a/src/components/app/LoginRefresh.test.jsx b/src/components/app/LoginRefresh.test.jsx
index 3c07ed6435..eaf97c1396 100644
--- a/src/components/app/LoginRefresh.test.jsx
+++ b/src/components/app/LoginRefresh.test.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useMemo } from 'react';
 import '@testing-library/jest-dom/extend-expect';
 import { render, act } from '@testing-library/react';
 import { AppContext } from '@edx/frontend-platform/react';
@@ -11,12 +11,14 @@ jest.mock('../../utils/common');
 // eslint-disable-next-line react/prop-types
 function LoginRefreshWithContext({ roles = [] }) {
   return (
-    <AppContext.Provider value={{
-      authenticatedUser: {
-        userId: 1,
-        roles,
-      },
-    }}
+    <AppContext.Provider value={
+      useMemo(() => ({
+        authenticatedUser: {
+          userId: 1,
+          roles,
+        },
+      }), [roles])
+    }
     >
       <LoginRefresh>
         <div>Hello!</div>
diff --git a/src/components/course/data/hooks.jsx b/src/components/course/data/hooks.jsx
index 99180504e8..0909128d36 100644
--- a/src/components/course/data/hooks.jsx
+++ b/src/components/course/data/hooks.jsx
@@ -345,16 +345,17 @@ export const useCourseEnrollmentUrl = ({
   userSubsidyApplicableToCourse,
 }) => {
   const config = getConfig();
+  // eslint-disable-next-line react-hooks/exhaustive-deps
   const baseQueryParams = new URLSearchParams(location.search);
 
   baseQueryParams.set(ENROLLMENT_FAILED_QUERY_PARAM, true);
   baseQueryParams.set(ENROLLMENT_COURSE_RUN_KEY_QUERY_PARAM, courseRunKey);
 
-  const baseEnrollmentOptions = {
+  const baseEnrollmentOptions = useMemo(() => ({
     next: `${config.LMS_BASE_URL}/courses/${courseRunKey}/course`,
     // Redirect back to the same page with a failure query param
     failure_url: `${global.location.origin}${location.pathname}?${baseQueryParams.toString()}`,
-  };
+  }), [baseQueryParams, config.LMS_BASE_URL, courseRunKey, location.pathname]);
 
   const enrollmentUrl = useMemo(
     () => {
diff --git a/src/components/course/tests/LicenseRequestedAlert.test.jsx b/src/components/course/tests/LicenseRequestedAlert.test.jsx
index c69e74a7e5..587edb66d1 100644
--- a/src/components/course/tests/LicenseRequestedAlert.test.jsx
+++ b/src/components/course/tests/LicenseRequestedAlert.test.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useMemo } from 'react';
 import { render, fireEvent, waitFor } from '@testing-library/react';
 import Cookies from 'universal-cookie';
 import LicenseRequestedAlert from '../LicenseRequestedAlert';
@@ -28,25 +28,27 @@ function LicenseRequestedAlertWrapper({
   subscriptions = initialSubscriptions, licenseRequests = initialLicenseRequests,
 }) {
   return (
-    <UserSubsidyContext.Provider value={{
-      couponCodes: {
-        couponCodes: [],
-        couponCodesCount: 0,
-      },
-      subscriptionLicense: {},
-      customerAgreementConfig: {
-        subscriptions,
-      },
-    }}
+    <UserSubsidyContext.Provider value={
+      useMemo(() => ({
+        couponCodes: {
+          couponCodes: [],
+          couponCodesCount: 0,
+        },
+        subscriptionLicense: {},
+        customerAgreementConfig: {
+          subscriptions,
+        },
+      }), [subscriptions])
+    }
     >
       <SubsidyRequestsContext.Provider value={
-        {
+        useMemo(() => ({
           subsidyRequestConfiguration: null,
           requestsBySubsidyType: {
             [SUBSIDY_TYPE.LICENSE]: licenseRequests,
             [SUBSIDY_TYPE.COUPON]: [],
           },
-        }
+        }), [licenseRequests])
       }
       >
         <CourseContext.Provider>
diff --git a/src/components/course/tests/SubsidyRequestButton.test.jsx b/src/components/course/tests/SubsidyRequestButton.test.jsx
index e66e231f0e..b24fa00319 100644
--- a/src/components/course/tests/SubsidyRequestButton.test.jsx
+++ b/src/components/course/tests/SubsidyRequestButton.test.jsx
@@ -1,5 +1,5 @@
 /* eslint-disable react/prop-types */
-import React from 'react';
+import React, { useMemo } from 'react';
 import {
   screen, render, fireEvent, waitFor,
 } from '@testing-library/react';
@@ -59,8 +59,14 @@ function SubsidyRequestButtonWrapper({
 }) {
   return (
     <ToastsContext.Provider value={initialToastsState}>
-      <SubsidyRequestsContext.Provider value={{ ...initialSubsidyRequestsState, ...subsidyRequestsState }}>
-        <CourseContext.Provider value={{ ...initialCourseState, ...courseState }}>
+      <SubsidyRequestsContext.Provider value={
+        useMemo(() => ({ ...initialSubsidyRequestsState, ...subsidyRequestsState }), [subsidyRequestsState])
+      }
+      >
+        <CourseContext.Provider value={
+          useMemo(() => ({ ...initialCourseState, ...courseState }), [courseState])
+        }
+        >
           <SubsidyRequestButton enterpriseSlug={mockEnterpriseSlug} />
         </CourseContext.Provider>
       </SubsidyRequestsContext.Provider>
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx
index 81c7d40cfb..2b6193e5e9 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx
@@ -1,4 +1,4 @@
-import React, { useState, useContext } from 'react';
+import React, { useState, useContext, useMemo } from 'react';
 import PropTypes from 'prop-types';
 import { Modal, StatefulButton } from '@edx/paragon';
 import { AppContext } from '@edx/frontend-platform/react';
@@ -67,11 +67,13 @@ function MarkCompleteModal({
 
   return (
     <MarkCompleteModalContext.Provider
-      value={{
-        courseTitle,
-        courseLink,
-        confirmError,
-      }}
+      value={
+        useMemo(() => ({
+          courseTitle,
+          courseLink,
+          confirmError,
+        }), [confirmError, courseLink, courseTitle])
+      }
     >
       <Modal
         title="Save course for later"
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx
index a9b7f6e3b2..9763f6eaf1 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx
@@ -1,4 +1,4 @@
-import React, { useState, useContext } from 'react';
+import React, { useState, useContext, useMemo } from 'react';
 import PropTypes from 'prop-types';
 import { Modal, StatefulButton } from '@edx/paragon';
 import { AppContext } from '@edx/frontend-platform/react';
@@ -58,11 +58,13 @@ function MoveToInProgressModal({
 
   return (
     <MoveToInProgressModalContext.Provider
-      value={{
-        courseTitle,
-        courseLink,
-        confirmError,
-      }}
+      value={
+        useMemo(() => ({
+          courseTitle,
+          courseLink,
+          confirmError,
+        }), [confirmError, courseLink, courseTitle])
+      }
     >
       <Modal
         title="Move course to &quot;In Progress&quot;"
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx
index 40bdcc4601..60921d4cfc 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx
@@ -1,3 +1,4 @@
+/* eslint-disable react/jsx-no-constructed-context-values */
 import React from 'react';
 import { mount } from 'enzyme';
 import { getAuthenticatedUser } from '@edx/frontend-platform/auth';
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx
index 25237caaa9..b33dc7ec5f 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx
@@ -40,6 +40,7 @@ function UnenrollModalWrapper({
   ...props
 }) {
   return (
+    // eslint-disable-next-line react/jsx-no-constructed-context-values
     <ToastsContext.Provider value={{ addToast: mockAddToast }}>
       <CourseEnrollmentsContext.Provider value={courseEnrollmentsContextValue}>
         <UnenrollModal {...props} />
diff --git a/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx b/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx
index d4c1797e83..029045b525 100644
--- a/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx
@@ -1,3 +1,4 @@
+/* eslint-disable react/jsx-no-constructed-context-values */
 import React from 'react';
 
 import {
diff --git a/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx b/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx
index af46b61e4a..6eeec37cac 100644
--- a/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx
@@ -34,6 +34,7 @@ const TEST_ENTERPRISE_UUID = 'test-uuid';
 
 function CourseSectionWrapper(props) {
   return (
+    // eslint-disable-next-line react/jsx-no-constructed-context-values
     <AppContext.Provider value={{
       enterpriseConfig: {
         uuid: TEST_ENTERPRISE_UUID,
diff --git a/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx b/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx
index 4de2d6f8bb..2000e8c5d2 100644
--- a/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx
+++ b/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx
@@ -21,6 +21,7 @@ describe('<EnterpriseBanner />', () => {
 
     render(
       <AppContext.Provider
+        // eslint-disable-next-line react/jsx-no-constructed-context-values
         value={{
           enterpriseConfig: {
             slug: 'slug',
diff --git a/src/components/enterprise-page/EnterprisePage.jsx b/src/components/enterprise-page/EnterprisePage.jsx
index 2061153555..48c9493f3a 100644
--- a/src/components/enterprise-page/EnterprisePage.jsx
+++ b/src/components/enterprise-page/EnterprisePage.jsx
@@ -56,6 +56,7 @@ export default function EnterprisePage({ children, useEnterpriseConfigCache }) {
 
   return (
     <AppContext.Provider
+      // eslint-disable-next-line react/jsx-no-constructed-context-values
       value={{
         authenticatedUser: user,
         config,
diff --git a/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx b/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx
index 8c80b2eb9d..789581422c 100644
--- a/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx
+++ b/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx
@@ -17,6 +17,7 @@ function EnterpriseOffersBalanceAlertWrapper({
   hasNoEnterpriseOffersBalance,
 }) {
   return (
+    // eslint-disable-next-line react/jsx-no-constructed-context-values
     <AppContext.Provider value={{
       enterpriseConfig,
     }}
diff --git a/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx b/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx
index a4cb6fb4b8..bf4f75c1b5 100644
--- a/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx
+++ b/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx
@@ -1,3 +1,4 @@
+/* eslint-disable react/jsx-no-constructed-context-values */
 import React from 'react';
 import { Route } from 'react-router-dom';
 import { AppContext } from '@edx/frontend-platform/react';
diff --git a/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx b/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
index 7fad446394..44787f31e6 100644
--- a/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
+++ b/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
@@ -63,6 +63,7 @@ function UserSubsidyWithAppContext({
 }) {
   return (
     <AppContext.Provider
+      // eslint-disable-next-line react/jsx-no-constructed-context-values
       value={{
         enterpriseConfig: {
           slug: TEST_ENTERPRISE_SLUG,
diff --git a/src/components/license-activation/tests/LicenseActivation.test.jsx b/src/components/license-activation/tests/LicenseActivation.test.jsx
index a61dfe6fab..d4690dc798 100644
--- a/src/components/license-activation/tests/LicenseActivation.test.jsx
+++ b/src/components/license-activation/tests/LicenseActivation.test.jsx
@@ -28,6 +28,7 @@ function LicenseActivationWithAppContext({
 }) {
   return (
     <AppContext.Provider
+      // eslint-disable-next-line react/jsx-no-constructed-context-values
       value={{
         enterpriseConfig: {
           uuid: TEST_ENTERPRISE_UUID,
diff --git a/src/components/license-activation/tests/LicenseActivationPage.test.jsx b/src/components/license-activation/tests/LicenseActivationPage.test.jsx
index be4381dcf4..2e74ab4f44 100644
--- a/src/components/license-activation/tests/LicenseActivationPage.test.jsx
+++ b/src/components/license-activation/tests/LicenseActivationPage.test.jsx
@@ -46,6 +46,7 @@ function LicenseActivationPageWithContext({
 }) {
   return (
     <AppContext.Provider
+      // eslint-disable-next-line react/jsx-no-constructed-context-values
       value={{
         enterpriseConfig: {
           uuid: TEST_ENTERPRISE_UUID,
diff --git a/src/components/pathway/tests/PathwayModal.test.jsx b/src/components/pathway/tests/PathwayModal.test.jsx
index e3b33c18df..185505c8bc 100644
--- a/src/components/pathway/tests/PathwayModal.test.jsx
+++ b/src/components/pathway/tests/PathwayModal.test.jsx
@@ -29,6 +29,7 @@ jest.mock('react-loading-skeleton', () => ({
 function PathwayModalWithAppContext(props) {
   return (
     <AppContext.Provider
+      // eslint-disable-next-line react/jsx-no-constructed-context-values
       value={{
         enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG },
       }}
diff --git a/src/components/pathway/tests/SearchPathwayCard.test.jsx b/src/components/pathway/tests/SearchPathwayCard.test.jsx
index ae91dbf180..01fca358f8 100644
--- a/src/components/pathway/tests/SearchPathwayCard.test.jsx
+++ b/src/components/pathway/tests/SearchPathwayCard.test.jsx
@@ -31,6 +31,7 @@ jest.mock('@edx/frontend-enterprise-utils', () => {
 function SearchPathwayCardWithAppContext(props) {
   return (
     <AppContext.Provider
+      // eslint-disable-next-line react/jsx-no-constructed-context-values
       value={{
         enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG, uuid: TEST_ENTERPRISE_UUID },
       }}
diff --git a/src/components/program-progress/ProgramProgressPage.jsx b/src/components/program-progress/ProgramProgressPage.jsx
index 2532e6a0cd..713301808f 100644
--- a/src/components/program-progress/ProgramProgressPage.jsx
+++ b/src/components/program-progress/ProgramProgressPage.jsx
@@ -37,9 +37,10 @@ function ProgramProgressPage() {
     [program],
   );
   const courseData = program?.data?.courseData;
-  const totalCoursesInProgram = courseData?.notStarted?.length
-    + courseData?.completed?.length
-    + courseData?.inProgress?.length;
+  const notStartedCourses = courseData?.notStarted?.length;
+  const completedCourses = courseData?.completed?.length;
+  const inProgressCourses = courseData?.inProgress?.length;
+  const totalCoursesInProgram = notStartedCourses + completedCourses + inProgressCourses;
   const allCoursesCompleted = !courseData?.notStarted?.length
     && !courseData?.inProgress?.length
     && courseData?.completed?.length;
@@ -54,7 +55,8 @@ function ProgramProgressPage() {
     enrolledCourses = [...enrolledCourses, ...courseData.inProgress];
   }
   const coursesEnrolledInAuditMode = getCoursesEnrolledInAuditMode(enrolledCourses);
-  const totalCoursesEligibleForCertificate = totalCoursesNotStarted + coursesEnrolledInAuditMode?.length;
+  const totalCoursesEligibleForCertificate = totalCoursesNotStarted
+    + coursesEnrolledInAuditMode ? coursesEnrolledInAuditMode.length : 0;
   let courseEndDate;
   if (totalCoursesEligibleForCertificate) {
     const notStartedEnrollableCourseRuns = getNotStartedEnrollableCourseRuns(coursesNotStarted);
diff --git a/src/components/search/SearchCourseCard.jsx b/src/components/search/SearchCourseCard.jsx
index 2b548ca3e4..f5f8473493 100644
--- a/src/components/search/SearchCourseCard.jsx
+++ b/src/components/search/SearchCourseCard.jsx
@@ -14,6 +14,7 @@ import { getPrimaryPartnerLogo, isDefinedAndNotNull } from '../../utils/common';
 function SearchCourseCard({ hit, isLoading }) {
   const { enterpriseConfig: { slug, uuid } } = useContext(AppContext);
 
+  // eslint-disable-next-line react-hooks/exhaustive-deps
   const course = hit ? camelCaseObject(hit) : {};
 
   const linkToCourse = useMemo(
diff --git a/src/components/search/tests/SearchCourseCard.test.jsx b/src/components/search/tests/SearchCourseCard.test.jsx
index 0f3eebb867..fb84a15214 100644
--- a/src/components/search/tests/SearchCourseCard.test.jsx
+++ b/src/components/search/tests/SearchCourseCard.test.jsx
@@ -22,6 +22,7 @@ jest.mock('react-loading-skeleton', () => ({
 function SearchCourseCardWithAppContext(props) {
   return (
     <AppContext.Provider
+      // eslint-disable-next-line react/jsx-no-constructed-context-values
       value={{
         enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG },
       }}
diff --git a/src/components/search/tests/SearchProgramCard.test.jsx b/src/components/search/tests/SearchProgramCard.test.jsx
index ce66a83d47..da2367e3f0 100644
--- a/src/components/search/tests/SearchProgramCard.test.jsx
+++ b/src/components/search/tests/SearchProgramCard.test.jsx
@@ -33,6 +33,7 @@ jest.mock('@edx/frontend-enterprise-utils', () => ({
 function SearchProgramCardWithAppContext(props) {
   return (
     <AppContext.Provider
+      // eslint-disable-next-line react/jsx-no-constructed-context-values
       value={{
         enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG, uuid: enterpriseUuid },
       }}
diff --git a/src/components/skills-quiz/SkillsContextProvider.jsx b/src/components/skills-quiz/SkillsContextProvider.jsx
index 69d1443b51..eb8c05f4aa 100644
--- a/src/components/skills-quiz/SkillsContextProvider.jsx
+++ b/src/components/skills-quiz/SkillsContextProvider.jsx
@@ -21,6 +21,7 @@ const reducer = (state, action) => {
 
 export function SkillsContextProvider({ children, initialState = { goal: GOAL_DROPDOWN_DEFAULT_OPTION } }) {
   const [state, dispatch] = useReducer(reducer, initialState);
+  // eslint-disable-next-line react/jsx-no-constructed-context-values
   const value = { state, dispatch };
 
   return (
diff --git a/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx b/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx
index 58acd25c27..012edd1d7e 100644
--- a/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx
+++ b/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx
@@ -1,3 +1,4 @@
+/* eslint-disable react/jsx-no-constructed-context-values */
 import React from 'react';
 import '@testing-library/jest-dom/extend-expect';
 import userEvent from '@testing-library/user-event';

From 1914ac9a9b11a2533eb3e4115c32073c152ed17b Mon Sep 17 00:00:00 2001
From: Bilal Qamar <59555732+BilalQamar95@users.noreply.github.com>
Date: Tue, 16 Aug 2022 15:47:13 +0500
Subject: [PATCH 05/13] refactor: updated package-lock & resolved eslint after
 master branch merge

---
 package-lock.json                             | 502 +++++++++++-------
 .../ExecutiveEducation2UPage.jsx              |   4 +-
 .../ExecutiveEducation2UPage.test.jsx         |   6 +-
 .../ProgramProgressRedirect.jsx               |   4 +-
 4 files changed, 304 insertions(+), 212 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index b2024886dc..99575619a4 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -58,7 +58,7 @@
         "universal-cookie": "4.0.4"
       },
       "devDependencies": {
-        "@edx/frontend-build": "11.0.2",
+        "@edx/frontend-build": "^12.0.3",
         "@testing-library/jest-dom": "5.11.9",
         "@testing-library/react": "11.2.7",
         "@testing-library/react-hooks": "3.7.0",
@@ -522,9 +522,9 @@
       }
     },
     "node_modules/@babel/helper-module-imports": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz",
-      "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+      "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
       "dev": true,
       "dependencies": {
         "@babel/types": "^7.18.6"
@@ -647,6 +647,7 @@
       "version": "7.18.10",
       "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
       "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
+      "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
@@ -2048,9 +2049,9 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.15.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz",
-      "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz",
+      "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==",
       "dev": true,
       "dependencies": {
         "@babel/helper-string-parser": "^7.18.10",
@@ -2325,15 +2326,15 @@
       }
     },
     "node_modules/@edx/frontend-enterprise-utils": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@edx/frontend-enterprise-utils/-/frontend-enterprise-utils-2.1.0.tgz",
-      "integrity": "sha512-lfGwpfOnNO7oe3p8YUXhjzA2kDYz0eYZk4eeY+SYib6oRXDE+nbZXd+IU9jhd/YyZnPAAAFRY3JYwNQ26Go+0Q==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@edx/frontend-enterprise-utils/-/frontend-enterprise-utils-2.0.3.tgz",
+      "integrity": "sha512-71yB6wEciHU9B57mEgZKT7PFjpwRQwlCjB048N2z9PIzKHrux8g5WIT3C/dtXC0+xGvz1z8aOf+tHahgHLWkkQ==",
       "dependencies": {
         "@testing-library/react": "11.2.6",
         "history": "4.10.1"
       },
       "peerDependencies": {
-        "@edx/frontend-platform": "^1.9.6 || ^2.0.0",
+        "@edx/frontend-platform": "^1.9.6",
         "react": "^16.12.0",
         "react-dom": "^16.12.0",
         "react-router-dom": "^5.2.0"
@@ -2403,7 +2404,7 @@
     "node_modules/@edx/frontend-platform/node_modules/intl-messageformat": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-2.2.0.tgz",
-      "integrity": "sha512-I+tSvHnXqJYjDfNmY95tpFMj30yoakC6OXAo+wu/wTMy6tA/4Fd4mvV7Uzs4cqK/Ap29sHhwjcY+78a8eifcXw==",
+      "integrity": "sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw=",
       "dependencies": {
         "intl-messageformat-parser": "1.4.0"
       }
@@ -2411,7 +2412,7 @@
     "node_modules/@edx/frontend-platform/node_modules/intl-messageformat-parser": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz",
-      "integrity": "sha512-/XkqFHKezO6UcF4Av2/Lzfrez18R0jyw7kRFhSeB/YRakdrgSc9QfFZUwNJI9swMwMoNPygK1ArC5wdFSjPw+A==",
+      "integrity": "sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU=",
       "deprecated": "We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser"
     },
     "node_modules/@edx/frontend-platform/node_modules/react-intl": {
@@ -2532,6 +2533,71 @@
         "react-dom": ">=16.6.0"
       }
     },
+    "node_modules/@eslint/eslintrc": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
+      "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
+      "dev": true,
+      "dependencies": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.3.2",
+        "globals": "^13.15.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
+      "engines": {
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+      "dev": true
+    },
+    "node_modules/@eslint/eslintrc/node_modules/globals": {
+      "version": "13.17.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+      "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+      "dev": true,
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/js-yaml": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+      "dev": true,
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/@eslint/eslintrc/node_modules/type-fest": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+      "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
     "node_modules/@formatjs/ecma402-abstract": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.4.0.tgz",
@@ -2542,65 +2608,65 @@
       }
     },
     "node_modules/@formatjs/fast-memoize": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz",
-      "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.0.tgz",
+      "integrity": "sha512-fObitP9Tlc31SKrPHgkPgQpGo4+4yXfQQITTCNH8AZdEqB7Mq4nPrjpUL/tNGN3lEeJcFxDbi0haX8HM7QvQ8w==",
       "dependencies": {
         "tslib": "^2.1.0"
       }
     },
     "node_modules/@formatjs/icu-messageformat-parser": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz",
-      "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==",
+      "version": "2.0.14",
+      "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.14.tgz",
+      "integrity": "sha512-M79MdUMLnfLK8eMrznUwke6afH9G/eOQeYvMUJ7uElXIL+//PyyjOzb42hAYfDAGYsAcKA2TsUo33Yuy2lE4AQ==",
       "dependencies": {
-        "@formatjs/ecma402-abstract": "1.11.4",
-        "@formatjs/icu-skeleton-parser": "1.3.6",
+        "@formatjs/ecma402-abstract": "1.10.0",
+        "@formatjs/icu-skeleton-parser": "1.3.1",
         "tslib": "^2.1.0"
       }
     },
     "node_modules/@formatjs/icu-messageformat-parser/node_modules/@formatjs/ecma402-abstract": {
-      "version": "1.11.4",
-      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
-      "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.10.0.tgz",
+      "integrity": "sha512-WNkcUHC6xw12rWY87TUw6KXzb1LnOooYBLLqtyn1kW2j197rcwpqmUOJMBED56YcLzaJPfVw1L2ShiDhL5pVnQ==",
       "dependencies": {
-        "@formatjs/intl-localematcher": "0.2.25",
+        "@formatjs/intl-localematcher": "0.2.21",
         "tslib": "^2.1.0"
       }
     },
     "node_modules/@formatjs/icu-skeleton-parser": {
-      "version": "1.3.6",
-      "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz",
-      "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==",
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.1.tgz",
+      "integrity": "sha512-WdPNjhv9e7EfyrIVYk6hN6/mC9YF+PcfFViDI2kATwoi1uKHr+AkQCMoNrWyCDdUQ+Dn50mQOlrEkCBXoLrkPQ==",
       "dependencies": {
-        "@formatjs/ecma402-abstract": "1.11.4",
+        "@formatjs/ecma402-abstract": "1.10.0",
         "tslib": "^2.1.0"
       }
     },
     "node_modules/@formatjs/icu-skeleton-parser/node_modules/@formatjs/ecma402-abstract": {
-      "version": "1.11.4",
-      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
-      "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.10.0.tgz",
+      "integrity": "sha512-WNkcUHC6xw12rWY87TUw6KXzb1LnOooYBLLqtyn1kW2j197rcwpqmUOJMBED56YcLzaJPfVw1L2ShiDhL5pVnQ==",
       "dependencies": {
-        "@formatjs/intl-localematcher": "0.2.25",
+        "@formatjs/intl-localematcher": "0.2.21",
         "tslib": "^2.1.0"
       }
     },
     "node_modules/@formatjs/intl": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.2.1.tgz",
-      "integrity": "sha512-vgvyUOOrzqVaOFYzTf2d3+ToSkH2JpR7x/4U1RyoHQLmvEaTQvXJ7A2qm1Iy3brGNXC/+/7bUlc3lpH+h/LOJA==",
-      "dependencies": {
-        "@formatjs/ecma402-abstract": "1.11.4",
-        "@formatjs/fast-memoize": "1.2.1",
-        "@formatjs/icu-messageformat-parser": "2.1.0",
-        "@formatjs/intl-displaynames": "5.4.3",
-        "@formatjs/intl-listformat": "6.5.3",
-        "intl-messageformat": "9.13.0",
+      "version": "1.15.1",
+      "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-1.15.1.tgz",
+      "integrity": "sha512-p2Ngo7expCYxiKa3Ahg3Pkq60nkny49ve0O2AeXj/mSJ/eqw1Mk+Pgbwv/pDsSWbSWfELwh7B3CZT9kL8ZSZbA==",
+      "dependencies": {
+        "@formatjs/ecma402-abstract": "1.10.0",
+        "@formatjs/fast-memoize": "1.2.0",
+        "@formatjs/icu-messageformat-parser": "2.0.14",
+        "@formatjs/intl-displaynames": "5.2.5",
+        "@formatjs/intl-listformat": "6.3.5",
+        "intl-messageformat": "9.9.5",
         "tslib": "^2.1.0"
       },
       "peerDependencies": {
-        "typescript": "^4.5"
+        "typescript": "^4.4"
       },
       "peerDependenciesMeta": {
         "typescript": {
@@ -2609,47 +2675,47 @@
       }
     },
     "node_modules/@formatjs/intl-displaynames": {
-      "version": "5.4.3",
-      "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-5.4.3.tgz",
-      "integrity": "sha512-4r12A3mS5dp5hnSaQCWBuBNfi9Amgx2dzhU4lTFfhSxgb5DOAiAbMpg6+7gpWZgl4ahsj3l2r/iHIjdmdXOE2Q==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-5.2.5.tgz",
+      "integrity": "sha512-iYlce/hG31ohJOwpv3yhOiEIwEBMqOt2kzA2BQTx1ra8ferBn4WlTxkouoDNiAKEBD1LFYZBIC25jsSJUJOEbg==",
       "dependencies": {
-        "@formatjs/ecma402-abstract": "1.11.4",
-        "@formatjs/intl-localematcher": "0.2.25",
+        "@formatjs/ecma402-abstract": "1.10.0",
+        "@formatjs/intl-localematcher": "0.2.21",
         "tslib": "^2.1.0"
       }
     },
     "node_modules/@formatjs/intl-displaynames/node_modules/@formatjs/ecma402-abstract": {
-      "version": "1.11.4",
-      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
-      "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.10.0.tgz",
+      "integrity": "sha512-WNkcUHC6xw12rWY87TUw6KXzb1LnOooYBLLqtyn1kW2j197rcwpqmUOJMBED56YcLzaJPfVw1L2ShiDhL5pVnQ==",
       "dependencies": {
-        "@formatjs/intl-localematcher": "0.2.25",
+        "@formatjs/intl-localematcher": "0.2.21",
         "tslib": "^2.1.0"
       }
     },
     "node_modules/@formatjs/intl-listformat": {
-      "version": "6.5.3",
-      "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-6.5.3.tgz",
-      "integrity": "sha512-ozpz515F/+3CU+HnLi5DYPsLa6JoCfBggBSSg/8nOB5LYSFW9+ZgNQJxJ8tdhKYeODT+4qVHX27EeJLoxLGLNg==",
+      "version": "6.3.5",
+      "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-6.3.5.tgz",
+      "integrity": "sha512-GtiMMx5RB/gID7ydGr+i1lRbGu728plTfT196X151cE2PYEqC05BEuHQFlE1rcUGC2+RfFqlvmipYcbOqJTQug==",
       "dependencies": {
-        "@formatjs/ecma402-abstract": "1.11.4",
-        "@formatjs/intl-localematcher": "0.2.25",
+        "@formatjs/ecma402-abstract": "1.10.0",
+        "@formatjs/intl-localematcher": "0.2.21",
         "tslib": "^2.1.0"
       }
     },
     "node_modules/@formatjs/intl-listformat/node_modules/@formatjs/ecma402-abstract": {
-      "version": "1.11.4",
-      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
-      "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.10.0.tgz",
+      "integrity": "sha512-WNkcUHC6xw12rWY87TUw6KXzb1LnOooYBLLqtyn1kW2j197rcwpqmUOJMBED56YcLzaJPfVw1L2ShiDhL5pVnQ==",
       "dependencies": {
-        "@formatjs/intl-localematcher": "0.2.25",
+        "@formatjs/intl-localematcher": "0.2.21",
         "tslib": "^2.1.0"
       }
     },
     "node_modules/@formatjs/intl-localematcher": {
-      "version": "0.2.25",
-      "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz",
-      "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==",
+      "version": "0.2.21",
+      "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.21.tgz",
+      "integrity": "sha512-JTJeLiNwexN4Gy0cMxoUPvJbKhXdnSuo5jPrDafEZpnDWlJ5VDYta8zUVVozO/pwzEmFVHEUpgiEDj+39L4oMg==",
       "dependencies": {
         "tslib": "^2.1.0"
       }
@@ -2665,11 +2731,11 @@
       }
     },
     "node_modules/@formatjs/intl/node_modules/@formatjs/ecma402-abstract": {
-      "version": "1.11.4",
-      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
-      "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.10.0.tgz",
+      "integrity": "sha512-WNkcUHC6xw12rWY87TUw6KXzb1LnOooYBLLqtyn1kW2j197rcwpqmUOJMBED56YcLzaJPfVw1L2ShiDhL5pVnQ==",
       "dependencies": {
-        "@formatjs/intl-localematcher": "0.2.25",
+        "@formatjs/intl-localematcher": "0.2.21",
         "tslib": "^2.1.0"
       }
     },
@@ -12824,13 +12890,12 @@
       "integrity": "sha512-Zv/u8wRpekckv0cLkwpVdABYST4hZNTDaX7reFetrYTJwxExR2VyTqQm+l0WmL0Qo8Mjb9Tf33qnfj0T7pjxdQ=="
     },
     "node_modules/intl-messageformat": {
-      "version": "9.13.0",
-      "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz",
-      "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==",
+      "version": "9.9.5",
+      "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.9.5.tgz",
+      "integrity": "sha512-pdKpqhiD0P8yqblu1qetOOL8SnJ62SGdvxwYPvSmuYMN3BawEV5UnJuRcsIwwXYJAGYoICiOJl3gexuuH+RLXw==",
       "dependencies": {
-        "@formatjs/ecma402-abstract": "1.11.4",
-        "@formatjs/fast-memoize": "1.2.1",
-        "@formatjs/icu-messageformat-parser": "2.1.0",
+        "@formatjs/fast-memoize": "1.2.0",
+        "@formatjs/icu-messageformat-parser": "2.0.14",
         "tslib": "^2.1.0"
       }
     },
@@ -12844,15 +12909,6 @@
         "@formatjs/intl-numberformat": "^5.5.2"
       }
     },
-    "node_modules/intl-messageformat/node_modules/@formatjs/ecma402-abstract": {
-      "version": "1.11.4",
-      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
-      "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
-      "dependencies": {
-        "@formatjs/intl-localematcher": "0.2.25",
-        "tslib": "^2.1.0"
-      }
-    },
     "node_modules/intl-relativeformat": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/intl-relativeformat/-/intl-relativeformat-2.2.0.tgz",
@@ -12865,7 +12921,7 @@
     "node_modules/intl-relativeformat/node_modules/intl-messageformat": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-2.2.0.tgz",
-      "integrity": "sha512-I+tSvHnXqJYjDfNmY95tpFMj30yoakC6OXAo+wu/wTMy6tA/4Fd4mvV7Uzs4cqK/Ap29sHhwjcY+78a8eifcXw==",
+      "integrity": "sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw=",
       "dependencies": {
         "intl-messageformat-parser": "1.4.0"
       }
@@ -12873,7 +12929,7 @@
     "node_modules/intl-relativeformat/node_modules/intl-messageformat-parser": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz",
-      "integrity": "sha512-/XkqFHKezO6UcF4Av2/Lzfrez18R0jyw7kRFhSeB/YRakdrgSc9QfFZUwNJI9swMwMoNPygK1ArC5wdFSjPw+A==",
+      "integrity": "sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU=",
       "deprecated": "We've written a new parser that's 6x faster and is backwards compatible. Please use @formatjs/icu-messageformat-parser"
     },
     "node_modules/into-stream": {
@@ -19072,24 +19128,24 @@
       "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA=="
     },
     "node_modules/react-intl": {
-      "version": "5.25.1",
-      "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-5.25.1.tgz",
-      "integrity": "sha512-pkjdQDvpJROoXLMltkP/5mZb0/XqrqLoPGKUCfbdkP8m6U9xbK40K51Wu+a4aQqTEvEK5lHBk0fWzUV72SJ3Hg==",
-      "dependencies": {
-        "@formatjs/ecma402-abstract": "1.11.4",
-        "@formatjs/icu-messageformat-parser": "2.1.0",
-        "@formatjs/intl": "2.2.1",
-        "@formatjs/intl-displaynames": "5.4.3",
-        "@formatjs/intl-listformat": "6.5.3",
+      "version": "5.21.1",
+      "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-5.21.1.tgz",
+      "integrity": "sha512-MwkSaNW64fuI7bSuKcL4fzQ7PJf8qvHydbr8LzAB5cefYetP3NPfNivF8kB1I0nFvgQPUIt11NlP/y0uWEqUKw==",
+      "dependencies": {
+        "@formatjs/ecma402-abstract": "1.10.0",
+        "@formatjs/icu-messageformat-parser": "2.0.14",
+        "@formatjs/intl": "1.15.1",
+        "@formatjs/intl-displaynames": "5.2.5",
+        "@formatjs/intl-listformat": "6.3.5",
         "@types/hoist-non-react-statics": "^3.3.1",
-        "@types/react": "16 || 17 || 18",
+        "@types/react": "16 || 17",
         "hoist-non-react-statics": "^3.3.2",
-        "intl-messageformat": "9.13.0",
+        "intl-messageformat": "9.9.5",
         "tslib": "^2.1.0"
       },
       "peerDependencies": {
-        "react": "^16.3.0 || 17 || 18",
-        "typescript": "^4.5"
+        "react": "^16.3.0 || 17",
+        "typescript": "^4.4"
       },
       "peerDependenciesMeta": {
         "typescript": {
@@ -19098,11 +19154,11 @@
       }
     },
     "node_modules/react-intl/node_modules/@formatjs/ecma402-abstract": {
-      "version": "1.11.4",
-      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
-      "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.10.0.tgz",
+      "integrity": "sha512-WNkcUHC6xw12rWY87TUw6KXzb1LnOooYBLLqtyn1kW2j197rcwpqmUOJMBED56YcLzaJPfVw1L2ShiDhL5pVnQ==",
       "dependencies": {
-        "@formatjs/intl-localematcher": "0.2.25",
+        "@formatjs/intl-localematcher": "0.2.21",
         "tslib": "^2.1.0"
       }
     },
@@ -24060,9 +24116,9 @@
       }
     },
     "@babel/helper-module-imports": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz",
-      "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==",
+      "version": "7.18.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+      "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
       "dev": true,
       "requires": {
         "@babel/types": "^7.18.6"
@@ -24154,7 +24210,8 @@
     "@babel/helper-string-parser": {
       "version": "7.18.10",
       "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
-      "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw=="
+      "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
+      "dev": true
     },
     "@babel/helper-validator-identifier": {
       "version": "7.18.6",
@@ -25099,9 +25156,9 @@
       }
     },
     "@babel/types": {
-      "version": "7.15.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz",
-      "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==",
+      "version": "7.18.10",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz",
+      "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==",
       "dev": true,
       "requires": {
         "@babel/helper-string-parser": "^7.18.10",
@@ -25307,9 +25364,9 @@
       }
     },
     "@edx/frontend-enterprise-utils": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@edx/frontend-enterprise-utils/-/frontend-enterprise-utils-2.1.0.tgz",
-      "integrity": "sha512-lfGwpfOnNO7oe3p8YUXhjzA2kDYz0eYZk4eeY+SYib6oRXDE+nbZXd+IU9jhd/YyZnPAAAFRY3JYwNQ26Go+0Q==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@edx/frontend-enterprise-utils/-/frontend-enterprise-utils-2.0.3.tgz",
+      "integrity": "sha512-71yB6wEciHU9B57mEgZKT7PFjpwRQwlCjB048N2z9PIzKHrux8g5WIT3C/dtXC0+xGvz1z8aOf+tHahgHLWkkQ==",
       "requires": {
         "@testing-library/react": "11.2.6",
         "history": "4.10.1"
@@ -25361,7 +25418,7 @@
         "intl-messageformat": {
           "version": "2.2.0",
           "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-2.2.0.tgz",
-          "integrity": "sha512-I+tSvHnXqJYjDfNmY95tpFMj30yoakC6OXAo+wu/wTMy6tA/4Fd4mvV7Uzs4cqK/Ap29sHhwjcY+78a8eifcXw==",
+          "integrity": "sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw=",
           "requires": {
             "intl-messageformat-parser": "1.4.0"
           }
@@ -25369,7 +25426,7 @@
         "intl-messageformat-parser": {
           "version": "1.4.0",
           "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz",
-          "integrity": "sha512-/XkqFHKezO6UcF4Av2/Lzfrez18R0jyw7kRFhSeB/YRakdrgSc9QfFZUwNJI9swMwMoNPygK1ArC5wdFSjPw+A=="
+          "integrity": "sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU="
         },
         "react-intl": {
           "version": "2.9.0",
@@ -25473,6 +25530,55 @@
         }
       }
     },
+    "@eslint/eslintrc": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
+      "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
+      "dev": true,
+      "requires": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.3.2",
+        "globals": "^13.15.0",
+        "ignore": "^5.2.0",
+        "import-fresh": "^3.2.1",
+        "js-yaml": "^4.1.0",
+        "minimatch": "^3.1.2",
+        "strip-json-comments": "^3.1.1"
+      },
+      "dependencies": {
+        "argparse": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+          "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+          "dev": true
+        },
+        "globals": {
+          "version": "13.17.0",
+          "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+          "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+          "dev": true,
+          "requires": {
+            "type-fest": "^0.20.2"
+          }
+        },
+        "js-yaml": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+          "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+          "dev": true,
+          "requires": {
+            "argparse": "^2.0.1"
+          }
+        },
+        "type-fest": {
+          "version": "0.20.2",
+          "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+          "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+          "dev": true
+        }
+      }
+    },
     "@formatjs/ecma402-abstract": {
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.4.0.tgz",
@@ -25483,125 +25589,125 @@
       }
     },
     "@formatjs/fast-memoize": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz",
-      "integrity": "sha512-Rg0e76nomkz3vF9IPlKeV+Qynok0r7YZjL6syLz4/urSg0IbjPZCB/iYUMNsYA643gh4mgrX3T7KEIFIxJBQeg==",
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.0.tgz",
+      "integrity": "sha512-fObitP9Tlc31SKrPHgkPgQpGo4+4yXfQQITTCNH8AZdEqB7Mq4nPrjpUL/tNGN3lEeJcFxDbi0haX8HM7QvQ8w==",
       "requires": {
         "tslib": "^2.1.0"
       }
     },
     "@formatjs/icu-messageformat-parser": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.1.0.tgz",
-      "integrity": "sha512-Qxv/lmCN6hKpBSss2uQ8IROVnta2r9jd3ymUEIjm2UyIkUCHVcbUVRGL/KS/wv7876edvsPe+hjHVJ4z8YuVaw==",
+      "version": "2.0.14",
+      "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.0.14.tgz",
+      "integrity": "sha512-M79MdUMLnfLK8eMrznUwke6afH9G/eOQeYvMUJ7uElXIL+//PyyjOzb42hAYfDAGYsAcKA2TsUo33Yuy2lE4AQ==",
       "requires": {
-        "@formatjs/ecma402-abstract": "1.11.4",
-        "@formatjs/icu-skeleton-parser": "1.3.6",
+        "@formatjs/ecma402-abstract": "1.10.0",
+        "@formatjs/icu-skeleton-parser": "1.3.1",
         "tslib": "^2.1.0"
       },
       "dependencies": {
         "@formatjs/ecma402-abstract": {
-          "version": "1.11.4",
-          "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
-          "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+          "version": "1.10.0",
+          "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.10.0.tgz",
+          "integrity": "sha512-WNkcUHC6xw12rWY87TUw6KXzb1LnOooYBLLqtyn1kW2j197rcwpqmUOJMBED56YcLzaJPfVw1L2ShiDhL5pVnQ==",
           "requires": {
-            "@formatjs/intl-localematcher": "0.2.25",
+            "@formatjs/intl-localematcher": "0.2.21",
             "tslib": "^2.1.0"
           }
         }
       }
     },
     "@formatjs/icu-skeleton-parser": {
-      "version": "1.3.6",
-      "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.6.tgz",
-      "integrity": "sha512-I96mOxvml/YLrwU2Txnd4klA7V8fRhb6JG/4hm3VMNmeJo1F03IpV2L3wWt7EweqNLES59SZ4d6hVOPCSf80Bg==",
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.3.1.tgz",
+      "integrity": "sha512-WdPNjhv9e7EfyrIVYk6hN6/mC9YF+PcfFViDI2kATwoi1uKHr+AkQCMoNrWyCDdUQ+Dn50mQOlrEkCBXoLrkPQ==",
       "requires": {
-        "@formatjs/ecma402-abstract": "1.11.4",
+        "@formatjs/ecma402-abstract": "1.10.0",
         "tslib": "^2.1.0"
       },
       "dependencies": {
         "@formatjs/ecma402-abstract": {
-          "version": "1.11.4",
-          "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
-          "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+          "version": "1.10.0",
+          "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.10.0.tgz",
+          "integrity": "sha512-WNkcUHC6xw12rWY87TUw6KXzb1LnOooYBLLqtyn1kW2j197rcwpqmUOJMBED56YcLzaJPfVw1L2ShiDhL5pVnQ==",
           "requires": {
-            "@formatjs/intl-localematcher": "0.2.25",
+            "@formatjs/intl-localematcher": "0.2.21",
             "tslib": "^2.1.0"
           }
         }
       }
     },
     "@formatjs/intl": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.2.1.tgz",
-      "integrity": "sha512-vgvyUOOrzqVaOFYzTf2d3+ToSkH2JpR7x/4U1RyoHQLmvEaTQvXJ7A2qm1Iy3brGNXC/+/7bUlc3lpH+h/LOJA==",
-      "requires": {
-        "@formatjs/ecma402-abstract": "1.11.4",
-        "@formatjs/fast-memoize": "1.2.1",
-        "@formatjs/icu-messageformat-parser": "2.1.0",
-        "@formatjs/intl-displaynames": "5.4.3",
-        "@formatjs/intl-listformat": "6.5.3",
-        "intl-messageformat": "9.13.0",
+      "version": "1.15.1",
+      "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-1.15.1.tgz",
+      "integrity": "sha512-p2Ngo7expCYxiKa3Ahg3Pkq60nkny49ve0O2AeXj/mSJ/eqw1Mk+Pgbwv/pDsSWbSWfELwh7B3CZT9kL8ZSZbA==",
+      "requires": {
+        "@formatjs/ecma402-abstract": "1.10.0",
+        "@formatjs/fast-memoize": "1.2.0",
+        "@formatjs/icu-messageformat-parser": "2.0.14",
+        "@formatjs/intl-displaynames": "5.2.5",
+        "@formatjs/intl-listformat": "6.3.5",
+        "intl-messageformat": "9.9.5",
         "tslib": "^2.1.0"
       },
       "dependencies": {
         "@formatjs/ecma402-abstract": {
-          "version": "1.11.4",
-          "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
-          "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+          "version": "1.10.0",
+          "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.10.0.tgz",
+          "integrity": "sha512-WNkcUHC6xw12rWY87TUw6KXzb1LnOooYBLLqtyn1kW2j197rcwpqmUOJMBED56YcLzaJPfVw1L2ShiDhL5pVnQ==",
           "requires": {
-            "@formatjs/intl-localematcher": "0.2.25",
+            "@formatjs/intl-localematcher": "0.2.21",
             "tslib": "^2.1.0"
           }
         }
       }
     },
     "@formatjs/intl-displaynames": {
-      "version": "5.4.3",
-      "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-5.4.3.tgz",
-      "integrity": "sha512-4r12A3mS5dp5hnSaQCWBuBNfi9Amgx2dzhU4lTFfhSxgb5DOAiAbMpg6+7gpWZgl4ahsj3l2r/iHIjdmdXOE2Q==",
+      "version": "5.2.5",
+      "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-5.2.5.tgz",
+      "integrity": "sha512-iYlce/hG31ohJOwpv3yhOiEIwEBMqOt2kzA2BQTx1ra8ferBn4WlTxkouoDNiAKEBD1LFYZBIC25jsSJUJOEbg==",
       "requires": {
-        "@formatjs/ecma402-abstract": "1.11.4",
-        "@formatjs/intl-localematcher": "0.2.25",
+        "@formatjs/ecma402-abstract": "1.10.0",
+        "@formatjs/intl-localematcher": "0.2.21",
         "tslib": "^2.1.0"
       },
       "dependencies": {
         "@formatjs/ecma402-abstract": {
-          "version": "1.11.4",
-          "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
-          "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+          "version": "1.10.0",
+          "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.10.0.tgz",
+          "integrity": "sha512-WNkcUHC6xw12rWY87TUw6KXzb1LnOooYBLLqtyn1kW2j197rcwpqmUOJMBED56YcLzaJPfVw1L2ShiDhL5pVnQ==",
           "requires": {
-            "@formatjs/intl-localematcher": "0.2.25",
+            "@formatjs/intl-localematcher": "0.2.21",
             "tslib": "^2.1.0"
           }
         }
       }
     },
     "@formatjs/intl-listformat": {
-      "version": "6.5.3",
-      "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-6.5.3.tgz",
-      "integrity": "sha512-ozpz515F/+3CU+HnLi5DYPsLa6JoCfBggBSSg/8nOB5LYSFW9+ZgNQJxJ8tdhKYeODT+4qVHX27EeJLoxLGLNg==",
+      "version": "6.3.5",
+      "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-6.3.5.tgz",
+      "integrity": "sha512-GtiMMx5RB/gID7ydGr+i1lRbGu728plTfT196X151cE2PYEqC05BEuHQFlE1rcUGC2+RfFqlvmipYcbOqJTQug==",
       "requires": {
-        "@formatjs/ecma402-abstract": "1.11.4",
-        "@formatjs/intl-localematcher": "0.2.25",
+        "@formatjs/ecma402-abstract": "1.10.0",
+        "@formatjs/intl-localematcher": "0.2.21",
         "tslib": "^2.1.0"
       },
       "dependencies": {
         "@formatjs/ecma402-abstract": {
-          "version": "1.11.4",
-          "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
-          "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+          "version": "1.10.0",
+          "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.10.0.tgz",
+          "integrity": "sha512-WNkcUHC6xw12rWY87TUw6KXzb1LnOooYBLLqtyn1kW2j197rcwpqmUOJMBED56YcLzaJPfVw1L2ShiDhL5pVnQ==",
           "requires": {
-            "@formatjs/intl-localematcher": "0.2.25",
+            "@formatjs/intl-localematcher": "0.2.21",
             "tslib": "^2.1.0"
           }
         }
       }
     },
     "@formatjs/intl-localematcher": {
-      "version": "0.2.25",
-      "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz",
-      "integrity": "sha512-YmLcX70BxoSopLFdLr1Ds99NdlTI2oWoLbaUW2M406lxOIPzE1KQhRz2fPUkq34xVZQaihCoU29h0KK7An3bhA==",
+      "version": "0.2.21",
+      "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.21.tgz",
+      "integrity": "sha512-JTJeLiNwexN4Gy0cMxoUPvJbKhXdnSuo5jPrDafEZpnDWlJ5VDYta8zUVVozO/pwzEmFVHEUpgiEDj+39L4oMg==",
       "requires": {
         "tslib": "^2.1.0"
       }
@@ -33440,25 +33546,13 @@
       "integrity": "sha512-Zv/u8wRpekckv0cLkwpVdABYST4hZNTDaX7reFetrYTJwxExR2VyTqQm+l0WmL0Qo8Mjb9Tf33qnfj0T7pjxdQ=="
     },
     "intl-messageformat": {
-      "version": "9.13.0",
-      "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.13.0.tgz",
-      "integrity": "sha512-7sGC7QnSQGa5LZP7bXLDhVDtQOeKGeBFGHF2Y8LVBwYZoQZCgWeKoPGTa5GMG8g/TzDgeXuYJQis7Ggiw2xTOw==",
+      "version": "9.9.5",
+      "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.9.5.tgz",
+      "integrity": "sha512-pdKpqhiD0P8yqblu1qetOOL8SnJ62SGdvxwYPvSmuYMN3BawEV5UnJuRcsIwwXYJAGYoICiOJl3gexuuH+RLXw==",
       "requires": {
-        "@formatjs/ecma402-abstract": "1.11.4",
-        "@formatjs/fast-memoize": "1.2.1",
-        "@formatjs/icu-messageformat-parser": "2.1.0",
+        "@formatjs/fast-memoize": "1.2.0",
+        "@formatjs/icu-messageformat-parser": "2.0.14",
         "tslib": "^2.1.0"
-      },
-      "dependencies": {
-        "@formatjs/ecma402-abstract": {
-          "version": "1.11.4",
-          "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
-          "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
-          "requires": {
-            "@formatjs/intl-localematcher": "0.2.25",
-            "tslib": "^2.1.0"
-          }
-        }
       }
     },
     "intl-messageformat-parser": {
@@ -33481,7 +33575,7 @@
         "intl-messageformat": {
           "version": "2.2.0",
           "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-2.2.0.tgz",
-          "integrity": "sha512-I+tSvHnXqJYjDfNmY95tpFMj30yoakC6OXAo+wu/wTMy6tA/4Fd4mvV7Uzs4cqK/Ap29sHhwjcY+78a8eifcXw==",
+          "integrity": "sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw=",
           "requires": {
             "intl-messageformat-parser": "1.4.0"
           }
@@ -33489,7 +33583,7 @@
         "intl-messageformat-parser": {
           "version": "1.4.0",
           "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz",
-          "integrity": "sha512-/XkqFHKezO6UcF4Av2/Lzfrez18R0jyw7kRFhSeB/YRakdrgSc9QfFZUwNJI9swMwMoNPygK1ArC5wdFSjPw+A=="
+          "integrity": "sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU="
         }
       }
     },
@@ -38123,28 +38217,28 @@
       }
     },
     "react-intl": {
-      "version": "5.25.1",
-      "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-5.25.1.tgz",
-      "integrity": "sha512-pkjdQDvpJROoXLMltkP/5mZb0/XqrqLoPGKUCfbdkP8m6U9xbK40K51Wu+a4aQqTEvEK5lHBk0fWzUV72SJ3Hg==",
-      "requires": {
-        "@formatjs/ecma402-abstract": "1.11.4",
-        "@formatjs/icu-messageformat-parser": "2.1.0",
-        "@formatjs/intl": "2.2.1",
-        "@formatjs/intl-displaynames": "5.4.3",
-        "@formatjs/intl-listformat": "6.5.3",
+      "version": "5.21.1",
+      "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-5.21.1.tgz",
+      "integrity": "sha512-MwkSaNW64fuI7bSuKcL4fzQ7PJf8qvHydbr8LzAB5cefYetP3NPfNivF8kB1I0nFvgQPUIt11NlP/y0uWEqUKw==",
+      "requires": {
+        "@formatjs/ecma402-abstract": "1.10.0",
+        "@formatjs/icu-messageformat-parser": "2.0.14",
+        "@formatjs/intl": "1.15.1",
+        "@formatjs/intl-displaynames": "5.2.5",
+        "@formatjs/intl-listformat": "6.3.5",
         "@types/hoist-non-react-statics": "^3.3.1",
-        "@types/react": "16 || 17 || 18",
+        "@types/react": "16 || 17",
         "hoist-non-react-statics": "^3.3.2",
-        "intl-messageformat": "9.13.0",
+        "intl-messageformat": "9.9.5",
         "tslib": "^2.1.0"
       },
       "dependencies": {
         "@formatjs/ecma402-abstract": {
-          "version": "1.11.4",
-          "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz",
-          "integrity": "sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw==",
+          "version": "1.10.0",
+          "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.10.0.tgz",
+          "integrity": "sha512-WNkcUHC6xw12rWY87TUw6KXzb1LnOooYBLLqtyn1kW2j197rcwpqmUOJMBED56YcLzaJPfVw1L2ShiDhL5pVnQ==",
           "requires": {
-            "@formatjs/intl-localematcher": "0.2.25",
+            "@formatjs/intl-localematcher": "0.2.21",
             "tslib": "^2.1.0"
           }
         }
diff --git a/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx b/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx
index 2a9bf1269c..943f464ecf 100644
--- a/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx
+++ b/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx
@@ -58,9 +58,7 @@ function ExecutiveEducation2UPage() {
       <h2>
         {isLoading ? (
           <Skeleton containerTestId="loading-skeleton-page-title" />
-        ) : (
-          <>{pageTitle}</>
-        )}
+        ) : (pageTitle)}
       </h2>
       <p>
         {(isLoading || !contentMetadata) ? (
diff --git a/src/components/executive-education-2u/ExecutiveEducation2UPage.test.jsx b/src/components/executive-education-2u/ExecutiveEducation2UPage.test.jsx
index 101c874a3b..a325aa6580 100644
--- a/src/components/executive-education-2u/ExecutiveEducation2UPage.test.jsx
+++ b/src/components/executive-education-2u/ExecutiveEducation2UPage.test.jsx
@@ -16,9 +16,9 @@ jest.mock('@edx/frontend-platform/logging', () => ({
   ...jest.requireActual('@edx/frontend-platform/logging'),
   logError: jest.fn(),
 }));
-jest.mock('./UserEnrollmentForm', () => () => (
-  <div data-testid="user-enrollment-form-component" />
-));
+jest.mock('./UserEnrollmentForm', () => function () {
+  return <div data-testid="user-enrollment-form-component" />;
+});
 const enterpriseSlug = 'test-enterprise-slug';
 const initialAppContextValue = {
   enterpriseConfig: {
diff --git a/src/components/program-progress/ProgramProgressRedirect.jsx b/src/components/program-progress/ProgramProgressRedirect.jsx
index 2673263ff7..3db2ed71b3 100644
--- a/src/components/program-progress/ProgramProgressRedirect.jsx
+++ b/src/components/program-progress/ProgramProgressRedirect.jsx
@@ -2,11 +2,11 @@ import React, { useContext } from 'react';
 import { Redirect, useParams } from 'react-router-dom';
 import { AppContext } from '@edx/frontend-platform/react';
 
-const ProgramProgressRedirect = () => {
+function ProgramProgressRedirect() {
   const { enterpriseConfig } = useContext(AppContext);
   const { programUUID } = useParams();
 
   return <Redirect to={`/${enterpriseConfig.slug}/program/${programUUID}/progress`} />;
-};
+}
 
 export default ProgramProgressRedirect;

From 67bc7d6b10b107e47321b5f4abf593a33616a264 Mon Sep 17 00:00:00 2001
From: Bilal Qamar <59555732+BilalQamar95@users.noreply.github.com>
Date: Mon, 22 Aug 2022 17:05:46 +0500
Subject: [PATCH 06/13] refactor: updated files to ignore
 jsx-no-useless-fragment rule

---
 src/components/course/EnrollModal.jsx         |   7 +-
 .../sidebar/CouponCodesSummaryCard.jsx        | 101 +++++++-------
 .../sidebar/SubscriptionSummaryCard.jsx       | 131 +++++++++---------
 .../ExecutiveEducation2UPage.jsx              |   5 +-
 src/components/program/ProgramHeader.jsx      |  45 +++---
 src/components/search/SearchCourseCard.jsx    |  17 ++-
 src/components/search/SearchProgramCard.jsx   |   5 +-
 src/components/skills-quiz/CourseCard.jsx     |  47 ++++---
 .../skills-quiz/JobCardComponent.jsx          |  33 +++--
 .../skills-quiz/SearchProgramCard.jsx         |  29 ++--
 .../__mocks__/react-instantsearch-dom.jsx     |   5 +-
 11 files changed, 227 insertions(+), 198 deletions(-)

diff --git a/src/components/course/EnrollModal.jsx b/src/components/course/EnrollModal.jsx
index 5429e7f2cd..f6d23db638 100644
--- a/src/components/course/EnrollModal.jsx
+++ b/src/components/course/EnrollModal.jsx
@@ -1,3 +1,4 @@
+/* eslint-disable react/jsx-no-useless-fragment */
 import React, { useContext, useState } from 'react';
 import PropTypes from 'prop-types';
 import { Modal } from '@edx/paragon';
@@ -116,8 +117,10 @@ function EnrollModal({
           href={enrollmentUrl}
           onClick={handleEnroll}
         >
-          {isLoading && <FontAwesomeIcon icon={faSpinner} alt="loading" className="fa-spin mr-2" />}
-          {buttonText}
+          <>
+            {isLoading && <FontAwesomeIcon icon={faSpinner} alt="loading" className="fa-spin mr-2" />}
+            {buttonText}
+          </>
         </a>,
       ]}
       onClose={() => setIsModalOpen(false)}
diff --git a/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx b/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx
index a9188826a4..02cb36ef9e 100644
--- a/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx
+++ b/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx
@@ -48,57 +48,60 @@ function CouponCodesSummaryCard({
   }
 
   return (
-    programProgressPage ? (
-      <>
-        <CouponCodesWarningModal
-          isCouponCodeWarningModalOpen={isCouponCodeWarningModalOpen}
-          onCouponCodeWarningModalClose={onCouponCodeWarningModalClose}
-          couponCodesCount={couponCodesCount}
-        />
+    // eslint-disable-next-line react/jsx-no-useless-fragment
+    <>
+      {programProgressPage ? (
+        <>
+          <CouponCodesWarningModal
+            isCouponCodeWarningModalOpen={isCouponCodeWarningModalOpen}
+            onCouponCodeWarningModalClose={onCouponCodeWarningModalClose}
+            couponCodesCount={couponCodesCount}
+          />
 
-        <SidebarCard
-          title={(
-            <div className="d-flex align-items-start justify-content-between">
-              <h3>{COUPON_CODES_SUMMARY_REMAINING_CODES}</h3>
-              {totalCoursesEligibleForCertificate > couponCodesCount && (
-                <WarningFilled
-                  className="ml-2"
-                  onClick={() => { couponCodeWarningModalOpen(); }}
-                />
-              )}
-            </div>
-          )}
-          cardClassNames={className}
-        >
-          <p className="m-0">
-            <h3 className="float-left"> {couponCodesCount > 0 ? couponCodesCount : 0}</h3>{' '}<span className="ml-2">{COUPON_CODES_SUMMARY_DETAIL}</span>
-          </p>
-        </SidebarCard>
-      </>
-    )
-      : (
-        <SidebarCard
-          title={(
-            <div className="d-flex align-items-start justify-content-between">
-              {`${COUPON_CODES_SUMMARY_TITLE}${couponCodesCount > 0 ? `: ${couponCodesCount}` : ''}`}
-              {badgeVariantAndLabel && (
-                <Badge
-                  variant={badgeVariantAndLabel.variant}
-                  className="ml-2"
-                  data-testid="subscription-status-badge"
-                >
-                  {badgeVariantAndLabel.label}
-                </Badge>
-              )}
-            </div>
-          )}
-          cardClassNames={className}
-        >
-          <p className="m-0">
-            {COUPON_CODES_SUMMARY_NOTICE}
-          </p>
-        </SidebarCard>
+          <SidebarCard
+            title={(
+              <div className="d-flex align-items-start justify-content-between">
+                <h3>{COUPON_CODES_SUMMARY_REMAINING_CODES}</h3>
+                {totalCoursesEligibleForCertificate > couponCodesCount && (
+                  <WarningFilled
+                    className="ml-2"
+                    onClick={() => { couponCodeWarningModalOpen(); }}
+                  />
+                )}
+              </div>
+            )}
+            cardClassNames={className}
+          >
+            <p className="m-0">
+              <h3 className="float-left"> {couponCodesCount > 0 ? couponCodesCount : 0}</h3>{' '}<span className="ml-2">{COUPON_CODES_SUMMARY_DETAIL}</span>
+            </p>
+          </SidebarCard>
+        </>
       )
+        : (
+          <SidebarCard
+            title={(
+              <div className="d-flex align-items-start justify-content-between">
+                {`${COUPON_CODES_SUMMARY_TITLE}${couponCodesCount > 0 ? `: ${couponCodesCount}` : ''}`}
+                {badgeVariantAndLabel && (
+                  <Badge
+                    variant={badgeVariantAndLabel.variant}
+                    className="ml-2"
+                    data-testid="subscription-status-badge"
+                  >
+                    {badgeVariantAndLabel.label}
+                  </Badge>
+                )}
+              </div>
+            )}
+            cardClassNames={className}
+          >
+            <p className="m-0">
+              {COUPON_CODES_SUMMARY_NOTICE}
+            </p>
+          </SidebarCard>
+        )}
+    </>
   );
 }
 
diff --git a/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx b/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx
index 9bfed0ca9c..f11af04f53 100644
--- a/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx
+++ b/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx
@@ -76,73 +76,76 @@ function SubscriptionSummaryCard({
   }
 
   return (
-    programProgressPage ? (
-      <>
-        {subscriptionPlan && (
-          <SubscriptionExpirationWarningModal
-            isSubscriptionExpiringWarningModalOpen={isSubscriptionExpiringWarningModalOpen}
-            onSubscriptionExpiringWarningModalClose={onSubscriptionExpiringWarningModalClose}
-          />
-        )}
-        <SidebarCard
-          title={(
-            <div className="d-flex align-items-start justify-content-between">
-              <h3>{SUBSCRIPTION_SUMMARY_CARD_TITLE}</h3>
-              <div>
-                <Badge
-                  variant={badgeVariantAndLabel.variant}
-                  className="ml-2"
-                  data-testid="subscription-status-badge"
-                >
-                  {badgeVariantAndLabel.label}
-                </Badge>
-                {(subscriptionPlan && courseEndDate > subscriptionPlan.expirationDate) && <WarningFilled data-testid="warning-icon" className="ml-2" onClick={() => { subscriptionExpiringWarningModalOpen(); }} />}
-              </div>
-            </div>
+    // eslint-disable-next-line react/jsx-no-useless-fragment
+    <>
+      {programProgressPage ? (
+        <>
+          {subscriptionPlan && (
+            <SubscriptionExpirationWarningModal
+              isSubscriptionExpiringWarningModalOpen={isSubscriptionExpiringWarningModalOpen}
+              onSubscriptionExpiringWarningModalClose={onSubscriptionExpiringWarningModalClose}
+            />
           )}
-          cardClassNames={className}
-        >
-          {
-            subscriptionPlan ? (
-              <>
-                {subscriptionPlan.daysUntilExpiration > SUBSCRIPTION_EXPIRED
-                  ? SUBSCRIPTION_ACTIVE_DATE_PREFIX : SUBSCRIPTION_EXPIRED_DATE_PREFIX}
-                {' '}<span className="font-weight-bold">{moment(subscriptionPlan.expirationDate).format('MMMM Do, YYYY')}</span>
-              </>
-            ) : <span>{LICENSE_REQUESTED_NOTICE}</span>
-          }
-        </SidebarCard>
-      </>
-    )
-      : (
-        <SidebarCard
-          title={(
-            <div className="d-flex align-items-start justify-content-between">
-              <div>{SUBSCRIPTION_SUMMARY_CARD_TITLE}</div>
-              <div>
-                <Badge
-                  variant={badgeVariantAndLabel.variant}
-                  className="ml-2"
-                  data-testid="subscription-status-badge"
-                >
-                  {badgeVariantAndLabel.label}
-                </Badge>
+          <SidebarCard
+            title={(
+              <div className="d-flex align-items-start justify-content-between">
+                <h3>{SUBSCRIPTION_SUMMARY_CARD_TITLE}</h3>
+                <div>
+                  <Badge
+                    variant={badgeVariantAndLabel.variant}
+                    className="ml-2"
+                    data-testid="subscription-status-badge"
+                  >
+                    {badgeVariantAndLabel.label}
+                  </Badge>
+                  {(subscriptionPlan && courseEndDate > subscriptionPlan.expirationDate) && <WarningFilled data-testid="warning-icon" className="ml-2" onClick={() => { subscriptionExpiringWarningModalOpen(); }} />}
+                </div>
               </div>
-            </div>
-          )}
-          cardClassNames={className}
-        >
-          {
-            subscriptionPlan ? (
-              <>
-                {subscriptionPlan.daysUntilExpiration > SUBSCRIPTION_EXPIRED
-                  ? SUBSCRIPTION_ACTIVE_DATE_PREFIX : SUBSCRIPTION_EXPIRED_DATE_PREFIX}
-                {' '}<span className="font-weight-bold">{moment(subscriptionPlan.expirationDate).format('MMMM Do, YYYY')}</span>
-              </>
-            ) : <span>{LICENSE_REQUESTED_NOTICE}</span>
-          }
-        </SidebarCard>
+            )}
+            cardClassNames={className}
+          >
+            {
+              subscriptionPlan ? (
+                <>
+                  {subscriptionPlan.daysUntilExpiration > SUBSCRIPTION_EXPIRED
+                    ? SUBSCRIPTION_ACTIVE_DATE_PREFIX : SUBSCRIPTION_EXPIRED_DATE_PREFIX}
+                  {' '}<span className="font-weight-bold">{moment(subscriptionPlan.expirationDate).format('MMMM Do, YYYY')}</span>
+                </>
+              ) : <span>{LICENSE_REQUESTED_NOTICE}</span>
+            }
+          </SidebarCard>
+        </>
       )
+        : (
+          <SidebarCard
+            title={(
+              <div className="d-flex align-items-start justify-content-between">
+                <div>{SUBSCRIPTION_SUMMARY_CARD_TITLE}</div>
+                <div>
+                  <Badge
+                    variant={badgeVariantAndLabel.variant}
+                    className="ml-2"
+                    data-testid="subscription-status-badge"
+                  >
+                    {badgeVariantAndLabel.label}
+                  </Badge>
+                </div>
+              </div>
+            )}
+            cardClassNames={className}
+          >
+            {
+              subscriptionPlan ? (
+                <>
+                  {subscriptionPlan.daysUntilExpiration > SUBSCRIPTION_EXPIRED
+                    ? SUBSCRIPTION_ACTIVE_DATE_PREFIX : SUBSCRIPTION_EXPIRED_DATE_PREFIX}
+                  {' '}<span className="font-weight-bold">{moment(subscriptionPlan.expirationDate).format('MMMM Do, YYYY')}</span>
+                </>
+              ) : <span>{LICENSE_REQUESTED_NOTICE}</span>
+            }
+          </SidebarCard>
+        )}
+    </>
   );
 }
 
diff --git a/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx b/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx
index 943f464ecf..4438a3f59d 100644
--- a/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx
+++ b/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx
@@ -58,7 +58,10 @@ function ExecutiveEducation2UPage() {
       <h2>
         {isLoading ? (
           <Skeleton containerTestId="loading-skeleton-page-title" />
-        ) : (pageTitle)}
+        ) : (
+          // eslint-disable-next-line react/jsx-no-useless-fragment
+          <>{pageTitle}</>
+        )}
       </h2>
       <p>
         {(isLoading || !contentMetadata) ? (
diff --git a/src/components/program/ProgramHeader.jsx b/src/components/program/ProgramHeader.jsx
index 0d31ca9210..f53c081419 100644
--- a/src/components/program/ProgramHeader.jsx
+++ b/src/components/program/ProgramHeader.jsx
@@ -67,28 +67,31 @@ function ProgramHeader() {
   }
 
   return (
-    subjectSlug
-      ? (
-        <Parallax
-          blur={0}
-          bgImage={backgroundImage}
-          bgImageAlt=""
-          strength={600}
-        >
-          <header className="program-header">
-            <div className="container mw-lg program-header-container">
-              <div className="header-breadcrumbs ml-2">
-                <Breadcrumb
-                  links={links}
-                  activeLabel={prependProgramOrganizationsToTitle()}
-                />
+    // eslint-disable-next-line react/jsx-no-useless-fragment
+    <>
+      {subjectSlug
+        ? (
+          <Parallax
+            blur={0}
+            bgImage={backgroundImage}
+            bgImageAlt=""
+            strength={600}
+          >
+            <header className="program-header">
+              <div className="container mw-lg program-header-container">
+                <div className="header-breadcrumbs ml-2">
+                  <Breadcrumb
+                    links={links}
+                    activeLabel={prependProgramOrganizationsToTitle()}
+                  />
+                </div>
+                <h1 className="display-3">{marketingHook}</h1>
               </div>
-              <h1 className="display-3">{marketingHook}</h1>
-            </div>
-          </header>
-        </Parallax>
-      )
-      : ''
+            </header>
+          </Parallax>
+        )
+        : ''}
+    </>
   );
 }
 
diff --git a/src/components/search/SearchCourseCard.jsx b/src/components/search/SearchCourseCard.jsx
index f5f8473493..f151db0744 100644
--- a/src/components/search/SearchCourseCard.jsx
+++ b/src/components/search/SearchCourseCard.jsx
@@ -107,13 +107,16 @@ function SearchCourseCard({ hit, isLoading }) {
         <Card.Section
           className="py-3"
         >
-          {course.partners?.length > 0 && (
-            <p className="partner text-muted m-0">
-              <Truncate lines={1} trimWhitespace>
-                {course.partners.map(partner => partner.name).join(', ')}
-              </Truncate>
-            </p>
-          )}
+          {/* eslint-disable-next-line react/jsx-no-useless-fragment */}
+          <>
+            {course.partners?.length > 0 && (
+              <p className="partner text-muted m-0">
+                <Truncate lines={1} trimWhitespace>
+                  {course.partners.map(partner => partner.name).join(', ')}
+                </Truncate>
+              </p>
+            )}
+          </>
         </Card.Section>
 
         <Card.Footer textElement={
diff --git a/src/components/search/SearchProgramCard.jsx b/src/components/search/SearchProgramCard.jsx
index 00e6eee3b3..4ebe5c1a8c 100644
--- a/src/components/search/SearchProgramCard.jsx
+++ b/src/components/search/SearchProgramCard.jsx
@@ -1,3 +1,4 @@
+/* eslint-disable react/jsx-no-useless-fragment */
 import React, { useContext, useMemo } from 'react';
 import PropTypes from 'prop-types';
 import Truncate from 'react-truncate';
@@ -27,10 +28,10 @@ export const ProgramType = ({ type }) => {
       programTypeToDisplay = <>Master&apos;s Degree Program</>;
       break;
     case 'Professional Certificate':
-      programTypeToDisplay = type;
+      programTypeToDisplay = <>{type}</>;
       break;
     default:
-      programTypeToDisplay = type;
+      programTypeToDisplay = <>{type}</>;
   }
 
   return programTypeToDisplay;
diff --git a/src/components/skills-quiz/CourseCard.jsx b/src/components/skills-quiz/CourseCard.jsx
index f31f77816d..4cf02eeb34 100644
--- a/src/components/skills-quiz/CourseCard.jsx
+++ b/src/components/skills-quiz/CourseCard.jsx
@@ -1,3 +1,4 @@
+/* eslint-disable react/jsx-no-useless-fragment */
 import React, { useContext, useMemo } from 'react';
 import { Badge, Card } from '@edx/paragon';
 import { Link } from 'react-router-dom';
@@ -88,28 +89,30 @@ function CourseCard({
         />
 
         <Card.Section className="py-1">
-          {course.skillNames?.length > 0 && (
-            <div className="mb-2">
-              {getCommonSkills(
-                course,
-                allSkills,
-                MAX_VISIBLE_SKILLS_COURSE,
-              )
-                .map((skill) => (
-                  <Badge
-                    key={skill}
-                    className="skill-badge"
-                    variant="light"
-                  >
-                    {shortenString(
-                      skill,
-                      SKILL_NAME_CUTOFF_LIMIT,
-                      ELLIPSIS_STR,
-                    )}
-                  </Badge>
-                ))}
-            </div>
-          )}
+          <>
+            {course.skillNames?.length > 0 && (
+              <div className="mb-2">
+                {getCommonSkills(
+                  course,
+                  allSkills,
+                  MAX_VISIBLE_SKILLS_COURSE,
+                )
+                  .map((skill) => (
+                    <Badge
+                      key={skill}
+                      className="skill-badge"
+                      variant="light"
+                    >
+                      {shortenString(
+                        skill,
+                        SKILL_NAME_CUTOFF_LIMIT,
+                        ELLIPSIS_STR,
+                      )}
+                    </Badge>
+                  ))}
+              </div>
+            )}
+          </>
         </Card.Section>
       </Card>
     );
diff --git a/src/components/skills-quiz/JobCardComponent.jsx b/src/components/skills-quiz/JobCardComponent.jsx
index c2bbc6dbc9..4db0e6fda5 100644
--- a/src/components/skills-quiz/JobCardComponent.jsx
+++ b/src/components/skills-quiz/JobCardComponent.jsx
@@ -35,21 +35,24 @@ function JobCardComponent({ jobs, isLoading }) {
               {isLoading ? (
                 <Skeleton duration={0} data-testid="job-content-loading" />
               ) : (
-                !hideLaborMarketData
-                  && (
-                    <div className="text-gray-700">
-                      <p className="m-0 medium-font">
-                        <span style={{ fontWeight: 700 }}>Median U.S. Salary: </span>
-                        {job.job_postings?.length > 0 ? `$${ formatStringAsNumber(job.job_postings[0].median_salary)}`
-                          : NOT_AVAILABLE }
-                      </p>
-                      <p className="m-0 medium-font">
-                        <span style={{ fontWeight: 700 }}>Job Postings: </span>
-                        {job.job_postings?.length > 0 ? formatStringAsNumber(job.job_postings[0].unique_postings)
-                          : NOT_AVAILABLE }
-                      </p>
-                    </div>
-                  )
+                // eslint-disable-next-line react/jsx-no-useless-fragment
+                <>
+                  {!hideLaborMarketData
+                   && (
+                     <div className="text-gray-700">
+                       <p className="m-0 medium-font">
+                         <span style={{ fontWeight: 700 }}>Median U.S. Salary: </span>
+                         {job.job_postings?.length > 0 ? `$${ formatStringAsNumber(job.job_postings[0].median_salary)}`
+                           : NOT_AVAILABLE }
+                       </p>
+                       <p className="m-0 medium-font">
+                         <span style={{ fontWeight: 700 }}>Job Postings: </span>
+                         {job.job_postings?.length > 0 ? formatStringAsNumber(job.job_postings[0].unique_postings)
+                           : NOT_AVAILABLE }
+                       </p>
+                     </div>
+                   )}
+                </>
               )}
             </Card.Section>
           </Card>
diff --git a/src/components/skills-quiz/SearchProgramCard.jsx b/src/components/skills-quiz/SearchProgramCard.jsx
index 9c4b7b35ae..69ae036a50 100644
--- a/src/components/skills-quiz/SearchProgramCard.jsx
+++ b/src/components/skills-quiz/SearchProgramCard.jsx
@@ -1,3 +1,4 @@
+/* eslint-disable react/jsx-no-useless-fragment */
 import React, {
   useContext, useMemo, useState, useEffect,
 } from 'react';
@@ -217,19 +218,21 @@ function SearchProgramCard({ index }) {
         />
 
         <Card.Section className="py-1">
-          {program.skillNames?.length > 0 && (
-            <div className="mb-2 d-inline">
-              {getCommonSkills(program, selectedJobSkills, MAX_VISIBLE_SKILLS_PROGRAM).map((skill) => (
-                <Badge
-                  key={skill}
-                  className="skill-badge"
-                  variant="light"
-                >
-                  { shortenString(skill, SKILL_NAME_CUTOFF_LIMIT, ELLIPSIS_STR) }
-                </Badge>
-              ))}
-            </div>
-          )}
+          <>
+            {program.skillNames?.length > 0 && (
+              <div className="mb-2 d-inline">
+                {getCommonSkills(program, selectedJobSkills, MAX_VISIBLE_SKILLS_PROGRAM).map((skill) => (
+                  <Badge
+                    key={skill}
+                    className="skill-badge"
+                    variant="light"
+                  >
+                    { shortenString(skill, SKILL_NAME_CUTOFF_LIMIT, ELLIPSIS_STR) }
+                  </Badge>
+                ))}
+              </div>
+            )}
+          </>
         </Card.Section>
 
         <Card.Section className="py-1">
diff --git a/src/components/skills-quiz/__mocks__/react-instantsearch-dom.jsx b/src/components/skills-quiz/__mocks__/react-instantsearch-dom.jsx
index 43d8f2c1e5..8098246355 100644
--- a/src/components/skills-quiz/__mocks__/react-instantsearch-dom.jsx
+++ b/src/components/skills-quiz/__mocks__/react-instantsearch-dom.jsx
@@ -1,3 +1,4 @@
+/* eslint-disable react/jsx-no-useless-fragment */
 /* eslint-disable object-curly-newline */
 /* eslint-disable react/prop-types */
 // eslint-disable-next-line import/no-import-module-exports
@@ -61,7 +62,7 @@ MockReactInstantSearch.connectRefinementList = Component => function (props) {
 };
 
 MockReactInstantSearch.InstantSearch = function ({ children }) {
-  return children;
+  return <>{children}</>;
 };
 MockReactInstantSearch.Configure = function () {
   return <div>CONFIGURED</div>;
@@ -70,7 +71,7 @@ MockReactInstantSearch.Hits = function () {
   return <div>HIT</div>;
 };
 MockReactInstantSearch.Index = function ({ children }) {
-  return children;
+  return <>{children}</>;
 };
 
 // It is necessary to export this way, or tests not using the mock will fail

From 656ef07faa4eb2e213060557066c7c845faddc08 Mon Sep 17 00:00:00 2001
From: Bilal Qamar <59555732+BilalQamar95@users.noreply.github.com>
Date: Mon, 22 Aug 2022 17:14:22 +0500
Subject: [PATCH 07/13] refactor: resolved eslint issues post master branch
 merge

---
 src/components/error-page/ErrorPage.jsx       | 38 ++++++++++---------
 .../error-page/ErrorPageContent.jsx           | 12 +++---
 .../error-page/ErrorPageSubtitle.jsx          |  6 +--
 src/components/error-page/ErrorPageTitle.jsx  |  6 +--
 .../ExecutiveEducation2UError.jsx             |  4 +-
 .../ExecutiveEducation2UPage.jsx              |  1 +
 .../FormSectionHeading.jsx                    |  6 +--
 7 files changed, 39 insertions(+), 34 deletions(-)

diff --git a/src/components/error-page/ErrorPage.jsx b/src/components/error-page/ErrorPage.jsx
index 1db97784dd..8e72e08ec5 100644
--- a/src/components/error-page/ErrorPage.jsx
+++ b/src/components/error-page/ErrorPage.jsx
@@ -15,29 +15,31 @@ import ErrorPageContent from './ErrorPageContent';
  * a header, error alert, and a footer.
  */
 
-const ErrorPage = ({
+function ErrorPage({
   title,
   subtitle,
   showSiteHeader,
   showSiteFooter,
   children,
-}) => (
-  <>
-    {showSiteHeader && <ErrorPageHeader />}
-    <main id="content">
-      <ErrorPageContent>
-        <Col xs={12} lg={{ span: 10, offset: 1 }}>
-          <ErrorPageTitle>{title}</ErrorPageTitle>
-          {subtitle && (
-            <ErrorPageSubtitle>{subtitle}</ErrorPageSubtitle>
-          )}
-          {children}
-        </Col>
-      </ErrorPageContent>
-    </main>
-    {showSiteFooter && <SiteFooter />}
-  </>
-);
+}) {
+  return (
+    <>
+      {showSiteHeader && <ErrorPageHeader />}
+      <main id="content">
+        <ErrorPageContent>
+          <Col xs={12} lg={{ span: 10, offset: 1 }}>
+            <ErrorPageTitle>{title}</ErrorPageTitle>
+            {subtitle && (
+              <ErrorPageSubtitle>{subtitle}</ErrorPageSubtitle>
+            )}
+            {children}
+          </Col>
+        </ErrorPageContent>
+      </main>
+      {showSiteFooter && <SiteFooter />}
+    </>
+  );
+}
 
 ErrorPage.Content = ErrorPageContent;
 ErrorPage.Title = ErrorPageTitle;
diff --git a/src/components/error-page/ErrorPageContent.jsx b/src/components/error-page/ErrorPageContent.jsx
index 1d1b9fcbf6..2307353091 100644
--- a/src/components/error-page/ErrorPageContent.jsx
+++ b/src/components/error-page/ErrorPageContent.jsx
@@ -10,11 +10,13 @@ import classNames from 'classnames';
  * Different components can be passed for a greater level of customization
  * for error pages.
  */
-const ErrorPageContent = ({ children, className }) => (
-  <Container size="lg" className={classNames('error-page-container', className)}>
-    {children}
-  </Container>
-);
+function ErrorPageContent({ children, className }) {
+  return (
+    <Container size="lg" className={classNames('error-page-container', className)}>
+      {children}
+    </Container>
+  );
+}
 
 ErrorPageContent.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/error-page/ErrorPageSubtitle.jsx b/src/components/error-page/ErrorPageSubtitle.jsx
index 045dddcdf6..50434171c0 100644
--- a/src/components/error-page/ErrorPageSubtitle.jsx
+++ b/src/components/error-page/ErrorPageSubtitle.jsx
@@ -4,9 +4,9 @@ import PropTypes from 'prop-types';
  * Individual subtitle component of ErrorPage component parent.
  * Includes default styling for error pages.
  */
-const ErrorPageSubtitle = ({ children }) => (
-  <h3 className="mb-4.5 text-gray-700">{children}</h3>
-);
+function ErrorPageSubtitle({ children }) {
+  return <h3 className="mb-4.5 text-gray-700">{children}</h3>;
+}
 
 ErrorPageSubtitle.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/error-page/ErrorPageTitle.jsx b/src/components/error-page/ErrorPageTitle.jsx
index ef33830f3a..3f55894c21 100644
--- a/src/components/error-page/ErrorPageTitle.jsx
+++ b/src/components/error-page/ErrorPageTitle.jsx
@@ -4,9 +4,9 @@ import PropTypes from 'prop-types';
  * Individual title component of ErrorPage component parent.
  * Includes default styling for error pages.
  */
-const ErrorPageTitle = ({ children }) => (
-  <h2 className="text-danger mb-4">{children}</h2>
-);
+function ErrorPageTitle({ children }) {
+  return <h2 className="text-danger mb-4">{children}</h2>;
+}
 
 ErrorPageTitle.propTypes = {
   children: PropTypes.node,
diff --git a/src/components/executive-education-2u/ExecutiveEducation2UError.jsx b/src/components/executive-education-2u/ExecutiveEducation2UError.jsx
index 90c96445df..fd1bd2347e 100644
--- a/src/components/executive-education-2u/ExecutiveEducation2UError.jsx
+++ b/src/components/executive-education-2u/ExecutiveEducation2UError.jsx
@@ -6,7 +6,7 @@ import {
   ErrorPage,
 } from '../error-page';
 
-const ExecutiveEducation2UError = ({ failureReason, httpReferrer }) => {
+function ExecutiveEducation2UError({ failureReason, httpReferrer }) {
   const createExecutiveEducationFailureMessage = (failureCode) => {
     const failureCodeMessages = {
       no_offer_available: 'No offer is available to cover this course.',
@@ -37,7 +37,7 @@ const ExecutiveEducation2UError = ({ failureReason, httpReferrer }) => {
       </Row>
     </ErrorPage.Content>
   );
-};
+}
 
 ExecutiveEducation2UError.propTypes = {
   failureReason: PropTypes.string,
diff --git a/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx b/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx
index 470b6576e5..214f1a38d5 100644
--- a/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx
+++ b/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx
@@ -70,6 +70,7 @@ function ExecutiveEducation2UPage() {
             {isLoading ? (
               <Skeleton containerTestId="loading-skeleton-page-title" />
             ) : (
+              // eslint-disable-next-line react/jsx-no-useless-fragment
               <>{pageTitle}</>
             )}
           </h2>
diff --git a/src/components/executive-education-2u/FormSectionHeading.jsx b/src/components/executive-education-2u/FormSectionHeading.jsx
index ae1fd4abff..cca35d5a0a 100644
--- a/src/components/executive-education-2u/FormSectionHeading.jsx
+++ b/src/components/executive-education-2u/FormSectionHeading.jsx
@@ -1,9 +1,9 @@
 import React from 'react';
 import PropTypes from 'prop-types';
 
-const FormSectionHeading = ({ children }) => (
-  <h3 className="h4 mb-4">{children}</h3>
-);
+function FormSectionHeading({ children }) {
+  return <h3 className="h4 mb-4">{children}</h3>;
+}
 
 FormSectionHeading.propTypes = {
   children: PropTypes.node.isRequired,

From d31f1e3d28011a335dd1b938e927017bf1e6ec06 Mon Sep 17 00:00:00 2001
From: Bilal Qamar <59555732+BilalQamar95@users.noreply.github.com>
Date: Thu, 1 Sep 2022 14:26:47 +0500
Subject: [PATCH 08/13] refactor: resolved eslint issues after master branch
 merge

---
 src/components/course/EnrollModal.jsx         |  3 +-
 .../tests/ToEcomBasketPage.test.jsx           | 22 +++++-----
 .../tests/InProgressCourseCard.test.jsx       | 26 ++++++-----
 .../enterprise-user-subsidy/UserSubsidy.jsx   |  2 +-
 .../tests/UserSubsidy.test.jsx                |  8 ++--
 .../ExecutiveEducation2UError.jsx             |  2 +-
 .../ExecutiveEducation2UPage.test.jsx         | 30 +++++++------
 .../pathway-progress/PathwayProgressCard.jsx  |  6 +--
 .../PathwayProgressListingPage.jsx            | 44 +++++++++----------
 .../tests/PathwayProgressListingCard.test.jsx | 16 ++++---
 .../tests/PathwayProgressListingPage.test.jsx | 22 +++++-----
 .../program-progress/ProgramListingPage.jsx   | 30 ++++++-------
 .../ProgressCategoryBubbles.jsx               | 34 +++++++-------
 .../site-header/SiteHeaderLogos.jsx           |  4 +-
 .../site-header/SiteHeaderNavMenu.jsx         |  4 +-
 15 files changed, 132 insertions(+), 121 deletions(-)

diff --git a/src/components/course/EnrollModal.jsx b/src/components/course/EnrollModal.jsx
index d7c17b4f77..48cb0450c2 100644
--- a/src/components/course/EnrollModal.jsx
+++ b/src/components/course/EnrollModal.jsx
@@ -43,7 +43,7 @@ function EnrollModal({
   userSubsidyApplicableToCourse,
   couponCodesCount,
   onEnroll,
-}) => {
+}) {
   const [isLoading, setIsLoading] = useState(false);
 
   const getModalTexts = () => {
@@ -93,6 +93,7 @@ function EnrollModal({
           href={enrollmentUrl}
           onClick={handleEnroll}
         >
+          { /* eslint-disable-next-line react/jsx-no-useless-fragment */ }
           <>
             {isLoading && <FontAwesomeIcon icon={faSpinner} alt="loading" className="fa-spin mr-2" />}
             {buttonText}
diff --git a/src/components/course/enrollment/tests/ToEcomBasketPage.test.jsx b/src/components/course/enrollment/tests/ToEcomBasketPage.test.jsx
index ab43d4445a..5d89cbe9c5 100644
--- a/src/components/course/enrollment/tests/ToEcomBasketPage.test.jsx
+++ b/src/components/course/enrollment/tests/ToEcomBasketPage.test.jsx
@@ -20,7 +20,7 @@ jest.mock('../../EnrollModal', () => ({
 
 jest.mock('../hooks');
 
-const ToEcomBasketPageWrapper = ({
+function ToEcomBasketPageWrapper({
   courseContextValue = {
     state: {
       activeCourseRun: {
@@ -32,15 +32,17 @@ const ToEcomBasketPageWrapper = ({
     courseEnrollmentsByStatus: {},
   },
   ...rest
-}) => (
-  <CourseContext.Provider value={courseContextValue}>
-    <CourseEnrollmentsContext.Provider value={CourseEnrollmentsContextVAlue}>
-      <ToEcomBasketPage
-        {...rest}
-      />,
-    </CourseEnrollmentsContext.Provider>
-  </CourseContext.Provider>
-);
+}) {
+  return (
+    <CourseContext.Provider value={courseContextValue}>
+      <CourseEnrollmentsContext.Provider value={CourseEnrollmentsContextVAlue}>
+        <ToEcomBasketPage
+          {...rest}
+        />,
+      </CourseEnrollmentsContext.Provider>
+    </CourseContext.Provider>
+  );
+}
 
 describe('<ToEcomBasketPage />', () => {
   it('should render <EnrollButtonCta /> and <EnrollModal />', () => {
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/tests/InProgressCourseCard.test.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/tests/InProgressCourseCard.test.jsx
index 7b6c090a17..7d7f9fc92d 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/tests/InProgressCourseCard.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/tests/InProgressCourseCard.test.jsx
@@ -26,7 +26,7 @@ const basicProps = {
   notifications: [],
 };
 
-const InProgressCourseCardWrapper = ({
+function InProgressCourseCardWrapper({
   appContextValue =
   {
     enterpriseConfig: {
@@ -48,17 +48,19 @@ const InProgressCourseCardWrapper = ({
     couponUpgradeUrl: undefined,
   },
   ...rest
-}) => (
-  <AppContext.Provider value={appContextValue}>
-    <UserSubsidyContext.Provider value={userSubsidyContextValue}>
-      <CourseEnrollmentsContext.Provider value={courseEnrollmentsContextValue}>
-        <UpgradeableCourseEnrollmentContext.Provider value={upgradeableCourseEnrollmentContextValue}>
-          <InProgressCourseCard {...rest} />
-        </UpgradeableCourseEnrollmentContext.Provider>
-      </CourseEnrollmentsContext.Provider>
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+}) {
+  return (
+    <AppContext.Provider value={appContextValue}>
+      <UserSubsidyContext.Provider value={userSubsidyContextValue}>
+        <CourseEnrollmentsContext.Provider value={courseEnrollmentsContextValue}>
+          <UpgradeableCourseEnrollmentContext.Provider value={upgradeableCourseEnrollmentContextValue}>
+            <InProgressCourseCard {...rest} />
+          </UpgradeableCourseEnrollmentContext.Provider>
+        </CourseEnrollmentsContext.Provider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 describe('<InProgressCourseCard />', () => {
   it('should not render upgrade course button if there is no couponUpgradeUrl', () => {
diff --git a/src/components/enterprise-user-subsidy/UserSubsidy.jsx b/src/components/enterprise-user-subsidy/UserSubsidy.jsx
index 8c5fc1d96c..2d840281c2 100644
--- a/src/components/enterprise-user-subsidy/UserSubsidy.jsx
+++ b/src/components/enterprise-user-subsidy/UserSubsidy.jsx
@@ -17,7 +17,7 @@ import { LOADING_SCREEN_READER_TEXT } from './data/constants';
 
 export const UserSubsidyContext = createContext();
 
-const UserSubsidy = ({ children }) => {
+function UserSubsidy({ children }) {
   const { enterpriseConfig, authenticatedUser } = useContext(AppContext);
 
   const [customerAgreementConfig, isLoadingCustomerAgreementConfig] = useCustomerAgreementData(enterpriseConfig.uuid);
diff --git a/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx b/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
index 7ba2ac6f5a..731eb64e70 100644
--- a/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
+++ b/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
@@ -66,8 +66,9 @@ function UserSubsidyWithAppContext({
   contextValue = {},
   authenticatedUser = TEST_USER,
   children,
-}) => (
+}) {
   <AppContext.Provider
+    // eslint-disable-next-line react/jsx-no-constructed-context-values
     value={{
       enterpriseConfig: {
         slug: TEST_ENTERPRISE_SLUG,
@@ -81,8 +82,9 @@ function UserSubsidyWithAppContext({
     <UserSubsidy>
       {children}
     </UserSubsidy>
-  </AppContext.Provider>
-);
+  </AppContext.Provider>;
+}
+
 /* eslint-enable react/prop-types */
 
 function SubscriptionLicenseConsumer() {
diff --git a/src/components/executive-education-2u/ExecutiveEducation2UError.jsx b/src/components/executive-education-2u/ExecutiveEducation2UError.jsx
index 3d46d89f11..35fb0dfa60 100644
--- a/src/components/executive-education-2u/ExecutiveEducation2UError.jsx
+++ b/src/components/executive-education-2u/ExecutiveEducation2UError.jsx
@@ -9,7 +9,7 @@ import {
   ErrorPage,
 } from '../error-page';
 
-const ExecutiveEducation2UError = ({ failureReason, httpReferrer }) => {
+function ExecutiveEducation2UError({ failureReason, httpReferrer }) {
   const { enterpriseConfig: { uuid: enterpriseId } } = useContext(AppContext);
 
   const createExecutiveEducationFailureMessage = (failureCode) => {
diff --git a/src/components/executive-education-2u/ExecutiveEducation2UPage.test.jsx b/src/components/executive-education-2u/ExecutiveEducation2UPage.test.jsx
index fe6b583347..2bfc34ed70 100644
--- a/src/components/executive-education-2u/ExecutiveEducation2UPage.test.jsx
+++ b/src/components/executive-education-2u/ExecutiveEducation2UPage.test.jsx
@@ -19,20 +19,22 @@ jest.mock('@edx/frontend-platform/logging', () => ({
   ...jest.requireActual('@edx/frontend-platform/logging'),
   logError: jest.fn(),
 }));
-jest.mock('./UserEnrollmentForm', () => ({ productSKU, onCheckoutSuccess }) => (
-  <div data-testid="user-enrollment-form-component">
-    <div>{productSKU}</div>
-    <button
-      type="button"
-      onClick={() => {
-        const sampleResponse = { receiptPageUrl: mockReceiptPageUrl };
-        onCheckoutSuccess(sampleResponse);
-      }}
-    >
-      Mock submit enrollment form
-    </button>
-  </div>
-));
+jest.mock('./UserEnrollmentForm', () => function ({ productSKU, onCheckoutSuccess }) {
+  return (
+    <div data-testid="user-enrollment-form-component">
+      <div>{productSKU}</div>
+      <button
+        type="button"
+        onClick={() => {
+          const sampleResponse = { receiptPageUrl: mockReceiptPageUrl };
+          onCheckoutSuccess(sampleResponse);
+        }}
+      >
+        Mock submit enrollment form
+      </button>
+    </div>
+  );
+});
 const locationAssignMock = jest.fn();
 
 const enterpriseSlug = 'test-enterprise-slug';
diff --git a/src/components/pathway-progress/PathwayProgressCard.jsx b/src/components/pathway-progress/PathwayProgressCard.jsx
index ae0eb43af6..c60d1ddd97 100644
--- a/src/components/pathway-progress/PathwayProgressCard.jsx
+++ b/src/components/pathway-progress/PathwayProgressCard.jsx
@@ -7,7 +7,7 @@ import { AppContext } from '@edx/frontend-platform/react';
 import { getProgressFromSteps } from './data/utils';
 import { ProgressCategoryBubbles } from '../progress-category-bubbles';
 
-const PathwayProgressCard = ({ pathway: { learnerPathwayProgress } }) => {
+function PathwayProgressCard({ pathway: { learnerPathwayProgress } }) {
   const progress = getProgressFromSteps(learnerPathwayProgress.steps);
   const history = useHistory();
   const { enterpriseConfig: { slug } } = useContext(AppContext);
@@ -44,12 +44,12 @@ const PathwayProgressCard = ({ pathway: { learnerPathwayProgress } }) => {
       </Card.Section>
     </Card>
   );
-};
+}
 
 PathwayProgressCard.propTypes = {
   pathway: PropTypes.shape({
     learnerPathwayProgress: PropTypes.shape({
-      steps: PropTypes.array.isRequired,
+      steps: PropTypes.shape([]).isRequired,
       title: PropTypes.string.isRequired,
       uuid: PropTypes.string.isRequired,
       cardImage: PropTypes.string,
diff --git a/src/components/pathway-progress/PathwayProgressListingPage.jsx b/src/components/pathway-progress/PathwayProgressListingPage.jsx
index 2f4374ecb1..9ec2eb674f 100644
--- a/src/components/pathway-progress/PathwayProgressListingPage.jsx
+++ b/src/components/pathway-progress/PathwayProgressListingPage.jsx
@@ -20,7 +20,7 @@ import PathwayProgressCard from './PathwayProgressCard';
 
 import { CONTENT_TYPE_PATHWAY } from '../search/constants';
 
-const PathwayProgressListingPage = () => {
+function PathwayProgressListingPage() {
   const { enterpriseConfig } = useContext(AppContext);
 
   const [pathwayProgressData, fetchError] = useInProgressPathwaysData(enterpriseConfig.uuid);
@@ -38,28 +38,26 @@ const PathwayProgressListingPage = () => {
   }
 
   return (
-    <>
-      <Container size="lg" className="py-5 w-100">
-        <Row>
-          {pathwayProgressData?.length > 0 ? (
-            pathwayProgressData.map((pathway) => (
-              <PathwayProgressCard
-                pathway={pathway}
-                key={pathway.learnerPathwayProgress.uuid}
-              />
-            ))
-          ) : (
-            <div className="no-content-message">
-              <h2>{NO_PATHWAYS_ERROR_MESSAGE}</h2>
-              <Link to={`/${enterpriseConfig.slug}/search?content_type=${CONTENT_TYPE_PATHWAY}`}>
-                <Button variant="primary" iconBefore={Search} className="mt-2">Explore pathways</Button>
-              </Link>
-            </div>
-          )}
-        </Row>
-      </Container>
-    </>
+    <Container size="lg" className="py-5 w-100">
+      <Row>
+        {pathwayProgressData?.length > 0 ? (
+          pathwayProgressData.map((pathway) => (
+            <PathwayProgressCard
+              pathway={pathway}
+              key={pathway.learnerPathwayProgress.uuid}
+            />
+          ))
+        ) : (
+          <div className="no-content-message">
+            <h2>{NO_PATHWAYS_ERROR_MESSAGE}</h2>
+            <Link to={`/${enterpriseConfig.slug}/search?content_type=${CONTENT_TYPE_PATHWAY}`}>
+              <Button variant="primary" iconBefore={Search} className="mt-2">Explore pathways</Button>
+            </Link>
+          </div>
+        )}
+      </Row>
+    </Container>
   );
-};
+}
 
 export default PathwayProgressListingPage;
diff --git a/src/components/pathway-progress/tests/PathwayProgressListingCard.test.jsx b/src/components/pathway-progress/tests/PathwayProgressListingCard.test.jsx
index 5477ff5359..813010dfd2 100644
--- a/src/components/pathway-progress/tests/PathwayProgressListingCard.test.jsx
+++ b/src/components/pathway-progress/tests/PathwayProgressListingCard.test.jsx
@@ -21,13 +21,15 @@ jest.mock('react-router-dom', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-const PathwayProgressListingCardWithContext = ({ initialAppState, initialUserSubsidyState, pathwayData }) => (
-  <AppContext.Provider value={initialAppState}>
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <PathwayProgressCard pathway={pathwayData} />
-    </UserSubsidyContext.Provider>
-  </AppContext.Provider>
-);
+function PathwayProgressListingCardWithContext({ initialAppState, initialUserSubsidyState, pathwayData }) {
+  return (
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <PathwayProgressCard pathway={pathwayData} />
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 const appState = {
   enterpriseConfig: {
diff --git a/src/components/pathway-progress/tests/PathwayProgressListingPage.test.jsx b/src/components/pathway-progress/tests/PathwayProgressListingPage.test.jsx
index e2de15939d..4f31545e92 100644
--- a/src/components/pathway-progress/tests/PathwayProgressListingPage.test.jsx
+++ b/src/components/pathway-progress/tests/PathwayProgressListingPage.test.jsx
@@ -26,18 +26,20 @@ jest.mock('../data/hooks', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-const PathwayProgressListingWithContext = ({
+function PathwayProgressListingWithContext({
   initialAppState = {},
   initialUserSubsidyState = {},
-}) => (
-  <IntlProvider locale="en">
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <PathwayProgressListingPage />
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  </IntlProvider>
-);
+}) {
+  return (
+    <IntlProvider locale="en">
+      <AppContext.Provider value={initialAppState}>
+        <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+          <PathwayProgressListingPage />
+        </UserSubsidyContext.Provider>
+      </AppContext.Provider>
+    </IntlProvider>
+  );
+}
 
 describe('<PathwayProgressListingPage />', () => {
   const initialAppState = {
diff --git a/src/components/program-progress/ProgramListingPage.jsx b/src/components/program-progress/ProgramListingPage.jsx
index 20b1fc97d3..630acec538 100644
--- a/src/components/program-progress/ProgramListingPage.jsx
+++ b/src/components/program-progress/ProgramListingPage.jsx
@@ -38,22 +38,20 @@ function ProgramListingPage() {
   }
 
   return (
-    <>
-      <Container size="lg" className="py-5 w-100">
-        <Row>
-          {learnerProgramsData.length > 0 ? (
-            learnerProgramsData.map((program) => <ProgramListingCard program={program} key={program.title} />)
-          ) : (
-            <div className="no-content-message">
-              <h2>{NO_PROGRAMS_ERROR_MESSAGE}</h2>
-              <Link to={`/${enterpriseConfig.slug}/search?content_type=${CONTENT_TYPE_PROGRAM}`}>
-                <Button variant="primary" iconBefore={Search} className="mt-2">Explore programs</Button>
-              </Link>
-            </div>
-          )}
-        </Row>
-      </Container>
-    </>
+    <Container size="lg" className="py-5 w-100">
+      <Row>
+        {learnerProgramsData.length > 0 ? (
+          learnerProgramsData.map((program) => <ProgramListingCard program={program} key={program.title} />)
+        ) : (
+          <div className="no-content-message">
+            <h2>{NO_PROGRAMS_ERROR_MESSAGE}</h2>
+            <Link to={`/${enterpriseConfig.slug}/search?content_type=${CONTENT_TYPE_PROGRAM}`}>
+              <Button variant="primary" iconBefore={Search} className="mt-2">Explore programs</Button>
+            </Link>
+          </div>
+        )}
+      </Row>
+    </Container>
   );
 }
 
diff --git a/src/components/progress-category-bubbles/ProgressCategoryBubbles.jsx b/src/components/progress-category-bubbles/ProgressCategoryBubbles.jsx
index 0f6a9891c6..58c7c47102 100644
--- a/src/components/progress-category-bubbles/ProgressCategoryBubbles.jsx
+++ b/src/components/progress-category-bubbles/ProgressCategoryBubbles.jsx
@@ -3,24 +3,26 @@ import { Bubble, Stack } from '@edx/paragon';
 import PropTypes from 'prop-types';
 import './styles/index.scss';
 
-const ProgressCategoryBubbles = ({ notStarted, inProgress, completed }) => (
-  <Stack direction="horizontal" gap={2}>
-    <Bubble className="remaining-courses" data-testid="remaining-count">
-      {notStarted}
-    </Bubble>
-    <div>Remaining</div>
+function ProgressCategoryBubbles({ notStarted, inProgress, completed }) {
+  return (
+    <Stack direction="horizontal" gap={2}>
+      <Bubble className="remaining-courses" data-testid="remaining-count">
+        {notStarted}
+      </Bubble>
+      <div>Remaining</div>
 
-    <Bubble className="in-progress-courses" data-testid="in-progress-count">
-      {inProgress}
-    </Bubble>
-    <div>In progress</div>
+      <Bubble className="in-progress-courses" data-testid="in-progress-count">
+        {inProgress}
+      </Bubble>
+      <div>In progress</div>
 
-    <Bubble className="completed-courses" data-testid="completed-count">
-      {completed}
-    </Bubble>
-    <div>Completed</div>
-  </Stack>
-);
+      <Bubble className="completed-courses" data-testid="completed-count">
+        {completed}
+      </Bubble>
+      <div>Completed</div>
+    </Stack>
+  );
+}
 
 ProgressCategoryBubbles.propTypes = {
   notStarted: PropTypes.number.isRequired,
diff --git a/src/components/site-header/SiteHeaderLogos.jsx b/src/components/site-header/SiteHeaderLogos.jsx
index a969565b12..71dece16e7 100644
--- a/src/components/site-header/SiteHeaderLogos.jsx
+++ b/src/components/site-header/SiteHeaderLogos.jsx
@@ -5,7 +5,7 @@ import { AppContext } from '@edx/frontend-platform/react';
 
 import GetSmarterLogo from '../../assets/icons/getsmarter-logo.svg';
 
-const SiteHeaderLogos = () => {
+function SiteHeaderLogos() {
   const { enterpriseConfig } = useContext(AppContext);
   const { pathname } = useLocation();
   const isInExecutiveEducationPath = pathname.includes('executive-education-2u');
@@ -42,6 +42,6 @@ const SiteHeaderLogos = () => {
       )}
     </>
   );
-};
+}
 
 export default SiteHeaderLogos;
diff --git a/src/components/site-header/SiteHeaderNavMenu.jsx b/src/components/site-header/SiteHeaderNavMenu.jsx
index a4843b10f9..aaa54078d6 100644
--- a/src/components/site-header/SiteHeaderNavMenu.jsx
+++ b/src/components/site-header/SiteHeaderNavMenu.jsx
@@ -2,7 +2,7 @@ import React, { useContext } from 'react';
 import { NavLink } from 'react-router-dom';
 import { AppContext } from '@edx/frontend-platform/react';
 
-const SiteHeaderNavMenu = () => {
+function SiteHeaderNavMenu() {
   const { enterpriseConfig } = useContext(AppContext);
   const mainMenuLinkClassName = 'nav-link';
 
@@ -20,6 +20,6 @@ const SiteHeaderNavMenu = () => {
       </NavLink>
     </>
   );
-};
+}
 
 export default SiteHeaderNavMenu;

From b0a366483ad7204e55f3ec63716a29fe9f1e176b Mon Sep 17 00:00:00 2001
From: Bilal Qamar <59555732+BilalQamar95@users.noreply.github.com>
Date: Thu, 1 Sep 2022 14:45:02 +0500
Subject: [PATCH 09/13] refactor: resolved failing test cases

---
 .../tests/UserSubsidy.test.jsx                | 35 ++++++++++---------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx b/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
index 731eb64e70..9fb85793dc 100644
--- a/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
+++ b/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
@@ -67,24 +67,25 @@ function UserSubsidyWithAppContext({
   authenticatedUser = TEST_USER,
   children,
 }) {
-  <AppContext.Provider
-    // eslint-disable-next-line react/jsx-no-constructed-context-values
-    value={{
-      enterpriseConfig: {
-        slug: TEST_ENTERPRISE_SLUG,
-        uuid: TEST_ENTERPRISE_UUID,
-        ...enterpriseConfig,
-      },
-      authenticatedUser,
-      ...contextValue,
-    }}
-  >
-    <UserSubsidy>
-      {children}
-    </UserSubsidy>
-  </AppContext.Provider>;
+  return (
+    <AppContext.Provider
+      // eslint-disable-next-line react/jsx-no-constructed-context-values
+      value={{
+        enterpriseConfig: {
+          slug: TEST_ENTERPRISE_SLUG,
+          uuid: TEST_ENTERPRISE_UUID,
+          ...enterpriseConfig,
+        },
+        authenticatedUser,
+        ...contextValue,
+      }}
+    >
+      <UserSubsidy>
+        {children}
+      </UserSubsidy>
+    </AppContext.Provider>
+  );
 }
-
 /* eslint-enable react/prop-types */
 
 function SubscriptionLicenseConsumer() {

From b9f3e238eb69edd4b940b401c4d4e2138f7eb2d8 Mon Sep 17 00:00:00 2001
From: Bilal Qamar <59555732+BilalQamar95@users.noreply.github.com>
Date: Mon, 5 Sep 2022 16:44:31 +0500
Subject: [PATCH 10/13] refactor: implemented suggested changes

---
 .eslintrc.js                                  |  3 ++
 package-lock.json                             |  2 +-
 package.json                                  |  2 +-
 src/components/Toasts/ToastsProvider.jsx      |  7 ++---
 src/components/app/App.jsx                    |  2 +-
 src/components/app/LoginRefresh.jsx           | 10 +++++--
 src/components/app/LoginRefresh.test.jsx      | 16 +++++------
 src/components/course/data/hooks.jsx          |  6 ++--
 .../tests/LicenseRequestedAlert.test.jsx      | 28 +++++++++----------
 .../tests/SubsidyRequestButton.test.jsx       | 12 ++------
 .../mark-complete-modal/MarkCompleteModal.jsx | 14 +++++-----
 .../tests/MarkCompleteModal.test.jsx          |  1 -
 .../MoveToInProgressModal.jsx                 | 14 +++++-----
 .../tests/BaseCourseCard.test.jsx             |  1 -
 .../unenroll/UnenrollModal.test.jsx           |  1 -
 .../tests/CourseEnrollments.test.jsx          |  1 -
 .../tests/CourseSection.test.jsx              |  1 -
 .../tests/EnterpriseBanner.test.jsx           |  1 -
 .../EnterpriseOffersBalanceAlert.test.jsx     |  1 -
 .../tests/AutoActivateLicense.test.jsx        |  1 -
 .../tests/UserSubsidy.test.jsx                |  1 -
 .../tests/LicenseActivation.test.jsx          |  1 -
 .../tests/LicenseActivationPage.test.jsx      |  1 -
 src/components/notices-provider/index.js      |  3 +-
 src/components/pathway/data/utils.js          |  4 +--
 .../pathway/tests/PathwayModal.test.jsx       |  1 -
 .../pathway/tests/SearchPathwayCard.test.jsx  |  1 -
 .../ProgramPathwayOpportunity.jsx             |  2 +-
 .../program-progress/ProgramProgressPage.jsx  |  6 ++--
 src/components/search/SearchCourseCard.jsx    |  3 +-
 .../search/tests/SearchCourseCard.test.jsx    |  1 -
 .../search/tests/SearchProgramCard.test.jsx   |  1 -
 .../skills-quiz/SearchCurrentJobCard.jsx      |  6 ++--
 .../skills-quiz/SkillsContextProvider.jsx     |  5 ++--
 .../skills-quiz/SkillsQuizHeader.jsx          |  2 +-
 .../tests/SkillsQuizStepper.test.jsx          |  1 -
 36 files changed, 72 insertions(+), 91 deletions(-)

diff --git a/.eslintrc.js b/.eslintrc.js
index 5b2737cbbd..efb4e04ab4 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -13,5 +13,8 @@ config.ignorePatterns = ['module.config.js'];
 config.rules.indent = ['error', 2, { ignoredNodes: ['TemplateLiteral', 'SwitchCase'] }];
 config.rules['template-curly-spacing'] = 'off';
 config.rules['import/prefer-default-export'] = 'off';
+config.overrides = [{
+  files: ['*.test.jsx'], rules: { 'react/jsx-no-constructed-context-values': 'off' },
+}];
 
 module.exports = config;
diff --git a/package-lock.json b/package-lock.json
index 14d544124d..0accdab910 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -60,7 +60,7 @@
         "universal-cookie": "4.0.4"
       },
       "devDependencies": {
-        "@edx/frontend-build": "^12.0.3",
+        "@edx/frontend-build": "12.0.3",
         "@testing-library/jest-dom": "5.11.9",
         "@testing-library/react": "11.2.7",
         "@testing-library/react-hooks": "3.7.0",
diff --git a/package.json b/package.json
index fbd32fb65c..ad29a7e87c 100644
--- a/package.json
+++ b/package.json
@@ -55,7 +55,7 @@
     "universal-cookie": "4.0.4"
   },
   "devDependencies": {
-    "@edx/frontend-build": "^12.0.3",
+    "@edx/frontend-build": "12.0.3",
     "@testing-library/jest-dom": "5.11.9",
     "@testing-library/react": "11.2.7",
     "@testing-library/react-hooks": "3.7.0",
diff --git a/src/components/Toasts/ToastsProvider.jsx b/src/components/Toasts/ToastsProvider.jsx
index c349c681df..6d29c9c7f8 100644
--- a/src/components/Toasts/ToastsProvider.jsx
+++ b/src/components/Toasts/ToastsProvider.jsx
@@ -27,11 +27,10 @@ function ToastsProvider({ children }) {
     });
   }, [toasts]);
 
+  const contextValue = useMemo(() => ({ toasts, addToast, removeToast }), [removeToast, toasts]);
+
   return (
-    <ToastsContext.Provider value={
-      useMemo(() => ({ toasts, addToast, removeToast }), [removeToast, toasts])
-    }
-    >
+    <ToastsContext.Provider value={contextValue}>
       {children}
     </ToastsContext.Provider>
   );
diff --git a/src/components/app/App.jsx b/src/components/app/App.jsx
index 905af85513..ab305dc4d3 100644
--- a/src/components/app/App.jsx
+++ b/src/components/app/App.jsx
@@ -7,7 +7,7 @@ import { initializeHotjar } from '@edx/frontend-enterprise-hotjar';
 import AuthenticatedPage from './AuthenticatedPage';
 import EnterpriseAppPageRoutes from './EnterpriseAppPageRoutes';
 import NotFoundPage from '../NotFoundPage';
-import NoticesProvider from '../notices-provider';
+import { NoticesProvider } from '../notices-provider';
 import {
   EnterpriseCustomerRedirect,
   EnterprisePageRedirect,
diff --git a/src/components/app/LoginRefresh.jsx b/src/components/app/LoginRefresh.jsx
index c3c6b41203..ff919f9695 100644
--- a/src/components/app/LoginRefresh.jsx
+++ b/src/components/app/LoginRefresh.jsx
@@ -1,12 +1,12 @@
 import React, { useContext, useEffect, useState } from 'react';
+import PropTypes from 'prop-types';
 import { AppContext } from '@edx/frontend-platform/react';
 import { Container } from '@edx/paragon';
 
 import { LoadingSpinner } from '../loading-spinner';
 import { loginRefresh } from '../../utils/common';
 
-// eslint-disable-next-line react/prop-types
-export default function LoginRefresh({ children }) {
+function LoginRefresh({ children }) {
   const { authenticatedUser } = useContext(AppContext);
   const { roles } = authenticatedUser;
 
@@ -34,3 +34,9 @@ export default function LoginRefresh({ children }) {
   }
   return children;
 }
+
+LoginRefresh.propTypes = {
+  children: PropTypes.node.isRequired,
+};
+
+export default LoginRefresh;
diff --git a/src/components/app/LoginRefresh.test.jsx b/src/components/app/LoginRefresh.test.jsx
index eaf97c1396..3c07ed6435 100644
--- a/src/components/app/LoginRefresh.test.jsx
+++ b/src/components/app/LoginRefresh.test.jsx
@@ -1,4 +1,4 @@
-import React, { useMemo } from 'react';
+import React from 'react';
 import '@testing-library/jest-dom/extend-expect';
 import { render, act } from '@testing-library/react';
 import { AppContext } from '@edx/frontend-platform/react';
@@ -11,14 +11,12 @@ jest.mock('../../utils/common');
 // eslint-disable-next-line react/prop-types
 function LoginRefreshWithContext({ roles = [] }) {
   return (
-    <AppContext.Provider value={
-      useMemo(() => ({
-        authenticatedUser: {
-          userId: 1,
-          roles,
-        },
-      }), [roles])
-    }
+    <AppContext.Provider value={{
+      authenticatedUser: {
+        userId: 1,
+        roles,
+      },
+    }}
     >
       <LoginRefresh>
         <div>Hello!</div>
diff --git a/src/components/course/data/hooks.jsx b/src/components/course/data/hooks.jsx
index 2301ba9eed..49675dc2e4 100644
--- a/src/components/course/data/hooks.jsx
+++ b/src/components/course/data/hooks.jsx
@@ -345,8 +345,10 @@ export const useCourseEnrollmentUrl = ({
   userSubsidyApplicableToCourse,
 }) => {
   const config = getConfig();
-  // eslint-disable-next-line react-hooks/exhaustive-deps
-  const baseQueryParams = new URLSearchParams(location.search);
+  const baseQueryParams = useMemo(
+    () => new URLSearchParams(location.search),
+    [location.search],
+  );
 
   baseQueryParams.set(ENROLLMENT_FAILED_QUERY_PARAM, true);
   baseQueryParams.set(ENROLLMENT_COURSE_RUN_KEY_QUERY_PARAM, courseRunKey);
diff --git a/src/components/course/tests/LicenseRequestedAlert.test.jsx b/src/components/course/tests/LicenseRequestedAlert.test.jsx
index 587edb66d1..c69e74a7e5 100644
--- a/src/components/course/tests/LicenseRequestedAlert.test.jsx
+++ b/src/components/course/tests/LicenseRequestedAlert.test.jsx
@@ -1,4 +1,4 @@
-import React, { useMemo } from 'react';
+import React from 'react';
 import { render, fireEvent, waitFor } from '@testing-library/react';
 import Cookies from 'universal-cookie';
 import LicenseRequestedAlert from '../LicenseRequestedAlert';
@@ -28,27 +28,25 @@ function LicenseRequestedAlertWrapper({
   subscriptions = initialSubscriptions, licenseRequests = initialLicenseRequests,
 }) {
   return (
-    <UserSubsidyContext.Provider value={
-      useMemo(() => ({
-        couponCodes: {
-          couponCodes: [],
-          couponCodesCount: 0,
-        },
-        subscriptionLicense: {},
-        customerAgreementConfig: {
-          subscriptions,
-        },
-      }), [subscriptions])
-    }
+    <UserSubsidyContext.Provider value={{
+      couponCodes: {
+        couponCodes: [],
+        couponCodesCount: 0,
+      },
+      subscriptionLicense: {},
+      customerAgreementConfig: {
+        subscriptions,
+      },
+    }}
     >
       <SubsidyRequestsContext.Provider value={
-        useMemo(() => ({
+        {
           subsidyRequestConfiguration: null,
           requestsBySubsidyType: {
             [SUBSIDY_TYPE.LICENSE]: licenseRequests,
             [SUBSIDY_TYPE.COUPON]: [],
           },
-        }), [licenseRequests])
+        }
       }
       >
         <CourseContext.Provider>
diff --git a/src/components/course/tests/SubsidyRequestButton.test.jsx b/src/components/course/tests/SubsidyRequestButton.test.jsx
index b24fa00319..e66e231f0e 100644
--- a/src/components/course/tests/SubsidyRequestButton.test.jsx
+++ b/src/components/course/tests/SubsidyRequestButton.test.jsx
@@ -1,5 +1,5 @@
 /* eslint-disable react/prop-types */
-import React, { useMemo } from 'react';
+import React from 'react';
 import {
   screen, render, fireEvent, waitFor,
 } from '@testing-library/react';
@@ -59,14 +59,8 @@ function SubsidyRequestButtonWrapper({
 }) {
   return (
     <ToastsContext.Provider value={initialToastsState}>
-      <SubsidyRequestsContext.Provider value={
-        useMemo(() => ({ ...initialSubsidyRequestsState, ...subsidyRequestsState }), [subsidyRequestsState])
-      }
-      >
-        <CourseContext.Provider value={
-          useMemo(() => ({ ...initialCourseState, ...courseState }), [courseState])
-        }
-        >
+      <SubsidyRequestsContext.Provider value={{ ...initialSubsidyRequestsState, ...subsidyRequestsState }}>
+        <CourseContext.Provider value={{ ...initialCourseState, ...courseState }}>
           <SubsidyRequestButton enterpriseSlug={mockEnterpriseSlug} />
         </CourseContext.Provider>
       </SubsidyRequestsContext.Provider>
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx
index 2b6193e5e9..9dc710a6d2 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx
@@ -65,15 +65,15 @@ function MarkCompleteModal({
     onClose();
   };
 
+  const contextValue = useMemo(() => ({
+    courseTitle,
+    courseLink,
+    confirmError,
+  }), [confirmError, courseLink, courseTitle]);
+
   return (
     <MarkCompleteModalContext.Provider
-      value={
-        useMemo(() => ({
-          courseTitle,
-          courseLink,
-          confirmError,
-        }), [confirmError, courseLink, courseTitle])
-      }
+      value={contextValue}
     >
       <Modal
         title="Save course for later"
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx
index c2634f66c9..c5c1361420 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx
@@ -1,4 +1,3 @@
-/* eslint-disable react/jsx-no-constructed-context-values */
 import React from 'react';
 import { mount } from 'enzyme';
 import { act } from 'react-dom/test-utils';
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx
index 9763f6eaf1..05c1764c66 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx
@@ -56,15 +56,15 @@ function MoveToInProgressModal({
     onClose();
   };
 
+  const contextValue = useMemo(() => ({
+    courseTitle,
+    courseLink,
+    confirmError,
+  }), [confirmError, courseLink, courseTitle]);
+
   return (
     <MoveToInProgressModalContext.Provider
-      value={
-        useMemo(() => ({
-          courseTitle,
-          courseLink,
-          confirmError,
-        }), [confirmError, courseLink, courseTitle])
-      }
+      value={contextValue}
     >
       <Modal
         title="Move course to &quot;In Progress&quot;"
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx
index 60921d4cfc..40bdcc4601 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx
@@ -1,4 +1,3 @@
-/* eslint-disable react/jsx-no-constructed-context-values */
 import React from 'react';
 import { mount } from 'enzyme';
 import { getAuthenticatedUser } from '@edx/frontend-platform/auth';
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx
index b33dc7ec5f..25237caaa9 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx
@@ -40,7 +40,6 @@ function UnenrollModalWrapper({
   ...props
 }) {
   return (
-    // eslint-disable-next-line react/jsx-no-constructed-context-values
     <ToastsContext.Provider value={{ addToast: mockAddToast }}>
       <CourseEnrollmentsContext.Provider value={courseEnrollmentsContextValue}>
         <UnenrollModal {...props} />
diff --git a/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx b/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx
index 029045b525..d4c1797e83 100644
--- a/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx
@@ -1,4 +1,3 @@
-/* eslint-disable react/jsx-no-constructed-context-values */
 import React from 'react';
 
 import {
diff --git a/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx b/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx
index 6eeec37cac..af46b61e4a 100644
--- a/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx
@@ -34,7 +34,6 @@ const TEST_ENTERPRISE_UUID = 'test-uuid';
 
 function CourseSectionWrapper(props) {
   return (
-    // eslint-disable-next-line react/jsx-no-constructed-context-values
     <AppContext.Provider value={{
       enterpriseConfig: {
         uuid: TEST_ENTERPRISE_UUID,
diff --git a/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx b/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx
index 2000e8c5d2..4de2d6f8bb 100644
--- a/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx
+++ b/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx
@@ -21,7 +21,6 @@ describe('<EnterpriseBanner />', () => {
 
     render(
       <AppContext.Provider
-        // eslint-disable-next-line react/jsx-no-constructed-context-values
         value={{
           enterpriseConfig: {
             slug: 'slug',
diff --git a/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx b/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx
index 789581422c..8c80b2eb9d 100644
--- a/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx
+++ b/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx
@@ -17,7 +17,6 @@ function EnterpriseOffersBalanceAlertWrapper({
   hasNoEnterpriseOffersBalance,
 }) {
   return (
-    // eslint-disable-next-line react/jsx-no-constructed-context-values
     <AppContext.Provider value={{
       enterpriseConfig,
     }}
diff --git a/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx b/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx
index bf4f75c1b5..a4cb6fb4b8 100644
--- a/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx
+++ b/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx
@@ -1,4 +1,3 @@
-/* eslint-disable react/jsx-no-constructed-context-values */
 import React from 'react';
 import { Route } from 'react-router-dom';
 import { AppContext } from '@edx/frontend-platform/react';
diff --git a/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx b/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
index 9fb85793dc..26dbc291a4 100644
--- a/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
+++ b/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
@@ -69,7 +69,6 @@ function UserSubsidyWithAppContext({
 }) {
   return (
     <AppContext.Provider
-      // eslint-disable-next-line react/jsx-no-constructed-context-values
       value={{
         enterpriseConfig: {
           slug: TEST_ENTERPRISE_SLUG,
diff --git a/src/components/license-activation/tests/LicenseActivation.test.jsx b/src/components/license-activation/tests/LicenseActivation.test.jsx
index d4690dc798..a61dfe6fab 100644
--- a/src/components/license-activation/tests/LicenseActivation.test.jsx
+++ b/src/components/license-activation/tests/LicenseActivation.test.jsx
@@ -28,7 +28,6 @@ function LicenseActivationWithAppContext({
 }) {
   return (
     <AppContext.Provider
-      // eslint-disable-next-line react/jsx-no-constructed-context-values
       value={{
         enterpriseConfig: {
           uuid: TEST_ENTERPRISE_UUID,
diff --git a/src/components/license-activation/tests/LicenseActivationPage.test.jsx b/src/components/license-activation/tests/LicenseActivationPage.test.jsx
index 2e74ab4f44..be4381dcf4 100644
--- a/src/components/license-activation/tests/LicenseActivationPage.test.jsx
+++ b/src/components/license-activation/tests/LicenseActivationPage.test.jsx
@@ -46,7 +46,6 @@ function LicenseActivationPageWithContext({
 }) {
   return (
     <AppContext.Provider
-      // eslint-disable-next-line react/jsx-no-constructed-context-values
       value={{
         enterpriseConfig: {
           uuid: TEST_ENTERPRISE_UUID,
diff --git a/src/components/notices-provider/index.js b/src/components/notices-provider/index.js
index 7c154b573b..51d8a0367f 100644
--- a/src/components/notices-provider/index.js
+++ b/src/components/notices-provider/index.js
@@ -1,2 +1 @@
-// eslint-disable-next-line no-restricted-exports
-export { default } from './NoticesProvider';
+export { default as NoticesProvider } from './NoticesProvider';
diff --git a/src/components/pathway/data/utils.js b/src/components/pathway/data/utils.js
index bd87e2b058..44525bc837 100644
--- a/src/components/pathway/data/utils.js
+++ b/src/components/pathway/data/utils.js
@@ -6,8 +6,8 @@ export default function coursesAndProgramsText(pathway) {
   let message;
 
   for (let i = 0; i < pathway.steps.length; i++) {
-    courseCount += pathway.steps[i].courses ? pathway.steps[i].courses.length : 0;
-    programCount += pathway.steps[i].programs ? pathway.steps[i].programs.length : 0;
+    courseCount += pathway.steps[i].courses?.length || 0;
+    programCount += pathway.steps[i].programs?.length || 0;
   }
 
   textCourse = courseCount === 1 ? 'course' : 'courses';
diff --git a/src/components/pathway/tests/PathwayModal.test.jsx b/src/components/pathway/tests/PathwayModal.test.jsx
index 185505c8bc..e3b33c18df 100644
--- a/src/components/pathway/tests/PathwayModal.test.jsx
+++ b/src/components/pathway/tests/PathwayModal.test.jsx
@@ -29,7 +29,6 @@ jest.mock('react-loading-skeleton', () => ({
 function PathwayModalWithAppContext(props) {
   return (
     <AppContext.Provider
-      // eslint-disable-next-line react/jsx-no-constructed-context-values
       value={{
         enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG },
       }}
diff --git a/src/components/pathway/tests/SearchPathwayCard.test.jsx b/src/components/pathway/tests/SearchPathwayCard.test.jsx
index 01fca358f8..ae91dbf180 100644
--- a/src/components/pathway/tests/SearchPathwayCard.test.jsx
+++ b/src/components/pathway/tests/SearchPathwayCard.test.jsx
@@ -31,7 +31,6 @@ jest.mock('@edx/frontend-enterprise-utils', () => {
 function SearchPathwayCardWithAppContext(props) {
   return (
     <AppContext.Provider
-      // eslint-disable-next-line react/jsx-no-constructed-context-values
       value={{
         enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG, uuid: TEST_ENTERPRISE_UUID },
       }}
diff --git a/src/components/program-progress/ProgramPathwayOpportunity.jsx b/src/components/program-progress/ProgramPathwayOpportunity.jsx
index fdec733d68..14a3946ea4 100644
--- a/src/components/program-progress/ProgramPathwayOpportunity.jsx
+++ b/src/components/program-progress/ProgramPathwayOpportunity.jsx
@@ -7,7 +7,7 @@ function ProgramPathwayOpportunity({ pathways, title, pathwayClass }) {
     <div className={pathwayClass}>
       <h2 className="divider-heading"> { title } </h2>
       {pathways.map((pathway) => (
-        <div className="pathway-wrapper">
+        <div className="pathway-wrapper" key={pathway.uuid}>
           <div className="pathway-info">
             <h2 className="pathway-heading"> { pathway.name } </h2>
             { pathway.description && <p> {pathway.description}</p> }
diff --git a/src/components/program-progress/ProgramProgressPage.jsx b/src/components/program-progress/ProgramProgressPage.jsx
index 713301808f..56c21bfc6f 100644
--- a/src/components/program-progress/ProgramProgressPage.jsx
+++ b/src/components/program-progress/ProgramProgressPage.jsx
@@ -37,9 +37,9 @@ function ProgramProgressPage() {
     [program],
   );
   const courseData = program?.data?.courseData;
-  const notStartedCourses = courseData?.notStarted?.length;
-  const completedCourses = courseData?.completed?.length;
-  const inProgressCourses = courseData?.inProgress?.length;
+  const notStartedCourses = courseData?.notStarted?.length || 0;
+  const completedCourses = courseData?.completed?.length || 0;
+  const inProgressCourses = courseData?.inProgress?.length || 0;
   const totalCoursesInProgram = notStartedCourses + completedCourses + inProgressCourses;
   const allCoursesCompleted = !courseData?.notStarted?.length
     && !courseData?.inProgress?.length
diff --git a/src/components/search/SearchCourseCard.jsx b/src/components/search/SearchCourseCard.jsx
index f151db0744..95f62b6489 100644
--- a/src/components/search/SearchCourseCard.jsx
+++ b/src/components/search/SearchCourseCard.jsx
@@ -14,8 +14,7 @@ import { getPrimaryPartnerLogo, isDefinedAndNotNull } from '../../utils/common';
 function SearchCourseCard({ hit, isLoading }) {
   const { enterpriseConfig: { slug, uuid } } = useContext(AppContext);
 
-  // eslint-disable-next-line react-hooks/exhaustive-deps
-  const course = hit ? camelCaseObject(hit) : {};
+  const course = useMemo(() => (hit ? camelCaseObject(hit) : {}), [hit]);
 
   const linkToCourse = useMemo(
     () => {
diff --git a/src/components/search/tests/SearchCourseCard.test.jsx b/src/components/search/tests/SearchCourseCard.test.jsx
index fb84a15214..0f3eebb867 100644
--- a/src/components/search/tests/SearchCourseCard.test.jsx
+++ b/src/components/search/tests/SearchCourseCard.test.jsx
@@ -22,7 +22,6 @@ jest.mock('react-loading-skeleton', () => ({
 function SearchCourseCardWithAppContext(props) {
   return (
     <AppContext.Provider
-      // eslint-disable-next-line react/jsx-no-constructed-context-values
       value={{
         enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG },
       }}
diff --git a/src/components/search/tests/SearchProgramCard.test.jsx b/src/components/search/tests/SearchProgramCard.test.jsx
index da2367e3f0..ce66a83d47 100644
--- a/src/components/search/tests/SearchProgramCard.test.jsx
+++ b/src/components/search/tests/SearchProgramCard.test.jsx
@@ -33,7 +33,6 @@ jest.mock('@edx/frontend-enterprise-utils', () => ({
 function SearchProgramCardWithAppContext(props) {
   return (
     <AppContext.Provider
-      // eslint-disable-next-line react/jsx-no-constructed-context-values
       value={{
         enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG, uuid: enterpriseUuid },
       }}
diff --git a/src/components/skills-quiz/SearchCurrentJobCard.jsx b/src/components/skills-quiz/SearchCurrentJobCard.jsx
index 87631f1b8d..5388ccba5d 100644
--- a/src/components/skills-quiz/SearchCurrentJobCard.jsx
+++ b/src/components/skills-quiz/SearchCurrentJobCard.jsx
@@ -14,7 +14,7 @@ function SearchCurrentJobCard({ index }) {
   const [isLoading, setIsLoading] = useState(true);
   const { dispatch, state } = useContext(SkillsContext);
   const { currentJobRole } = state;
-  const jobToFetch = useMemo(
+  const jobsToFetch = useMemo(
     () => {
       const jobsArray = [];
       if (currentJob?.length > 0) {
@@ -35,7 +35,7 @@ function SearchCurrentJobCard({ index }) {
         setIsLoading(true);
         const { hits } = await index.search('', {
           facetFilters: [
-            jobToFetch,
+            jobsToFetch,
           ],
         });
         if (!fetch) { return; }
@@ -43,7 +43,7 @@ function SearchCurrentJobCard({ index }) {
         setIsLoading(false);
       }
     },
-    [currentJob, dispatch, index, jobToFetch],
+    [currentJob, dispatch, index, jobsToFetch],
   );
 
   return (
diff --git a/src/components/skills-quiz/SkillsContextProvider.jsx b/src/components/skills-quiz/SkillsContextProvider.jsx
index eb8c05f4aa..3bf141c0b2 100644
--- a/src/components/skills-quiz/SkillsContextProvider.jsx
+++ b/src/components/skills-quiz/SkillsContextProvider.jsx
@@ -1,4 +1,4 @@
-import React, { createContext, useReducer } from 'react';
+import React, { createContext, useReducer, useMemo } from 'react';
 import PropTypes from 'prop-types';
 import {
   SET_KEY_VALUE,
@@ -21,8 +21,7 @@ const reducer = (state, action) => {
 
 export function SkillsContextProvider({ children, initialState = { goal: GOAL_DROPDOWN_DEFAULT_OPTION } }) {
   const [state, dispatch] = useReducer(reducer, initialState);
-  // eslint-disable-next-line react/jsx-no-constructed-context-values
-  const value = { state, dispatch };
+  const value = useMemo(() => ({ state, dispatch }), [state]);
 
   return (
     <SkillsContext.Provider value={value}>
diff --git a/src/components/skills-quiz/SkillsQuizHeader.jsx b/src/components/skills-quiz/SkillsQuizHeader.jsx
index 623fc609eb..d26baa396b 100644
--- a/src/components/skills-quiz/SkillsQuizHeader.jsx
+++ b/src/components/skills-quiz/SkillsQuizHeader.jsx
@@ -3,7 +3,7 @@ import edxLogo from './images/edx-logo.svg';
 
 function SkillsQuizHeader() {
   return (
-    <div style={{ display: 'flex' }} className="ml-2">
+    <div className="d-flex ml-2">
       <img src={edxLogo} alt="edx-logo" height="110px" />
       <div
         className="ml-5 vertical-line"
diff --git a/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx b/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx
index 012edd1d7e..58acd25c27 100644
--- a/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx
+++ b/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx
@@ -1,4 +1,3 @@
-/* eslint-disable react/jsx-no-constructed-context-values */
 import React from 'react';
 import '@testing-library/jest-dom/extend-expect';
 import userEvent from '@testing-library/user-event';

From 8c1b8b4d77b6a26a95f7eb28a36633a40b9c3ed2 Mon Sep 17 00:00:00 2001
From: Bilal Qamar <59555732+BilalQamar95@users.noreply.github.com>
Date: Fri, 16 Sep 2022 17:33:41 +0500
Subject: [PATCH 11/13] refactor: updated tests to accommodate
 jsx-no-constructed-context-values rule

---
 .eslintrc.js                                  |   3 -
 src/components/app/LoginRefresh.test.jsx      |  16 +-
 .../tests/LicenseRequestedAlert.test.jsx      |  42 +++--
 .../tests/SubsidyRequestButton.test.jsx       |   9 +-
 .../tests/MarkCompleteModal.test.jsx          |  47 ++---
 .../tests/BaseCourseCard.test.jsx             |  90 +++++-----
 .../unenroll/UnenrollModal.test.jsx           |   4 +-
 .../tests/CourseEnrollments.test.jsx          |  34 ++--
 .../tests/CourseSection.test.jsx              |  13 +-
 .../tests/EnterpriseBanner.test.jsx           |  31 ++--
 .../EnterpriseOffersBalanceAlert.test.jsx     |  10 +-
 .../tests/AutoActivateLicense.test.jsx        |   8 +-
 .../tests/UserSubsidy.test.jsx                |  23 ++-
 .../tests/LicenseActivation.test.jsx          |  19 +-
 .../tests/LicenseActivationPage.test.jsx      |  19 +-
 .../pathway/tests/PathwayModal.test.jsx       |  11 +-
 .../pathway/tests/SearchPathwayCard.test.jsx  |  11 +-
 .../search/tests/SearchCourseCard.test.jsx    |  11 +-
 .../search/tests/SearchProgramCard.test.jsx   |  11 +-
 .../tests/SkillsQuizStepper.test.jsx          | 166 ++++++------------
 20 files changed, 268 insertions(+), 310 deletions(-)

diff --git a/.eslintrc.js b/.eslintrc.js
index efb4e04ab4..5b2737cbbd 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -13,8 +13,5 @@ config.ignorePatterns = ['module.config.js'];
 config.rules.indent = ['error', 2, { ignoredNodes: ['TemplateLiteral', 'SwitchCase'] }];
 config.rules['template-curly-spacing'] = 'off';
 config.rules['import/prefer-default-export'] = 'off';
-config.overrides = [{
-  files: ['*.test.jsx'], rules: { 'react/jsx-no-constructed-context-values': 'off' },
-}];
 
 module.exports = config;
diff --git a/src/components/app/LoginRefresh.test.jsx b/src/components/app/LoginRefresh.test.jsx
index 3c07ed6435..0eb1b73783 100644
--- a/src/components/app/LoginRefresh.test.jsx
+++ b/src/components/app/LoginRefresh.test.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useMemo } from 'react';
 import '@testing-library/jest-dom/extend-expect';
 import { render, act } from '@testing-library/react';
 import { AppContext } from '@edx/frontend-platform/react';
@@ -10,14 +10,14 @@ jest.mock('../../utils/common');
 
 // eslint-disable-next-line react/prop-types
 function LoginRefreshWithContext({ roles = [] }) {
+  const contextValue = useMemo(() => ({
+    authenticatedUser: {
+      userId: 1,
+      roles,
+    },
+  }), [roles]);
   return (
-    <AppContext.Provider value={{
-      authenticatedUser: {
-        userId: 1,
-        roles,
-      },
-    }}
-    >
+    <AppContext.Provider value={contextValue}>
       <LoginRefresh>
         <div>Hello!</div>
       </LoginRefresh>
diff --git a/src/components/course/tests/LicenseRequestedAlert.test.jsx b/src/components/course/tests/LicenseRequestedAlert.test.jsx
index c69e74a7e5..288025a97d 100644
--- a/src/components/course/tests/LicenseRequestedAlert.test.jsx
+++ b/src/components/course/tests/LicenseRequestedAlert.test.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useMemo } from 'react';
 import { render, fireEvent, waitFor } from '@testing-library/react';
 import Cookies from 'universal-cookie';
 import LicenseRequestedAlert from '../LicenseRequestedAlert';
@@ -27,28 +27,26 @@ const initialLicenseRequests = [
 function LicenseRequestedAlertWrapper({
   subscriptions = initialSubscriptions, licenseRequests = initialLicenseRequests,
 }) {
+  const contextValue = useMemo(() => ({
+    couponCodes: {
+      couponCodes: [],
+      couponCodesCount: 0,
+    },
+    subscriptionLicense: {},
+    customerAgreementConfig: {
+      subscriptions,
+    },
+  }), [subscriptions]);
+  const requestContextValue = useMemo(() => ({
+    subsidyRequestConfiguration: null,
+    requestsBySubsidyType: {
+      [SUBSIDY_TYPE.LICENSE]: licenseRequests,
+      [SUBSIDY_TYPE.COUPON]: [],
+    },
+  }), [licenseRequests]);
   return (
-    <UserSubsidyContext.Provider value={{
-      couponCodes: {
-        couponCodes: [],
-        couponCodesCount: 0,
-      },
-      subscriptionLicense: {},
-      customerAgreementConfig: {
-        subscriptions,
-      },
-    }}
-    >
-      <SubsidyRequestsContext.Provider value={
-        {
-          subsidyRequestConfiguration: null,
-          requestsBySubsidyType: {
-            [SUBSIDY_TYPE.LICENSE]: licenseRequests,
-            [SUBSIDY_TYPE.COUPON]: [],
-          },
-        }
-      }
-      >
+    <UserSubsidyContext.Provider value={contextValue}>
+      <SubsidyRequestsContext.Provider value={requestContextValue}>
         <CourseContext.Provider>
           <LicenseRequestedAlert catalogList={[mockCatalogUUID]} />
         </CourseContext.Provider>
diff --git a/src/components/course/tests/SubsidyRequestButton.test.jsx b/src/components/course/tests/SubsidyRequestButton.test.jsx
index e66e231f0e..6106c9cf33 100644
--- a/src/components/course/tests/SubsidyRequestButton.test.jsx
+++ b/src/components/course/tests/SubsidyRequestButton.test.jsx
@@ -1,5 +1,5 @@
 /* eslint-disable react/prop-types */
-import React from 'react';
+import React, { useMemo } from 'react';
 import {
   screen, render, fireEvent, waitFor,
 } from '@testing-library/react';
@@ -57,10 +57,13 @@ function SubsidyRequestButtonWrapper({
   subsidyRequestsState = {},
   courseState = {},
 }) {
+  const requestContextValue = useMemo(() => (
+    { ...initialSubsidyRequestsState, ...subsidyRequestsState }), [subsidyRequestsState]);
+  const courseContextValue = useMemo(() => ({ ...initialCourseState, ...courseState }), [courseState]);
   return (
     <ToastsContext.Provider value={initialToastsState}>
-      <SubsidyRequestsContext.Provider value={{ ...initialSubsidyRequestsState, ...subsidyRequestsState }}>
-        <CourseContext.Provider value={{ ...initialCourseState, ...courseState }}>
+      <SubsidyRequestsContext.Provider value={requestContextValue}>
+        <CourseContext.Provider value={courseContextValue}>
           <SubsidyRequestButton enterpriseSlug={mockEnterpriseSlug} />
         </CourseContext.Provider>
       </SubsidyRequestsContext.Provider>
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx
index c5c1361420..269d706c63 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx
@@ -1,4 +1,5 @@
-import React from 'react';
+import React, { useMemo } from 'react';
+import PropTypes from 'prop-types';
 import { mount } from 'enzyme';
 import { act } from 'react-dom/test-utils';
 import { AppContext } from '@edx/frontend-platform/react';
@@ -8,6 +9,22 @@ import * as service from '../data/service';
 
 jest.mock('../data/service');
 
+function ModalWrapper({ initialProps, enterpriseConfig }) {
+  const contextValue = useMemo(() => ({ enterpriseConfig }), [enterpriseConfig]);
+  return (
+    <AppContext.Provider value={contextValue}>
+      <MarkCompleteModal
+        {...initialProps}
+      />
+    </AppContext.Provider>
+  );
+}
+
+ModalWrapper.propTypes = {
+  initialProps: PropTypes.shape({}).isRequired,
+  enterpriseConfig: PropTypes.shape({}).isRequired,
+};
+
 describe('<MarkCompleteModal />', () => {
   const initialProps = {
     isOpen: true,
@@ -30,13 +47,7 @@ describe('<MarkCompleteModal />', () => {
           course_run_status: 'completed',
         },
       }));
-    const wrapper = mount((
-      <AppContext.Provider value={{ enterpriseConfig }}>
-        <MarkCompleteModal
-          {...initialProps}
-        />
-      </AppContext.Provider>
-    ));
+    const wrapper = mount(<ModalWrapper initialProps={initialProps} enterpriseConfig={enterpriseConfig} />);
     wrapper.find('.confirm-mark-complete-btn').hostNodes().simulate('click');
     expect(service.updateCourseCompleteStatusRequest).toBeCalledWith({
       course_id: initialProps.courseId,
@@ -50,13 +61,7 @@ describe('<MarkCompleteModal />', () => {
     // eslint-disable-next-line no-import-assign
     service.markCourseAsCompleteRequest = jest.fn()
       .mockImplementation(() => Promise.reject(new Error('test error')));
-    const wrapper = mount((
-      <AppContext.Provider value={{ enterpriseConfig }}>
-        <MarkCompleteModal
-          {...initialProps}
-        />
-      </AppContext.Provider>
-    ));
+    const wrapper = mount(<ModalWrapper initialProps={initialProps} enterpriseConfig={enterpriseConfig} />);
     await act(async () => {
       wrapper.find('.confirm-mark-complete-btn').hostNodes().simulate('click');
     });
@@ -70,14 +75,10 @@ describe('<MarkCompleteModal />', () => {
 
   it('handles close modal', () => {
     const mockOnClose = jest.fn();
-    const wrapper = mount((
-      <AppContext.Provider value={{ enterpriseConfig }}>
-        <MarkCompleteModal
-          {...initialProps}
-          onClose={mockOnClose}
-        />
-      </AppContext.Provider>
-    ));
+    initialProps.onClose = mockOnClose;
+    const wrapper = mount(
+      <ModalWrapper initialProps={initialProps} enterpriseConfig={enterpriseConfig} />,
+    );
     act(() => {
       wrapper.find('.modal-footer button.btn-link').hostNodes().simulate('click');
     });
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx
index 40bdcc4601..fa4357348a 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx
@@ -1,4 +1,5 @@
-import React from 'react';
+import React, { useMemo } from 'react';
+import PropTypes from 'prop-types';
 import { mount } from 'enzyme';
 import { getAuthenticatedUser } from '@edx/frontend-platform/auth';
 import { AppContext } from '@edx/frontend-platform/react';
@@ -20,24 +21,59 @@ const enterpriseConfig = {
   name: 'test-enterprise-name',
 };
 
-describe('<BaseCourseCard />', () => {
-  let wrapper;
+function CourseCardWrapper({ isLoading }) {
+  const contextValue = useMemo(() => ({ enterpriseConfig }), []);
+  return (
+    <AppContext.Provider value={contextValue}>
+      <BaseCourseCard
+        type="completed"
+        title="edX Demonstration Course"
+        linkToCourse="https://edx.org"
+        courseRunId="my+course+key"
+        hasEmailsEnabled
+        isLoading={isLoading}
+      />
+    </AppContext.Provider>
+  );
+}
+CourseCardWrapper.defaultProps = {
+  isLoading: false,
+};
 
-  describe('email settings modal', () => {
-    beforeEach(() => {
-      jest.clearAllMocks();
+CourseCardWrapper.propTypes = {
+  isLoading: PropTypes.bool,
+};
 
-      wrapper = mount((
-        <AppContext.Provider value={{ enterpriseConfig }}>
+function CourseEnrollmentWrapper() {
+  const contextValue = useMemo(() => ({ enterpriseConfig }), []);
+  const toastContextValue = useMemo(() => ({ addToast: jest.fn() }), []);
+  const enrollmentContextValue = useMemo(() => ({ removeCourseEnrollment: jest.fn() }), []);
+  return (
+    <AppContext.Provider value={contextValue}>
+      <ToastsContext.Provider value={toastContextValue}>
+        <CourseEnrollmentsContext.Provider value={enrollmentContextValue}>
           <BaseCourseCard
-            type="completed"
+            type="in_progress"
             title="edX Demonstration Course"
             linkToCourse="https://edx.org"
             courseRunId="my+course+key"
+            canUnenroll
             hasEmailsEnabled
           />
-        </AppContext.Provider>
-      ));
+        </CourseEnrollmentsContext.Provider>
+      </ToastsContext.Provider>
+    </AppContext.Provider>
+  );
+}
+
+describe('<BaseCourseCard />', () => {
+  let wrapper;
+
+  describe('email settings modal', () => {
+    beforeEach(() => {
+      jest.clearAllMocks();
+
+      wrapper = mount(<CourseCardWrapper />);
       // open email settings modal
       wrapper.find('Dropdown').find('button.btn-icon').simulate('click');
       wrapper.find('Dropdown').find('button.dropdown-item').simulate('click');
@@ -51,27 +87,10 @@ describe('<BaseCourseCard />', () => {
   });
 
   describe('unenroll modal', () => {
-    const mockAddToast = jest.fn();
-
     beforeEach(() => {
       jest.clearAllMocks();
 
-      wrapper = mount((
-        <AppContext.Provider value={{ enterpriseConfig }}>
-          <ToastsContext.Provider value={{ addToast: mockAddToast }}>
-            <CourseEnrollmentsContext.Provider value={{ removeCourseEnrollment: jest.fn() }}>
-              <BaseCourseCard
-                type="in_progress"
-                title="edX Demonstration Course"
-                linkToCourse="https://edx.org"
-                courseRunId="my+course+key"
-                canUnenroll
-                hasEmailsEnabled
-              />
-            </CourseEnrollmentsContext.Provider>
-          </ToastsContext.Provider>
-        </AppContext.Provider>
-      ));
+      wrapper = mount(<CourseEnrollmentWrapper />);
       // open unenroll modal
       wrapper.find('Dropdown').find('button.btn-icon').simulate('click');
       wrapper.find('Dropdown').find('button.dropdown-item').at(1).simulate('click');
@@ -85,18 +104,7 @@ describe('<BaseCourseCard />', () => {
   });
 
   it('should render Skeleton if isLoading = true', () => {
-    wrapper = mount((
-      <AppContext.Provider value={{ enterpriseConfig }}>
-        <BaseCourseCard
-          type="completed"
-          title="edX Demonstration Course"
-          linkToCourse="https://edx.org"
-          courseRunId="my+course+key"
-          hasEmailsEnabled
-          isLoading
-        />
-      </AppContext.Provider>
-    ));
+    wrapper = mount(<CourseCardWrapper isLoading />);
 
     expect(wrapper.find(Skeleton)).toBeTruthy();
   });
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx
index 25237caaa9..d1687497eb 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx
@@ -1,6 +1,7 @@
 import { render, screen, waitFor } from '@testing-library/react';
 import userEvent from '@testing-library/user-event';
 import '@testing-library/jest-dom/extend-expect';
+import { useMemo } from 'react';
 
 import { COURSE_STATUSES } from '../../../../../../constants';
 import { unenrollFromCourse } from './data';
@@ -39,8 +40,9 @@ function UnenrollModalWrapper({
   courseEnrollmentsContextValue = defaultCourseEnrollmentsContextValue,
   ...props
 }) {
+  const contextValue = useMemo(() => ({ addToast: mockAddToast }), []);
   return (
-    <ToastsContext.Provider value={{ addToast: mockAddToast }}>
+    <ToastsContext.Provider value={contextValue}>
       <CourseEnrollmentsContext.Provider value={courseEnrollmentsContextValue}>
         <UnenrollModal {...props} />
       </CourseEnrollmentsContext.Provider>
diff --git a/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx b/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx
index d4c1797e83..8e12fd4086 100644
--- a/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useMemo } from 'react';
 
 import {
   render, screen, fireEvent, act, waitFor,
@@ -58,15 +58,19 @@ hooks.useCourseEnrollments.mockReturnValue({
   updateCourseEnrollmentStatus: jest.fn(),
 });
 
-const renderEnrollmentsComponent = () => render(
-  <AppContext.Provider value={{ enterpriseConfig }}>
-    <SubsidyRequestsContext.Provider value={{ isLoading: false }}>
-      <CourseEnrollmentsContextProvider>
-        <CourseEnrollments />
-      </CourseEnrollmentsContextProvider>
-    </SubsidyRequestsContext.Provider>
-  </AppContext.Provider>,
-);
+function RenderEnrollmentsComponent() {
+  const contextValue = useMemo(() => ({ enterpriseConfig }), []);
+  const requestsContextValue = useMemo(() => ({ isLoading: false }), []);
+  return (
+    <AppContext.Provider value={contextValue}>
+      <SubsidyRequestsContext.Provider value={requestsContextValue}>
+        <CourseEnrollmentsContextProvider>
+          <CourseEnrollments />
+        </CourseEnrollmentsContextProvider>
+      </SubsidyRequestsContext.Provider>
+    </AppContext.Provider>
+  );
+}
 
 describe('Course enrollments', () => {
   beforeEach(() => {
@@ -78,7 +82,7 @@ describe('Course enrollments', () => {
   });
 
   it('renders course sections', () => {
-    renderEnrollmentsComponent();
+    render(<RenderEnrollmentsComponent />);
     expect(screen.getByText(COURSE_SECTION_TITLES.current));
     expect(screen.getByText(COURSE_SECTION_TITLES.completed));
     expect(screen.getByText(COURSE_SECTION_TITLES.savedForLater));
@@ -86,7 +90,7 @@ describe('Course enrollments', () => {
   });
 
   it('generates course status update on move to in progress action', async () => {
-    const { getByText } = renderEnrollmentsComponent();
+    const { getByText } = render(<RenderEnrollmentsComponent />);
     await act(async () => {
       fireEvent.click(screen.getByRole('button', { name: MARK_MOVE_TO_IN_PROGRESS_DEFAULT_LABEL }));
     });
@@ -100,7 +104,7 @@ describe('Course enrollments', () => {
   });
 
   it('generates course status update on move to saved for later action', async () => {
-    const { getByText } = renderEnrollmentsComponent();
+    const { getByText } = render(<RenderEnrollmentsComponent />);
     await act(async () => {
       fireEvent.click(screen.getByRole('button', { name: MARK_SAVED_FOR_LATER_DEFAULT_LABEL }));
     });
@@ -110,7 +114,7 @@ describe('Course enrollments', () => {
   });
 
   it('renders in progress, upcoming, and requested course enrollments in the same section', async () => {
-    renderEnrollmentsComponent();
+    render(<RenderEnrollmentsComponent />);
     const currentCourses = screen.getByText(COURSE_SECTION_TITLES.current).closest('.course-section');
     expect(within(currentCourses).getByText(inProgCourseRun.title));
     expect(within(currentCourses).getByText(upcomingCourseRun.title));
@@ -144,7 +148,7 @@ describe('Course enrollments', () => {
       },
     });
 
-    renderEnrollmentsComponent({
+    render(<RenderEnrollmentsComponent />, {
       isSubsidyRequestsEnabled: false,
     });
 
diff --git a/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx b/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx
index af46b61e4a..fcff21eb44 100644
--- a/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx
@@ -4,6 +4,7 @@ import {
   render, screen, fireEvent,
 } from '@testing-library/react';
 import * as frontendEnterpriseUtils from '@edx/frontend-enterprise-utils';
+import { useMemo } from 'react';
 
 import CourseSection from '../CourseSection';
 import { createCourseEnrollmentWithStatus } from './enrollment-testutils';
@@ -33,13 +34,13 @@ const CARD_COMPONENT_BY_COURSE_STATUS = {
 const TEST_ENTERPRISE_UUID = 'test-uuid';
 
 function CourseSectionWrapper(props) {
+  const contextValue = useMemo(() => ({
+    enterpriseConfig: {
+      uuid: TEST_ENTERPRISE_UUID,
+    },
+  }), []);
   return (
-    <AppContext.Provider value={{
-      enterpriseConfig: {
-        uuid: TEST_ENTERPRISE_UUID,
-      },
-    }}
-    >
+    <AppContext.Provider value={contextValue}>
       <CourseSection
         {...props}
       />
diff --git a/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx b/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx
index 4de2d6f8bb..f1dcd9b465 100644
--- a/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx
+++ b/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useMemo } from 'react';
 import '@testing-library/jest-dom/extend-expect';
 import { screen, render } from '@testing-library/react';
 import { AppContext } from '@edx/frontend-platform/react';
@@ -9,6 +9,22 @@ jest.mock('react-router-dom', () => ({
   useLocation: jest.fn(),
 }));
 
+function BannerWrapper() {
+  const contextValue = useMemo(() => ({
+    enterpriseConfig: {
+      slug: 'slug',
+      uuid: 'uuid',
+    },
+  }), []);
+  return (
+    <AppContext.Provider
+      value={contextValue}
+    >
+      <EnterpriseBanner />
+    </AppContext.Provider>
+  );
+}
+
 describe('<EnterpriseBanner />', () => {
   afterAll(() => {
     jest.restoreAllMocks();
@@ -19,18 +35,7 @@ describe('<EnterpriseBanner />', () => {
       pathname: '/slug/search',
     }));
 
-    render(
-      <AppContext.Provider
-        value={{
-          enterpriseConfig: {
-            slug: 'slug',
-            uuid: 'uuid',
-          },
-        }}
-      >
-        <EnterpriseBanner />
-      </AppContext.Provider>,
-    );
+    render(<BannerWrapper />);
 
     expect(screen.getByText('Recommend courses for me'));
   });
diff --git a/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx b/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx
index 8c80b2eb9d..c1220e13fb 100644
--- a/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx
+++ b/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx
@@ -1,5 +1,5 @@
 /* eslint-disable react/prop-types */
-import React from 'react';
+import React, { useMemo } from 'react';
 import { screen, render } from '@testing-library/react';
 import '@testing-library/jest-dom/extend-expect';
 import { AppContext } from '@edx/frontend-platform/react';
@@ -16,11 +16,11 @@ function EnterpriseOffersBalanceAlertWrapper({
   },
   hasNoEnterpriseOffersBalance,
 }) {
+  const contextValue = useMemo(() => ({
+    enterpriseConfig,
+  }), [enterpriseConfig]);
   return (
-    <AppContext.Provider value={{
-      enterpriseConfig,
-    }}
-    >
+    <AppContext.Provider value={contextValue}>
       <EnterpriseOffersBalanceAlert
         hasNoEnterpriseOffersBalance={hasNoEnterpriseOffersBalance}
       />
diff --git a/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx b/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx
index a4cb6fb4b8..b625d4cc26 100644
--- a/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx
+++ b/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useMemo } from 'react';
 import { Route } from 'react-router-dom';
 import { AppContext } from '@edx/frontend-platform/react';
 import '@testing-library/jest-dom/extend-expect';
@@ -13,10 +13,12 @@ const initialPathname = `/${TEST_ENTERPRISE_SLUG}`;
 
 // eslint-disable-next-line react/prop-types
 function AutoActivateLicenseWrapper({ subscriptionLicense }) {
+  const contextValue = useMemo(() => ({ enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG } }), []);
+  const subsidyContextValue = useMemo(() => ({ subscriptionLicense }), [subscriptionLicense]);
   return (
     <Route path={initialPathname} exact>
-      <AppContext.Provider value={{ enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG } }}>
-        <UserSubsidyContext.Provider value={{ subscriptionLicense }}>
+      <AppContext.Provider value={contextValue}>
+        <UserSubsidyContext.Provider value={subsidyContextValue}>
           <AutoActivateLicense />
         </UserSubsidyContext.Provider>
       </AppContext.Provider>
diff --git a/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx b/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
index 26dbc291a4..0d768ebcca 100644
--- a/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
+++ b/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
@@ -1,4 +1,4 @@
-import React, { useContext } from 'react';
+import React, { useContext, useMemo } from 'react';
 import moment from 'moment';
 import { screen, waitFor } from '@testing-library/react';
 import { AppContext } from '@edx/frontend-platform/react';
@@ -67,18 +67,17 @@ function UserSubsidyWithAppContext({
   authenticatedUser = TEST_USER,
   children,
 }) {
+  const appContextValue = useMemo(() => ({
+    enterpriseConfig: {
+      slug: TEST_ENTERPRISE_SLUG,
+      uuid: TEST_ENTERPRISE_UUID,
+      ...enterpriseConfig,
+    },
+    authenticatedUser,
+    ...contextValue,
+  }), [authenticatedUser, contextValue, enterpriseConfig]);
   return (
-    <AppContext.Provider
-      value={{
-        enterpriseConfig: {
-          slug: TEST_ENTERPRISE_SLUG,
-          uuid: TEST_ENTERPRISE_UUID,
-          ...enterpriseConfig,
-        },
-        authenticatedUser,
-        ...contextValue,
-      }}
-    >
+    <AppContext.Provider value={appContextValue}>
       <UserSubsidy>
         {children}
       </UserSubsidy>
diff --git a/src/components/license-activation/tests/LicenseActivation.test.jsx b/src/components/license-activation/tests/LicenseActivation.test.jsx
index a61dfe6fab..6b1800df40 100644
--- a/src/components/license-activation/tests/LicenseActivation.test.jsx
+++ b/src/components/license-activation/tests/LicenseActivation.test.jsx
@@ -1,5 +1,5 @@
 /* eslint-disable react/prop-types */
-import React from 'react';
+import React, { useMemo } from 'react';
 import { screen, waitFor } from '@testing-library/react';
 import { AppContext } from '@edx/frontend-platform/react';
 import '@testing-library/jest-dom/extend-expect';
@@ -26,16 +26,15 @@ function LicenseActivationWithAppContext({
     activateUserLicense: jest.fn(() => true),
   },
 }) {
+  const contextValue = useMemo(() => ({
+    enterpriseConfig: {
+      uuid: TEST_ENTERPRISE_UUID,
+      slug: TEST_ENTERPRISE_SLUG,
+      name: 'Test Enterprise',
+    },
+  }), []);
   return (
-    <AppContext.Provider
-      value={{
-        enterpriseConfig: {
-          uuid: TEST_ENTERPRISE_UUID,
-          slug: TEST_ENTERPRISE_SLUG,
-          name: 'Test Enterprise',
-        },
-      }}
-    >
+    <AppContext.Provider value={contextValue}>
       <UserSubsidyContext.Provider value={initialUserSubsidyState}>
         <Route exact path="/:enterpriseSlug/licenses/:activationKey/activate">
           <LicenseActivation />
diff --git a/src/components/license-activation/tests/LicenseActivationPage.test.jsx b/src/components/license-activation/tests/LicenseActivationPage.test.jsx
index be4381dcf4..496983d980 100644
--- a/src/components/license-activation/tests/LicenseActivationPage.test.jsx
+++ b/src/components/license-activation/tests/LicenseActivationPage.test.jsx
@@ -1,5 +1,5 @@
 /* eslint-disable react/prop-types */
-import React from 'react';
+import React, { useMemo } from 'react';
 import { screen } from '@testing-library/react';
 import { AppContext } from '@edx/frontend-platform/react';
 import '@testing-library/jest-dom/extend-expect';
@@ -44,16 +44,15 @@ function LicenseActivationPageWithContext({
     },
   },
 }) {
+  const contextValue = useMemo(() => ({
+    enterpriseConfig: {
+      uuid: TEST_ENTERPRISE_UUID,
+      slug: TEST_ENTERPRISE_SLUG,
+      name: 'Test Enterprise',
+    },
+  }), []);
   return (
-    <AppContext.Provider
-      value={{
-        enterpriseConfig: {
-          uuid: TEST_ENTERPRISE_UUID,
-          slug: TEST_ENTERPRISE_SLUG,
-          name: 'Test Enterprise',
-        },
-      }}
-    >
+    <AppContext.Provider value={contextValue}>
       <UserSubsidyContext.Provider value={initialUserSubsidyState}>
         <Route exact path="/:enterpriseSlug/licenses/:activationKey/activate">
           <LicenseActivationPage />
diff --git a/src/components/pathway/tests/PathwayModal.test.jsx b/src/components/pathway/tests/PathwayModal.test.jsx
index e3b33c18df..1e8eec394c 100644
--- a/src/components/pathway/tests/PathwayModal.test.jsx
+++ b/src/components/pathway/tests/PathwayModal.test.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useMemo } from 'react';
 import { screen, fireEvent } from '@testing-library/react';
 import { AppContext } from '@edx/frontend-platform/react';
 import '@testing-library/jest-dom/extend-expect';
@@ -27,12 +27,11 @@ jest.mock('react-loading-skeleton', () => ({
 }));
 
 function PathwayModalWithAppContext(props) {
+  const contextValue = useMemo(() => ({
+    enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG },
+  }), []);
   return (
-    <AppContext.Provider
-      value={{
-        enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG },
-      }}
-    >
+    <AppContext.Provider value={contextValue}>
       <PathwayModal {...props} />
     </AppContext.Provider>
   );
diff --git a/src/components/pathway/tests/SearchPathwayCard.test.jsx b/src/components/pathway/tests/SearchPathwayCard.test.jsx
index ae91dbf180..d87321c377 100644
--- a/src/components/pathway/tests/SearchPathwayCard.test.jsx
+++ b/src/components/pathway/tests/SearchPathwayCard.test.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useMemo } from 'react';
 import { screen, fireEvent } from '@testing-library/react';
 import { AppContext } from '@edx/frontend-platform/react';
 import '@testing-library/jest-dom/extend-expect';
@@ -29,12 +29,11 @@ jest.mock('@edx/frontend-enterprise-utils', () => {
 });
 
 function SearchPathwayCardWithAppContext(props) {
+  const contextValue = useMemo(() => ({
+    enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG, uuid: TEST_ENTERPRISE_UUID },
+  }), []);
   return (
-    <AppContext.Provider
-      value={{
-        enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG, uuid: TEST_ENTERPRISE_UUID },
-      }}
-    >
+    <AppContext.Provider value={contextValue}>
       <SearchPathwayCard {...props} />
     </AppContext.Provider>
   );
diff --git a/src/components/search/tests/SearchCourseCard.test.jsx b/src/components/search/tests/SearchCourseCard.test.jsx
index 0f3eebb867..63a186c03f 100644
--- a/src/components/search/tests/SearchCourseCard.test.jsx
+++ b/src/components/search/tests/SearchCourseCard.test.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useMemo } from 'react';
 import { screen } from '@testing-library/react';
 import { AppContext } from '@edx/frontend-platform/react';
 import '@testing-library/jest-dom/extend-expect';
@@ -20,12 +20,11 @@ jest.mock('react-loading-skeleton', () => ({
 }));
 
 function SearchCourseCardWithAppContext(props) {
+  const contextValue = useMemo(() => ({
+    enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG },
+  }), []);
   return (
-    <AppContext.Provider
-      value={{
-        enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG },
-      }}
-    >
+    <AppContext.Provider value={contextValue}>
       <SearchCourseCard {...props} />
     </AppContext.Provider>
   );
diff --git a/src/components/search/tests/SearchProgramCard.test.jsx b/src/components/search/tests/SearchProgramCard.test.jsx
index ce66a83d47..d48712f239 100644
--- a/src/components/search/tests/SearchProgramCard.test.jsx
+++ b/src/components/search/tests/SearchProgramCard.test.jsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useMemo } from 'react';
 import { screen, fireEvent } from '@testing-library/react';
 import { AppContext } from '@edx/frontend-platform/react';
 import '@testing-library/jest-dom/extend-expect';
@@ -31,12 +31,11 @@ jest.mock('@edx/frontend-enterprise-utils', () => ({
 }));
 
 function SearchProgramCardWithAppContext(props) {
+  const contextValue = useMemo(() => ({
+    enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG, uuid: enterpriseUuid },
+  }), []);
   return (
-    <AppContext.Provider
-      value={{
-        enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG, uuid: enterpriseUuid },
-      }}
-    >
+    <AppContext.Provider value={contextValue}>
       <SearchProgramCard {...props} />
     </AppContext.Provider>
   );
diff --git a/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx b/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx
index 58acd25c27..560e4b8d7a 100644
--- a/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx
+++ b/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx
@@ -1,4 +1,5 @@
-import React from 'react';
+import React, { useMemo } from 'react';
+import PropTypes from 'prop-types';
 import '@testing-library/jest-dom/extend-expect';
 import userEvent from '@testing-library/user-event';
 import { screen, act } from '@testing-library/react';
@@ -68,6 +69,49 @@ const defaultSubsidyRequestState = {
   catalogsForSubsidyRequests: [],
 };
 
+function SkillsQuizStepperWrapper({ searchContext, skillsQuizContextState }) {
+  const contextValue = useMemo(() => ({ ...searchContext }), [searchContext]);
+  const skillContextProvider = skillsQuizContextState ? (
+    <SkillsContext.Provider value={skillsQuizContextState}>
+      <SkillsQuizStepper />
+    </SkillsContext.Provider>
+  ) : (
+    <SkillsContextProvider>
+      <SkillsQuizStepper />
+    </SkillsContextProvider>
+  );
+
+  const searchContextProvider = searchContext ? (
+    <SearchContext.Provider value={contextValue}>
+      {skillContextProvider}
+    </SearchContext.Provider>
+  ) : (
+    <SearchData>
+      {skillContextProvider}
+    </SearchData>
+  );
+  return (
+    <AppContext.Provider value={defaultAppState}>
+      <UserSubsidyContext.Provider value={defaultUserSubsidyState}>
+        <SubsidyRequestsContext.Provider value={defaultSubsidyRequestState}>
+          <SearchContext.Provider value={contextValue}>
+            {searchContextProvider}
+          </SearchContext.Provider>
+        </SubsidyRequestsContext.Provider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  );
+}
+SkillsQuizStepperWrapper.defaultProps = {
+  searchContext: null,
+  skillsQuizContextState: null,
+};
+
+SkillsQuizStepperWrapper.propTypes = {
+  searchContext: PropTypes.shape({}),
+  skillsQuizContextState: PropTypes.shape({}),
+};
+
 describe('<SkillsQuizStepper />', () => {
   afterAll(() => {
     jest.restoreAllMocks();
@@ -80,17 +124,7 @@ describe('<SkillsQuizStepper />', () => {
     };
 
     renderWithRouter(
-      <AppContext.Provider value={defaultAppState}>
-        <UserSubsidyContext.Provider value={defaultUserSubsidyState}>
-          <SubsidyRequestsContext.Provider value={defaultSubsidyRequestState}>
-            <SearchContext.Provider value={{ ...searchContext }}>
-              <SkillsContextProvider>
-                <SkillsQuizStepper />
-              </SkillsContextProvider>
-            </SearchContext.Provider>
-          </SubsidyRequestsContext.Provider>
-        </UserSubsidyContext.Provider>
-      </AppContext.Provider>,
+      <SkillsQuizStepperWrapper searchContext={searchContext} />,
       { route: '/test/skills-quiz/' },
     );
     expect(screen.queryByText(GOAL_DROPDOWN_DEFAULT_OPTION)).toBeInTheDocument();
@@ -112,17 +146,7 @@ describe('<SkillsQuizStepper />', () => {
     };
 
     const { getByAltText } = renderWithRouter(
-      <AppContext.Provider value={defaultAppState}>
-        <UserSubsidyContext.Provider value={defaultUserSubsidyState}>
-          <SubsidyRequestsContext.Provider value={defaultSubsidyRequestState}>
-            <SearchContext.Provider value={{ ...searchContext }}>
-              <SkillsContextProvider>
-                <SkillsQuizStepper />
-              </SkillsContextProvider>
-            </SearchContext.Provider>
-          </SubsidyRequestsContext.Provider>
-        </UserSubsidyContext.Provider>
-      </AppContext.Provider>,
+      <SkillsQuizStepperWrapper searchContext={searchContext} />,
       { route: '/test/skills-quiz/' },
     );
     expect(screen.getByText('Skills Builder')).toBeTruthy();
@@ -138,17 +162,7 @@ describe('<SkillsQuizStepper />', () => {
     };
 
     renderWithRouter(
-      <AppContext.Provider value={defaultAppState}>
-        <UserSubsidyContext.Provider value={defaultUserSubsidyState}>
-          <SubsidyRequestsContext.Provider value={defaultSubsidyRequestState}>
-            <SearchContext.Provider value={{ ...searchContext }}>
-              <SkillsContextProvider>
-                <SkillsQuizStepper />
-              </SkillsContextProvider>
-            </SearchContext.Provider>
-          </SubsidyRequestsContext.Provider>
-        </UserSubsidyContext.Provider>
-      </AppContext.Provider>,
+      <SkillsQuizStepperWrapper searchContext={searchContext} />,
       { route: '/test/skills-quiz/' },
     );
     expect(screen.getByText('Continue').disabled).toBeTruthy();
@@ -161,17 +175,7 @@ describe('<SkillsQuizStepper />', () => {
     };
 
     renderWithRouter(
-      <AppContext.Provider value={defaultAppState}>
-        <UserSubsidyContext.Provider value={defaultUserSubsidyState}>
-          <SubsidyRequestsContext.Provider value={defaultSubsidyRequestState}>
-            <SearchContext.Provider value={{ ...searchContext }}>
-              <SkillsContextProvider>
-                <SkillsQuizStepper />
-              </SkillsContextProvider>
-            </SearchContext.Provider>
-          </SubsidyRequestsContext.Provider>
-        </UserSubsidyContext.Provider>
-      </AppContext.Provider>,
+      <SkillsQuizStepperWrapper searchContext={searchContext} />,
       { route: '/test/skills-quiz/' },
     );
     expect(screen.getByText('Continue').disabled).toBeFalsy();
@@ -187,17 +191,7 @@ describe('<SkillsQuizStepper />', () => {
     };
 
     renderWithRouter(
-      <AppContext.Provider value={defaultAppState}>
-        <UserSubsidyContext.Provider value={defaultUserSubsidyState}>
-          <SubsidyRequestsContext.Provider value={defaultSubsidyRequestState}>
-            <SearchContext.Provider value={{ ...searchContext }}>
-              <SkillsContext.Provider value={skillsQuizContextInitialState}>
-                <SkillsQuizStepper />
-              </SkillsContext.Provider>
-            </SearchContext.Provider>
-          </SubsidyRequestsContext.Provider>
-        </UserSubsidyContext.Provider>
-      </AppContext.Provider>,
+      <SkillsQuizStepperWrapper searchContext={searchContext} skillsQuizContextState={skillsQuizContextInitialState} />,
       { route: '/test/skills-quiz/' },
     );
     expect(screen.getByText(DROPDOWN_OPTION_IMPROVE_CURRENT_ROLE)).toBeInTheDocument();
@@ -214,17 +208,7 @@ describe('<SkillsQuizStepper />', () => {
     };
 
     renderWithRouter(
-      <AppContext.Provider value={defaultAppState}>
-        <UserSubsidyContext.Provider value={defaultUserSubsidyState}>
-          <SubsidyRequestsContext.Provider value={defaultSubsidyRequestState}>
-            <SearchContext.Provider value={{ ...searchContext }}>
-              <SkillsContext.Provider value={skillsQuizContextInitialState}>
-                <SkillsQuizStepper />
-              </SkillsContext.Provider>
-            </SearchContext.Provider>
-          </SubsidyRequestsContext.Provider>
-        </UserSubsidyContext.Provider>
-      </AppContext.Provider>,
+      <SkillsQuizStepperWrapper searchContext={searchContext} skillsQuizContextState={skillsQuizContextInitialState} />,
       { route: '/test/skills-quiz/' },
     );
     expect(screen.getByText(DROPDOWN_OPTION_IMPROVE_CURRENT_ROLE)).toBeInTheDocument();
@@ -241,17 +225,7 @@ describe('<SkillsQuizStepper />', () => {
     };
 
     renderWithRouter(
-      <AppContext.Provider value={defaultAppState}>
-        <UserSubsidyContext.Provider value={defaultUserSubsidyState}>
-          <SubsidyRequestsContext.Provider value={defaultSubsidyRequestState}>
-            <SearchContext.Provider value={{ ...searchContext }}>
-              <SkillsContext.Provider value={skillsQuizContextInitialState}>
-                <SkillsQuizStepper />
-              </SkillsContext.Provider>
-            </SearchContext.Provider>
-          </SubsidyRequestsContext.Provider>
-        </UserSubsidyContext.Provider>
-      </AppContext.Provider>,
+      <SkillsQuizStepperWrapper searchContext={searchContext} skillsQuizContextState={skillsQuizContextInitialState} />,
       { route: '/test/skills-quiz/' },
     );
     expect(screen.queryByText(GOAL_DROPDOWN_DEFAULT_OPTION)).toBeInTheDocument();
@@ -267,17 +241,7 @@ describe('<SkillsQuizStepper />', () => {
     };
 
     renderWithRouter(
-      <AppContext.Provider value={defaultAppState}>
-        <UserSubsidyContext.Provider value={defaultUserSubsidyState}>
-          <SubsidyRequestsContext.Provider value={defaultSubsidyRequestState}>
-            <SearchContext.Provider value={searchContext}>
-              <SkillsContextProvider>
-                <SkillsQuizStepper />
-              </SkillsContextProvider>
-            </SearchContext.Provider>
-          </SubsidyRequestsContext.Provider>
-        </UserSubsidyContext.Provider>
-      </AppContext.Provider>,
+      <SkillsQuizStepperWrapper searchContext={searchContext} />,
       { route: '/test/skills-quiz/' },
     );
     expect(screen.queryByText(GOAL_DROPDOWN_DEFAULT_OPTION)).toBeInTheDocument();
@@ -322,17 +286,7 @@ describe('<SkillsQuizStepper />', () => {
     };
 
     renderWithRouter(
-      <AppContext.Provider value={defaultAppState}>
-        <UserSubsidyContext.Provider value={defaultUserSubsidyState}>
-          <SubsidyRequestsContext.Provider value={defaultSubsidyRequestState}>
-            <SearchContext.Provider value={{ ...searchContext }}>
-              <SkillsContextProvider>
-                <SkillsQuizStepper />
-              </SkillsContextProvider>
-            </SearchContext.Provider>
-          </SubsidyRequestsContext.Provider>
-        </UserSubsidyContext.Provider>
-      </AppContext.Provider>,
+      <SkillsQuizStepperWrapper searchContext={searchContext} />,
       { route: '/test/skills-quiz/' },
     );
 
@@ -378,17 +332,7 @@ describe('<SkillsQuizStepper />', () => {
     };
 
     renderWithRouter(
-      <AppContext.Provider value={defaultAppState}>
-        <UserSubsidyContext.Provider value={defaultUserSubsidyState}>
-          <SubsidyRequestsContext.Provider value={defaultSubsidyRequestState}>
-            <SearchData>
-              <SkillsContext.Provider value={skillsQuizContextInitialState}>
-                <SkillsQuizStepper />
-              </SkillsContext.Provider>
-            </SearchData>
-          </SubsidyRequestsContext.Provider>
-        </UserSubsidyContext.Provider>
-      </AppContext.Provider>,
+      <SkillsQuizStepperWrapper skillsQuizContextState={skillsQuizContextInitialState} />,
       { route: '/test/skills-quiz/?skill_names=xyz' },
     );
     const isStudentCheckbox = screen.getByTestId('is-student-checkbox');

From 9e4a052401b44394893dddceb8c2aee1bdea6b4a Mon Sep 17 00:00:00 2001
From: Bilal Qamar <59555732+BilalQamar95@users.noreply.github.com>
Date: Fri, 28 Oct 2022 12:12:29 +0500
Subject: [PATCH 12/13] refactor: updated frontend-build & resolved eslint
 issues

---
 package-lock.json                             | 2395 ++++++++---------
 package.json                                  |    2 +-
 src/components/NotFoundPage/index.jsx         |    4 +-
 src/components/TagCloud/index.jsx             |   34 +-
 src/components/Toasts/ToastsProvider.jsx      |    4 +-
 src/components/app/App.jsx                    |    6 +-
 src/components/app/AuthenticatedPage.jsx      |    6 +-
 .../app/AuthenticatedUserSubsidyPage.jsx      |   24 +-
 .../app/EnterpriseAppPageRoutes.jsx           |   50 +-
 src/components/app/LoginRefresh.jsx           |    4 +-
 src/components/app/LoginRefresh.test.jsx      |    4 +-
 src/components/contact-admin-mailto/index.jsx |    6 +-
 .../course/CourseAssociatedPrograms.jsx       |    6 +-
 .../course/CourseContextProvider.jsx          |    4 +-
 .../course/CourseEnrollmentFailedAlert.jsx    |    4 +-
 src/components/course/CourseHeader.jsx        |    6 +-
 src/components/course/CourseMainContent.jsx   |    6 +-
 src/components/course/CoursePage.jsx          |    6 +-
 .../course/CourseRecommendationCard.jsx       |    4 +-
 .../course/CourseRecommendations.jsx          |    4 +-
 src/components/course/CourseRunCard.jsx       |   18 +-
 src/components/course/CourseRunCards.jsx      |    4 +-
 src/components/course/CourseSidebar.jsx       |    6 +-
 .../course/CourseSidebarListItem.jsx          |   28 +-
 src/components/course/CourseSidebarPrice.jsx  |    4 +-
 src/components/course/CourseSkills.jsx        |    6 +-
 src/components/course/CreatedBy.jsx           |    6 +-
 src/components/course/EnrollModal.jsx         |    6 +-
 .../course/LicenseRequestedAlert.jsx          |    4 +-
 .../course/SubsidyRequestButton.jsx           |    2 +-
 src/components/course/VerifiedCertPitch.jsx   |   74 +-
 .../course/enrollment/EnrollAction.jsx        |    4 +-
 src/components/course/enrollment/common.jsx   |   30 +-
 .../enrollment/components/DisabledEnroll.jsx  |   16 +-
 .../components/ToCoursewarePage.jsx           |    6 +-
 .../components/ToDataSharingConsent.jsx       |    2 +-
 .../components/ToEcomBasketPage.jsx           |    4 +-
 .../enrollment/components/ViewOnDashboard.jsx |    4 +-
 .../enrollment/tests/EnrollAction.test.jsx    |    7 +-
 .../tests/ToEcomBasketPage.test.jsx           |   22 +-
 .../course/enrollment/tests/hooks.test.jsx    |   22 +-
 .../tests/CourseAssociatedPrograms.test.jsx   |   18 +-
 .../tests/CourseContextProvider.test.jsx      |   18 +-
 .../CourseEnrollmentFailedAlert.test.jsx      |   18 +-
 .../course/tests/CourseHeader.test.jsx        |   30 +-
 .../tests/CourseRecommendationCard.test.jsx   |   12 +-
 .../tests/CourseRecommendations.test.jsx      |   16 +-
 .../course/tests/CourseRunCard.test.jsx       |   15 +-
 .../course/tests/CourseSidebarPrice.test.jsx  |   26 +-
 .../course/tests/CourseSkills.test.jsx        |   22 +-
 .../course/tests/CreatedBy.test.jsx           |   16 +-
 .../tests/LicenseRequestedAlert.test.jsx      |    6 +-
 .../tests/SubsidyRequestButton.test.jsx       |   25 +-
 src/components/dashboard/DashboardPage.jsx    |    6 +-
 .../dashboard/SubscriptionExpirationModal.jsx |    4 +-
 .../main-content/DashboardMainContent.jsx     |    4 +-
 .../course-enrollments/CollapsibleIcon.jsx    |   16 +-
 .../course-enrollments/CourseEnrollments.jsx  |    4 +-
 .../CourseEnrollmentsAlert.jsx                |    6 +-
 .../CourseEnrollmentsContextProvider.jsx      |    4 +-
 ...adeableCourseEnrollmentContextProvider.jsx |    4 +-
 .../course-cards/CompletedCourseCard.jsx      |    4 +-
 .../course-cards/ContinueLearningButton.jsx   |    8 +-
 .../course-cards/InProgressCourseCard.jsx     |    6 +-
 .../course-cards/Notification.jsx             |   50 +-
 .../course-cards/RequestedCourseCard.jsx      |   16 +-
 .../course-cards/SavedForLaterCourseCard.jsx  |    4 +-
 .../course-cards/UpcomingCourseCard.jsx       |    4 +-
 .../course-cards/UpgradeCourseButton.jsx      |    8 +-
 .../mark-complete-modal/MarkCompleteModal.jsx |    6 +-
 .../mark-complete-modal/ModalBody.jsx         |    4 +-
 .../mark-complete-modal/ModalError.jsx        |    4 +-
 .../tests/MarkCompleteModal.test.jsx          |    4 +-
 .../move-to-in-progress-modal/ModalBody.jsx   |    4 +-
 .../move-to-in-progress-modal/ModalError.jsx  |    4 +-
 .../MoveToInProgressModal.jsx                 |    6 +-
 .../tests/BaseCourseCard.test.jsx             |    8 +-
 .../tests/InProgressCourseCard.test.jsx       |   26 +-
 .../course-cards/unenroll/UnenrollModal.jsx   |    8 +-
 .../unenroll/UnenrollModal.test.jsx           |    6 +-
 .../tests/CourseEnrollments.test.jsx          |    4 +-
 .../tests/CourseSection.test.jsx              |    4 +-
 .../sidebar/CouponCodesSummaryCard.jsx        |    6 +-
 .../dashboard/sidebar/DashboardSidebar.jsx    |   22 +-
 .../sidebar/EnterpriseOffersSummaryCard.jsx   |    2 +-
 .../dashboard/sidebar/SidebarCard.jsx         |   24 +-
 .../sidebar/SubscriptionSummaryCard.jsx       |    6 +-
 .../dashboard/sidebar/SubsidiesSummary.jsx    |   82 +-
 .../dashboard/sidebar/SupportInformation.jsx  |    4 +-
 .../sidebar/tests/DashboardSidebar.test.jsx   |   26 +-
 .../tests/SubscriptionSummaryCard.test.jsx    |   16 +-
 .../dashboard/tests/DashboardPage.test.jsx    |   30 +-
 .../enterprise-banner/EnterpriseBanner.jsx    |    6 +-
 .../tests/EnterpriseBanner.test.jsx           |    4 +-
 .../EnterpriseInvitePage.jsx                  |    4 +-
 .../enterprise-page/EnterprisePage.jsx        |    6 +-
 .../enterprise-page/EnterprisePage.test.jsx   |    4 +-
 .../EnterpriseCustomerRedirect.jsx            |    4 +-
 .../EnterprisePageRedirect.jsx                |    4 +-
 .../tests/EnterpriseCustomerRedirect.test.jsx |   14 +-
 .../tests/EnterprisePageRedirect.test.jsx     |   14 +-
 .../SubsidyRequestsContextProvider.jsx        |    4 +-
 .../SubsidyRequestsContextProvider.test.jsx   |   22 +-
 .../AutoActivateLicense.jsx                   |    4 +-
 .../enterprise-user-subsidy/UserSubsidy.jsx   |    4 +-
 .../EnterpriseOffersBalanceAlert.jsx          |    4 +-
 .../EnterpriseOffersBalanceAlert.test.jsx     |    6 +-
 .../tests/AutoActivateLicense.test.jsx        |    4 +-
 .../tests/UserSubsidy.test.jsx                |   14 +-
 src/components/error-page/ErrorPage.jsx       |   38 +-
 .../error-page/ErrorPageContent.jsx           |   12 +-
 src/components/error-page/ErrorPageHeader.jsx |    4 +-
 .../error-page/ErrorPageSubtitle.jsx          |    4 +-
 src/components/error-page/ErrorPageTitle.jsx  |    4 +-
 .../ExecutiveEducation2UError.jsx             |    4 +-
 .../ExecutiveEducation2UPage.jsx              |    4 +-
 .../ExecutiveEducation2UPage.test.jsx         |   14 +-
 .../FormSectionHeading.jsx                    |    4 +-
 .../UserEnrollmentForm.jsx                    |    6 +-
 .../UserEnrollmentForm.test.jsx               |   22 +-
 .../IntegrationWarningModal.jsx               |    6 +-
 .../integration-warning-modal/ModalBody.jsx   |   20 +-
 src/components/layout/Layout.jsx              |    6 +-
 src/components/layout/MainContent.jsx         |   12 +-
 src/components/layout/SidebarBlock.jsx        |    6 +-
 .../license-activation/LicenseActivation.jsx  |    4 +-
 .../LicenseActivationErrorAlert.jsx           |   26 +-
 .../LicenseActivationPage.jsx                 |    4 +-
 .../tests/LicenseActivation.test.jsx          |    6 +-
 .../tests/LicenseActivationPage.test.jsx      |    6 +-
 .../loading-spinner/LoadingSpinner.jsx        |   14 +-
 .../pathway-progress/PathwayNode.jsx          |    4 +-
 .../pathway-progress/PathwayProgressCard.jsx  |    4 +-
 .../PathwayProgressContextProvider.jsx        |   12 +-
 .../PathwayProgressHeader.jsx                 |    4 +-
 .../PathwayProgressListingPage.jsx            |   44 +-
 .../pathway-progress/PathwayProgressPage.jsx  |    6 +-
 .../pathway-progress/PathwayRequirements.jsx  |    6 +-
 .../pathway-progress/PathwayStep.jsx          |    4 +-
 .../SubscriptionStatusCard.jsx                |    4 +-
 .../tests/PathwayProgressListingCard.test.jsx |   16 +-
 .../tests/PathwayProgressListingPage.test.jsx |   22 +-
 src/components/pathway/PathwayModal.jsx       |    8 +-
 src/components/pathway/SearchPathwayCard.jsx  |    8 +-
 .../pathway/tests/PathwayModal.test.jsx       |    4 +-
 .../pathway/tests/SearchPathwayCard.test.jsx  |    4 +-
 .../preview-expand/PreviewExpand.jsx          |    8 +-
 .../CouponCodesWarningModal.jsx               |    4 +-
 .../program-progress/ProgramListingCard.jsx   |    4 +-
 .../program-progress/ProgramListingPage.jsx   |   34 +-
 .../ProgramPathwayOpportunity.jsx             |   54 +-
 .../program-progress/ProgramProgress.jsx      |   14 +-
 .../ProgramProgressCircle.jsx                 |   10 +-
 .../ProgramProgressContextProvider.jsx        |   12 +-
 .../ProgramProgressCourses.jsx                |    4 +-
 .../ProgramProgressHeader.jsx                 |    4 +-
 .../program-progress/ProgramProgressPage.jsx  |    4 +-
 .../ProgramProgressRedirect.jsx               |    4 +-
 .../ProgramProgressSidebar.jsx                |    4 +-
 .../SubscriptionExpiringWarningModal.jsx      |    6 +-
 .../tests/ProgramListingCard.test.jsx         |   16 +-
 .../tests/ProgramListingPage.test.jsx         |   22 +-
 .../tests/ProgramProgressCircle.test.jsx      |   14 +-
 .../tests/ProgramProgressCourses.test.jsx     |   22 +-
 .../tests/ProgramProgressHeader.test.jsx      |   14 +-
 .../tests/ProgramProgressSidebar.test.jsx     |   14 +-
 src/components/program/BulletList.jsx         |   20 +-
 src/components/program/ProgramCTA.jsx         |    4 +-
 .../program/ProgramContextProvider.jsx        |   12 +-
 src/components/program/ProgramCourses.jsx     |    4 +-
 src/components/program/ProgramDataBar.jsx     |    4 +-
 .../program/ProgramDataBarDetails.jsx         |    4 +-
 .../program/ProgramEndorsements.jsx           |    4 +-
 src/components/program/ProgramFAQ.jsx         |    4 +-
 src/components/program/ProgramHeader.jsx      |    4 +-
 src/components/program/ProgramInstructors.jsx |    8 +-
 src/components/program/ProgramMainContent.jsx |    4 +-
 src/components/program/ProgramPage.jsx        |    4 +-
 src/components/program/ProgramSidebar.jsx     |    4 +-
 .../program/ProgramSidebarListItem.jsx        |   28 +-
 .../program/tests/ProgramCTA.test.jsx         |   26 +-
 .../program/tests/ProgramCourses.test.jsx     |   22 +-
 .../program/tests/ProgramDataBar.test.jsx     |   20 +-
 .../tests/ProgramEndorsements.test.jsx        |   22 +-
 .../program/tests/ProgramFAQ.test.jsx         |   22 +-
 .../program/tests/ProgramHeader.test.jsx      |   22 +-
 .../program/tests/ProgramInstructors.test.jsx |   12 +-
 .../program/tests/ProgramMainContent.test.jsx |   22 +-
 .../program/tests/ProgramPage.test.jsx        |   22 +-
 .../program/tests/ProgramSidebar.test.jsx     |   22 +-
 .../ProgressCategoryBubbles.jsx               |   34 +-
 src/components/search/Search.jsx              |    4 +-
 src/components/search/SearchCourse.jsx        |    4 +-
 src/components/search/SearchCourseCard.jsx    |    8 +-
 src/components/search/SearchError.jsx         |    4 +-
 src/components/search/SearchNoResults.jsx     |    4 +-
 src/components/search/SearchPathway.jsx       |    4 +-
 src/components/search/SearchProgram.jsx       |    4 +-
 src/components/search/SearchProgramCard.jsx   |    8 +-
 src/components/search/SearchResults.jsx       |    6 +-
 .../search/popular-results/PopularResults.jsx |    6 +-
 .../popular-results/PopularResultsIndex.jsx   |    4 +-
 .../search/tests/SearchCourseCard.test.jsx    |    4 +-
 .../search/tests/SearchProgramCard.test.jsx   |    4 +-
 .../search/tests/SearchResults.test.jsx       |   24 +-
 src/components/site-header/AvatarDropdown.jsx |    4 +-
 src/components/site-header/SiteHeader.jsx     |    6 +-
 .../site-header/SiteHeaderLogos.jsx           |    4 +-
 .../site-header/SiteHeaderNavMenu.jsx         |    4 +-
 src/components/site-header/menu/Menu.jsx      |   20 +-
 .../site-header/tests/SiteHeader.test.jsx     |   14 +-
 .../skills-quiz/CardLoadingSkeleton.jsx       |   64 +-
 src/components/skills-quiz/CourseCard.jsx     |    6 +-
 .../skills-quiz/CurrentJobDropdown.jsx        |    4 +-
 src/components/skills-quiz/GoalDropdown.jsx   |    4 +-
 .../skills-quiz/JobCardComponent.jsx          |    4 +-
 .../skills-quiz/SearchCourseCard.jsx          |    4 +-
 .../skills-quiz/SearchCurrentJobCard.jsx      |    4 +-
 src/components/skills-quiz/SearchJobCard.jsx  |    4 +-
 .../skills-quiz/SearchJobDropdown.jsx         |    4 +-
 src/components/skills-quiz/SearchPathways.jsx |    4 +-
 .../skills-quiz/SearchProgramCard.jsx         |    4 +-
 src/components/skills-quiz/SelectJobCard.jsx  |    4 +-
 .../skills-quiz/SelectedJobSkills.jsx         |    4 +-
 .../skills-quiz/SkillsContextProvider.jsx     |    4 +-
 src/components/skills-quiz/SkillsCourses.jsx  |    4 +-
 src/components/skills-quiz/SkillsDropDown.jsx |    4 +-
 src/components/skills-quiz/SkillsQuiz.jsx     |    4 +-
 .../skills-quiz/SkillsQuizHeader.jsx          |   28 +-
 src/components/skills-quiz/SkillsQuizPage.jsx |    6 +-
 .../skills-quiz/SkillsQuizStepper.jsx         |    4 +-
 .../skills-quiz/data/tests/service.test.jsx   |    1 +
 .../skills-quiz/tests/GoalsDropdown.test.jsx  |   22 +-
 .../tests/SearchCourseCard.test.jsx           |   30 +-
 .../tests/SearchCurrentJobCard.test.jsx       |   22 +-
 .../skills-quiz/tests/SearchJobCard.test.jsx  |   22 +-
 .../skills-quiz/tests/SearchPathways.test.jsx |   30 +-
 .../tests/SearchProgramCard.test.jsx          |   30 +-
 .../skills-quiz/tests/SelectJobCard.test.jsx  |   22 +-
 .../tests/SelectedJobSkills.test.jsx          |   22 +-
 .../skills-quiz/tests/SkillsCourses.test.jsx  |   30 +-
 .../skills-quiz/tests/SkillsQuiz.test.jsx     |   22 +-
 .../tests/SkillsQuizStepper.test.jsx          |    4 +-
 .../SystemWideWarningBanner.jsx               |   14 +-
 src/utils/tests.jsx                           |    4 +-
 245 files changed, 2516 insertions(+), 2717 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index ea49a8923f..891bbe6d45 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -60,7 +60,7 @@
         "universal-cookie": "4.0.4"
       },
       "devDependencies": {
-        "@edx/frontend-build": "12.0.3",
+        "@edx/frontend-build": "12.3.0",
         "@testing-library/jest-dom": "5.11.9",
         "@testing-library/react": "11.2.7",
         "@testing-library/react-hooks": "3.7.0",
@@ -261,9 +261,9 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.18.8",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz",
-      "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==",
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz",
+      "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
@@ -336,12 +336,12 @@
       }
     },
     "node_modules/@babel/generator": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz",
-      "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz",
+      "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.18.10",
+        "@babel/types": "^7.19.4",
         "@jridgewell/gen-mapping": "^0.3.2",
         "jsesc": "^2.5.1"
       },
@@ -375,14 +375,14 @@
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz",
-      "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==",
+      "version": "7.19.3",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz",
+      "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==",
       "dev": true,
       "dependencies": {
-        "@babel/compat-data": "^7.18.8",
+        "@babel/compat-data": "^7.19.3",
         "@babel/helper-validator-option": "^7.18.6",
-        "browserslist": "^4.20.2",
+        "browserslist": "^4.21.3",
         "semver": "^6.3.0"
       },
       "engines": {
@@ -402,14 +402,14 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz",
-      "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz",
+      "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==",
       "dev": true,
       "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
         "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/helper-member-expression-to-functions": "^7.18.9",
         "@babel/helper-optimise-call-expression": "^7.18.6",
         "@babel/helper-replace-supers": "^7.18.9",
@@ -423,9 +423,9 @@
       }
     },
     "node_modules/@babel/helper-create-regexp-features-plugin": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz",
-      "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz",
+      "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==",
       "dev": true,
       "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
@@ -439,9 +439,9 @@
       }
     },
     "node_modules/@babel/helper-define-polyfill-provider": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz",
-      "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==",
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz",
+      "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==",
       "dev": true,
       "dependencies": {
         "@babel/helper-compilation-targets": "^7.17.7",
@@ -486,13 +486,13 @@
       }
     },
     "node_modules/@babel/helper-function-name": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
-      "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
+      "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
       "dev": true,
       "dependencies": {
-        "@babel/template": "^7.18.6",
-        "@babel/types": "^7.18.9"
+        "@babel/template": "^7.18.10",
+        "@babel/types": "^7.19.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -535,19 +535,19 @@
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
-      "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz",
+      "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==",
       "dev": true,
       "dependencies": {
         "@babel/helper-environment-visitor": "^7.18.9",
         "@babel/helper-module-imports": "^7.18.6",
-        "@babel/helper-simple-access": "^7.18.6",
+        "@babel/helper-simple-access": "^7.19.4",
         "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/helper-validator-identifier": "^7.18.6",
-        "@babel/template": "^7.18.6",
-        "@babel/traverse": "^7.18.9",
-        "@babel/types": "^7.18.9"
+        "@babel/helper-validator-identifier": "^7.19.1",
+        "@babel/template": "^7.18.10",
+        "@babel/traverse": "^7.19.6",
+        "@babel/types": "^7.19.4"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -566,9 +566,9 @@
       }
     },
     "node_modules/@babel/helper-plugin-utils": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
-      "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz",
+      "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
@@ -593,28 +593,28 @@
       }
     },
     "node_modules/@babel/helper-replace-supers": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz",
-      "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz",
+      "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==",
       "dev": true,
       "dependencies": {
         "@babel/helper-environment-visitor": "^7.18.9",
         "@babel/helper-member-expression-to-functions": "^7.18.9",
         "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/traverse": "^7.18.9",
-        "@babel/types": "^7.18.9"
+        "@babel/traverse": "^7.19.1",
+        "@babel/types": "^7.19.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
-      "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz",
+      "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.18.6"
+        "@babel/types": "^7.19.4"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -645,18 +645,18 @@
       }
     },
     "node_modules/@babel/helper-string-parser": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
-      "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
+      "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
-      "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+      "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
       "engines": {
         "node": ">=6.9.0"
       }
@@ -671,29 +671,29 @@
       }
     },
     "node_modules/@babel/helper-wrap-function": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.10.tgz",
-      "integrity": "sha512-95NLBP59VWdfK2lyLKe6eTMq9xg+yWKzxzxbJ1wcYNi1Auz200+83fMDADjRxBvc2QQor5zja2yTQzXGhk2GtQ==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz",
+      "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/template": "^7.18.10",
-        "@babel/traverse": "^7.18.10",
-        "@babel/types": "^7.18.10"
+        "@babel/traverse": "^7.19.0",
+        "@babel/types": "^7.19.0"
       },
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz",
-      "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==",
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz",
+      "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==",
       "dev": true,
       "dependencies": {
-        "@babel/template": "^7.18.6",
-        "@babel/traverse": "^7.18.9",
-        "@babel/types": "^7.18.9"
+        "@babel/template": "^7.18.10",
+        "@babel/traverse": "^7.19.4",
+        "@babel/types": "^7.19.4"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -713,9 +713,9 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.10.tgz",
-      "integrity": "sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz",
+      "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==",
       "dev": true,
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -757,13 +757,13 @@
       }
     },
     "node_modules/@babel/plugin-proposal-async-generator-functions": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz",
-      "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz",
+      "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==",
       "dev": true,
       "dependencies": {
         "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.19.0",
         "@babel/helper-remap-async-to-generator": "^7.18.9",
         "@babel/plugin-syntax-async-generators": "^7.8.4"
       },
@@ -1284,12 +1284,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-block-scoping": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz",
-      "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==",
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz",
+      "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.18.9"
+        "@babel/helper-plugin-utils": "^7.19.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1299,16 +1299,17 @@
       }
     },
     "node_modules/@babel/plugin-transform-classes": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz",
-      "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz",
+      "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==",
       "dev": true,
       "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-compilation-targets": "^7.19.0",
         "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.19.0",
         "@babel/helper-replace-supers": "^7.18.9",
         "@babel/helper-split-export-declaration": "^7.18.6",
         "globals": "^11.1.0"
@@ -1336,12 +1337,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-destructuring": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz",
-      "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==",
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz",
+      "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.18.9"
+        "@babel/helper-plugin-utils": "^7.19.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1460,14 +1461,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-amd": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz",
-      "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz",
+      "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
+        "@babel/helper-module-transforms": "^7.19.6",
+        "@babel/helper-plugin-utils": "^7.19.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1477,15 +1477,14 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-commonjs": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz",
-      "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz",
+      "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-module-transforms": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6",
-        "@babel/helper-simple-access": "^7.18.6",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
+        "@babel/helper-module-transforms": "^7.19.6",
+        "@babel/helper-plugin-utils": "^7.19.0",
+        "@babel/helper-simple-access": "^7.19.4"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1495,16 +1494,15 @@
       }
     },
     "node_modules/@babel/plugin-transform-modules-systemjs": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz",
-      "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz",
+      "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==",
       "dev": true,
       "dependencies": {
         "@babel/helper-hoist-variables": "^7.18.6",
-        "@babel/helper-module-transforms": "^7.18.9",
-        "@babel/helper-plugin-utils": "^7.18.9",
-        "@babel/helper-validator-identifier": "^7.18.6",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
+        "@babel/helper-module-transforms": "^7.19.6",
+        "@babel/helper-plugin-utils": "^7.19.0",
+        "@babel/helper-validator-identifier": "^7.19.1"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1530,13 +1528,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz",
-      "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz",
+      "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6"
+        "@babel/helper-create-regexp-features-plugin": "^7.19.0",
+        "@babel/helper-plugin-utils": "^7.19.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1607,9 +1605,9 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-constant-elements": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.9.tgz",
-      "integrity": "sha512-IrTYh1I3YCEL1trjknnlLKTp5JggjzhKl/d3ibzPc97JhpFcDTr38Jdek/oX4cFbS6By0bXJcOkpRvJ5ZHK2wQ==",
+      "version": "7.18.12",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.12.tgz",
+      "integrity": "sha512-Q99U9/ttiu+LMnRU8psd23HhvwXmKWDQIpocm0JKaICcZHnw+mdQbHm6xnSy7dOl8I5PELakYtNBubNQlBXbZw==",
       "dev": true,
       "dependencies": {
         "@babel/helper-plugin-utils": "^7.18.9"
@@ -1637,16 +1635,16 @@
       }
     },
     "node_modules/@babel/plugin-transform-react-jsx": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz",
-      "integrity": "sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz",
+      "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==",
       "dev": true,
       "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
         "@babel/helper-module-imports": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.19.0",
         "@babel/plugin-syntax-jsx": "^7.18.6",
-        "@babel/types": "^7.18.10"
+        "@babel/types": "^7.19.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -1733,12 +1731,12 @@
       }
     },
     "node_modules/@babel/plugin-transform-spread": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz",
-      "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz",
+      "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.19.0",
         "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9"
       },
       "engines": {
@@ -1794,13 +1792,13 @@
       }
     },
     "node_modules/@babel/plugin-transform-typescript": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.10.tgz",
-      "integrity": "sha512-j2HQCJuMbi88QftIb5zlRu3c7PU+sXNnscqsrjqegoGiCgXR569pEdben9vly5QHKL2ilYkfnSwu64zsZo/VYQ==",
+      "version": "7.19.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz",
+      "integrity": "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.18.9",
-        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-create-class-features-plugin": "^7.19.0",
+        "@babel/helper-plugin-utils": "^7.19.0",
         "@babel/plugin-syntax-typescript": "^7.18.6"
       },
       "engines": {
@@ -2029,19 +2027,19 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.10.tgz",
-      "integrity": "sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz",
+      "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==",
       "dev": true,
       "dependencies": {
         "@babel/code-frame": "^7.18.6",
-        "@babel/generator": "^7.18.10",
+        "@babel/generator": "^7.19.6",
         "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/helper-hoist-variables": "^7.18.6",
         "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/parser": "^7.18.10",
-        "@babel/types": "^7.18.10",
+        "@babel/parser": "^7.19.6",
+        "@babel/types": "^7.19.4",
         "debug": "^4.1.0",
         "globals": "^11.1.0"
       },
@@ -2050,13 +2048,13 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz",
-      "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==",
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz",
+      "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-string-parser": "^7.18.10",
-        "@babel/helper-validator-identifier": "^7.18.6",
+        "@babel/helper-string-parser": "^7.19.4",
+        "@babel/helper-validator-identifier": "^7.19.1",
         "to-fast-properties": "^2.0.0"
       },
       "engines": {
@@ -2123,9 +2121,9 @@
       }
     },
     "node_modules/@edx/frontend-build": {
-      "version": "12.0.3",
-      "resolved": "https://registry.npmjs.org/@edx/frontend-build/-/frontend-build-12.0.3.tgz",
-      "integrity": "sha512-q/BoMntXSXSXfSTUpr7G051jrqkAvEFRQHG4+R2rPMQX+Ok2FSE9HTa74kkEP2H2Ij6x5VHXhU5F1powu/x6Zw==",
+      "version": "12.3.0",
+      "resolved": "https://registry.npmjs.org/@edx/frontend-build/-/frontend-build-12.3.0.tgz",
+      "integrity": "sha512-GewVd5qD59d8hHZFnXyS5jWkDY8TWYENqO5dd+/Kmu7cmjKrp69PKmNyVs+QgZEADodYI5UT48A2LhsDZjDx7A==",
       "dev": true,
       "dependencies": {
         "@babel/cli": "7.16.0",
@@ -2535,14 +2533,14 @@
       }
     },
     "node_modules/@eslint/eslintrc": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
-      "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz",
+      "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==",
       "dev": true,
       "dependencies": {
         "ajv": "^6.12.4",
         "debug": "^4.3.2",
-        "espree": "^9.3.2",
+        "espree": "^9.4.0",
         "globals": "^13.15.0",
         "ignore": "^5.2.0",
         "import-fresh": "^3.2.1",
@@ -2552,6 +2550,9 @@
       },
       "engines": {
         "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
     "node_modules/@eslint/eslintrc/node_modules/argparse": {
@@ -3675,13 +3676,13 @@
       "dev": true
     },
     "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.14",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
-      "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
+      "version": "0.3.17",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+      "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
       "dev": true,
       "dependencies": {
-        "@jridgewell/resolve-uri": "^3.0.3",
-        "@jridgewell/sourcemap-codec": "^1.4.10"
+        "@jridgewell/resolve-uri": "3.1.0",
+        "@jridgewell/sourcemap-codec": "1.4.14"
       }
     },
     "node_modules/@newrelic/publish-sourcemap": {
@@ -3863,9 +3864,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-add-jsx-attribute": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.3.1.tgz",
-      "integrity": "sha512-jDBKArXYO1u0B1dmd2Nf8Oy6aTF5vLDfLoO9Oon/GLkqZ/NiggYWZA+a2HpUMH4ITwNqS3z43k8LWApB8S583w==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.0.tgz",
+      "integrity": "sha512-Cp1JR1IPrQNvPRbkfcPmax52iunBC+eQDyBce8feOIIbVH6ZpVhErYoJtPWRBj2rKi4Wi9HvCm1+L1UD6QlBmg==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -3879,9 +3880,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-remove-jsx-attribute": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.3.1.tgz",
-      "integrity": "sha512-dQzyJ4prwjcFd929T43Z8vSYiTlTu8eafV40Z2gO7zy/SV5GT+ogxRJRBIKWomPBOiaVXFg3jY4S5hyEN3IBjQ==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz",
+      "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -3895,9 +3896,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.3.1.tgz",
-      "integrity": "sha512-HBOUc1XwSU67fU26V5Sfb8MQsT0HvUyxru7d0oBJ4rA2s4HW3PhyAPC7fV/mdsSGpAvOdd8Wpvkjsr0fWPUO7A==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz",
+      "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -3911,9 +3912,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.3.1.tgz",
-      "integrity": "sha512-C12e6aN4BXAolRrI601gPn5MDFCRHO7C4TM8Kks+rDtl8eEq+NN1sak0eAzJu363x3TmHXdZn7+Efd2nr9I5dA==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.0.tgz",
+      "integrity": "sha512-XWm64/rSPUCQ+MFyA9lhMO+w8bOZvkTvovRIU1lpIy63ysPaVAFtxjQiZj+S7QaLaLGUXkSkf8WZsaN+QPo/gA==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -3927,9 +3928,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-svg-dynamic-title": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.3.1.tgz",
-      "integrity": "sha512-6NU55Mmh3M5u2CfCCt6TX29/pPneutrkJnnDCHbKZnjukZmmgUAZLtZ2g6ZoSPdarowaQmAiBRgAHqHmG0vuqA==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.0.tgz",
+      "integrity": "sha512-JIF2D2ltiWFGlTw2fJ9jJg1fNT9rWjOD2Cf0/xzeW6Z2LIRQTHcRHxpZq359+SRWtEPsCXEWV2Xmd+DMBj6dBw==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -3943,9 +3944,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-svg-em-dimensions": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.3.1.tgz",
-      "integrity": "sha512-HV1NGHYTTe1vCNKlBgq/gKuCSfaRlKcHIADn7P8w8U3Zvujdw1rmusutghJ1pZJV7pDt3Gt8ws+SVrqHnBO/Qw==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.0.tgz",
+      "integrity": "sha512-uuo0FfLP4Nu2zncOcoUFDzZdXWma2bxkTGk0etRThs4/PghvPIGaW8cPhCg6yJ8zpaauWcKV0wZtzKlJRCtVzg==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -3959,9 +3960,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-transform-react-native-svg": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.3.1.tgz",
-      "integrity": "sha512-2wZhSHvTolFNeKDAN/ZmIeSz2O9JSw72XD+o2bNp2QAaWqa8KGpn5Yk5WHso6xqfSAiRzAE+GXlsrBO4UP9LLw==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.0.tgz",
+      "integrity": "sha512-VMRWyOmrV+DaEFPgP3hZMsFgs2g87ojs3txw0Rx8iz6Nf/E3UoHUwTqpkSCWd3Hsnc9gMOY9+wl6+/Ycleh1sw==",
       "dev": true,
       "engines": {
         "node": ">=10"
@@ -3975,9 +3976,9 @@
       }
     },
     "node_modules/@svgr/babel-plugin-transform-svg-component": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.3.1.tgz",
-      "integrity": "sha512-cZ8Tr6ZAWNUFfDeCKn/pGi976iWSkS8ijmEYKosP+6ktdZ7lW9HVLHojyusPw3w0j8PI4VBeWAXAmi/2G7owxw==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.0.tgz",
+      "integrity": "sha512-b67Ul3SelaqvGEEG/1B3VJ03KUtGFgRQjRLCCjdttMQLcYa9l/izQFEclNFx53pNqhijUMNKHPhGMY/CWGVKig==",
       "dev": true,
       "engines": {
         "node": ">=12"
@@ -3991,19 +3992,19 @@
       }
     },
     "node_modules/@svgr/babel-preset": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.3.1.tgz",
-      "integrity": "sha512-tQtWtzuMMQ3opH7je+MpwfuRA1Hf3cKdSgTtAYwOBDfmhabP7rcTfBi3E7V3MuwJNy/Y02/7/RutvwS1W4Qv9g==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.0.tgz",
+      "integrity": "sha512-UWM98PKVuMqw2UZo8YO3erI6nF1n7/XBYTXBqR0QhZP7HTjYK6QxFNvPfIshddy1hBdzhVpkf148Vg8xiVOtyg==",
       "dev": true,
       "dependencies": {
-        "@svgr/babel-plugin-add-jsx-attribute": "^6.3.1",
-        "@svgr/babel-plugin-remove-jsx-attribute": "^6.3.1",
-        "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.3.1",
-        "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.3.1",
-        "@svgr/babel-plugin-svg-dynamic-title": "^6.3.1",
-        "@svgr/babel-plugin-svg-em-dimensions": "^6.3.1",
-        "@svgr/babel-plugin-transform-react-native-svg": "^6.3.1",
-        "@svgr/babel-plugin-transform-svg-component": "^6.3.1"
+        "@svgr/babel-plugin-add-jsx-attribute": "^6.5.0",
+        "@svgr/babel-plugin-remove-jsx-attribute": "^6.5.0",
+        "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.5.0",
+        "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.0",
+        "@svgr/babel-plugin-svg-dynamic-title": "^6.5.0",
+        "@svgr/babel-plugin-svg-em-dimensions": "^6.5.0",
+        "@svgr/babel-plugin-transform-react-native-svg": "^6.5.0",
+        "@svgr/babel-plugin-transform-svg-component": "^6.5.0"
       },
       "engines": {
         "node": ">=10"
@@ -4017,12 +4018,14 @@
       }
     },
     "node_modules/@svgr/core": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.3.1.tgz",
-      "integrity": "sha512-Sm3/7OdXbQreemf9aO25keerZSbnKMpGEfmH90EyYpj1e8wMD4TuwJIb3THDSgRMWk1kYJfSRulELBy4gVgZUA==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.0.tgz",
+      "integrity": "sha512-jIbu36GMjfK8HCCQitkfVVeQ2vSXGfq0ef0GO9HUxZGjal6Kvpkk4PwpkFP+OyCzF+skQFT9aWrUqekT3pKF8w==",
       "dev": true,
       "dependencies": {
-        "@svgr/plugin-jsx": "^6.3.1",
+        "@babel/core": "^7.18.5",
+        "@svgr/babel-preset": "^6.5.0",
+        "@svgr/plugin-jsx": "^6.5.0",
         "camelcase": "^6.2.0",
         "cosmiconfig": "^7.0.1"
       },
@@ -4034,10 +4037,49 @@
         "url": "https://github.com/sponsors/gregberge"
       }
     },
+    "node_modules/@svgr/core/node_modules/@babel/core": {
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz",
+      "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==",
+      "dev": true,
+      "dependencies": {
+        "@ampproject/remapping": "^2.1.0",
+        "@babel/code-frame": "^7.18.6",
+        "@babel/generator": "^7.19.6",
+        "@babel/helper-compilation-targets": "^7.19.3",
+        "@babel/helper-module-transforms": "^7.19.6",
+        "@babel/helpers": "^7.19.4",
+        "@babel/parser": "^7.19.6",
+        "@babel/template": "^7.18.10",
+        "@babel/traverse": "^7.19.6",
+        "@babel/types": "^7.19.4",
+        "convert-source-map": "^1.7.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.2",
+        "json5": "^2.2.1",
+        "semver": "^6.3.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/babel"
+      }
+    },
+    "node_modules/@svgr/core/node_modules/semver": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+      "dev": true,
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
     "node_modules/@svgr/hast-util-to-babel-ast": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.3.1.tgz",
-      "integrity": "sha512-NgyCbiTQIwe3wHe/VWOUjyxmpUmsrBjdoIxKpXt3Nqc3TN30BpJG22OxBvVzsAh9jqep0w0/h8Ywvdk3D9niNQ==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.0.tgz",
+      "integrity": "sha512-PPy94U/EiPQ2dY0b4jEqj4QOdDRq6DG7aTHjpGaL8HlKSHkpU1DpjfywCXTJqtOdCo2FywjWvg0U2FhqMeUJaA==",
       "dev": true,
       "dependencies": {
         "@babel/types": "^7.18.4",
@@ -4052,9 +4094,9 @@
       }
     },
     "node_modules/@svgr/hast-util-to-babel-ast/node_modules/entities": {
-      "version": "4.3.1",
-      "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz",
-      "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==",
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
+      "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
       "dev": true,
       "engines": {
         "node": ">=0.12"
@@ -4064,14 +4106,14 @@
       }
     },
     "node_modules/@svgr/plugin-jsx": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.3.1.tgz",
-      "integrity": "sha512-r9+0mYG3hD4nNtUgsTXWGYJomv/bNd7kC16zvsM70I/bGeoCi/3lhTmYqeN6ChWX317OtQCSZZbH4wq9WwoXbw==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.0.tgz",
+      "integrity": "sha512-1CHMqOBKoNk/ZPU+iGXKcQPC6q9zaD7UOI99J+BaGY5bdCztcf5bZyi0QZSDRJtCQpdofeVv7XfBYov2mtl0Pw==",
       "dev": true,
       "dependencies": {
         "@babel/core": "^7.18.5",
-        "@svgr/babel-preset": "^6.3.1",
-        "@svgr/hast-util-to-babel-ast": "^6.3.1",
+        "@svgr/babel-preset": "^6.5.0",
+        "@svgr/hast-util-to-babel-ast": "^6.5.0",
         "svg-parser": "^2.0.4"
       },
       "engines": {
@@ -4086,21 +4128,21 @@
       }
     },
     "node_modules/@svgr/plugin-jsx/node_modules/@babel/core": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz",
-      "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz",
+      "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==",
       "dev": true,
       "dependencies": {
         "@ampproject/remapping": "^2.1.0",
         "@babel/code-frame": "^7.18.6",
-        "@babel/generator": "^7.18.10",
-        "@babel/helper-compilation-targets": "^7.18.9",
-        "@babel/helper-module-transforms": "^7.18.9",
-        "@babel/helpers": "^7.18.9",
-        "@babel/parser": "^7.18.10",
+        "@babel/generator": "^7.19.6",
+        "@babel/helper-compilation-targets": "^7.19.3",
+        "@babel/helper-module-transforms": "^7.19.6",
+        "@babel/helpers": "^7.19.4",
+        "@babel/parser": "^7.19.6",
         "@babel/template": "^7.18.10",
-        "@babel/traverse": "^7.18.10",
-        "@babel/types": "^7.18.10",
+        "@babel/traverse": "^7.19.6",
+        "@babel/types": "^7.19.4",
         "convert-source-map": "^1.7.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
@@ -4125,9 +4167,9 @@
       }
     },
     "node_modules/@svgr/plugin-svgo": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.3.1.tgz",
-      "integrity": "sha512-yJIjTDKPYqzFVjmsbH5EdIwEsmKxjxdXSGJVLeUgwZOZPAkNQmD1v7LDbOdOKbR44FG8465Du+zWPdbYGnbMbw==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.0.tgz",
+      "integrity": "sha512-8Zv1Yyv6I7HlIqrqGFM0sDKQrhjbfNZJawR8UjIaVWSb0tKZP1Ra6ymhqIFu6FT6kDRD0Ct5NlQZ10VUujSspw==",
       "dev": true,
       "dependencies": {
         "cosmiconfig": "^7.0.1",
@@ -4441,9 +4483,9 @@
       }
     },
     "node_modules/@types/babel__traverse": {
-      "version": "7.17.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz",
-      "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==",
+      "version": "7.18.2",
+      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz",
+      "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==",
       "dev": true,
       "dependencies": {
         "@babel/types": "^7.3.0"
@@ -4493,9 +4535,9 @@
       "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow=="
     },
     "node_modules/@types/eslint": {
-      "version": "8.4.5",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz",
-      "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==",
+      "version": "8.4.8",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.8.tgz",
+      "integrity": "sha512-zUCKQI1bUCTi+0kQs5ZQzQ/XILWRLIlh15FXWNykJ+NG3TMKMVvwwC6GP3DR1Ylga15fB7iAExSzc4PNlR5i3w==",
       "dev": true,
       "dependencies": {
         "@types/estree": "*",
@@ -4519,9 +4561,9 @@
       "dev": true
     },
     "node_modules/@types/express": {
-      "version": "4.17.13",
-      "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz",
-      "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==",
+      "version": "4.17.14",
+      "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz",
+      "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==",
       "dev": true,
       "dependencies": {
         "@types/body-parser": "*",
@@ -4531,9 +4573,9 @@
       }
     },
     "node_modules/@types/express-serve-static-core": {
-      "version": "4.17.30",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz",
-      "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==",
+      "version": "4.17.31",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz",
+      "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==",
       "dev": true,
       "dependencies": {
         "@types/node": "*",
@@ -4642,15 +4684,15 @@
       "dev": true
     },
     "node_modules/@types/mime": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.0.tgz",
-      "integrity": "sha512-fccbsHKqFDXClBZTDLA43zl0+TbxyIwyzIzwwhvoJvhNjOErCdeX2xJbURimv2EbSVUGav001PaCJg4mZxMl4w==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz",
+      "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==",
       "dev": true
     },
     "node_modules/@types/minimatch": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
-      "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
+      "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
       "dev": true
     },
     "node_modules/@types/node": {
@@ -4671,9 +4713,9 @@
       "dev": true
     },
     "node_modules/@types/prettier": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz",
-      "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz",
+      "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==",
       "dev": true
     },
     "node_modules/@types/prop-types": {
@@ -4806,9 +4848,9 @@
       }
     },
     "node_modules/@types/uglify-js": {
-      "version": "3.16.0",
-      "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.16.0.tgz",
-      "integrity": "sha512-0yeUr92L3r0GLRnBOvtYK1v2SjqMIqQDHMl7GLb+l2L8+6LSFWEEWEIgVsPdMn5ImLM8qzWT8xFPtQYpp8co0g==",
+      "version": "3.17.1",
+      "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz",
+      "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==",
       "dev": true,
       "dependencies": {
         "source-map": "^0.6.1"
@@ -4829,9 +4871,9 @@
       "integrity": "sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI="
     },
     "node_modules/@types/webpack": {
-      "version": "4.41.32",
-      "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz",
-      "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==",
+      "version": "4.41.33",
+      "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz",
+      "integrity": "sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==",
       "dev": true,
       "dependencies": {
         "@types/node": "*",
@@ -5168,9 +5210,9 @@
       }
     },
     "node_modules/address": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz",
-      "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz",
+      "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==",
       "dev": true,
       "engines": {
         "node": ">= 10.0.0"
@@ -5603,6 +5645,24 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/array.prototype.flatmap": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz",
+      "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.19.2",
+        "es-shim-unscopables": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
     "node_modules/assert-ok": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/assert-ok/-/assert-ok-1.0.0.tgz",
@@ -5635,7 +5695,7 @@
     "node_modules/asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
       "dev": true
     },
     "node_modules/at-least-node": {
@@ -5686,6 +5746,15 @@
         "postcss": "^8.1.0"
       }
     },
+    "node_modules/axe-core": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.0.tgz",
+      "integrity": "sha512-4+rr8eQ7+XXS5nZrKcMO/AikHL0hVqy+lHWAnE3xdHl+aguag8SOQ6eEqLexwLNWgXIMfunGuD3ON1/6Kyet0A==",
+      "dev": true,
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/axios": {
       "version": "0.21.1",
       "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
@@ -5913,15 +5982,6 @@
         "semver": "bin/semver.js"
       }
     },
-    "node_modules/babel-plugin-dynamic-import-node": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
-      "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
-      "dev": true,
-      "dependencies": {
-        "object.assign": "^4.1.0"
-      }
-    },
     "node_modules/babel-plugin-istanbul": {
       "version": "6.1.1",
       "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
@@ -5954,13 +6014,13 @@
       }
     },
     "node_modules/babel-plugin-polyfill-corejs2": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz",
-      "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==",
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz",
+      "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==",
       "dev": true,
       "dependencies": {
         "@babel/compat-data": "^7.17.7",
-        "@babel/helper-define-polyfill-provider": "^0.3.2",
+        "@babel/helper-define-polyfill-provider": "^0.3.3",
         "semver": "^6.1.1"
       },
       "peerDependencies": {
@@ -6635,9 +6695,9 @@
       }
     },
     "node_modules/body-parser": {
-      "version": "1.20.0",
-      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
-      "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
+      "version": "1.20.1",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
+      "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
       "dev": true,
       "dependencies": {
         "bytes": "3.1.2",
@@ -6648,7 +6708,7 @@
         "http-errors": "2.0.0",
         "iconv-lite": "0.4.24",
         "on-finished": "2.4.1",
-        "qs": "6.10.3",
+        "qs": "6.11.0",
         "raw-body": "2.5.1",
         "type-is": "~1.6.18",
         "unpipe": "1.0.0"
@@ -6682,21 +6742,6 @@
       "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
-    "node_modules/body-parser/node_modules/qs": {
-      "version": "6.10.3",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
-      "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
-      "dev": true,
-      "dependencies": {
-        "side-channel": "^1.0.4"
-      },
-      "engines": {
-        "node": ">=0.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/bonjour": {
       "version": "3.5.0",
       "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
@@ -6758,9 +6803,9 @@
       "dev": true
     },
     "node_modules/browserslist": {
-      "version": "4.21.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
-      "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
+      "version": "4.21.4",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+      "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
       "dev": true,
       "funding": [
         {
@@ -6773,10 +6818,10 @@
         }
       ],
       "dependencies": {
-        "caniuse-lite": "^1.0.30001370",
-        "electron-to-chromium": "^1.4.202",
+        "caniuse-lite": "^1.0.30001400",
+        "electron-to-chromium": "^1.4.251",
         "node-releases": "^2.0.6",
-        "update-browserslist-db": "^1.0.5"
+        "update-browserslist-db": "^1.0.9"
       },
       "bin": {
         "browserslist": "cli.js"
@@ -7030,9 +7075,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001374",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001374.tgz",
-      "integrity": "sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw==",
+      "version": "1.0.30001426",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001426.tgz",
+      "integrity": "sha512-n7cosrHLl8AWt0wwZw/PJZgUg3lV0gk9LMI7ikGJwhyhgsd2Nb65vKvmSexCqq/J7rbH3mFG6yZZiPR5dLPW5A==",
       "dev": true,
       "funding": [
         {
@@ -7447,9 +7492,9 @@
       }
     },
     "node_modules/colord": {
-      "version": "2.9.2",
-      "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz",
-      "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==",
+      "version": "2.9.3",
+      "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
+      "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
       "dev": true
     },
     "node_modules/colorette": {
@@ -7542,6 +7587,12 @@
       "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
+    "node_modules/compression/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true
+    },
     "node_modules/concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -7605,26 +7656,6 @@
         "node": ">= 0.6"
       }
     },
-    "node_modules/content-disposition/node_modules/safe-buffer": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
     "node_modules/content-type": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
@@ -7635,13 +7666,10 @@
       }
     },
     "node_modules/convert-source-map": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
-      "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
-      "dev": true,
-      "dependencies": {
-        "safe-buffer": "~5.1.1"
-      }
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+      "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+      "dev": true
     },
     "node_modules/cookie": {
       "version": "0.4.1",
@@ -7683,28 +7711,18 @@
       }
     },
     "node_modules/core-js-compat": {
-      "version": "3.24.1",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.24.1.tgz",
-      "integrity": "sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw==",
+      "version": "3.26.0",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz",
+      "integrity": "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==",
       "dev": true,
       "dependencies": {
-        "browserslist": "^4.21.3",
-        "semver": "7.0.0"
+        "browserslist": "^4.21.4"
       },
       "funding": {
         "type": "opencollective",
         "url": "https://opencollective.com/core-js"
       }
     },
-    "node_modules/core-js-compat/node_modules/semver": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
-      "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
-      "dev": true,
-      "bin": {
-        "semver": "bin/semver.js"
-      }
-    },
     "node_modules/core-js-pure": {
       "version": "3.16.1",
       "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.16.1.tgz",
@@ -7716,9 +7734,9 @@
       }
     },
     "node_modules/core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
       "dev": true
     },
     "node_modules/cosmiconfig": {
@@ -7771,9 +7789,9 @@
       }
     },
     "node_modules/css-declaration-sorter": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz",
-      "integrity": "sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz",
+      "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==",
       "dev": true,
       "engines": {
         "node": "^10 || ^12 || >=14"
@@ -7823,9 +7841,9 @@
       }
     },
     "node_modules/css-loader/node_modules/semver": {
-      "version": "7.3.7",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
-      "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+      "version": "7.3.8",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+      "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
       "dev": true,
       "dependencies": {
         "lru-cache": "^6.0.0"
@@ -8111,9 +8129,9 @@
       }
     },
     "node_modules/decimal.js": {
-      "version": "10.3.1",
-      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
-      "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
+      "version": "10.4.2",
+      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz",
+      "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==",
       "dev": true
     },
     "node_modules/decode-uri-component": {
@@ -8479,7 +8497,7 @@
     "node_modules/delayed-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
       "dev": true,
       "engines": {
         "node": ">=0.4.0"
@@ -8866,9 +8884,9 @@
       "dev": true
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.211",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.211.tgz",
-      "integrity": "sha512-BZSbMpyFQU0KBJ1JG26XGeFI3i4op+qOYGxftmZXFZoHkhLgsSv4DHDJfl8ogII3hIuzGt51PaZ195OVu0yJ9A==",
+      "version": "1.4.284",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+      "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
       "dev": true
     },
     "node_modules/email-prop-type": {
@@ -9376,16 +9394,20 @@
       }
     },
     "node_modules/eslint-module-utils": {
-      "version": "2.7.3",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
-      "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
+      "version": "2.7.4",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
+      "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==",
       "dev": true,
       "dependencies": {
-        "debug": "^3.2.7",
-        "find-up": "^2.1.0"
+        "debug": "^3.2.7"
       },
       "engines": {
         "node": ">=4"
+      },
+      "peerDependenciesMeta": {
+        "eslint": {
+          "optional": true
+        }
       }
     },
     "node_modules/eslint-module-utils/node_modules/debug": {
@@ -9397,73 +9419,6 @@
         "ms": "^2.1.1"
       }
     },
-    "node_modules/eslint-module-utils/node_modules/find-up": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
-      "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
-      "dev": true,
-      "dependencies": {
-        "locate-path": "^2.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/eslint-module-utils/node_modules/locate-path": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
-      "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
-      "dev": true,
-      "dependencies": {
-        "p-locate": "^2.0.0",
-        "path-exists": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/eslint-module-utils/node_modules/p-limit": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-      "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
-      "dev": true,
-      "dependencies": {
-        "p-try": "^1.0.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/eslint-module-utils/node_modules/p-locate": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-      "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
-      "dev": true,
-      "dependencies": {
-        "p-limit": "^1.1.0"
-      },
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/eslint-module-utils/node_modules/p-try": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-      "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
-    "node_modules/eslint-module-utils/node_modules/path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-      "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=4"
-      }
-    },
     "node_modules/eslint-plugin-import": {
       "version": "2.26.0",
       "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
@@ -9518,23 +9473,6 @@
       "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
       "dev": true
     },
-    "node_modules/eslint-plugin-import/node_modules/resolve": {
-      "version": "1.22.1",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
-      "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
-      "dev": true,
-      "dependencies": {
-        "is-core-module": "^2.9.0",
-        "path-parse": "^1.0.7",
-        "supports-preserve-symlinks-flag": "^1.0.0"
-      },
-      "bin": {
-        "resolve": "bin/resolve"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/eslint-plugin-jsx-a11y": {
       "version": "6.5.1",
       "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz",
@@ -9861,9 +9799,9 @@
       }
     },
     "node_modules/espree": {
-      "version": "9.3.3",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz",
-      "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==",
+      "version": "9.4.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz",
+      "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==",
       "dev": true,
       "dependencies": {
         "acorn": "^8.8.0",
@@ -10383,14 +10321,14 @@
       "dev": true
     },
     "node_modules/express": {
-      "version": "4.18.1",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
-      "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
+      "version": "4.18.2",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
+      "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
       "dev": true,
       "dependencies": {
         "accepts": "~1.3.8",
         "array-flatten": "1.1.1",
-        "body-parser": "1.20.0",
+        "body-parser": "1.20.1",
         "content-disposition": "0.5.4",
         "content-type": "~1.0.4",
         "cookie": "0.5.0",
@@ -10409,7 +10347,7 @@
         "parseurl": "~1.3.3",
         "path-to-regexp": "0.1.7",
         "proxy-addr": "~2.0.7",
-        "qs": "6.10.3",
+        "qs": "6.11.0",
         "range-parser": "~1.2.1",
         "safe-buffer": "5.2.1",
         "send": "0.18.0",
@@ -10460,41 +10398,6 @@
       "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
       "dev": true
     },
-    "node_modules/express/node_modules/qs": {
-      "version": "6.10.3",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
-      "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
-      "dev": true,
-      "dependencies": {
-        "side-channel": "^1.0.4"
-      },
-      "engines": {
-        "node": ">=0.6"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/express/node_modules/safe-buffer": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/feross"
-        },
-        {
-          "type": "patreon",
-          "url": "https://www.patreon.com/feross"
-        },
-        {
-          "type": "consulting",
-          "url": "https://feross.org/support"
-        }
-      ]
-    },
     "node_modules/ext-list": {
       "version": "2.2.2",
       "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
@@ -10600,9 +10503,9 @@
       "dev": true
     },
     "node_modules/fast-glob": {
-      "version": "3.2.11",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
-      "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+      "version": "3.2.12",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+      "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
       "dev": true,
       "dependencies": {
         "@nodelib/fs.stat": "^2.0.2",
@@ -10675,9 +10578,9 @@
       }
     },
     "node_modules/fb-watchman": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
-      "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+      "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
       "dev": true,
       "dependencies": {
         "bser": "2.1.1"
@@ -10912,9 +10815,9 @@
       }
     },
     "node_modules/flatted": {
-      "version": "3.2.6",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz",
-      "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==",
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+      "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
       "dev": true
     },
     "node_modules/focus-lock": {
@@ -11108,9 +11011,9 @@
       }
     },
     "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": {
-      "version": "7.3.7",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
-      "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+      "version": "7.3.8",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+      "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
       "dev": true,
       "dependencies": {
         "lru-cache": "^6.0.0"
@@ -12611,9 +12514,9 @@
       "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
     },
     "node_modules/immer": {
-      "version": "9.0.15",
-      "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz",
-      "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==",
+      "version": "9.0.16",
+      "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz",
+      "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==",
       "dev": true,
       "funding": {
         "type": "opencollective",
@@ -12856,7 +12759,7 @@
     "node_modules/is-arrayish": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
       "dev": true
     },
     "node_modules/is-bigint": {
@@ -12944,9 +12847,9 @@
       }
     },
     "node_modules/is-core-module": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
-      "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+      "version": "2.11.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+      "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
       "dev": true,
       "dependencies": {
         "has": "^1.0.3"
@@ -13382,7 +13285,7 @@
     "node_modules/is-typedarray": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+      "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
       "dev": true
     },
     "node_modules/is-valid-path": {
@@ -13467,9 +13370,9 @@
       }
     },
     "node_modules/istanbul-lib-instrument": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz",
-      "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+      "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
       "dev": true,
       "dependencies": {
         "@babel/core": "^7.12.3",
@@ -15193,9 +15096,9 @@
       }
     },
     "node_modules/jest-snapshot/node_modules/semver": {
-      "version": "7.3.7",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
-      "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+      "version": "7.3.8",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+      "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
       "dev": true,
       "dependencies": {
         "lru-cache": "^6.0.0"
@@ -15660,13 +15563,13 @@
       }
     },
     "node_modules/jsx-ast-utils": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz",
-      "integrity": "sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q==",
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz",
+      "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==",
       "dev": true,
       "dependencies": {
         "array-includes": "^3.1.5",
-        "object.assign": "^4.1.2"
+        "object.assign": "^4.1.3"
       },
       "engines": {
         "node": ">=4.0"
@@ -15723,6 +15626,21 @@
         "node": ">= 8"
       }
     },
+    "node_modules/language-subtag-registry": {
+      "version": "0.3.22",
+      "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
+      "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==",
+      "dev": true
+    },
+    "node_modules/language-tags": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
+      "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==",
+      "dev": true,
+      "dependencies": {
+        "language-subtag-registry": "~0.3.2"
+      }
+    },
     "node_modules/leven": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@@ -15763,9 +15681,9 @@
       }
     },
     "node_modules/lines-and-columns": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
-      "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
       "dev": true
     },
     "node_modules/loader-runner": {
@@ -15778,9 +15696,9 @@
       }
     },
     "node_modules/loader-utils": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
-      "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.3.tgz",
+      "integrity": "sha512-THWqIsn8QRnvLl0shHYVBN9syumU8pYWEHPTmkiVGd+7K5eFNVSY6AJhRvgGF70gg1Dz+l/k8WicvFCxdEs60A==",
       "dev": true,
       "dependencies": {
         "big.js": "^5.2.2",
@@ -16237,10 +16155,13 @@
       }
     },
     "node_modules/minimist": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
-      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
-      "dev": true
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
+      "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
     "node_modules/mixin-deep": {
       "version": "1.3.2",
@@ -16476,9 +16397,9 @@
       }
     },
     "node_modules/node-notifier/node_modules/semver": {
-      "version": "7.3.7",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
-      "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+      "version": "7.3.8",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+      "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -16491,16 +16412,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/node-notifier/node_modules/uuid": {
-      "version": "8.3.2",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
-      "dev": true,
-      "optional": true,
-      "bin": {
-        "uuid": "dist/bin/uuid"
-      }
-    },
     "node_modules/node-notifier/node_modules/yallist": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
@@ -16614,9 +16525,9 @@
       }
     },
     "node_modules/nwsapi": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz",
-      "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==",
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz",
+      "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==",
       "dev": true
     },
     "node_modules/object-assign": {
@@ -16767,13 +16678,13 @@
       }
     },
     "node_modules/object.assign": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
-      "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+      "version": "4.1.4",
+      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+      "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
       "dependencies": {
-        "call-bind": "^1.0.0",
-        "define-properties": "^1.1.3",
-        "has-symbols": "^1.0.1",
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.4",
+        "has-symbols": "^1.0.3",
         "object-keys": "^1.1.1"
       },
       "engines": {
@@ -17623,14 +17534,14 @@
       }
     },
     "node_modules/portfinder": {
-      "version": "1.0.28",
-      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
-      "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
+      "version": "1.0.32",
+      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz",
+      "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==",
       "dev": true,
       "dependencies": {
-        "async": "^2.6.2",
-        "debug": "^3.1.1",
-        "mkdirp": "^0.5.5"
+        "async": "^2.6.4",
+        "debug": "^3.2.7",
+        "mkdirp": "^0.5.6"
       },
       "engines": {
         "node": ">= 0.12.0"
@@ -17802,9 +17713,9 @@
       }
     },
     "node_modules/postcss-loader/node_modules/semver": {
-      "version": "7.3.7",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
-      "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+      "version": "7.3.8",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+      "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
       "dev": true,
       "dependencies": {
         "lru-cache": "^6.0.0"
@@ -18403,9 +18314,9 @@
       "optional": true
     },
     "node_modules/psl": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
-      "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+      "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
       "dev": true
     },
     "node_modules/pubsub-js": {
@@ -18433,12 +18344,18 @@
       }
     },
     "node_modules/qs": {
-      "version": "6.5.2",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
-      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+      "version": "6.11.0",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+      "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
       "dev": true,
+      "dependencies": {
+        "side-channel": "^1.0.4"
+      },
       "engines": {
         "node": ">=0.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
     "node_modules/query-string": {
@@ -18456,6 +18373,12 @@
         "node": ">=0.10.0"
       }
     },
+    "node_modules/querystringify": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+      "dev": true
+    },
     "node_modules/queue-microtask": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -19414,6 +19337,12 @@
       "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
       "dev": true
     },
+    "node_modules/readable-stream/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true
+    },
     "node_modules/readdirp": {
       "version": "3.6.0",
       "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -19439,27 +19368,15 @@
       }
     },
     "node_modules/recursive-readdir": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
-      "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==",
-      "dev": true,
-      "dependencies": {
-        "minimatch": "3.0.4"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/recursive-readdir/node_modules/minimatch": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz",
+      "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==",
       "dev": true,
       "dependencies": {
-        "brace-expansion": "^1.1.7"
+        "minimatch": "^3.0.5"
       },
       "engines": {
-        "node": "*"
+        "node": ">=6.0.0"
       }
     },
     "node_modules/redent": {
@@ -19496,9 +19413,9 @@
       "dev": true
     },
     "node_modules/regenerate-unicode-properties": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
-      "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+      "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
       "dev": true,
       "dependencies": {
         "regenerate": "^1.4.2"
@@ -19569,15 +19486,15 @@
       }
     },
     "node_modules/regexpu-core": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
-      "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz",
+      "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==",
       "dev": true,
       "dependencies": {
         "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.0.1",
-        "regjsgen": "^0.6.0",
-        "regjsparser": "^0.8.2",
+        "regenerate-unicode-properties": "^10.1.0",
+        "regjsgen": "^0.7.1",
+        "regjsparser": "^0.9.1",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.0.0"
       },
@@ -19586,15 +19503,15 @@
       }
     },
     "node_modules/regjsgen": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
-      "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==",
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
+      "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==",
       "dev": true
     },
     "node_modules/regjsparser": {
-      "version": "0.8.4",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
-      "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
+      "version": "0.9.1",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
       "dev": true,
       "dependencies": {
         "jsesc": "~0.5.0"
@@ -19703,13 +19620,17 @@
       "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA=="
     },
     "node_modules/resolve": {
-      "version": "1.20.0",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
-      "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+      "version": "1.22.1",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+      "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
       "dev": true,
       "dependencies": {
-        "is-core-module": "^2.2.0",
-        "path-parse": "^1.0.6"
+        "is-core-module": "^2.9.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
       },
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -19882,10 +19803,24 @@
       }
     },
     "node_modules/safe-buffer": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
-      "dev": true
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
     },
     "node_modules/safe-regex": {
       "version": "1.1.0",
@@ -20212,9 +20147,9 @@
       "dev": true
     },
     "node_modules/selfsigned": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz",
-      "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==",
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz",
+      "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==",
       "dev": true,
       "dependencies": {
         "node-forge": "^1"
@@ -20494,10 +20429,13 @@
       }
     },
     "node_modules/shell-quote": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
-      "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
-      "dev": true
+      "version": "1.7.4",
+      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz",
+      "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
     },
     "node_modules/shellwords": {
       "version": "0.1.1",
@@ -20792,15 +20730,6 @@
         "websocket-driver": "^0.7.4"
       }
     },
-    "node_modules/sockjs/node_modules/uuid": {
-      "version": "8.3.2",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
-      "dev": true,
-      "bin": {
-        "uuid": "dist/bin/uuid"
-      }
-    },
     "node_modules/sort-keys": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
@@ -20836,7 +20765,7 @@
     "node_modules/source-map": {
       "version": "0.5.7",
       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+      "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
       "dev": true,
       "engines": {
         "node": ">=0.10.0"
@@ -20954,9 +20883,9 @@
       }
     },
     "node_modules/spdx-license-ids": {
-      "version": "3.0.11",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
-      "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
+      "version": "3.0.12",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz",
+      "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
       "dev": true
     },
     "node_modules/spdy": {
@@ -21018,7 +20947,7 @@
     "node_modules/sprintf-js": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
       "dev": true
     },
     "node_modules/stable": {
@@ -21183,6 +21112,12 @@
         "safe-buffer": "~5.1.0"
       }
     },
+    "node_modules/string_decoder/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true
+    },
     "node_modules/string-length": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
@@ -21464,9 +21399,9 @@
       }
     },
     "node_modules/supports-hyperlinks": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
-      "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
+      "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
       "dev": true,
       "dependencies": {
         "has-flag": "^4.0.0",
@@ -21616,6 +21551,17 @@
         "node": ">=4"
       }
     },
+    "node_modules/tempfile/node_modules/uuid": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+      "deprecated": "Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.",
+      "dev": true,
+      "optional": true,
+      "bin": {
+        "uuid": "bin/uuid"
+      }
+    },
     "node_modules/terminal-link": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
@@ -21633,9 +21579,9 @@
       }
     },
     "node_modules/terser": {
-      "version": "5.14.2",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
-      "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
+      "version": "5.15.1",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz",
+      "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==",
       "dev": true,
       "dependencies": {
         "@jridgewell/source-map": "^0.3.2",
@@ -21651,16 +21597,16 @@
       }
     },
     "node_modules/terser-webpack-plugin": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz",
-      "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==",
+      "version": "5.3.6",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz",
+      "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==",
       "dev": true,
       "dependencies": {
-        "@jridgewell/trace-mapping": "^0.3.7",
+        "@jridgewell/trace-mapping": "^0.3.14",
         "jest-worker": "^27.4.5",
         "schema-utils": "^3.1.1",
         "serialize-javascript": "^6.0.0",
-        "terser": "^5.7.2"
+        "terser": "^5.14.1"
       },
       "engines": {
         "node": ">= 10.13.0"
@@ -21803,7 +21749,7 @@
     "node_modules/to-fast-properties": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+      "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
       "dev": true,
       "engines": {
         "node": ">=4"
@@ -21885,23 +21831,24 @@
       }
     },
     "node_modules/tough-cookie": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
-      "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz",
+      "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==",
       "dev": true,
       "dependencies": {
         "psl": "^1.1.33",
         "punycode": "^2.1.1",
-        "universalify": "^0.1.2"
+        "universalify": "^0.2.0",
+        "url-parse": "^1.5.3"
       },
       "engines": {
         "node": ">=6"
       }
     },
     "node_modules/tough-cookie/node_modules/universalify": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
-      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+      "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
       "dev": true,
       "engines": {
         "node": ">= 4.0.0"
@@ -21973,7 +21920,7 @@
     "node_modules/tunnel-agent": {
       "version": "0.6.0",
       "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+      "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
       "dev": true,
       "optional": true,
       "dependencies": {
@@ -22122,9 +22069,9 @@
       }
     },
     "node_modules/unicode-property-aliases-ecmascript": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
-      "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+      "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
       "dev": true,
       "engines": {
         "node": ">=4"
@@ -22236,9 +22183,9 @@
       "dev": true
     },
     "node_modules/update-browserslist-db": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz",
-      "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==",
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+      "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
       "dev": true,
       "funding": [
         {
@@ -22304,6 +22251,16 @@
         }
       }
     },
+    "node_modules/url-parse": {
+      "version": "1.5.10",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+      "dev": true,
+      "dependencies": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
+      }
+    },
     "node_modules/url-parse-lax": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
@@ -22399,14 +22356,12 @@
       }
     },
     "node_modules/uuid": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
-      "deprecated": "Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.",
+      "version": "8.3.2",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
       "dev": true,
-      "optional": true,
       "bin": {
-        "uuid": "bin/uuid"
+        "uuid": "dist/bin/uuid"
       }
     },
     "node_modules/v8-compile-cache": {
@@ -22466,6 +22421,7 @@
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
       "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+      "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.",
       "dev": true,
       "dependencies": {
         "browser-process-hrtime": "^1.0.0"
@@ -23083,9 +23039,9 @@
       }
     },
     "node_modules/webpack-dev-server/node_modules/ws": {
-      "version": "8.8.1",
-      "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
-      "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
+      "version": "8.10.0",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz",
+      "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==",
       "dev": true,
       "engines": {
         "node": ">=10.0.0"
@@ -23602,9 +23558,9 @@
       }
     },
     "@babel/compat-data": {
-      "version": "7.18.8",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz",
-      "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==",
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.4.tgz",
+      "integrity": "sha512-CHIGpJcUQ5lU9KrPHTjBMhVwQG6CQjxfg36fGXl3qk/Gik1WwWachaXFuo0uCWJT/mStOKtcbFJCaVLihC1CMw==",
       "dev": true
     },
     "@babel/core": {
@@ -23658,12 +23614,12 @@
       }
     },
     "@babel/generator": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.10.tgz",
-      "integrity": "sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.6.tgz",
+      "integrity": "sha512-oHGRUQeoX1QrKeJIKVe0hwjGqNnVYsM5Nep5zo0uE0m42sLH+Fsd2pStJ5sRM1bNyTUUoz0pe2lTeMJrb/taTA==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.18.10",
+        "@babel/types": "^7.19.4",
         "@jridgewell/gen-mapping": "^0.3.2",
         "jsesc": "^2.5.1"
       }
@@ -23688,14 +23644,14 @@
       }
     },
     "@babel/helper-compilation-targets": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz",
-      "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==",
+      "version": "7.19.3",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.3.tgz",
+      "integrity": "sha512-65ESqLGyGmLvgR0mst5AdW1FkNlj9rQsCKduzEoEPhBCDFGXvz2jW6bXFG6i0/MrV2s7hhXjjb2yAzcPuQlLwg==",
       "dev": true,
       "requires": {
-        "@babel/compat-data": "^7.18.8",
+        "@babel/compat-data": "^7.19.3",
         "@babel/helper-validator-option": "^7.18.6",
-        "browserslist": "^4.20.2",
+        "browserslist": "^4.21.3",
         "semver": "^6.3.0"
       },
       "dependencies": {
@@ -23708,14 +23664,14 @@
       }
     },
     "@babel/helper-create-class-features-plugin": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz",
-      "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz",
+      "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==",
       "dev": true,
       "requires": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
         "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/helper-member-expression-to-functions": "^7.18.9",
         "@babel/helper-optimise-call-expression": "^7.18.6",
         "@babel/helper-replace-supers": "^7.18.9",
@@ -23723,9 +23679,9 @@
       }
     },
     "@babel/helper-create-regexp-features-plugin": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz",
-      "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz",
+      "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==",
       "dev": true,
       "requires": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
@@ -23733,9 +23689,9 @@
       }
     },
     "@babel/helper-define-polyfill-provider": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz",
-      "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==",
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz",
+      "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==",
       "dev": true,
       "requires": {
         "@babel/helper-compilation-targets": "^7.17.7",
@@ -23770,13 +23726,13 @@
       }
     },
     "@babel/helper-function-name": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
-      "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
+      "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
       "dev": true,
       "requires": {
-        "@babel/template": "^7.18.6",
-        "@babel/types": "^7.18.9"
+        "@babel/template": "^7.18.10",
+        "@babel/types": "^7.19.0"
       }
     },
     "@babel/helper-hoist-variables": {
@@ -23807,19 +23763,19 @@
       }
     },
     "@babel/helper-module-transforms": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
-      "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz",
+      "integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==",
       "dev": true,
       "requires": {
         "@babel/helper-environment-visitor": "^7.18.9",
         "@babel/helper-module-imports": "^7.18.6",
-        "@babel/helper-simple-access": "^7.18.6",
+        "@babel/helper-simple-access": "^7.19.4",
         "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/helper-validator-identifier": "^7.18.6",
-        "@babel/template": "^7.18.6",
-        "@babel/traverse": "^7.18.9",
-        "@babel/types": "^7.18.9"
+        "@babel/helper-validator-identifier": "^7.19.1",
+        "@babel/template": "^7.18.10",
+        "@babel/traverse": "^7.19.6",
+        "@babel/types": "^7.19.4"
       }
     },
     "@babel/helper-optimise-call-expression": {
@@ -23832,9 +23788,9 @@
       }
     },
     "@babel/helper-plugin-utils": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
-      "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz",
+      "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==",
       "dev": true
     },
     "@babel/helper-remap-async-to-generator": {
@@ -23850,25 +23806,25 @@
       }
     },
     "@babel/helper-replace-supers": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz",
-      "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz",
+      "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==",
       "dev": true,
       "requires": {
         "@babel/helper-environment-visitor": "^7.18.9",
         "@babel/helper-member-expression-to-functions": "^7.18.9",
         "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/traverse": "^7.18.9",
-        "@babel/types": "^7.18.9"
+        "@babel/traverse": "^7.19.1",
+        "@babel/types": "^7.19.0"
       }
     },
     "@babel/helper-simple-access": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
-      "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz",
+      "integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.18.6"
+        "@babel/types": "^7.19.4"
       }
     },
     "@babel/helper-skip-transparent-expression-wrappers": {
@@ -23890,15 +23846,15 @@
       }
     },
     "@babel/helper-string-parser": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
-      "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
+      "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
       "dev": true
     },
     "@babel/helper-validator-identifier": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
-      "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+      "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w=="
     },
     "@babel/helper-validator-option": {
       "version": "7.18.6",
@@ -23907,26 +23863,26 @@
       "dev": true
     },
     "@babel/helper-wrap-function": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.10.tgz",
-      "integrity": "sha512-95NLBP59VWdfK2lyLKe6eTMq9xg+yWKzxzxbJ1wcYNi1Auz200+83fMDADjRxBvc2QQor5zja2yTQzXGhk2GtQ==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz",
+      "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==",
       "dev": true,
       "requires": {
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/template": "^7.18.10",
-        "@babel/traverse": "^7.18.10",
-        "@babel/types": "^7.18.10"
+        "@babel/traverse": "^7.19.0",
+        "@babel/types": "^7.19.0"
       }
     },
     "@babel/helpers": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz",
-      "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==",
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.4.tgz",
+      "integrity": "sha512-G+z3aOx2nfDHwX/kyVii5fJq+bgscg89/dJNWpYeKeBv3v9xX8EIabmx1k6u9LS04H7nROFVRVK+e3k0VHp+sw==",
       "dev": true,
       "requires": {
-        "@babel/template": "^7.18.6",
-        "@babel/traverse": "^7.18.9",
-        "@babel/types": "^7.18.9"
+        "@babel/template": "^7.18.10",
+        "@babel/traverse": "^7.19.4",
+        "@babel/types": "^7.19.4"
       }
     },
     "@babel/highlight": {
@@ -23940,9 +23896,9 @@
       }
     },
     "@babel/parser": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.10.tgz",
-      "integrity": "sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.6.tgz",
+      "integrity": "sha512-h1IUp81s2JYJ3mRkdxJgs4UvmSsRvDrx5ICSJbPvtWYv5i1nTBGcBpnog+89rAFMwvvru6E5NUHdBe01UeSzYA==",
       "dev": true
     },
     "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
@@ -23966,13 +23922,13 @@
       }
     },
     "@babel/plugin-proposal-async-generator-functions": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz",
-      "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.19.1.tgz",
+      "integrity": "sha512-0yu8vNATgLy4ivqMNBIwb1HebCelqN7YX8SL3FDXORv/RqT0zEEWUCH4GH44JsSrvCu6GqnAdR5EBFAPeNBB4Q==",
       "dev": true,
       "requires": {
         "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.19.0",
         "@babel/helper-remap-async-to-generator": "^7.18.9",
         "@babel/plugin-syntax-async-generators": "^7.8.4"
       }
@@ -24316,25 +24272,26 @@
       }
     },
     "@babel/plugin-transform-block-scoping": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz",
-      "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==",
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.19.4.tgz",
+      "integrity": "sha512-934S2VLLlt2hRJwPf4MczaOr4hYF0z+VKPwqTNxyKX7NthTiPfhuKFWQZHXRM0vh/wo/VyXB3s4bZUNA08l+tQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.18.9"
+        "@babel/helper-plugin-utils": "^7.19.0"
       }
     },
     "@babel/plugin-transform-classes": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz",
-      "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.19.0.tgz",
+      "integrity": "sha512-YfeEE9kCjqTS9IitkgfJuxjcEtLUHMqa8yUJ6zdz8vR7hKuo6mOy2C05P0F1tdMmDCeuyidKnlrw/iTppHcr2A==",
       "dev": true,
       "requires": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
+        "@babel/helper-compilation-targets": "^7.19.0",
         "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/helper-optimise-call-expression": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.19.0",
         "@babel/helper-replace-supers": "^7.18.9",
         "@babel/helper-split-export-declaration": "^7.18.6",
         "globals": "^11.1.0"
@@ -24350,12 +24307,12 @@
       }
     },
     "@babel/plugin-transform-destructuring": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz",
-      "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==",
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.19.4.tgz",
+      "integrity": "sha512-t0j0Hgidqf0aM86dF8U+vXYReUgJnlv4bZLsyoPnwZNrGY+7/38o8YjaELrvHeVfTZao15kjR0PVv0nju2iduA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.18.9"
+        "@babel/helper-plugin-utils": "^7.19.0"
       }
     },
     "@babel/plugin-transform-dotall-regex": {
@@ -24426,39 +24383,36 @@
       }
     },
     "@babel/plugin-transform-modules-amd": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz",
-      "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz",
+      "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
+        "@babel/helper-module-transforms": "^7.19.6",
+        "@babel/helper-plugin-utils": "^7.19.0"
       }
     },
     "@babel/plugin-transform-modules-commonjs": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz",
-      "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz",
+      "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6",
-        "@babel/helper-simple-access": "^7.18.6",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
+        "@babel/helper-module-transforms": "^7.19.6",
+        "@babel/helper-plugin-utils": "^7.19.0",
+        "@babel/helper-simple-access": "^7.19.4"
       }
     },
     "@babel/plugin-transform-modules-systemjs": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz",
-      "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz",
+      "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==",
       "dev": true,
       "requires": {
         "@babel/helper-hoist-variables": "^7.18.6",
-        "@babel/helper-module-transforms": "^7.18.9",
-        "@babel/helper-plugin-utils": "^7.18.9",
-        "@babel/helper-validator-identifier": "^7.18.6",
-        "babel-plugin-dynamic-import-node": "^2.3.3"
+        "@babel/helper-module-transforms": "^7.19.6",
+        "@babel/helper-plugin-utils": "^7.19.0",
+        "@babel/helper-validator-identifier": "^7.19.1"
       }
     },
     "@babel/plugin-transform-modules-umd": {
@@ -24472,13 +24426,13 @@
       }
     },
     "@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.18.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz",
-      "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==",
+      "version": "7.19.1",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz",
+      "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.6"
+        "@babel/helper-create-regexp-features-plugin": "^7.19.0",
+        "@babel/helper-plugin-utils": "^7.19.0"
       }
     },
     "@babel/plugin-transform-new-target": {
@@ -24519,9 +24473,9 @@
       }
     },
     "@babel/plugin-transform-react-constant-elements": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.9.tgz",
-      "integrity": "sha512-IrTYh1I3YCEL1trjknnlLKTp5JggjzhKl/d3ibzPc97JhpFcDTr38Jdek/oX4cFbS6By0bXJcOkpRvJ5ZHK2wQ==",
+      "version": "7.18.12",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.18.12.tgz",
+      "integrity": "sha512-Q99U9/ttiu+LMnRU8psd23HhvwXmKWDQIpocm0JKaICcZHnw+mdQbHm6xnSy7dOl8I5PELakYtNBubNQlBXbZw==",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.18.9"
@@ -24537,16 +24491,16 @@
       }
     },
     "@babel/plugin-transform-react-jsx": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz",
-      "integrity": "sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz",
+      "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==",
       "dev": true,
       "requires": {
         "@babel/helper-annotate-as-pure": "^7.18.6",
         "@babel/helper-module-imports": "^7.18.6",
-        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.19.0",
         "@babel/plugin-syntax-jsx": "^7.18.6",
-        "@babel/types": "^7.18.10"
+        "@babel/types": "^7.19.0"
       }
     },
     "@babel/plugin-transform-react-jsx-development": {
@@ -24597,12 +24551,12 @@
       }
     },
     "@babel/plugin-transform-spread": {
-      "version": "7.18.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz",
-      "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==",
+      "version": "7.19.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz",
+      "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-plugin-utils": "^7.19.0",
         "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9"
       }
     },
@@ -24634,13 +24588,13 @@
       }
     },
     "@babel/plugin-transform-typescript": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.10.tgz",
-      "integrity": "sha512-j2HQCJuMbi88QftIb5zlRu3c7PU+sXNnscqsrjqegoGiCgXR569pEdben9vly5QHKL2ilYkfnSwu64zsZo/VYQ==",
+      "version": "7.19.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.3.tgz",
+      "integrity": "sha512-z6fnuK9ve9u/0X0rRvI9MY0xg+DOUaABDYOe+/SQTxtlptaBB/V9JIUxJn6xp3lMBeb9qe8xSFmHU35oZDXD+w==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.18.9",
-        "@babel/helper-plugin-utils": "^7.18.9",
+        "@babel/helper-create-class-features-plugin": "^7.19.0",
+        "@babel/helper-plugin-utils": "^7.19.0",
         "@babel/plugin-syntax-typescript": "^7.18.6"
       }
     },
@@ -24820,31 +24774,31 @@
       }
     },
     "@babel/traverse": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.10.tgz",
-      "integrity": "sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g==",
+      "version": "7.19.6",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.6.tgz",
+      "integrity": "sha512-6l5HrUCzFM04mfbG09AagtYyR2P0B71B1wN7PfSPiksDPz2k5H9CBC1tcZpz2M8OxbKTPccByoOJ22rUKbpmQQ==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.18.6",
-        "@babel/generator": "^7.18.10",
+        "@babel/generator": "^7.19.6",
         "@babel/helper-environment-visitor": "^7.18.9",
-        "@babel/helper-function-name": "^7.18.9",
+        "@babel/helper-function-name": "^7.19.0",
         "@babel/helper-hoist-variables": "^7.18.6",
         "@babel/helper-split-export-declaration": "^7.18.6",
-        "@babel/parser": "^7.18.10",
-        "@babel/types": "^7.18.10",
+        "@babel/parser": "^7.19.6",
+        "@babel/types": "^7.19.4",
         "debug": "^4.1.0",
         "globals": "^11.1.0"
       }
     },
     "@babel/types": {
-      "version": "7.18.10",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz",
-      "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==",
+      "version": "7.19.4",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.4.tgz",
+      "integrity": "sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==",
       "dev": true,
       "requires": {
-        "@babel/helper-string-parser": "^7.18.10",
-        "@babel/helper-validator-identifier": "^7.18.6",
+        "@babel/helper-string-parser": "^7.19.4",
+        "@babel/helper-validator-identifier": "^7.19.1",
         "to-fast-properties": "^2.0.0"
       }
     },
@@ -24888,9 +24842,9 @@
       "requires": {}
     },
     "@edx/frontend-build": {
-      "version": "12.0.3",
-      "resolved": "https://registry.npmjs.org/@edx/frontend-build/-/frontend-build-12.0.3.tgz",
-      "integrity": "sha512-q/BoMntXSXSXfSTUpr7G051jrqkAvEFRQHG4+R2rPMQX+Ok2FSE9HTa74kkEP2H2Ij6x5VHXhU5F1powu/x6Zw==",
+      "version": "12.3.0",
+      "resolved": "https://registry.npmjs.org/@edx/frontend-build/-/frontend-build-12.3.0.tgz",
+      "integrity": "sha512-GewVd5qD59d8hHZFnXyS5jWkDY8TWYENqO5dd+/Kmu7cmjKrp69PKmNyVs+QgZEADodYI5UT48A2LhsDZjDx7A==",
       "dev": true,
       "requires": {
         "@babel/cli": "7.16.0",
@@ -25213,14 +25167,14 @@
       }
     },
     "@eslint/eslintrc": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
-      "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.3.tgz",
+      "integrity": "sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==",
       "dev": true,
       "requires": {
         "ajv": "^6.12.4",
         "debug": "^4.3.2",
-        "espree": "^9.3.2",
+        "espree": "^9.4.0",
         "globals": "^13.15.0",
         "ignore": "^5.2.0",
         "import-fresh": "^3.2.1",
@@ -26113,13 +26067,13 @@
       "dev": true
     },
     "@jridgewell/trace-mapping": {
-      "version": "0.3.14",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
-      "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
+      "version": "0.3.17",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
+      "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
       "dev": true,
       "requires": {
-        "@jridgewell/resolve-uri": "^3.0.3",
-        "@jridgewell/sourcemap-codec": "^1.4.10"
+        "@jridgewell/resolve-uri": "3.1.0",
+        "@jridgewell/sourcemap-codec": "1.4.14"
       }
     },
     "@newrelic/publish-sourcemap": {
@@ -26241,92 +26195,125 @@
       }
     },
     "@svgr/babel-plugin-add-jsx-attribute": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.3.1.tgz",
-      "integrity": "sha512-jDBKArXYO1u0B1dmd2Nf8Oy6aTF5vLDfLoO9Oon/GLkqZ/NiggYWZA+a2HpUMH4ITwNqS3z43k8LWApB8S583w==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.0.tgz",
+      "integrity": "sha512-Cp1JR1IPrQNvPRbkfcPmax52iunBC+eQDyBce8feOIIbVH6ZpVhErYoJtPWRBj2rKi4Wi9HvCm1+L1UD6QlBmg==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-plugin-remove-jsx-attribute": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.3.1.tgz",
-      "integrity": "sha512-dQzyJ4prwjcFd929T43Z8vSYiTlTu8eafV40Z2gO7zy/SV5GT+ogxRJRBIKWomPBOiaVXFg3jY4S5hyEN3IBjQ==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz",
+      "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-plugin-remove-jsx-empty-expression": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.3.1.tgz",
-      "integrity": "sha512-HBOUc1XwSU67fU26V5Sfb8MQsT0HvUyxru7d0oBJ4rA2s4HW3PhyAPC7fV/mdsSGpAvOdd8Wpvkjsr0fWPUO7A==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz",
+      "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-plugin-replace-jsx-attribute-value": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.3.1.tgz",
-      "integrity": "sha512-C12e6aN4BXAolRrI601gPn5MDFCRHO7C4TM8Kks+rDtl8eEq+NN1sak0eAzJu363x3TmHXdZn7+Efd2nr9I5dA==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.0.tgz",
+      "integrity": "sha512-XWm64/rSPUCQ+MFyA9lhMO+w8bOZvkTvovRIU1lpIy63ysPaVAFtxjQiZj+S7QaLaLGUXkSkf8WZsaN+QPo/gA==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-plugin-svg-dynamic-title": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.3.1.tgz",
-      "integrity": "sha512-6NU55Mmh3M5u2CfCCt6TX29/pPneutrkJnnDCHbKZnjukZmmgUAZLtZ2g6ZoSPdarowaQmAiBRgAHqHmG0vuqA==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.0.tgz",
+      "integrity": "sha512-JIF2D2ltiWFGlTw2fJ9jJg1fNT9rWjOD2Cf0/xzeW6Z2LIRQTHcRHxpZq359+SRWtEPsCXEWV2Xmd+DMBj6dBw==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-plugin-svg-em-dimensions": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.3.1.tgz",
-      "integrity": "sha512-HV1NGHYTTe1vCNKlBgq/gKuCSfaRlKcHIADn7P8w8U3Zvujdw1rmusutghJ1pZJV7pDt3Gt8ws+SVrqHnBO/Qw==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.0.tgz",
+      "integrity": "sha512-uuo0FfLP4Nu2zncOcoUFDzZdXWma2bxkTGk0etRThs4/PghvPIGaW8cPhCg6yJ8zpaauWcKV0wZtzKlJRCtVzg==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-plugin-transform-react-native-svg": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.3.1.tgz",
-      "integrity": "sha512-2wZhSHvTolFNeKDAN/ZmIeSz2O9JSw72XD+o2bNp2QAaWqa8KGpn5Yk5WHso6xqfSAiRzAE+GXlsrBO4UP9LLw==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.0.tgz",
+      "integrity": "sha512-VMRWyOmrV+DaEFPgP3hZMsFgs2g87ojs3txw0Rx8iz6Nf/E3UoHUwTqpkSCWd3Hsnc9gMOY9+wl6+/Ycleh1sw==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-plugin-transform-svg-component": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.3.1.tgz",
-      "integrity": "sha512-cZ8Tr6ZAWNUFfDeCKn/pGi976iWSkS8ijmEYKosP+6ktdZ7lW9HVLHojyusPw3w0j8PI4VBeWAXAmi/2G7owxw==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.0.tgz",
+      "integrity": "sha512-b67Ul3SelaqvGEEG/1B3VJ03KUtGFgRQjRLCCjdttMQLcYa9l/izQFEclNFx53pNqhijUMNKHPhGMY/CWGVKig==",
       "dev": true,
       "requires": {}
     },
     "@svgr/babel-preset": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.3.1.tgz",
-      "integrity": "sha512-tQtWtzuMMQ3opH7je+MpwfuRA1Hf3cKdSgTtAYwOBDfmhabP7rcTfBi3E7V3MuwJNy/Y02/7/RutvwS1W4Qv9g==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.0.tgz",
+      "integrity": "sha512-UWM98PKVuMqw2UZo8YO3erI6nF1n7/XBYTXBqR0QhZP7HTjYK6QxFNvPfIshddy1hBdzhVpkf148Vg8xiVOtyg==",
       "dev": true,
       "requires": {
-        "@svgr/babel-plugin-add-jsx-attribute": "^6.3.1",
-        "@svgr/babel-plugin-remove-jsx-attribute": "^6.3.1",
-        "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.3.1",
-        "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.3.1",
-        "@svgr/babel-plugin-svg-dynamic-title": "^6.3.1",
-        "@svgr/babel-plugin-svg-em-dimensions": "^6.3.1",
-        "@svgr/babel-plugin-transform-react-native-svg": "^6.3.1",
-        "@svgr/babel-plugin-transform-svg-component": "^6.3.1"
+        "@svgr/babel-plugin-add-jsx-attribute": "^6.5.0",
+        "@svgr/babel-plugin-remove-jsx-attribute": "^6.5.0",
+        "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.5.0",
+        "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.0",
+        "@svgr/babel-plugin-svg-dynamic-title": "^6.5.0",
+        "@svgr/babel-plugin-svg-em-dimensions": "^6.5.0",
+        "@svgr/babel-plugin-transform-react-native-svg": "^6.5.0",
+        "@svgr/babel-plugin-transform-svg-component": "^6.5.0"
       }
     },
     "@svgr/core": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.3.1.tgz",
-      "integrity": "sha512-Sm3/7OdXbQreemf9aO25keerZSbnKMpGEfmH90EyYpj1e8wMD4TuwJIb3THDSgRMWk1kYJfSRulELBy4gVgZUA==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.0.tgz",
+      "integrity": "sha512-jIbu36GMjfK8HCCQitkfVVeQ2vSXGfq0ef0GO9HUxZGjal6Kvpkk4PwpkFP+OyCzF+skQFT9aWrUqekT3pKF8w==",
       "dev": true,
       "requires": {
-        "@svgr/plugin-jsx": "^6.3.1",
+        "@babel/core": "^7.18.5",
+        "@svgr/babel-preset": "^6.5.0",
+        "@svgr/plugin-jsx": "^6.5.0",
         "camelcase": "^6.2.0",
         "cosmiconfig": "^7.0.1"
+      },
+      "dependencies": {
+        "@babel/core": {
+          "version": "7.19.6",
+          "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz",
+          "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==",
+          "dev": true,
+          "requires": {
+            "@ampproject/remapping": "^2.1.0",
+            "@babel/code-frame": "^7.18.6",
+            "@babel/generator": "^7.19.6",
+            "@babel/helper-compilation-targets": "^7.19.3",
+            "@babel/helper-module-transforms": "^7.19.6",
+            "@babel/helpers": "^7.19.4",
+            "@babel/parser": "^7.19.6",
+            "@babel/template": "^7.18.10",
+            "@babel/traverse": "^7.19.6",
+            "@babel/types": "^7.19.4",
+            "convert-source-map": "^1.7.0",
+            "debug": "^4.1.0",
+            "gensync": "^1.0.0-beta.2",
+            "json5": "^2.2.1",
+            "semver": "^6.3.0"
+          }
+        },
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "dev": true
+        }
       }
     },
     "@svgr/hast-util-to-babel-ast": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.3.1.tgz",
-      "integrity": "sha512-NgyCbiTQIwe3wHe/VWOUjyxmpUmsrBjdoIxKpXt3Nqc3TN30BpJG22OxBvVzsAh9jqep0w0/h8Ywvdk3D9niNQ==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.0.tgz",
+      "integrity": "sha512-PPy94U/EiPQ2dY0b4jEqj4QOdDRq6DG7aTHjpGaL8HlKSHkpU1DpjfywCXTJqtOdCo2FywjWvg0U2FhqMeUJaA==",
       "dev": true,
       "requires": {
         "@babel/types": "^7.18.4",
@@ -26334,41 +26321,41 @@
       },
       "dependencies": {
         "entities": {
-          "version": "4.3.1",
-          "resolved": "https://registry.npmjs.org/entities/-/entities-4.3.1.tgz",
-          "integrity": "sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg==",
+          "version": "4.4.0",
+          "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz",
+          "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==",
           "dev": true
         }
       }
     },
     "@svgr/plugin-jsx": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.3.1.tgz",
-      "integrity": "sha512-r9+0mYG3hD4nNtUgsTXWGYJomv/bNd7kC16zvsM70I/bGeoCi/3lhTmYqeN6ChWX317OtQCSZZbH4wq9WwoXbw==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.0.tgz",
+      "integrity": "sha512-1CHMqOBKoNk/ZPU+iGXKcQPC6q9zaD7UOI99J+BaGY5bdCztcf5bZyi0QZSDRJtCQpdofeVv7XfBYov2mtl0Pw==",
       "dev": true,
       "requires": {
         "@babel/core": "^7.18.5",
-        "@svgr/babel-preset": "^6.3.1",
-        "@svgr/hast-util-to-babel-ast": "^6.3.1",
+        "@svgr/babel-preset": "^6.5.0",
+        "@svgr/hast-util-to-babel-ast": "^6.5.0",
         "svg-parser": "^2.0.4"
       },
       "dependencies": {
         "@babel/core": {
-          "version": "7.18.10",
-          "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz",
-          "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==",
+          "version": "7.19.6",
+          "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz",
+          "integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==",
           "dev": true,
           "requires": {
             "@ampproject/remapping": "^2.1.0",
             "@babel/code-frame": "^7.18.6",
-            "@babel/generator": "^7.18.10",
-            "@babel/helper-compilation-targets": "^7.18.9",
-            "@babel/helper-module-transforms": "^7.18.9",
-            "@babel/helpers": "^7.18.9",
-            "@babel/parser": "^7.18.10",
+            "@babel/generator": "^7.19.6",
+            "@babel/helper-compilation-targets": "^7.19.3",
+            "@babel/helper-module-transforms": "^7.19.6",
+            "@babel/helpers": "^7.19.4",
+            "@babel/parser": "^7.19.6",
             "@babel/template": "^7.18.10",
-            "@babel/traverse": "^7.18.10",
-            "@babel/types": "^7.18.10",
+            "@babel/traverse": "^7.19.6",
+            "@babel/types": "^7.19.4",
             "convert-source-map": "^1.7.0",
             "debug": "^4.1.0",
             "gensync": "^1.0.0-beta.2",
@@ -26385,9 +26372,9 @@
       }
     },
     "@svgr/plugin-svgo": {
-      "version": "6.3.1",
-      "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.3.1.tgz",
-      "integrity": "sha512-yJIjTDKPYqzFVjmsbH5EdIwEsmKxjxdXSGJVLeUgwZOZPAkNQmD1v7LDbOdOKbR44FG8465Du+zWPdbYGnbMbw==",
+      "version": "6.5.0",
+      "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.0.tgz",
+      "integrity": "sha512-8Zv1Yyv6I7HlIqrqGFM0sDKQrhjbfNZJawR8UjIaVWSb0tKZP1Ra6ymhqIFu6FT6kDRD0Ct5NlQZ10VUujSspw==",
       "dev": true,
       "requires": {
         "cosmiconfig": "^7.0.1",
@@ -26617,9 +26604,9 @@
       }
     },
     "@types/babel__traverse": {
-      "version": "7.17.1",
-      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz",
-      "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==",
+      "version": "7.18.2",
+      "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.2.tgz",
+      "integrity": "sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==",
       "dev": true,
       "requires": {
         "@babel/types": "^7.3.0"
@@ -26669,9 +26656,9 @@
       "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow=="
     },
     "@types/eslint": {
-      "version": "8.4.5",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz",
-      "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==",
+      "version": "8.4.8",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.8.tgz",
+      "integrity": "sha512-zUCKQI1bUCTi+0kQs5ZQzQ/XILWRLIlh15FXWNykJ+NG3TMKMVvwwC6GP3DR1Ylga15fB7iAExSzc4PNlR5i3w==",
       "dev": true,
       "requires": {
         "@types/estree": "*",
@@ -26695,9 +26682,9 @@
       "dev": true
     },
     "@types/express": {
-      "version": "4.17.13",
-      "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz",
-      "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==",
+      "version": "4.17.14",
+      "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz",
+      "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==",
       "dev": true,
       "requires": {
         "@types/body-parser": "*",
@@ -26707,9 +26694,9 @@
       }
     },
     "@types/express-serve-static-core": {
-      "version": "4.17.30",
-      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz",
-      "integrity": "sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==",
+      "version": "4.17.31",
+      "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz",
+      "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==",
       "dev": true,
       "requires": {
         "@types/node": "*",
@@ -26818,15 +26805,15 @@
       "dev": true
     },
     "@types/mime": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.0.tgz",
-      "integrity": "sha512-fccbsHKqFDXClBZTDLA43zl0+TbxyIwyzIzwwhvoJvhNjOErCdeX2xJbURimv2EbSVUGav001PaCJg4mZxMl4w==",
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz",
+      "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==",
       "dev": true
     },
     "@types/minimatch": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
-      "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
+      "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
       "dev": true
     },
     "@types/node": {
@@ -26847,9 +26834,9 @@
       "dev": true
     },
     "@types/prettier": {
-      "version": "2.6.4",
-      "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.4.tgz",
-      "integrity": "sha512-fOwvpvQYStpb/zHMx0Cauwywu9yLDmzWiiQBC7gJyq5tYLUXFZvDG7VK1B7WBxxjBJNKFOZ0zLoOQn8vmATbhw==",
+      "version": "2.7.1",
+      "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz",
+      "integrity": "sha512-ri0UmynRRvZiiUJdiz38MmIblKK+oH30MztdBVR95dv/Ubw6neWSb8u1XpRb72L4qsZOhz+L+z9JD40SJmfWow==",
       "dev": true
     },
     "@types/prop-types": {
@@ -26981,9 +26968,9 @@
       }
     },
     "@types/uglify-js": {
-      "version": "3.16.0",
-      "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.16.0.tgz",
-      "integrity": "sha512-0yeUr92L3r0GLRnBOvtYK1v2SjqMIqQDHMl7GLb+l2L8+6LSFWEEWEIgVsPdMn5ImLM8qzWT8xFPtQYpp8co0g==",
+      "version": "3.17.1",
+      "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz",
+      "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==",
       "dev": true,
       "requires": {
         "source-map": "^0.6.1"
@@ -27003,9 +26990,9 @@
       "integrity": "sha1-DSUBJorY+ZYrdA04fEZU9fjiPlI="
     },
     "@types/webpack": {
-      "version": "4.41.32",
-      "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.32.tgz",
-      "integrity": "sha512-cb+0ioil/7oz5//7tZUSwbrSAN/NWHrQylz5cW8G0dWTcF/g+/dSdMlKVZspBYuMAN1+WnwHrkxiRrLcwd0Heg==",
+      "version": "4.41.33",
+      "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz",
+      "integrity": "sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==",
       "dev": true,
       "requires": {
         "@types/node": "*",
@@ -27307,9 +27294,9 @@
       "dev": true
     },
     "address": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz",
-      "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==",
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz",
+      "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==",
       "dev": true
     },
     "adjust-sourcemap-loader": {
@@ -27623,6 +27610,18 @@
         "es-shim-unscopables": "^1.0.0"
       }
     },
+    "array.prototype.flatmap": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz",
+      "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.19.2",
+        "es-shim-unscopables": "^1.0.0"
+      }
+    },
     "assert-ok": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/assert-ok/-/assert-ok-1.0.0.tgz",
@@ -27652,7 +27651,7 @@
     "asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
-      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
       "dev": true
     },
     "at-least-node": {
@@ -27681,6 +27680,12 @@
         "postcss-value-parser": "^4.1.0"
       }
     },
+    "axe-core": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.5.0.tgz",
+      "integrity": "sha512-4+rr8eQ7+XXS5nZrKcMO/AikHL0hVqy+lHWAnE3xdHl+aguag8SOQ6eEqLexwLNWgXIMfunGuD3ON1/6Kyet0A==",
+      "dev": true
+    },
     "axios": {
       "version": "0.21.1",
       "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
@@ -27847,15 +27852,6 @@
         }
       }
     },
-    "babel-plugin-dynamic-import-node": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
-      "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
-      "dev": true,
-      "requires": {
-        "object.assign": "^4.1.0"
-      }
-    },
     "babel-plugin-istanbul": {
       "version": "6.1.1",
       "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
@@ -27882,13 +27878,13 @@
       }
     },
     "babel-plugin-polyfill-corejs2": {
-      "version": "0.3.2",
-      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz",
-      "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==",
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz",
+      "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==",
       "dev": true,
       "requires": {
         "@babel/compat-data": "^7.17.7",
-        "@babel/helper-define-polyfill-provider": "^0.3.2",
+        "@babel/helper-define-polyfill-provider": "^0.3.3",
         "semver": "^6.1.1"
       },
       "dependencies": {
@@ -28442,9 +28438,9 @@
       }
     },
     "body-parser": {
-      "version": "1.20.0",
-      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz",
-      "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==",
+      "version": "1.20.1",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
+      "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
       "dev": true,
       "requires": {
         "bytes": "3.1.2",
@@ -28455,7 +28451,7 @@
         "http-errors": "2.0.0",
         "iconv-lite": "0.4.24",
         "on-finished": "2.4.1",
-        "qs": "6.10.3",
+        "qs": "6.11.0",
         "raw-body": "2.5.1",
         "type-is": "~1.6.18",
         "unpipe": "1.0.0"
@@ -28481,15 +28477,6 @@
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
           "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
-        },
-        "qs": {
-          "version": "6.10.3",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
-          "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
-          "dev": true,
-          "requires": {
-            "side-channel": "^1.0.4"
-          }
         }
       }
     },
@@ -28544,15 +28531,15 @@
       "dev": true
     },
     "browserslist": {
-      "version": "4.21.3",
-      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
-      "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
+      "version": "4.21.4",
+      "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
+      "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
       "dev": true,
       "requires": {
-        "caniuse-lite": "^1.0.30001370",
-        "electron-to-chromium": "^1.4.202",
+        "caniuse-lite": "^1.0.30001400",
+        "electron-to-chromium": "^1.4.251",
         "node-releases": "^2.0.6",
-        "update-browserslist-db": "^1.0.5"
+        "update-browserslist-db": "^1.0.9"
       }
     },
     "bser": {
@@ -28752,9 +28739,9 @@
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30001374",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001374.tgz",
-      "integrity": "sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw==",
+      "version": "1.0.30001426",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001426.tgz",
+      "integrity": "sha512-n7cosrHLl8AWt0wwZw/PJZgUg3lV0gk9LMI7ikGJwhyhgsd2Nb65vKvmSexCqq/J7rbH3mFG6yZZiPR5dLPW5A==",
       "dev": true
     },
     "capture-exit": {
@@ -29080,9 +29067,9 @@
       }
     },
     "colord": {
-      "version": "2.9.2",
-      "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz",
-      "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==",
+      "version": "2.9.3",
+      "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
+      "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
       "dev": true
     },
     "colorette": {
@@ -29162,6 +29149,12 @@
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
           "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
+        },
+        "safe-buffer": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+          "dev": true
         }
       }
     },
@@ -29211,14 +29204,6 @@
       "dev": true,
       "requires": {
         "safe-buffer": "5.2.1"
-      },
-      "dependencies": {
-        "safe-buffer": {
-          "version": "5.2.1",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-          "dev": true
-        }
       }
     },
     "content-type": {
@@ -29228,13 +29213,10 @@
       "dev": true
     },
     "convert-source-map": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
-      "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
-      "dev": true,
-      "requires": {
-        "safe-buffer": "~5.1.1"
-      }
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
+      "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
+      "dev": true
     },
     "cookie": {
       "version": "0.4.1",
@@ -29265,21 +29247,12 @@
       "integrity": "sha512-NwS7fI5M5B85EwpWuIwJN4i/fbisQUwLwiSNUWeXlkAZ0sbBjLEvLvFLf1uzAUV66PcEPt4xCGCmOZSxVf3xzA=="
     },
     "core-js-compat": {
-      "version": "3.24.1",
-      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.24.1.tgz",
-      "integrity": "sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw==",
+      "version": "3.26.0",
+      "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.0.tgz",
+      "integrity": "sha512-piOX9Go+Z4f9ZiBFLnZ5VrOpBl0h7IGCkiFUN11QTe6LjAvOT3ifL/5TdoizMh99hcGy5SoLyWbapIY/PIb/3A==",
       "dev": true,
       "requires": {
-        "browserslist": "^4.21.3",
-        "semver": "7.0.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
-          "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
-          "dev": true
-        }
+        "browserslist": "^4.21.4"
       }
     },
     "core-js-pure": {
@@ -29288,9 +29261,9 @@
       "integrity": "sha512-TyofCdMzx0KMhi84mVRS8rL1XsRk2SPUNz2azmth53iRN0/08Uim9fdhQTaZTG1LqaXHYVci4RDHka6WrXfnvg=="
     },
     "core-util-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
       "dev": true
     },
     "cosmiconfig": {
@@ -29342,9 +29315,9 @@
       }
     },
     "css-declaration-sorter": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz",
-      "integrity": "sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz",
+      "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==",
       "dev": true,
       "requires": {}
     },
@@ -29376,9 +29349,9 @@
           }
         },
         "semver": {
-          "version": "7.3.7",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
-          "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+          "version": "7.3.8",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+          "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
           "dev": true,
           "requires": {
             "lru-cache": "^6.0.0"
@@ -29583,9 +29556,9 @@
       "dev": true
     },
     "decimal.js": {
-      "version": "10.3.1",
-      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
-      "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==",
+      "version": "10.4.2",
+      "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.2.tgz",
+      "integrity": "sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==",
       "dev": true
     },
     "decode-uri-component": {
@@ -29872,7 +29845,7 @@
     "delayed-stream": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
-      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
       "dev": true
     },
     "depd": {
@@ -30185,9 +30158,9 @@
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.4.211",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.211.tgz",
-      "integrity": "sha512-BZSbMpyFQU0KBJ1JG26XGeFI3i4op+qOYGxftmZXFZoHkhLgsSv4DHDJfl8ogII3hIuzGt51PaZ195OVu0yJ9A==",
+      "version": "1.4.284",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
+      "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
       "dev": true
     },
     "email-prop-type": {
@@ -30695,13 +30668,12 @@
       }
     },
     "eslint-module-utils": {
-      "version": "2.7.3",
-      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
-      "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
+      "version": "2.7.4",
+      "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
+      "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==",
       "dev": true,
       "requires": {
-        "debug": "^3.2.7",
-        "find-up": "^2.1.0"
+        "debug": "^3.2.7"
       },
       "dependencies": {
         "debug": {
@@ -30712,55 +30684,6 @@
           "requires": {
             "ms": "^2.1.1"
           }
-        },
-        "find-up": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
-          "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
-          "dev": true,
-          "requires": {
-            "locate-path": "^2.0.0"
-          }
-        },
-        "locate-path": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
-          "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
-          "dev": true,
-          "requires": {
-            "p-locate": "^2.0.0",
-            "path-exists": "^3.0.0"
-          }
-        },
-        "p-limit": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
-          "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
-          "dev": true,
-          "requires": {
-            "p-try": "^1.0.0"
-          }
-        },
-        "p-locate": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
-          "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
-          "dev": true,
-          "requires": {
-            "p-limit": "^1.1.0"
-          }
-        },
-        "p-try": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
-          "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
-          "dev": true
-        },
-        "path-exists": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
-          "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
-          "dev": true
         }
       }
     },
@@ -30808,17 +30731,6 @@
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
           "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
           "dev": true
-        },
-        "resolve": {
-          "version": "1.22.1",
-          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
-          "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
-          "dev": true,
-          "requires": {
-            "is-core-module": "^2.9.0",
-            "path-parse": "^1.0.7",
-            "supports-preserve-symlinks-flag": "^1.0.0"
-          }
         }
       }
     },
@@ -30944,9 +30856,9 @@
       "dev": true
     },
     "espree": {
-      "version": "9.3.3",
-      "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz",
-      "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==",
+      "version": "9.4.0",
+      "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz",
+      "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==",
       "dev": true,
       "requires": {
         "acorn": "^8.8.0",
@@ -31358,14 +31270,14 @@
       }
     },
     "express": {
-      "version": "4.18.1",
-      "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz",
-      "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==",
+      "version": "4.18.2",
+      "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
+      "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
       "dev": true,
       "requires": {
         "accepts": "~1.3.8",
         "array-flatten": "1.1.1",
-        "body-parser": "1.20.0",
+        "body-parser": "1.20.1",
         "content-disposition": "0.5.4",
         "content-type": "~1.0.4",
         "cookie": "0.5.0",
@@ -31384,7 +31296,7 @@
         "parseurl": "~1.3.3",
         "path-to-regexp": "0.1.7",
         "proxy-addr": "~2.0.7",
-        "qs": "6.10.3",
+        "qs": "6.11.0",
         "range-parser": "~1.2.1",
         "safe-buffer": "5.2.1",
         "send": "0.18.0",
@@ -31428,21 +31340,6 @@
           "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
           "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
           "dev": true
-        },
-        "qs": {
-          "version": "6.10.3",
-          "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
-          "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
-          "dev": true,
-          "requires": {
-            "side-channel": "^1.0.4"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.2.1",
-          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
-          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
-          "dev": true
         }
       }
     },
@@ -31532,9 +31429,9 @@
       "dev": true
     },
     "fast-glob": {
-      "version": "3.2.11",
-      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
-      "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+      "version": "3.2.12",
+      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+      "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
       "dev": true,
       "requires": {
         "@nodelib/fs.stat": "^2.0.2",
@@ -31591,9 +31488,9 @@
       }
     },
     "fb-watchman": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
-      "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+      "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
       "dev": true,
       "requires": {
         "bser": "2.1.1"
@@ -31770,9 +31667,9 @@
       }
     },
     "flatted": {
-      "version": "3.2.6",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz",
-      "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==",
+      "version": "3.2.7",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+      "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
       "dev": true
     },
     "focus-lock": {
@@ -31894,9 +31791,9 @@
           }
         },
         "semver": {
-          "version": "7.3.7",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
-          "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+          "version": "7.3.8",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+          "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
           "dev": true,
           "requires": {
             "lru-cache": "^6.0.0"
@@ -33014,9 +32911,9 @@
       "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
     },
     "immer": {
-      "version": "9.0.15",
-      "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz",
-      "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==",
+      "version": "9.0.16",
+      "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz",
+      "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==",
       "dev": true
     },
     "immutable": {
@@ -33208,7 +33105,7 @@
     "is-arrayish": {
       "version": "0.2.1",
       "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
-      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
       "dev": true
     },
     "is-bigint": {
@@ -33258,9 +33155,9 @@
       }
     },
     "is-core-module": {
-      "version": "2.9.0",
-      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
-      "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+      "version": "2.11.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+      "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
       "dev": true,
       "requires": {
         "has": "^1.0.3"
@@ -33570,7 +33467,7 @@
     "is-typedarray": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
-      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+      "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
       "dev": true
     },
     "is-valid-path": {
@@ -33634,9 +33531,9 @@
       "dev": true
     },
     "istanbul-lib-instrument": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz",
-      "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+      "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
       "dev": true,
       "requires": {
         "@babel/core": "^7.12.3",
@@ -34936,9 +34833,9 @@
           }
         },
         "semver": {
-          "version": "7.3.7",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
-          "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+          "version": "7.3.8",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+          "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
           "dev": true,
           "requires": {
             "lru-cache": "^6.0.0"
@@ -35295,13 +35192,13 @@
       }
     },
     "jsx-ast-utils": {
-      "version": "3.3.2",
-      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz",
-      "integrity": "sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q==",
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz",
+      "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==",
       "dev": true,
       "requires": {
         "array-includes": "^3.1.5",
-        "object.assign": "^4.1.2"
+        "object.assign": "^4.1.3"
       }
     },
     "junk": {
@@ -35343,6 +35240,21 @@
       "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==",
       "dev": true
     },
+    "language-subtag-registry": {
+      "version": "0.3.22",
+      "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
+      "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==",
+      "dev": true
+    },
+    "language-tags": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
+      "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==",
+      "dev": true,
+      "requires": {
+        "language-subtag-registry": "~0.3.2"
+      }
+    },
     "leven": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
@@ -35374,9 +35286,9 @@
       "dev": true
     },
     "lines-and-columns": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
-      "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+      "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
       "dev": true
     },
     "loader-runner": {
@@ -35386,9 +35298,9 @@
       "dev": true
     },
     "loader-utils": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
-      "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.3.tgz",
+      "integrity": "sha512-THWqIsn8QRnvLl0shHYVBN9syumU8pYWEHPTmkiVGd+7K5eFNVSY6AJhRvgGF70gg1Dz+l/k8WicvFCxdEs60A==",
       "dev": true,
       "requires": {
         "big.js": "^5.2.2",
@@ -35766,9 +35678,9 @@
       }
     },
     "minimist": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
-      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
+      "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
       "dev": true
     },
     "mixin-deep": {
@@ -35957,22 +35869,15 @@
           }
         },
         "semver": {
-          "version": "7.3.7",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
-          "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+          "version": "7.3.8",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+          "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
           "dev": true,
           "optional": true,
           "requires": {
             "lru-cache": "^6.0.0"
           }
         },
-        "uuid": {
-          "version": "8.3.2",
-          "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-          "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
-          "dev": true,
-          "optional": true
-        },
         "yallist": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
@@ -36065,9 +35970,9 @@
       }
     },
     "nwsapi": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz",
-      "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==",
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz",
+      "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==",
       "dev": true
     },
     "object-assign": {
@@ -36183,13 +36088,13 @@
       }
     },
     "object.assign": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
-      "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+      "version": "4.1.4",
+      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+      "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
       "requires": {
-        "call-bind": "^1.0.0",
-        "define-properties": "^1.1.3",
-        "has-symbols": "^1.0.1",
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.4",
+        "has-symbols": "^1.0.3",
         "object-keys": "^1.1.1"
       }
     },
@@ -36800,14 +36705,14 @@
       "peer": true
     },
     "portfinder": {
-      "version": "1.0.28",
-      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
-      "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
+      "version": "1.0.32",
+      "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz",
+      "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==",
       "dev": true,
       "requires": {
-        "async": "^2.6.2",
-        "debug": "^3.1.1",
-        "mkdirp": "^0.5.5"
+        "async": "^2.6.4",
+        "debug": "^3.2.7",
+        "mkdirp": "^0.5.6"
       },
       "dependencies": {
         "debug": {
@@ -36919,9 +36824,9 @@
           }
         },
         "semver": {
-          "version": "7.3.7",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
-          "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+          "version": "7.3.8",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+          "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
           "dev": true,
           "requires": {
             "lru-cache": "^6.0.0"
@@ -37333,9 +37238,9 @@
       "optional": true
     },
     "psl": {
-      "version": "1.8.0",
-      "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
-      "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+      "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==",
       "dev": true
     },
     "pubsub-js": {
@@ -37360,10 +37265,13 @@
       "dev": true
     },
     "qs": {
-      "version": "6.5.2",
-      "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
-      "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
-      "dev": true
+      "version": "6.11.0",
+      "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+      "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+      "dev": true,
+      "requires": {
+        "side-channel": "^1.0.4"
+      }
     },
     "query-string": {
       "version": "5.1.1",
@@ -37377,6 +37285,12 @@
         "strict-uri-encode": "^1.0.0"
       }
     },
+    "querystringify": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
+      "dev": true
+    },
     "queue-microtask": {
       "version": "1.2.3",
       "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -38090,6 +38004,12 @@
           "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
           "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
           "dev": true
+        },
+        "safe-buffer": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+          "dev": true
         }
       }
     },
@@ -38112,23 +38032,12 @@
       }
     },
     "recursive-readdir": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
-      "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==",
+      "version": "2.2.3",
+      "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz",
+      "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==",
       "dev": true,
       "requires": {
-        "minimatch": "3.0.4"
-      },
-      "dependencies": {
-        "minimatch": {
-          "version": "3.0.4",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
-          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        }
+        "minimatch": "^3.0.5"
       }
     },
     "redent": {
@@ -38162,9 +38071,9 @@
       "dev": true
     },
     "regenerate-unicode-properties": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
-      "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+      "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
       "dev": true,
       "requires": {
         "regenerate": "^1.4.2"
@@ -38217,29 +38126,29 @@
       "dev": true
     },
     "regexpu-core": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
-      "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.1.tgz",
+      "integrity": "sha512-HrnlNtpvqP1Xkb28tMhBUO2EbyUHdQlsnlAhzWcwHy8WJR53UWr7/MAvqrsQKMbV4qdpv03oTMG8iIhfsPFktQ==",
       "dev": true,
       "requires": {
         "regenerate": "^1.4.2",
-        "regenerate-unicode-properties": "^10.0.1",
-        "regjsgen": "^0.6.0",
-        "regjsparser": "^0.8.2",
+        "regenerate-unicode-properties": "^10.1.0",
+        "regjsgen": "^0.7.1",
+        "regjsparser": "^0.9.1",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.0.0"
       }
     },
     "regjsgen": {
-      "version": "0.6.0",
-      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
-      "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==",
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
+      "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==",
       "dev": true
     },
     "regjsparser": {
-      "version": "0.8.4",
-      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
-      "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
+      "version": "0.9.1",
+      "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+      "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
       "dev": true,
       "requires": {
         "jsesc": "~0.5.0"
@@ -38326,13 +38235,14 @@
       "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA=="
     },
     "resolve": {
-      "version": "1.20.0",
-      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
-      "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+      "version": "1.22.1",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+      "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
       "dev": true,
       "requires": {
-        "is-core-module": "^2.2.0",
-        "path-parse": "^1.0.6"
+        "is-core-module": "^2.9.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
       }
     },
     "resolve-cwd": {
@@ -38457,9 +38367,9 @@
       }
     },
     "safe-buffer": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
-      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
       "dev": true
     },
     "safe-regex": {
@@ -38712,9 +38622,9 @@
       "dev": true
     },
     "selfsigned": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz",
-      "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==",
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz",
+      "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==",
       "dev": true,
       "requires": {
         "node-forge": "^1"
@@ -38954,9 +38864,9 @@
       "dev": true
     },
     "shell-quote": {
-      "version": "1.7.3",
-      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
-      "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==",
+      "version": "1.7.4",
+      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz",
+      "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==",
       "dev": true
     },
     "shellwords": {
@@ -39210,14 +39120,6 @@
         "faye-websocket": "^0.11.3",
         "uuid": "^8.3.2",
         "websocket-driver": "^0.7.4"
-      },
-      "dependencies": {
-        "uuid": {
-          "version": "8.3.2",
-          "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-          "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
-          "dev": true
-        }
       }
     },
     "sort-keys": {
@@ -39249,7 +39151,7 @@
     "source-map": {
       "version": "0.5.7",
       "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+      "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
       "dev": true
     },
     "source-map-js": {
@@ -39351,9 +39253,9 @@
       }
     },
     "spdx-license-ids": {
-      "version": "3.0.11",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
-      "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
+      "version": "3.0.12",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz",
+      "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
       "dev": true
     },
     "spdy": {
@@ -39408,7 +39310,7 @@
     "sprintf-js": {
       "version": "1.0.3",
       "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
       "dev": true
     },
     "stable": {
@@ -39542,6 +39444,14 @@
       "dev": true,
       "requires": {
         "safe-buffer": "~5.1.0"
+      },
+      "dependencies": {
+        "safe-buffer": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+          "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+          "dev": true
+        }
       }
     },
     "string-length": {
@@ -39758,9 +39668,9 @@
       }
     },
     "supports-hyperlinks": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz",
-      "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==",
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
+      "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
       "dev": true,
       "requires": {
         "has-flag": "^4.0.0",
@@ -39873,6 +39783,15 @@
       "requires": {
         "temp-dir": "^1.0.0",
         "uuid": "^3.0.1"
+      },
+      "dependencies": {
+        "uuid": {
+          "version": "3.4.0",
+          "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+          "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+          "dev": true,
+          "optional": true
+        }
       }
     },
     "terminal-link": {
@@ -39886,9 +39805,9 @@
       }
     },
     "terser": {
-      "version": "5.14.2",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz",
-      "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==",
+      "version": "5.15.1",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz",
+      "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==",
       "dev": true,
       "requires": {
         "@jridgewell/source-map": "^0.3.2",
@@ -39906,16 +39825,16 @@
       }
     },
     "terser-webpack-plugin": {
-      "version": "5.3.3",
-      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz",
-      "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==",
+      "version": "5.3.6",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz",
+      "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==",
       "dev": true,
       "requires": {
-        "@jridgewell/trace-mapping": "^0.3.7",
+        "@jridgewell/trace-mapping": "^0.3.14",
         "jest-worker": "^27.4.5",
         "schema-utils": "^3.1.1",
         "serialize-javascript": "^6.0.0",
-        "terser": "^5.7.2"
+        "terser": "^5.14.1"
       },
       "dependencies": {
         "has-flag": {
@@ -40015,7 +39934,7 @@
     "to-fast-properties": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
-      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+      "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
       "dev": true
     },
     "to-object-path": {
@@ -40078,20 +39997,21 @@
       "dev": true
     },
     "tough-cookie": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
-      "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz",
+      "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==",
       "dev": true,
       "requires": {
         "psl": "^1.1.33",
         "punycode": "^2.1.1",
-        "universalify": "^0.1.2"
+        "universalify": "^0.2.0",
+        "url-parse": "^1.5.3"
       },
       "dependencies": {
         "universalify": {
-          "version": "0.1.2",
-          "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
-          "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+          "version": "0.2.0",
+          "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+          "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
           "dev": true
         }
       }
@@ -40152,7 +40072,7 @@
     "tunnel-agent": {
       "version": "0.6.0",
       "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
-      "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+      "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
       "dev": true,
       "optional": true,
       "requires": {
@@ -40261,9 +40181,9 @@
       "dev": true
     },
     "unicode-property-aliases-ecmascript": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
-      "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+      "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
       "dev": true
     },
     "union-value": {
@@ -40354,9 +40274,9 @@
       }
     },
     "update-browserslist-db": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz",
-      "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==",
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
+      "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
       "dev": true,
       "requires": {
         "escalade": "^3.1.1",
@@ -40389,6 +40309,16 @@
         "schema-utils": "^3.0.0"
       }
     },
+    "url-parse": {
+      "version": "1.5.10",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+      "dev": true,
+      "requires": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
+      }
+    },
     "url-parse-lax": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
@@ -40448,11 +40378,10 @@
       "dev": true
     },
     "uuid": {
-      "version": "3.4.0",
-      "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
-      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
-      "dev": true,
-      "optional": true
+      "version": "8.3.2",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+      "dev": true
     },
     "v8-compile-cache": {
       "version": "2.3.0",
@@ -40948,9 +40877,9 @@
           }
         },
         "ws": {
-          "version": "8.8.1",
-          "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
-          "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
+          "version": "8.10.0",
+          "resolved": "https://registry.npmjs.org/ws/-/ws-8.10.0.tgz",
+          "integrity": "sha512-+s49uSmZpvtAsd2h37vIPy1RBusaLawVe8of+GyEPsaJTCMpj/2v8NpeK1SHXjBlQ95lQTmQofOJnFiLoaN3yw==",
           "dev": true,
           "requires": {}
         }
diff --git a/package.json b/package.json
index 84b87a2c84..f9ca68f044 100644
--- a/package.json
+++ b/package.json
@@ -55,7 +55,7 @@
     "universal-cookie": "4.0.4"
   },
   "devDependencies": {
-    "@edx/frontend-build": "12.0.3",
+    "@edx/frontend-build": "12.3.0",
     "@testing-library/jest-dom": "5.11.9",
     "@testing-library/react": "11.2.7",
     "@testing-library/react-hooks": "3.7.0",
diff --git a/src/components/NotFoundPage/index.jsx b/src/components/NotFoundPage/index.jsx
index 7eda7aa0e0..24e71abe42 100644
--- a/src/components/NotFoundPage/index.jsx
+++ b/src/components/NotFoundPage/index.jsx
@@ -4,7 +4,7 @@ import { Helmet } from 'react-helmet';
 import { AppContext } from '@edx/frontend-platform/react';
 import { Container } from '@edx/paragon';
 
-function NotFoundPage({ pageTitle, errorHeading, errorMessage }) {
+const NotFoundPage = ({ pageTitle, errorHeading, errorMessage }) => {
   const { enterpriseConfig } = useContext(AppContext);
 
   let PAGE_TITLE = pageTitle;
@@ -22,7 +22,7 @@ function NotFoundPage({ pageTitle, errorHeading, errorMessage }) {
       </div>
     </Container>
   );
-}
+};
 
 NotFoundPage.defaultProps = {
   pageTitle: 'Page not found',
diff --git a/src/components/TagCloud/index.jsx b/src/components/TagCloud/index.jsx
index d716203422..cede0a18cb 100644
--- a/src/components/TagCloud/index.jsx
+++ b/src/components/TagCloud/index.jsx
@@ -3,24 +3,22 @@ import PropTypes from 'prop-types';
 
 import './styles/TagCloud.scss';
 
-function TagCloud({ tags, onRemove }) {
-  return (
-    <div className="skills-tag">
-      <ul className="item">
-        {
-          tags.map(
-            tag => (
-              <li className="list-item" key={tag.title}>
-                <span className="black">{tag.title}</span>
-                <button data-testid={tag.title} type="button" className="remove" onClick={() => onRemove(tag.metadata)}>x</button>
-              </li>
-            ),
-          )
-        }
-      </ul>
-    </div>
-  );
-}
+const TagCloud = ({ tags, onRemove }) => (
+  <div className="skills-tag">
+    <ul className="item">
+      {
+        tags.map(
+          tag => (
+            <li className="list-item" key={tag.title}>
+              <span className="black">{tag.title}</span>
+              <button data-testid={tag.title} type="button" className="remove" onClick={() => onRemove(tag.metadata)}>x</button>
+            </li>
+          ),
+        )
+      }
+    </ul>
+  </div>
+);
 
 TagCloud.propTypes = {
   onRemove: PropTypes.func.isRequired,
diff --git a/src/components/Toasts/ToastsProvider.jsx b/src/components/Toasts/ToastsProvider.jsx
index 6d29c9c7f8..770bbbf054 100644
--- a/src/components/Toasts/ToastsProvider.jsx
+++ b/src/components/Toasts/ToastsProvider.jsx
@@ -5,7 +5,7 @@ import PropTypes from 'prop-types';
 
 export const ToastsContext = createContext();
 
-function ToastsProvider({ children }) {
+const ToastsProvider = ({ children }) => {
   const [toasts, setToasts] = useState([]);
 
   const addToast = (message) => {
@@ -34,7 +34,7 @@ function ToastsProvider({ children }) {
       {children}
     </ToastsContext.Provider>
   );
-}
+};
 
 ToastsProvider.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/app/App.jsx b/src/components/app/App.jsx
index ab305dc4d3..3ebe1ce797 100644
--- a/src/components/app/App.jsx
+++ b/src/components/app/App.jsx
@@ -16,7 +16,7 @@ import { EnterpriseInvitePage } from '../enterprise-invite';
 import { ExecutiveEducation2UPage } from '../executive-education-2u';
 import { ToastsProvider, Toasts } from '../Toasts';
 
-export default function App() {
+const App = () => {
   useEffect(() => {
     if (process.env.HOTJAR_APP_ID) {
       try {
@@ -56,4 +56,6 @@ export default function App() {
       </NoticesProvider>
     </AppProvider>
   );
-}
+};
+
+export default App;
diff --git a/src/components/app/AuthenticatedPage.jsx b/src/components/app/AuthenticatedPage.jsx
index b24c55e959..494f261473 100644
--- a/src/components/app/AuthenticatedPage.jsx
+++ b/src/components/app/AuthenticatedPage.jsx
@@ -13,7 +13,7 @@ import { Layout } from '../layout';
 import LoginRefresh from './LoginRefresh';
 import { ErrorPage } from '../error-page';
 
-export default function AuthenticatedPage({ children, useEnterpriseConfigCache }) {
+const AuthenticatedPage = ({ children, useEnterpriseConfigCache }) => {
   const location = useLocation();
   const params = new URLSearchParams(location.search);
   const { enterpriseSlug } = useParams();
@@ -55,7 +55,7 @@ export default function AuthenticatedPage({ children, useEnterpriseConfigCache }
       </LoginRefresh>
     </LoginRedirect>
   );
-}
+};
 
 AuthenticatedPage.propTypes = {
   children: PropTypes.node.isRequired,
@@ -65,3 +65,5 @@ AuthenticatedPage.propTypes = {
 AuthenticatedPage.defaultProps = {
   useEnterpriseConfigCache: true,
 };
+
+export default AuthenticatedPage;
diff --git a/src/components/app/AuthenticatedUserSubsidyPage.jsx b/src/components/app/AuthenticatedUserSubsidyPage.jsx
index 5691f61d04..d5b5259511 100644
--- a/src/components/app/AuthenticatedUserSubsidyPage.jsx
+++ b/src/components/app/AuthenticatedUserSubsidyPage.jsx
@@ -8,19 +8,19 @@ import {
 } from '../enterprise-user-subsidy';
 import { SubsidyRequestsContextProvider } from '../enterprise-subsidy-requests';
 
-export default function AuthenticatedUserSubsidyPage({ children }) {
-  return (
-    <AuthenticatedPage>
-      <UserSubsidy>
-        <SubsidyRequestsContextProvider>
-          <AutoActivateLicense />
-          {children}
-        </SubsidyRequestsContextProvider>
-      </UserSubsidy>
-    </AuthenticatedPage>
-  );
-}
+const AuthenticatedUserSubsidyPage = ({ children }) => (
+  <AuthenticatedPage>
+    <UserSubsidy>
+      <SubsidyRequestsContextProvider>
+        <AutoActivateLicense />
+        {children}
+      </SubsidyRequestsContextProvider>
+    </UserSubsidy>
+  </AuthenticatedPage>
+);
 
 AuthenticatedUserSubsidyPage.propTypes = {
   children: PropTypes.node.isRequired,
 };
+
+export default AuthenticatedUserSubsidyPage;
diff --git a/src/components/app/EnterpriseAppPageRoutes.jsx b/src/components/app/EnterpriseAppPageRoutes.jsx
index bee4811f98..1fbc335965 100644
--- a/src/components/app/EnterpriseAppPageRoutes.jsx
+++ b/src/components/app/EnterpriseAppPageRoutes.jsx
@@ -12,31 +12,29 @@ import { features } from '../../config';
 import { LicenseActivationPage } from '../license-activation';
 import { PathwayProgressPage } from '../pathway-progress';
 
-function EnterpriseAppPageRoutes() {
-  return (
-    <AuthenticatedUserSubsidyPage>
-      <PageRoute exact path="/:enterpriseSlug" component={DashboardPage} />
-      <PageRoute
-        exact
-        path={['/:enterpriseSlug/search', '/:enterpriseSlug/search/:pathwayUUID']}
-        component={SearchPage}
-      />
-      <PageRoute exact path="/:enterpriseSlug/course/:courseKey" component={CoursePage} />
-      {features.ENABLE_PROGRAMS && (
-        <PageRoute exact path="/:enterpriseSlug/program/:programUuid" component={ProgramPage} />
-      )}
-      {
-        // Deprecated URL, will be removed in the future.
-        <PageRoute exact path="/:enterpriseSlug/program-progress/:programUUID" component={ProgramProgressRedirect} />
-      }
-      <PageRoute exact path="/:enterpriseSlug/program/:programUUID/progress" component={ProgramProgressPage} />
-      <PageRoute exact path="/:enterpriseSlug/skills-quiz" component={SkillsQuizPage} />
-      <PageRoute exact path="/:enterpriseSlug/licenses/:activationKey/activate" component={LicenseActivationPage} />
-      {features.FEATURE_ENABLE_PATHWAY_PROGRESS && (
-        <PageRoute exact path="/:enterpriseSlug/pathway/:pathwayUUID/progress" component={PathwayProgressPage} />
-      )}
-    </AuthenticatedUserSubsidyPage>
-  );
-}
+const EnterpriseAppPageRoutes = () => (
+  <AuthenticatedUserSubsidyPage>
+    <PageRoute exact path="/:enterpriseSlug" component={DashboardPage} />
+    <PageRoute
+      exact
+      path={['/:enterpriseSlug/search', '/:enterpriseSlug/search/:pathwayUUID']}
+      component={SearchPage}
+    />
+    <PageRoute exact path="/:enterpriseSlug/course/:courseKey" component={CoursePage} />
+    {features.ENABLE_PROGRAMS && (
+      <PageRoute exact path="/:enterpriseSlug/program/:programUuid" component={ProgramPage} />
+    )}
+    {
+      // Deprecated URL, will be removed in the future.
+      <PageRoute exact path="/:enterpriseSlug/program-progress/:programUUID" component={ProgramProgressRedirect} />
+    }
+    <PageRoute exact path="/:enterpriseSlug/program/:programUUID/progress" component={ProgramProgressPage} />
+    <PageRoute exact path="/:enterpriseSlug/skills-quiz" component={SkillsQuizPage} />
+    <PageRoute exact path="/:enterpriseSlug/licenses/:activationKey/activate" component={LicenseActivationPage} />
+    {features.FEATURE_ENABLE_PATHWAY_PROGRESS && (
+      <PageRoute exact path="/:enterpriseSlug/pathway/:pathwayUUID/progress" component={PathwayProgressPage} />
+    )}
+  </AuthenticatedUserSubsidyPage>
+);
 
 export default EnterpriseAppPageRoutes;
diff --git a/src/components/app/LoginRefresh.jsx b/src/components/app/LoginRefresh.jsx
index ff919f9695..1728997fab 100644
--- a/src/components/app/LoginRefresh.jsx
+++ b/src/components/app/LoginRefresh.jsx
@@ -6,7 +6,7 @@ import { Container } from '@edx/paragon';
 import { LoadingSpinner } from '../loading-spinner';
 import { loginRefresh } from '../../utils/common';
 
-function LoginRefresh({ children }) {
+const LoginRefresh = ({ children }) => {
   const { authenticatedUser } = useContext(AppContext);
   const { roles } = authenticatedUser;
 
@@ -33,7 +33,7 @@ function LoginRefresh({ children }) {
     );
   }
   return children;
-}
+};
 
 LoginRefresh.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/app/LoginRefresh.test.jsx b/src/components/app/LoginRefresh.test.jsx
index 0eb1b73783..2adf9682f4 100644
--- a/src/components/app/LoginRefresh.test.jsx
+++ b/src/components/app/LoginRefresh.test.jsx
@@ -9,7 +9,7 @@ import * as utils from '../../utils/common';
 jest.mock('../../utils/common');
 
 // eslint-disable-next-line react/prop-types
-function LoginRefreshWithContext({ roles = [] }) {
+const LoginRefreshWithContext = ({ roles = [] }) => {
   const contextValue = useMemo(() => ({
     authenticatedUser: {
       userId: 1,
@@ -23,7 +23,7 @@ function LoginRefreshWithContext({ roles = [] }) {
       </LoginRefresh>
     </AppContext.Provider>
   );
-} /* eslint-enable react/prop-types */
+}; /* eslint-enable react/prop-types */
 
 describe('<LoginRefresh />', () => {
   it('should call loginRefresh if the user has no roles', async () => {
diff --git a/src/components/contact-admin-mailto/index.jsx b/src/components/contact-admin-mailto/index.jsx
index be6c3fd84b..bb62606ce9 100644
--- a/src/components/contact-admin-mailto/index.jsx
+++ b/src/components/contact-admin-mailto/index.jsx
@@ -3,9 +3,9 @@ import { AppContext } from '@edx/frontend-platform/react';
 import { MailtoLink } from '@edx/paragon';
 import PropTypes from 'prop-types';
 
-function ContactAdminMailto({
+const ContactAdminMailto = ({
   children,
-}) {
+}) => {
   const { enterpriseConfig: { adminUsers } } = useContext(AppContext);
   const adminEmails = adminUsers.map(user => user.email);
 
@@ -21,7 +21,7 @@ function ContactAdminMailto({
   }
 
   return children;
-}
+};
 
 ContactAdminMailto.propTypes = {
   children: PropTypes.node,
diff --git a/src/components/course/CourseAssociatedPrograms.jsx b/src/components/course/CourseAssociatedPrograms.jsx
index 84f1ca93f6..8da08a3e91 100644
--- a/src/components/course/CourseAssociatedPrograms.jsx
+++ b/src/components/course/CourseAssociatedPrograms.jsx
@@ -7,7 +7,7 @@ import { CourseContext } from './CourseContextProvider';
 import { getProgramIcon, formatProgramType } from './data/utils';
 import { features } from '../../config';
 
-export default function CourseAssociatedPrograms() {
+const CourseAssociatedPrograms = () => {
   const { state } = useContext(CourseContext);
   const { course } = state;
   const { enterpriseConfig } = useContext(AppContext);
@@ -55,4 +55,6 @@ export default function CourseAssociatedPrograms() {
       </ul>
     </div>
   );
-}
+};
+
+export default CourseAssociatedPrograms;
diff --git a/src/components/course/CourseContextProvider.jsx b/src/components/course/CourseContextProvider.jsx
index 2cc2f44b23..ddc0b293c8 100644
--- a/src/components/course/CourseContextProvider.jsx
+++ b/src/components/course/CourseContextProvider.jsx
@@ -18,7 +18,7 @@ const reducer = (state, action) => {
   }
 };
 
-export function CourseContextProvider({ children, initialState }) {
+export const CourseContextProvider = ({ children, initialState }) => {
   const { catalogsForSubsidyRequests } = useContext(SubsidyRequestsContext);
   const [state, dispatch] = useReducer(reducer, initialState);
   const { catalog } = state;
@@ -42,7 +42,7 @@ export function CourseContextProvider({ children, initialState }) {
       {children}
     </CourseContext.Provider>
   );
-}
+};
 
 CourseContextProvider.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/course/CourseEnrollmentFailedAlert.jsx b/src/components/course/CourseEnrollmentFailedAlert.jsx
index d1b63603f0..224a1fa89e 100644
--- a/src/components/course/CourseEnrollmentFailedAlert.jsx
+++ b/src/components/course/CourseEnrollmentFailedAlert.jsx
@@ -67,7 +67,7 @@ const createUpgradeFailureMessages = (contactHelpText, enrollmentSource) => ({
  * reasons. The contents of the alert are determined by a ``failureReason`` which is passed
  * from the Data Sharing Consent (DSC) page as a query parameter.
  */
-function CourseEnrollmentFailedAlert({ className, enrollmentSource }) {
+const CourseEnrollmentFailedAlert = ({ className, enrollmentSource }) => {
   const { search } = useLocation();
   const { enterpriseConfig } = useContext(AppContext);
   const renderContactHelpText = useRenderContactHelpText(enterpriseConfig);
@@ -112,7 +112,7 @@ function CourseEnrollmentFailedAlert({ className, enrollmentSource }) {
       </Alert>
     </Container>
   );
-}
+};
 
 CourseEnrollmentFailedAlert.defaultProps = {
   className: 'mt-3',
diff --git a/src/components/course/CourseHeader.jsx b/src/components/course/CourseHeader.jsx
index 1ce7ed74bd..f4a317f29b 100644
--- a/src/components/course/CourseHeader.jsx
+++ b/src/components/course/CourseHeader.jsx
@@ -24,7 +24,7 @@ import {
 import LicenseRequestedAlert from './LicenseRequestedAlert';
 import SubsidyRequestButton from './SubsidyRequestButton';
 
-export default function CourseHeader() {
+const CourseHeader = () => {
   const { enterpriseConfig } = useContext(AppContext);
   const { state } = useContext(CourseContext);
   const { course, catalog } = state;
@@ -111,4 +111,6 @@ export default function CourseHeader() {
       </Container>
     </div>
   );
-}
+};
+
+export default CourseHeader;
diff --git a/src/components/course/CourseMainContent.jsx b/src/components/course/CourseMainContent.jsx
index 318d5b5ed9..69a21b87df 100644
--- a/src/components/course/CourseMainContent.jsx
+++ b/src/components/course/CourseMainContent.jsx
@@ -28,7 +28,7 @@ function formatSponsorTextList(sponsors) {
   return sponsorTextList;
 }
 
-export default function CourseMainContent() {
+const CourseMainContent = () => {
   const { config } = useContext(AppContext);
   const { state } = useContext(CourseContext);
   const { course, activeCourseRun } = state;
@@ -156,4 +156,6 @@ export default function CourseMainContent() {
       )}
     </>
   );
-}
+};
+
+export default CourseMainContent;
diff --git a/src/components/course/CoursePage.jsx b/src/components/course/CoursePage.jsx
index c88ca824e6..372363a7e8 100644
--- a/src/components/course/CoursePage.jsx
+++ b/src/components/course/CoursePage.jsx
@@ -23,7 +23,7 @@ import { UserSubsidyContext } from '../enterprise-user-subsidy/UserSubsidy';
 import { SubsidyRequestsContext } from '../enterprise-subsidy-requests';
 import { useSearchCatalogs } from '../search/data/hooks';
 
-export default function CoursePage() {
+const CoursePage = () => {
   const { courseKey } = useParams();
   const { enterpriseConfig } = useContext(AppContext);
   const { search } = useLocation();
@@ -154,4 +154,6 @@ export default function CoursePage() {
       </CourseEnrollmentsContextProvider>
     </>
   );
-}
+};
+
+export default CoursePage;
diff --git a/src/components/course/CourseRecommendationCard.jsx b/src/components/course/CourseRecommendationCard.jsx
index 042bb01341..2083181758 100644
--- a/src/components/course/CourseRecommendationCard.jsx
+++ b/src/components/course/CourseRecommendationCard.jsx
@@ -11,7 +11,7 @@ import { getPrimaryPartnerLogo, isDefinedAndNotNull } from '../../utils/common';
 export const COURSE_REC_EVENT_NAME = 'edx.ui.enterprise.learner_portal.recommended.course.clicked';
 export const SAME_PART_EVENT_NAME = 'edx.ui.enterprise.learner_portal.same.partner.recommended.course.clicked';
 
-function CourseRecommendationCard({ course, isPartnerRecommendation }) {
+const CourseRecommendationCard = ({ course, isPartnerRecommendation }) => {
   const { enterpriseConfig: { slug, uuid } } = useContext(AppContext);
   const eventName = isPartnerRecommendation ? SAME_PART_EVENT_NAME : COURSE_REC_EVENT_NAME;
   const history = useHistory();
@@ -87,7 +87,7 @@ function CourseRecommendationCard({ course, isPartnerRecommendation }) {
       </Card.Footer>
     </Card>
   );
-}
+};
 
 CourseRecommendationCard.propTypes = {
   course: PropTypes.shape({
diff --git a/src/components/course/CourseRecommendations.jsx b/src/components/course/CourseRecommendations.jsx
index 1924d78935..83eea0b585 100644
--- a/src/components/course/CourseRecommendations.jsx
+++ b/src/components/course/CourseRecommendations.jsx
@@ -3,7 +3,7 @@ import { CardGrid } from '@edx/paragon';
 import { CourseContext } from './CourseContextProvider';
 import CourseRecommendationCard from './CourseRecommendationCard';
 
-function CourseRecommendations() {
+const CourseRecommendations = () => {
   const { state } = useContext(CourseContext);
   const { course, courseRecommendations } = state;
   const { allRecommendations, samePartnerRecommendations } = courseRecommendations;
@@ -36,6 +36,6 @@ function CourseRecommendations() {
       )}
     </div>
   );
-}
+};
 
 export default CourseRecommendations;
diff --git a/src/components/course/CourseRunCard.jsx b/src/components/course/CourseRunCard.jsx
index 093fab484a..0346f0ed98 100644
--- a/src/components/course/CourseRunCard.jsx
+++ b/src/components/course/CourseRunCard.jsx
@@ -45,14 +45,12 @@ const LicenseSubsidyPriceText = ({
   });
 
   return (
-    <>
-      <div className="mt-2" data-testid="subsidy-license-price-text">
-        <del>
-          <span className="sr-only">Priced reduced from:</span>${numberWithPrecision(coursePrice.list)} {currency}
-        </del>
-        <span>{' '}included in your subscription</span>
-      </div>
-    </>
+    <div className="mt-2" data-testid="subsidy-license-price-text">
+      <del>
+        <span className="sr-only">Priced reduced from:</span>${numberWithPrecision(coursePrice.list)} {currency}
+      </del>
+      <span>{' '}included in your subscription</span>
+    </div>
   );
 };
 
@@ -62,7 +60,7 @@ const CourseRunCard = ({
   userEnrollments,
   courseKey,
   subsidyRequestCatalogsApplicableToCourse,
-}) {
+}) => {
   const {
     availability,
     pacingType,
@@ -268,7 +266,7 @@ const CourseRunCard = ({
       </Card.Section>
     </Card>
   );
-}
+};
 
 CourseRunCard.propTypes = {
   courseKey: PropTypes.string.isRequired,
diff --git a/src/components/course/CourseRunCards.jsx b/src/components/course/CourseRunCards.jsx
index 65f0f11451..1e8baf2f5e 100644
--- a/src/components/course/CourseRunCards.jsx
+++ b/src/components/course/CourseRunCards.jsx
@@ -6,7 +6,7 @@ import {
 import { CourseContext } from './CourseContextProvider';
 import CourseRunCard from './CourseRunCard';
 
-function CourseRunCards() {
+const CourseRunCards = () => {
   const {
     state: courseData,
     subsidyRequestCatalogsApplicableToCourse,
@@ -35,6 +35,6 @@ function CourseRunCards() {
       ))}
     </CardGrid>
   );
-}
+};
 
 export default CourseRunCards;
diff --git a/src/components/course/CourseSidebar.jsx b/src/components/course/CourseSidebar.jsx
index e7fbea5987..04a55adb9d 100644
--- a/src/components/course/CourseSidebar.jsx
+++ b/src/components/course/CourseSidebar.jsx
@@ -28,7 +28,7 @@ import {
   useCoursePacingType,
 } from './data/hooks';
 
-export default function CourseSidebar() {
+const CourseSidebar = () => {
   const { state } = useContext(CourseContext);
   const { course, activeCourseRun } = state;
   const { primarySubject } = useCourseSubjects(course);
@@ -155,4 +155,6 @@ export default function CourseSidebar() {
       )}
     </>
   );
-}
+};
+
+export default CourseSidebar;
diff --git a/src/components/course/CourseSidebarListItem.jsx b/src/components/course/CourseSidebarListItem.jsx
index 92927d22d0..8a5309117f 100644
--- a/src/components/course/CourseSidebarListItem.jsx
+++ b/src/components/course/CourseSidebarListItem.jsx
@@ -3,26 +3,26 @@ import PropTypes from 'prop-types';
 import { Row, Col } from '@edx/paragon';
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 
-export default function CourseSidebarListItem({
+const CourseSidebarListItem = ({
   icon,
   label,
   content,
-}) {
-  return (
-    <Row as="li" className="d-flex align-items-start border-bottom py-3">
-      <Col className="d-flex align-items-center">
-        <FontAwesomeIcon className="mr-3" icon={icon} />
-        <span>{label}:</span>
-      </Col>
-      <Col>
-        {content}
-      </Col>
-    </Row>
-  );
-}
+}) => (
+  <Row as="li" className="d-flex align-items-start border-bottom py-3">
+    <Col className="d-flex align-items-center">
+      <FontAwesomeIcon className="mr-3" icon={icon} />
+      <span>{label}:</span>
+    </Col>
+    <Col>
+      {content}
+    </Col>
+  </Row>
+);
 
 CourseSidebarListItem.propTypes = {
   icon: PropTypes.shape().isRequired,
   label: PropTypes.string.isRequired,
   content: PropTypes.node.isRequired,
 };
+
+export default CourseSidebarListItem;
diff --git a/src/components/course/CourseSidebarPrice.jsx b/src/components/course/CourseSidebarPrice.jsx
index 410a6acd29..3adec9daf5 100644
--- a/src/components/course/CourseSidebarPrice.jsx
+++ b/src/components/course/CourseSidebarPrice.jsx
@@ -19,7 +19,7 @@ export const FREE_WHEN_APPROVED_MESSAGE = 'Free to me\n(when approved)';
 export const COVERED_BY_ENTERPRISE_OFFER_MESSAGE = 'This course can be purchased with your organization\'s learner credit';
 export const INSUFFICIENT_ENTERPRISE_OFFER_BALANCE = 'Your organization doesn\'t have enough learner credit remaining.';
 
-function CourseSidebarPrice() {
+const CourseSidebarPrice = () => {
   const { enterpriseConfig } = useContext(AppContext);
   const { state: courseData } = useContext(CourseContext);
   const { activeCourseRun, userSubsidyApplicableToCourse } = courseData;
@@ -117,6 +117,6 @@ function CourseSidebarPrice() {
       <small>{discountedPriceMessage}</small>
     </>
   );
-}
+};
 
 export default CourseSidebarPrice;
diff --git a/src/components/course/CourseSkills.jsx b/src/components/course/CourseSkills.jsx
index 8437698ee6..929904dc12 100644
--- a/src/components/course/CourseSkills.jsx
+++ b/src/components/course/CourseSkills.jsx
@@ -14,7 +14,7 @@ import { shortenString } from './data/utils';
 
 export const MAX_VISIBLE_SKILLS = 5;
 
-export default function CourseSkills() {
+const CourseSkills = () => {
   const { enterpriseConfig } = useContext(AppContext);
   const { state } = useContext(CourseContext);
   const { skills } = state.course;
@@ -57,4 +57,6 @@ export default function CourseSkills() {
       </div>
     </div>
   );
-}
+};
+
+export default CourseSkills;
diff --git a/src/components/course/CreatedBy.jsx b/src/components/course/CreatedBy.jsx
index 91581025ce..394bb5f623 100644
--- a/src/components/course/CreatedBy.jsx
+++ b/src/components/course/CreatedBy.jsx
@@ -5,7 +5,7 @@ import { Hyperlink } from '@edx/paragon';
 import { CourseContext } from './CourseContextProvider';
 import { useCoursePartners } from './data/hooks';
 
-export default function CreatedBy() {
+const CreatedBy = () => {
   const { config } = useContext(AppContext);
   const { state } = useContext(CourseContext);
   const { course, activeCourseRun } = state;
@@ -73,4 +73,6 @@ export default function CreatedBy() {
       )}
     </div>
   );
-}
+};
+
+export default CreatedBy;
diff --git a/src/components/course/EnrollModal.jsx b/src/components/course/EnrollModal.jsx
index 48cb0450c2..4f355a5672 100644
--- a/src/components/course/EnrollModal.jsx
+++ b/src/components/course/EnrollModal.jsx
@@ -35,7 +35,7 @@ export const MODAL_TEXTS = {
   },
 };
 
-function EnrollModal({
+const EnrollModal = ({
   isModalOpen,
   setIsModalOpen,
   enrollmentUrl,
@@ -43,7 +43,7 @@ function EnrollModal({
   userSubsidyApplicableToCourse,
   couponCodesCount,
   onEnroll,
-}) {
+}) => {
   const [isLoading, setIsLoading] = useState(false);
 
   const getModalTexts = () => {
@@ -103,7 +103,7 @@ function EnrollModal({
       onClose={() => setIsModalOpen(false)}
     />
   );
-}
+};
 
 EnrollModal.propTypes = {
   isModalOpen: PropTypes.bool.isRequired,
diff --git a/src/components/course/LicenseRequestedAlert.jsx b/src/components/course/LicenseRequestedAlert.jsx
index 4dabc3f67a..4bd0798e99 100644
--- a/src/components/course/LicenseRequestedAlert.jsx
+++ b/src/components/course/LicenseRequestedAlert.jsx
@@ -15,7 +15,7 @@ import { UserSubsidyContext } from '../enterprise-user-subsidy/UserSubsidy';
  * A component to render an alert when a learner has a license request that is pending review.
  * Once dismissed, the learner will not see this alert again until the cookies are cleared.
  */
-function LicenseRequestedAlert({ catalogList }) {
+const LicenseRequestedAlert = ({ catalogList }) => {
   const cookies = new Cookies();
   const previouslyDismissed = cookies.get(LICENSE_REQUESTED_ALERT_DISMISSED_COOKIE_NAME);
   const [isAlertOpen, setIsAlertOpen] = useState(!previouslyDismissed);
@@ -56,7 +56,7 @@ function LicenseRequestedAlert({ catalogList }) {
       </Alert>
     </Container>
   );
-}
+};
 
 LicenseRequestedAlert.propTypes = {
   catalogList: PropTypes.arrayOf(PropTypes.string).isRequired,
diff --git a/src/components/course/SubsidyRequestButton.jsx b/src/components/course/SubsidyRequestButton.jsx
index 8c50901cab..33ca95deca 100644
--- a/src/components/course/SubsidyRequestButton.jsx
+++ b/src/components/course/SubsidyRequestButton.jsx
@@ -118,6 +118,6 @@ const SubsidyRequestButton = () => {
   return (
     <StatefulButton {...props} state={getButtonState()} onClick={handleRequestButtonClick} />
   );
-}
+};
 
 export default SubsidyRequestButton;
diff --git a/src/components/course/VerifiedCertPitch.jsx b/src/components/course/VerifiedCertPitch.jsx
index 58dc167376..d587afbcbd 100644
--- a/src/components/course/VerifiedCertPitch.jsx
+++ b/src/components/course/VerifiedCertPitch.jsx
@@ -5,46 +5,44 @@ import { faRoad, faRocket } from '@fortawesome/free-solid-svg-icons';
 
 import './styles/VerifiedCertPitch.scss';
 
-function VerifiedCertPitchIcon({ icon }) {
-  return (
-    <div className="icon d-flex bg-info mr-3 p-2 align-items-center justify-content-center">
-      <FontAwesomeIcon className="text-white" icon={icon} />
-    </div>
-  );
-}
+const VerifiedCertPitchIcon = ({ icon }) => (
+  <div className="icon d-flex bg-info mr-3 p-2 align-items-center justify-content-center">
+    <FontAwesomeIcon className="text-white" icon={icon} />
+  </div>
+);
 
 VerifiedCertPitchIcon.propTypes = {
   icon: PropTypes.shape({}).isRequired,
 };
 
-export default function VerifiedCertPitch() {
-  return (
-    <div className="verified-cert-pitch mb-5">
-      <h3 className="mb-4">
-        Pursue a Verified Certificate to highlight the knowledge and skills you gain
-      </h3>
-      <ul className="pl-0 mb-0 list-unstyled">
-        <li className="d-flex mb-4">
-          <VerifiedCertPitchIcon icon={faRocket} />
-          <div>
-            <h4>Official and Verified</h4>
-            <span>
-              Receive an instructor-signed certificate with the institution&apos;s
-              logo to verify your achievement.
-            </span>
-          </div>
-        </li>
-        <li className="d-flex mb-4">
-          <VerifiedCertPitchIcon icon={faRoad} />
-          <div>
-            <h4>Easily Shareable</h4>
-            <span>
-              Add the certificate to your CV or resume, or post it
-              directly on LinkedIn.
-            </span>
-          </div>
-        </li>
-      </ul>
-    </div>
-  );
-}
+const VerifiedCertPitch = () => (
+  <div className="verified-cert-pitch mb-5">
+    <h3 className="mb-4">
+      Pursue a Verified Certificate to highlight the knowledge and skills you gain
+    </h3>
+    <ul className="pl-0 mb-0 list-unstyled">
+      <li className="d-flex mb-4">
+        <VerifiedCertPitchIcon icon={faRocket} />
+        <div>
+          <h4>Official and Verified</h4>
+          <span>
+            Receive an instructor-signed certificate with the institution&apos;s
+            logo to verify your achievement.
+          </span>
+        </div>
+      </li>
+      <li className="d-flex mb-4">
+        <VerifiedCertPitchIcon icon={faRoad} />
+        <div>
+          <h4>Easily Shareable</h4>
+          <span>
+            Add the certificate to your CV or resume, or post it
+            directly on LinkedIn.
+          </span>
+        </div>
+      </li>
+    </ul>
+  </div>
+);
+
+export default VerifiedCertPitch;
diff --git a/src/components/course/enrollment/EnrollAction.jsx b/src/components/course/enrollment/EnrollAction.jsx
index 3507f00473..e90eb060ef 100644
--- a/src/components/course/enrollment/EnrollAction.jsx
+++ b/src/components/course/enrollment/EnrollAction.jsx
@@ -29,7 +29,7 @@ const {
  * @param {string} args.userEnrollment enrollment if applicable, or null.
  * @param {string} args.subscriptionLicense user license if applicable, or null.
  */
-function EnrollAction({
+const EnrollAction = ({
   enrollmentType,
   enrollmentUrl,
   enrollLabel,
@@ -71,7 +71,7 @@ function EnrollAction({
       case HIDE_BUTTON:
       default: return null;
   }
-}
+};
 
 EnrollAction.propTypes = {
   enrollmentType: PropTypes.string.isRequired,
diff --git a/src/components/course/enrollment/common.jsx b/src/components/course/enrollment/common.jsx
index c17da13751..e26332e804 100644
--- a/src/components/course/enrollment/common.jsx
+++ b/src/components/course/enrollment/common.jsx
@@ -5,19 +5,17 @@ import { Button } from '@edx/paragon';
 // Common UI components for enrollment to avoid duplication, consistent styling etc.
 // Each enroll component can use the EnrollButtonCta to render the enroll behavior
 
-function EnrollButtonWrapper({
+const EnrollButtonWrapper = ({
   as: Component,
   children,
   ...props
-}) {
-  return (
-    <div>
-      <Component {...props}>
-        {children}
-      </Component>
-    </div>
-  );
-}
+}) => (
+  <div>
+    <Component {...props}>
+      {children}
+    </Component>
+  </div>
+);
 
 EnrollButtonWrapper.propTypes = {
   children: PropTypes.node.isRequired,
@@ -28,13 +26,11 @@ EnrollButtonWrapper.defaultProps = {
   as: Button,
 };
 
-function EnrollButtonCta({ enrollLabel: EnrollLabel, ...props }) {
-  return (
-    <EnrollButtonWrapper {...props}>
-      {EnrollLabel}
-    </EnrollButtonWrapper>
-  );
-}
+const EnrollButtonCta = ({ enrollLabel: EnrollLabel, ...props }) => (
+  <EnrollButtonWrapper {...props}>
+    {EnrollLabel}
+  </EnrollButtonWrapper>
+);
 
 EnrollButtonCta.propTypes = { enrollLabel: PropTypes.node.isRequired };
 
diff --git a/src/components/course/enrollment/components/DisabledEnroll.jsx b/src/components/course/enrollment/components/DisabledEnroll.jsx
index 5243cac42d..b619d9f7b9 100644
--- a/src/components/course/enrollment/components/DisabledEnroll.jsx
+++ b/src/components/course/enrollment/components/DisabledEnroll.jsx
@@ -3,15 +3,13 @@ import PropTypes from 'prop-types';
 
 import { EnrollButtonCta } from '../common';
 
-function EnrollBtnDisabled({ enrollLabel }) {
-  return (
-    <EnrollButtonCta
-      enrollLabel={enrollLabel}
-      as="div"
-      className="btn btn-light btn-block disabled d-block"
-    />
-  );
-}
+const EnrollBtnDisabled = ({ enrollLabel }) => (
+  <EnrollButtonCta
+    enrollLabel={enrollLabel}
+    as="div"
+    className="btn btn-light btn-block disabled d-block"
+  />
+);
 
 EnrollBtnDisabled.propTypes = {
   enrollLabel: PropTypes.node.isRequired,
diff --git a/src/components/course/enrollment/components/ToCoursewarePage.jsx b/src/components/course/enrollment/components/ToCoursewarePage.jsx
index f8cbf038ea..524c18b033 100644
--- a/src/components/course/enrollment/components/ToCoursewarePage.jsx
+++ b/src/components/course/enrollment/components/ToCoursewarePage.jsx
@@ -13,9 +13,9 @@ import { enrollLinkClass } from '../constants';
  * Renders a hyperlink to the course info url (or enrollment url)
  * Uses the passed in enroll label as the Label shown along with enroll link
  */
-function ToCoursewarePage({
+const ToCoursewarePage = ({
   enrollLabel, enrollmentUrl, userEnrollment, subscriptionLicense,
-}) {
+}) => {
   const shouldUseEnrollmentUrl = shouldUpgradeUserEnrollment({
     userEnrollment,
     subscriptionLicense,
@@ -36,7 +36,7 @@ function ToCoursewarePage({
       onClick={handleClick}
     />
   );
-}
+};
 
 ToCoursewarePage.propTypes = {
   enrollLabel: PropTypes.node.isRequired,
diff --git a/src/components/course/enrollment/components/ToDataSharingConsent.jsx b/src/components/course/enrollment/components/ToDataSharingConsent.jsx
index f471ae373f..aee9f91103 100644
--- a/src/components/course/enrollment/components/ToDataSharingConsent.jsx
+++ b/src/components/course/enrollment/components/ToDataSharingConsent.jsx
@@ -51,7 +51,7 @@ const ToDataSharingConsentPage = ({ enrollLabel, enrollmentUrl, triggerLicenseSu
       }}
     />
   );
-}
+};
 
 ToDataSharingConsentPage.propTypes = {
   enrollLabel: PropTypes.node.isRequired,
diff --git a/src/components/course/enrollment/components/ToEcomBasketPage.jsx b/src/components/course/enrollment/components/ToEcomBasketPage.jsx
index 127f71c487..e97517c8f8 100644
--- a/src/components/course/enrollment/components/ToEcomBasketPage.jsx
+++ b/src/components/course/enrollment/components/ToEcomBasketPage.jsx
@@ -21,7 +21,7 @@ import {
  * @param {Component} args.enrollLabel An EnrollLabel component
  * @returns {Component} Rendered enroll button with a enrollment modal behavior included.
  */
-function ToEcomBasketPage({ enrollLabel, enrollmentUrl, courseRunPrice }) {
+const ToEcomBasketPage = ({ enrollLabel, enrollmentUrl, courseRunPrice }) => {
   const { userSubsidyApplicableToCourse, couponCodesCount } = useSubsidyDataForCourse();
   const [isModalOpen, setIsModalOpen] = useState(false);
 
@@ -68,7 +68,7 @@ function ToEcomBasketPage({ enrollLabel, enrollmentUrl, courseRunPrice }) {
       />
     </>
   );
-}
+};
 
 ToEcomBasketPage.propTypes = {
   enrollLabel: PropTypes.node.isRequired,
diff --git a/src/components/course/enrollment/components/ViewOnDashboard.jsx b/src/components/course/enrollment/components/ViewOnDashboard.jsx
index 14ad0bc37c..b19c6890c8 100644
--- a/src/components/course/enrollment/components/ViewOnDashboard.jsx
+++ b/src/components/course/enrollment/components/ViewOnDashboard.jsx
@@ -9,7 +9,7 @@ import { EnrollButtonCta } from '../common';
 
 import { enrollLinkClass } from '../constants';
 
-function ViewOnDashboard({ enrollLabel }) {
+const ViewOnDashboard = ({ enrollLabel }) => {
   const { enterpriseConfig } = useContext(AppContext);
   const handleClick = useTrackSearchConversionClickHandler({
     eventName: 'edx.ui.enterprise.learner_portal.course.enroll_button.to_dashboard.clicked',
@@ -24,7 +24,7 @@ function ViewOnDashboard({ enrollLabel }) {
       onClick={handleClick}
     />
   );
-}
+};
 
 ViewOnDashboard.propTypes = {
   enrollLabel: PropTypes.node.isRequired,
diff --git a/src/components/course/enrollment/tests/EnrollAction.test.jsx b/src/components/course/enrollment/tests/EnrollAction.test.jsx
index 6a344734dd..a4899e5717 100644
--- a/src/components/course/enrollment/tests/EnrollAction.test.jsx
+++ b/src/components/course/enrollment/tests/EnrollAction.test.jsx
@@ -52,10 +52,9 @@ const subscriptionLicense = { uuid: 'a-license' };
    * @param {object} args Arguments.
    * @param {string} args.enrollAction
    */
-function EnrollLabel(props) {
-  // eslint-disable-next-line react/prop-types
-  return <div>{props.enrollLabelText}</div>;
-}
+// eslint-disable-next-line react/prop-types
+const EnrollLabel = (props) => <div>{props.enrollLabelText}</div>;
+
 const renderEnrollAction = ({
   enrollAction,
   courseInitState = selfPacedCourseWithLicenseSubsidy,
diff --git a/src/components/course/enrollment/tests/ToEcomBasketPage.test.jsx b/src/components/course/enrollment/tests/ToEcomBasketPage.test.jsx
index 5d89cbe9c5..ab43d4445a 100644
--- a/src/components/course/enrollment/tests/ToEcomBasketPage.test.jsx
+++ b/src/components/course/enrollment/tests/ToEcomBasketPage.test.jsx
@@ -20,7 +20,7 @@ jest.mock('../../EnrollModal', () => ({
 
 jest.mock('../hooks');
 
-function ToEcomBasketPageWrapper({
+const ToEcomBasketPageWrapper = ({
   courseContextValue = {
     state: {
       activeCourseRun: {
@@ -32,17 +32,15 @@ function ToEcomBasketPageWrapper({
     courseEnrollmentsByStatus: {},
   },
   ...rest
-}) {
-  return (
-    <CourseContext.Provider value={courseContextValue}>
-      <CourseEnrollmentsContext.Provider value={CourseEnrollmentsContextVAlue}>
-        <ToEcomBasketPage
-          {...rest}
-        />,
-      </CourseEnrollmentsContext.Provider>
-    </CourseContext.Provider>
-  );
-}
+}) => (
+  <CourseContext.Provider value={courseContextValue}>
+    <CourseEnrollmentsContext.Provider value={CourseEnrollmentsContextVAlue}>
+      <ToEcomBasketPage
+        {...rest}
+      />,
+    </CourseEnrollmentsContext.Provider>
+  </CourseContext.Provider>
+);
 
 describe('<ToEcomBasketPage />', () => {
   it('should render <EnrollButtonCta /> and <EnrollModal />', () => {
diff --git a/src/components/course/enrollment/tests/hooks.test.jsx b/src/components/course/enrollment/tests/hooks.test.jsx
index b13fa9c361..11745c04f6 100644
--- a/src/components/course/enrollment/tests/hooks.test.jsx
+++ b/src/components/course/enrollment/tests/hooks.test.jsx
@@ -39,22 +39,20 @@ const baseUserSubsidyState = {
   },
 };
 
-function ContextWrapper({
+const ContextWrapper = ({
   initialCourseState,
   initialSubsidyRequestContextValue,
   initialUserSubsidyState,
   children,
-}) {
-  return (
-    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-      <SubsidyRequestsContext.Provider value={initialSubsidyRequestContextValue}>
-        <CourseContextProvider initialState={initialCourseState}>
-          {children}
-        </CourseContextProvider>
-      </SubsidyRequestsContext.Provider>
-    </UserSubsidyContext.Provider>
-  );
-}
+}) => (
+  <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+    <SubsidyRequestsContext.Provider value={initialSubsidyRequestContextValue}>
+      <CourseContextProvider initialState={initialCourseState}>
+        {children}
+      </CourseContextProvider>
+    </SubsidyRequestsContext.Provider>
+  </UserSubsidyContext.Provider>
+);
 
 ContextWrapper.propTypes = {
   initialCourseState: PropTypes.shape(),
diff --git a/src/components/course/tests/CourseAssociatedPrograms.test.jsx b/src/components/course/tests/CourseAssociatedPrograms.test.jsx
index 225ef67479..08f934456e 100644
--- a/src/components/course/tests/CourseAssociatedPrograms.test.jsx
+++ b/src/components/course/tests/CourseAssociatedPrograms.test.jsx
@@ -11,18 +11,16 @@ const baseSubsidyRequestContextValue = {
   catalogsForSubsidyRequests: [],
 };
 
-function CourseAssociatedProgramsWithCourseContext({
+const CourseAssociatedProgramsWithCourseContext = ({
   initialState,
   subsidyRequestContextValue,
-}) {
-  return (
-    <SubsidyRequestsContext.Provider value={subsidyRequestContextValue}>
-      <CourseContextProvider initialState={initialState}>
-        <CourseAssociatedPrograms />
-      </CourseContextProvider>
-    </SubsidyRequestsContext.Provider>
-  );
-}
+}) => (
+  <SubsidyRequestsContext.Provider value={subsidyRequestContextValue}>
+    <CourseContextProvider initialState={initialState}>
+      <CourseAssociatedPrograms />
+    </CourseContextProvider>
+  </SubsidyRequestsContext.Provider>
+);
 
 CourseAssociatedProgramsWithCourseContext.propTypes = {
   initialState: PropTypes.shape(),
diff --git a/src/components/course/tests/CourseContextProvider.test.jsx b/src/components/course/tests/CourseContextProvider.test.jsx
index 0f8b908e8a..c4edd99262 100644
--- a/src/components/course/tests/CourseContextProvider.test.jsx
+++ b/src/components/course/tests/CourseContextProvider.test.jsx
@@ -18,19 +18,17 @@ const baseInitialCourseState = {
   catalog: { catalogList: [] },
 };
 
-function CourseContextProviderWrapper({
+const CourseContextProviderWrapper = ({
   subsidyRequestsContextValue,
   initialCourseState,
   children,
-}) {
-  return (
-    <SubsidyRequestsContext.Provider value={subsidyRequestsContextValue}>
-      <CourseContextProvider initialState={initialCourseState}>
-        {children}
-      </CourseContextProvider>
-    </SubsidyRequestsContext.Provider>
-  );
-}
+}) => (
+  <SubsidyRequestsContext.Provider value={subsidyRequestsContextValue}>
+    <CourseContextProvider initialState={initialCourseState}>
+      {children}
+    </CourseContextProvider>
+  </SubsidyRequestsContext.Provider>
+);
 
 CourseContextProviderWrapper.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/course/tests/CourseEnrollmentFailedAlert.test.jsx b/src/components/course/tests/CourseEnrollmentFailedAlert.test.jsx
index d4d2854d34..675b031012 100644
--- a/src/components/course/tests/CourseEnrollmentFailedAlert.test.jsx
+++ b/src/components/course/tests/CourseEnrollmentFailedAlert.test.jsx
@@ -36,19 +36,17 @@ const defaultCourseEnrollmentsState = {
   },
 };
 
-function CourseEnrollmentFailedAlertWrapper({
+const CourseEnrollmentFailedAlertWrapper = ({
   initialAppState = defaultAppState,
   initialCourseEnrollmentsState = defaultCourseEnrollmentsState,
   ...rest
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <CourseEnrollmentsContext.Provider value={initialCourseEnrollmentsState}>
-        <CourseEnrollmentFailedAlert {...rest} />
-      </CourseEnrollmentsContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <CourseEnrollmentsContext.Provider value={initialCourseEnrollmentsState}>
+      <CourseEnrollmentFailedAlert {...rest} />
+    </CourseEnrollmentsContext.Provider>
+  </AppContext.Provider>
+);
 
 describe('<CourseEnrollmentFailedAlert />', () => {
   describe('Upgraded from dashboard', () => {
diff --git a/src/components/course/tests/CourseHeader.test.jsx b/src/components/course/tests/CourseHeader.test.jsx
index 04db125b1c..6be2c5b168 100644
--- a/src/components/course/tests/CourseHeader.test.jsx
+++ b/src/components/course/tests/CourseHeader.test.jsx
@@ -47,27 +47,25 @@ const defaultCourseEnrollmentsState = {
 };
 
 /* eslint-disable react/prop-types */
-function CourseHeaderWrapper({
+const CourseHeaderWrapper = ({
   initialAppState = {},
   initialCourseEnrollmentsState = defaultCourseEnrollmentsState,
   initialCourseState = {},
   initialUserSubsidyState = {},
   initialSubsidyRequestsState = defaultSubsidyRequestsState,
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
-          <CourseEnrollmentsContext.Provider value={initialCourseEnrollmentsState}>
-            <CourseContextProvider initialState={initialCourseState}>
-              <CourseHeader />
-            </CourseContextProvider>
-          </CourseEnrollmentsContext.Provider>
-        </SubsidyRequestsContext.Provider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
+        <CourseEnrollmentsContext.Provider value={initialCourseEnrollmentsState}>
+          <CourseContextProvider initialState={initialCourseState}>
+            <CourseHeader />
+          </CourseContextProvider>
+        </CourseEnrollmentsContext.Provider>
+      </SubsidyRequestsContext.Provider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 describe('<CourseHeader />', () => {
diff --git a/src/components/course/tests/CourseRecommendationCard.test.jsx b/src/components/course/tests/CourseRecommendationCard.test.jsx
index 6a0a3e934a..caf254e5ff 100644
--- a/src/components/course/tests/CourseRecommendationCard.test.jsx
+++ b/src/components/course/tests/CourseRecommendationCard.test.jsx
@@ -26,13 +26,11 @@ const initialAppState = {
 };
 
 /* eslint-disable react/prop-types */
-function CourseRecommendationCardWithContext(props) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <CourseRecommendationCard {...props} />
-    </AppContext.Provider>
-  );
-}
+const CourseRecommendationCardWithContext = (props) => (
+  <AppContext.Provider value={initialAppState}>
+    <CourseRecommendationCard {...props} />
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 const TEST_COURSE_KEY = 'test-course-key';
diff --git a/src/components/course/tests/CourseRecommendations.test.jsx b/src/components/course/tests/CourseRecommendations.test.jsx
index e00d049f78..76a25b7a7c 100644
--- a/src/components/course/tests/CourseRecommendations.test.jsx
+++ b/src/components/course/tests/CourseRecommendations.test.jsx
@@ -54,15 +54,13 @@ const initialCourseState = {
 };
 
 /* eslint-disable react/prop-types */
-function CourseRecommendationsWithContext() {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <CourseContext.Provider value={initialCourseState}>
-        <CourseRecommendations />
-      </CourseContext.Provider>
-    </AppContext.Provider>
-  );
-}
+const CourseRecommendationsWithContext = () => (
+  <AppContext.Provider value={initialAppState}>
+    <CourseContext.Provider value={initialCourseState}>
+      <CourseRecommendations />
+    </CourseContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 describe('<CourseRecommendations />', () => {
diff --git a/src/components/course/tests/CourseRunCard.test.jsx b/src/components/course/tests/CourseRunCard.test.jsx
index 0188daef4f..04285cecb1 100644
--- a/src/components/course/tests/CourseRunCard.test.jsx
+++ b/src/components/course/tests/CourseRunCard.test.jsx
@@ -33,12 +33,15 @@ const COURSE_ID = '123';
 
 jest.mock('../../../config');
 
-jest.mock('../enrollment/EnrollAction', () => ({ enrollLabel, enrollmentType }) => (
-  <>
-    <span>{enrollLabel}</span>
-    <span>{enrollmentType}</span>
-  </>
-));
+// eslint-disable-next-line react/prop-types
+jest.mock('../enrollment/EnrollAction', () => function ({ enrollLabel, enrollmentType }) {
+  return (
+    <>
+      <span>{enrollLabel}</span>
+      <span>{enrollmentType}</span>
+    </>
+  );
+});
 jest.mock('../data/hooks', () => ({
   useUserHasSubsidyRequestForCourse: jest.fn(() => false),
   useCourseEnrollmentUrl: jest.fn(() => false),
diff --git a/src/components/course/tests/CourseSidebarPrice.test.jsx b/src/components/course/tests/CourseSidebarPrice.test.jsx
index c9d661bb91..913f190734 100644
--- a/src/components/course/tests/CourseSidebarPrice.test.jsx
+++ b/src/components/course/tests/CourseSidebarPrice.test.jsx
@@ -96,24 +96,22 @@ const defaultUserSubsidyState = {
 };
 
 /* eslint-disable react/prop-types */
-function SidebarWithContext({
+const SidebarWithContext = ({
   initialAppState = appStateWithOrigPriceHidden,
   subsidyRequestsState = defaultSubsidyRequestsState,
   initialCourseState,
   initialUserSubsidyState = defaultUserSubsidyState,
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <SubsidyRequestsContext.Provider value={subsidyRequestsState}>
-          <CourseContextProvider initialState={initialCourseState}>
-            <CourseSidebarPrice />
-          </CourseContextProvider>
-        </SubsidyRequestsContext.Provider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <SubsidyRequestsContext.Provider value={subsidyRequestsState}>
+        <CourseContextProvider initialState={initialCourseState}>
+          <CourseSidebarPrice />
+        </CourseContextProvider>
+      </SubsidyRequestsContext.Provider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 const SPONSORED_BY_TEXT = 'Sponsored by test-enterprise';
diff --git a/src/components/course/tests/CourseSkills.test.jsx b/src/components/course/tests/CourseSkills.test.jsx
index 90006598cb..a4ff82e679 100644
--- a/src/components/course/tests/CourseSkills.test.jsx
+++ b/src/components/course/tests/CourseSkills.test.jsx
@@ -25,21 +25,19 @@ const baseSubsidyRequestContextValue = {
   catalogsForSubsidyRequests: [],
 };
 
-function CourseSkillsWithContext({
+const CourseSkillsWithContext = ({
   initialAppState,
   initialCourseState,
   initialSubsidyRequestContextValue,
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <SubsidyRequestsContext.Provider value={initialSubsidyRequestContextValue}>
-        <CourseContextProvider initialState={initialCourseState}>
-          <CourseSkills />
-        </CourseContextProvider>
-      </SubsidyRequestsContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <SubsidyRequestsContext.Provider value={initialSubsidyRequestContextValue}>
+      <CourseContextProvider initialState={initialCourseState}>
+        <CourseSkills />
+      </CourseContextProvider>
+    </SubsidyRequestsContext.Provider>
+  </AppContext.Provider>
+);
 
 CourseSkillsWithContext.propTypes = {
   initialAppState: PropTypes.shape(),
diff --git a/src/components/course/tests/CreatedBy.test.jsx b/src/components/course/tests/CreatedBy.test.jsx
index d85ac81bfe..5f69c34588 100644
--- a/src/components/course/tests/CreatedBy.test.jsx
+++ b/src/components/course/tests/CreatedBy.test.jsx
@@ -13,15 +13,13 @@ const initialSubsidyRequestsState = {
 };
 
 // eslint-disable-next-line react/prop-types
-function CreatedByWithCourseContext({ initialState = {} }) {
-  return (
-    <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
-      <CourseContextProvider initialState={initialState}>
-        <CreatedBy />
-      </CourseContextProvider>
-    </SubsidyRequestsContext.Provider>
-  );
-}
+const CreatedByWithCourseContext = ({ initialState = {} }) => (
+  <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
+    <CourseContextProvider initialState={initialState}>
+      <CreatedBy />
+    </CourseContextProvider>
+  </SubsidyRequestsContext.Provider>
+);
 
 describe('<CreatedBy />', () => {
   const initialState = {
diff --git a/src/components/course/tests/LicenseRequestedAlert.test.jsx b/src/components/course/tests/LicenseRequestedAlert.test.jsx
index 288025a97d..5a98c9e0ed 100644
--- a/src/components/course/tests/LicenseRequestedAlert.test.jsx
+++ b/src/components/course/tests/LicenseRequestedAlert.test.jsx
@@ -24,9 +24,9 @@ const initialLicenseRequests = [
 ];
 
 /* eslint-disable react/prop-types */
-function LicenseRequestedAlertWrapper({
+const LicenseRequestedAlertWrapper = ({
   subscriptions = initialSubscriptions, licenseRequests = initialLicenseRequests,
-}) {
+}) => {
   const contextValue = useMemo(() => ({
     couponCodes: {
       couponCodes: [],
@@ -53,7 +53,7 @@ function LicenseRequestedAlertWrapper({
       </SubsidyRequestsContext.Provider>
     </UserSubsidyContext.Provider>
   );
-}
+};
 /* eslint-enable react/prop-types */
 
 describe('<LicenseRequestedAlert />', () => {
diff --git a/src/components/course/tests/SubsidyRequestButton.test.jsx b/src/components/course/tests/SubsidyRequestButton.test.jsx
index 2b4cde6992..e6af8a19f2 100644
--- a/src/components/course/tests/SubsidyRequestButton.test.jsx
+++ b/src/components/course/tests/SubsidyRequestButton.test.jsx
@@ -52,18 +52,23 @@ const initialCourseState = {
   subsidyRequestCatalogsApplicableToCourse: new Set([TEST_CATALOG_UUID]),
 };
 
-function SubsidyRequestButtonWrapper({
+const SubsidyRequestButtonWrapper = ({
   subsidyRequestsState = {},
   courseState = {},
-}) => (
-  <ToastsContext.Provider value={initialToastsState}>
-    <SubsidyRequestsContext.Provider value={{ ...initialSubsidyRequestsState, ...subsidyRequestsState }}>
-      <CourseContext.Provider value={{ ...initialCourseState, ...courseState }}>
-        <SubsidyRequestButton />
-      </CourseContext.Provider>
-    </SubsidyRequestsContext.Provider>
-  </ToastsContext.Provider>
-);
+}) => {
+  const subsidyContextValue = useMemo(() => (
+    { ...initialSubsidyRequestsState, ...subsidyRequestsState }), [subsidyRequestsState]);
+  const courseContextValue = useMemo(() => ({ ...initialCourseState, ...courseState }), [courseState]);
+  return (
+    <ToastsContext.Provider value={initialToastsState}>
+      <SubsidyRequestsContext.Provider value={subsidyContextValue}>
+        <CourseContext.Provider value={courseContextValue}>
+          <SubsidyRequestButton />
+        </CourseContext.Provider>
+      </SubsidyRequestsContext.Provider>
+    </ToastsContext.Provider>
+  );
+};
 
 describe('<SubsidyRequestButton />', () => {
   afterEach(() => jest.clearAllMocks());
diff --git a/src/components/dashboard/DashboardPage.jsx b/src/components/dashboard/DashboardPage.jsx
index db48287d44..f02964d501 100644
--- a/src/components/dashboard/DashboardPage.jsx
+++ b/src/components/dashboard/DashboardPage.jsx
@@ -20,7 +20,7 @@ import { features } from '../../config';
 
 export const LICENCE_ACTIVATION_MESSAGE = 'Your license was successfully activated.';
 
-export default function DashboardPage() {
+const DashboardPage = () => {
   const { enterpriseConfig } = useContext(AppContext);
   const { subscriptionPlan, showExpirationNotifications } = useContext(UserSubsidyContext);
   const { state } = useLocation();
@@ -100,4 +100,6 @@ export default function DashboardPage() {
       </Container>
     </>
   );
-}
+};
+
+export default DashboardPage;
diff --git a/src/components/dashboard/SubscriptionExpirationModal.jsx b/src/components/dashboard/SubscriptionExpirationModal.jsx
index bdebd5474d..67645db190 100644
--- a/src/components/dashboard/SubscriptionExpirationModal.jsx
+++ b/src/components/dashboard/SubscriptionExpirationModal.jsx
@@ -18,7 +18,7 @@ export const MODAL_DIALOG_CLASS_NAME = 'subscription-expiration';
 export const SUBSCRIPTION_EXPIRED_MODAL_TITLE = 'Your subscription has expired';
 export const SUBSCRIPTION_EXPIRING_MODAL_TITLE = 'Your subscription is expiring';
 
-function SubscriptionExpirationModal() {
+const SubscriptionExpirationModal = () => {
   const {
     enterpriseConfig: { uuid: enterpriseId, adminUsers },
     config,
@@ -156,6 +156,6 @@ function SubscriptionExpirationModal() {
       open
     />
   );
-}
+};
 
 export default SubscriptionExpirationModal;
diff --git a/src/components/dashboard/main-content/DashboardMainContent.jsx b/src/components/dashboard/main-content/DashboardMainContent.jsx
index e7ccdceaa7..befafe8b4d 100644
--- a/src/components/dashboard/main-content/DashboardMainContent.jsx
+++ b/src/components/dashboard/main-content/DashboardMainContent.jsx
@@ -11,7 +11,7 @@ import SupportInformation from '../sidebar/SupportInformation';
 import SubsidiesSummary from '../sidebar/SubsidiesSummary';
 import CourseRecommendations from './CourseRecommendations';
 
-function DashboardMainContent() {
+const DashboardMainContent = () => {
   const {
     enterpriseConfig: {
       name,
@@ -59,6 +59,6 @@ function DashboardMainContent() {
       </MediaQuery>
     </>
   );
-}
+};
 
 export default DashboardMainContent;
diff --git a/src/components/dashboard/main-content/course-enrollments/CollapsibleIcon.jsx b/src/components/dashboard/main-content/course-enrollments/CollapsibleIcon.jsx
index 22e4bf0bc2..6f8f302ff6 100644
--- a/src/components/dashboard/main-content/course-enrollments/CollapsibleIcon.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/CollapsibleIcon.jsx
@@ -2,15 +2,13 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 
-function CollapsibleIcon(props) {
-  return (
-    <FontAwesomeIcon
-      className="color-brand-primary mr-2"
-      icon={props.icon}
-      size="2x"
-    />
-  );
-}
+const CollapsibleIcon = (props) => (
+  <FontAwesomeIcon
+    className="color-brand-primary mr-2"
+    icon={props.icon}
+    size="2x"
+  />
+);
 
 CollapsibleIcon.propTypes = {
   icon: PropTypes.shape({
diff --git a/src/components/dashboard/main-content/course-enrollments/CourseEnrollments.jsx b/src/components/dashboard/main-content/course-enrollments/CourseEnrollments.jsx
index 7c3a01c528..3e649820a6 100644
--- a/src/components/dashboard/main-content/course-enrollments/CourseEnrollments.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/CourseEnrollments.jsx
@@ -13,7 +13,7 @@ export const COURSE_SECTION_TITLES = {
   savedForLater: 'Saved for later',
 };
 
-function CourseEnrollments({ children }) {
+const CourseEnrollments = ({ children }) => {
   const {
     courseEnrollmentsByStatus,
     fetchCourseEnrollmentsError,
@@ -88,7 +88,7 @@ function CourseEnrollments({ children }) {
       </>
     </>
   );
-}
+};
 
 CourseEnrollments.propTypes = {
   children: PropTypes.node,
diff --git a/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsAlert.jsx b/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsAlert.jsx
index dad03cd9f6..049b26c2eb 100644
--- a/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsAlert.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsAlert.jsx
@@ -8,11 +8,11 @@ const iconByVariant = {
   danger: WarningFilled,
 };
 
-function CourseEnrollmentsAlert({
+const CourseEnrollmentsAlert = ({
   children,
   variant,
   onClose,
-}) {
+}) => {
   const icon = iconByVariant[variant];
 
   return (
@@ -26,7 +26,7 @@ function CourseEnrollmentsAlert({
       {children}
     </Alert>
   );
-}
+};
 
 CourseEnrollmentsAlert.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsContextProvider.jsx b/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsContextProvider.jsx
index e2f6b0130e..e70c62eff4 100644
--- a/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsContextProvider.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/CourseEnrollmentsContextProvider.jsx
@@ -11,7 +11,7 @@ import { transformSubsidyRequest } from './data/utils';
 
 export const CourseEnrollmentsContext = createContext();
 
-function CourseEnrollmentsContextProvider({ children }) {
+const CourseEnrollmentsContextProvider = ({ children }) => {
   const {
     enterpriseConfig: {
       uuid: enterpriseUUID,
@@ -82,7 +82,7 @@ function CourseEnrollmentsContextProvider({ children }) {
       {children}
     </CourseEnrollmentsContext.Provider>
   );
-}
+};
 
 CourseEnrollmentsContextProvider.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/UpgradeableCourseEnrollmentContextProvider.jsx b/src/components/dashboard/main-content/course-enrollments/UpgradeableCourseEnrollmentContextProvider.jsx
index d4d5aeb8bc..70c47ae13b 100644
--- a/src/components/dashboard/main-content/course-enrollments/UpgradeableCourseEnrollmentContextProvider.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/UpgradeableCourseEnrollmentContextProvider.jsx
@@ -9,7 +9,7 @@ import { UserSubsidyContext } from '../../../enterprise-user-subsidy';
 
 export const UpgradeableCourseEnrollmentContext = createContext({ isLoading: false, upgradeUrl: undefined });
 
-export function UpgradeableCourseEnrollmentContextProvider({ courseEnrollment, children }) {
+export const UpgradeableCourseEnrollmentContextProvider = ({ courseEnrollment, children }) => {
   const { enterpriseConfig } = useContext(AppContext);
   const { subscriptionLicense, couponCodes: { couponCodes } } = useContext(UserSubsidyContext);
   const location = useLocation();
@@ -43,7 +43,7 @@ export function UpgradeableCourseEnrollmentContextProvider({ courseEnrollment, c
       {children}
     </UpgradeableCourseEnrollmentContext.Provider>
   );
-}
+};
 
 UpgradeableCourseEnrollmentContextProvider.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/CompletedCourseCard.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/CompletedCourseCard.jsx
index 24c6114c3a..0ede7c7a4c 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/CompletedCourseCard.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/CompletedCourseCard.jsx
@@ -9,7 +9,7 @@ import ContinueLearningButton from './ContinueLearningButton';
 import { isCourseEnded } from '../../../../../utils/common';
 import CertificateImg from './images/edx-verified-mini-cert.png';
 
-function CompletedCourseCard(props) {
+const CompletedCourseCard = (props) => {
   const user = getAuthenticatedUser();
   const { username } = user;
   const {
@@ -69,7 +69,7 @@ function CompletedCourseCard(props) {
       {renderCertificateInfo()}
     </BaseCourseCard>
   );
-}
+};
 
 CompletedCourseCard.propTypes = {
   linkToCourse: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/ContinueLearningButton.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/ContinueLearningButton.jsx
index e9a0be3ff4..e9c28922a7 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/ContinueLearningButton.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/ContinueLearningButton.jsx
@@ -15,12 +15,12 @@ import { sendEnterpriseTrackEvent } from '@edx/frontend-enterprise-utils';
  *
  * @returns {Function} A functional React component for the continue learning button.
  */
-export default function ContinueLearningButton({
+const ContinueLearningButton = ({
   className,
   linkToCourse,
   title,
   courseRunId,
-}) {
+}) => {
   const { enterpriseConfig } = useContext(AppContext);
 
   const onClickHandler = () => {
@@ -42,7 +42,7 @@ export default function ContinueLearningButton({
       <span className="sr-only">for {title}</span>
     </a>
   );
-}
+};
 
 ContinueLearningButton.defaultProps = {
   className: 'btn-outline-primary',
@@ -54,3 +54,5 @@ ContinueLearningButton.propTypes = {
   title: PropTypes.string.isRequired,
   courseRunId: PropTypes.string.isRequired,
 };
+
+export default ContinueLearningButton;
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/InProgressCourseCard.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/InProgressCourseCard.jsx
index 5dbfb003d2..1ed35d2038 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/InProgressCourseCard.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/InProgressCourseCard.jsx
@@ -14,14 +14,14 @@ import { CourseEnrollmentsContext } from '../CourseEnrollmentsContextProvider';
 import { UpgradeableCourseEnrollmentContext } from '../UpgradeableCourseEnrollmentContextProvider';
 import UpgradeCourseButton from './UpgradeCourseButton';
 
-export function InProgressCourseCard({
+export const InProgressCourseCard = ({
   linkToCourse,
   courseRunId,
   title,
   notifications,
   courseRunStatus,
   ...rest
-}) {
+}) => {
   const {
     isLoading: isLoadingUpgradeUrl,
     licenseUpgradeUrl,
@@ -165,7 +165,7 @@ export function InProgressCourseCard({
       />
     </BaseCourseCard>
   );
-}
+};
 
 InProgressCourseCard.propTypes = {
   linkToCourse: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/Notification.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/Notification.jsx
index b8a0850c57..c57bcfe237 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/Notification.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/Notification.jsx
@@ -3,34 +3,32 @@ import PropTypes from 'prop-types';
 import moment from 'moment';
 import { sendEnterpriseTrackEvent } from '@edx/frontend-enterprise-utils';
 
-function Notification(props) {
-  return (
-    <li>
-      <div className="notification p-2 mb-2 border rounded">
-        <div className="row no-gutters">
-          <div className="col-12">
-            <a
-              href={props.url}
-              onClick={() => sendEnterpriseTrackEvent(
-                props.enterpriseUUID,
-                'edx.ui.enterprise.learner_portal.notification.clicked',
-                { course_run_id: props.courseRunId, name: props.name },
-              )}
-            >
-              {props.name}
-            </a>
-            {' is due '}
-            <span className="font-weight-bold">
-              {moment(props.date).fromNow()}
-            </span>
-            {' on '}
-            {moment(props.date).format('ddd MMMM D, YYYY')}
-          </div>
+const Notification = (props) => (
+  <li>
+    <div className="notification p-2 mb-2 border rounded">
+      <div className="row no-gutters">
+        <div className="col-12">
+          <a
+            href={props.url}
+            onClick={() => sendEnterpriseTrackEvent(
+              props.enterpriseUUID,
+              'edx.ui.enterprise.learner_portal.notification.clicked',
+              { course_run_id: props.courseRunId, name: props.name },
+            )}
+          >
+            {props.name}
+          </a>
+          {' is due '}
+          <span className="font-weight-bold">
+            {moment(props.date).fromNow()}
+          </span>
+          {' on '}
+          {moment(props.date).format('ddd MMMM D, YYYY')}
         </div>
       </div>
-    </li>
-  );
-}
+    </div>
+  </li>
+);
 
 Notification.propTypes = {
   name: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/RequestedCourseCard.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/RequestedCourseCard.jsx
index 0c7c7b6110..becab65b8e 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/RequestedCourseCard.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/RequestedCourseCard.jsx
@@ -5,15 +5,13 @@ import BaseCourseCard from './BaseCourseCard';
 
 import { COURSE_STATUSES } from '../data/constants';
 
-function RequestedCourseCard(props) {
-  return (
-    <BaseCourseCard
-      type={COURSE_STATUSES.requested}
-      hasViewCertificateLink={false}
-      {...props}
-    />
-  );
-}
+const RequestedCourseCard = (props) => (
+  <BaseCourseCard
+    type={COURSE_STATUSES.requested}
+    hasViewCertificateLink={false}
+    {...props}
+  />
+);
 
 RequestedCourseCard.propTypes = {
   linkToCourse: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/SavedForLaterCourseCard.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/SavedForLaterCourseCard.jsx
index ba3489152f..f5fcbdcbbc 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/SavedForLaterCourseCard.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/SavedForLaterCourseCard.jsx
@@ -11,7 +11,7 @@ import { isCourseEnded } from '../../../../../utils/common';
 import { COURSE_STATUSES } from '../data/constants';
 import { CourseEnrollmentsContext } from '../CourseEnrollmentsContextProvider';
 
-function SavedForLaterCourseCard(props) {
+const SavedForLaterCourseCard = (props) => {
   const {
     title,
     linkToCourse,
@@ -122,7 +122,7 @@ function SavedForLaterCourseCard(props) {
       />
     </BaseCourseCard>
   );
-}
+};
 
 SavedForLaterCourseCard.propTypes = {
   linkToCourse: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/UpcomingCourseCard.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/UpcomingCourseCard.jsx
index c5455f75ca..4cee187557 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/UpcomingCourseCard.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/UpcomingCourseCard.jsx
@@ -5,7 +5,7 @@ import moment from 'moment';
 import { Button } from '@edx/paragon';
 import BaseCourseCard from './BaseCourseCard';
 
-function UpcomingCourseCard(props) {
+const UpcomingCourseCard = (props) => {
   const renderButtons = () => (
     <Button className="btn-xs-block" variant="light" disabled>
       Available on {moment(props.startDate).format('MMM D')}
@@ -15,7 +15,7 @@ function UpcomingCourseCard(props) {
   return (
     <BaseCourseCard type="upcoming" buttons={renderButtons()} {...props} />
   );
-}
+};
 
 UpcomingCourseCard.propTypes = {
   startDate: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/UpgradeCourseButton.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/UpgradeCourseButton.jsx
index 84c454c883..8b58949bc2 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/UpgradeCourseButton.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/UpgradeCourseButton.jsx
@@ -11,11 +11,11 @@ import { UserSubsidyContext } from '../../../../enterprise-user-subsidy';
 /**
  * Button for upgrading a course via coupon code (possibly offer later on).
  */
-export default function UpgradeCourseButton({
+const UpgradeCourseButton = ({
   className,
   title,
   variant,
-}) {
+}) => {
   const [isModalOpen, setIsModalOpen] = useState(false);
 
   const { enterpriseConfig: { uuid } } = useContext(AppContext);
@@ -64,7 +64,7 @@ export default function UpgradeCourseButton({
     </>
 
   );
-}
+};
 
 UpgradeCourseButton.defaultProps = {
   className: undefined,
@@ -76,3 +76,5 @@ UpgradeCourseButton.propTypes = {
   variant: PropTypes.string,
   title: PropTypes.string.isRequired,
 };
+
+export default UpgradeCourseButton;
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx
index 9dc710a6d2..71e21f6d37 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/MarkCompleteModal.jsx
@@ -17,14 +17,14 @@ const initialState = {
   confirmSuccessful: false,
 };
 
-function MarkCompleteModal({
+const MarkCompleteModal = ({
   courseId,
   isOpen,
   courseTitle,
   courseLink,
   onSuccess,
   onClose,
-}) {
+}) => {
   const { enterpriseConfig: { uuid } } = useContext(AppContext);
   const [
     { confirmButtonState, confirmError, confirmSuccessful },
@@ -97,7 +97,7 @@ function MarkCompleteModal({
       />
     </MarkCompleteModalContext.Provider>
   );
-}
+};
 
 MarkCompleteModal.propTypes = {
   courseId: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalBody.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalBody.jsx
index fa6812b8e3..7efbde7724 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalBody.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalBody.jsx
@@ -3,7 +3,7 @@ import React, { useContext } from 'react';
 import ModalError from './ModalError';
 import MarkCompleteModalContext from './MarkCompleteModalContext';
 
-function ModalBody() {
+const ModalBody = () => {
   const {
     confirmError,
     courseLink,
@@ -26,6 +26,6 @@ function ModalBody() {
       </p>
     </>
   );
-}
+};
 
 export default ModalBody;
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalError.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalError.jsx
index 0937fc288c..68e44fcc86 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalError.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/ModalError.jsx
@@ -4,13 +4,13 @@ import { Error } from '@edx/paragon/icons';
 
 import MarkCompleteModalContext from './MarkCompleteModalContext';
 
-function ModalError() {
+const ModalError = () => {
   const { courseLink, courseTitle } = useContext(MarkCompleteModalContext);
   return (
     <Alert variant="danger" icon={Error}>
       Unable to save <Alert.Link href={courseLink}>{courseTitle}</Alert.Link> for later. Please try again.
     </Alert>
   );
-}
+};
 
 export default ModalError;
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx
index 269d706c63..e7ca3b7fc4 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/mark-complete-modal/tests/MarkCompleteModal.test.jsx
@@ -9,7 +9,7 @@ import * as service from '../data/service';
 
 jest.mock('../data/service');
 
-function ModalWrapper({ initialProps, enterpriseConfig }) {
+const ModalWrapper = ({ initialProps, enterpriseConfig }) => {
   const contextValue = useMemo(() => ({ enterpriseConfig }), [enterpriseConfig]);
   return (
     <AppContext.Provider value={contextValue}>
@@ -18,7 +18,7 @@ function ModalWrapper({ initialProps, enterpriseConfig }) {
       />
     </AppContext.Provider>
   );
-}
+};
 
 ModalWrapper.propTypes = {
   initialProps: PropTypes.shape({}).isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalBody.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalBody.jsx
index 0dc9711a5c..9c2227e2f8 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalBody.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalBody.jsx
@@ -3,7 +3,7 @@ import React, { useContext } from 'react';
 import ModalError from './ModalError';
 import MoveToInProgressModalContext from './MoveToInProgressModalContext';
 
-function ModalBody() {
+const ModalBody = () => {
   const {
     confirmError,
     courseLink,
@@ -24,6 +24,6 @@ function ModalBody() {
       </p>
     </>
   );
-}
+};
 
 export default ModalBody;
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalError.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalError.jsx
index 5034d8c015..a7b41013c5 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalError.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/ModalError.jsx
@@ -4,13 +4,13 @@ import { Error } from '@edx/paragon/icons';
 
 import MoveToInProgressModalContext from './MoveToInProgressModalContext';
 
-function ModalError() {
+const ModalError = () => {
   const { courseLink, courseTitle } = useContext(MoveToInProgressModalContext);
   return (
     <Alert variant="danger" icon={Error}>
       An error occurred while unarchiving <Alert.Link href={courseLink}>{courseTitle}</Alert.Link>. Please try again.
     </Alert>
   );
-}
+};
 
 export default ModalError;
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx
index 05c1764c66..2a73ea9e46 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/move-to-in-progress-modal/MoveToInProgressModal.jsx
@@ -17,14 +17,14 @@ const initialState = {
   confirmSuccessful: false,
 };
 
-function MoveToInProgressModal({
+const MoveToInProgressModal = ({
   courseId,
   isOpen,
   courseTitle,
   courseLink,
   onSuccess,
   onClose,
-}) {
+}) => {
   const { enterpriseConfig: { uuid } } = useContext(AppContext);
   const [
     { confirmButtonState, confirmError, confirmSuccessful },
@@ -88,7 +88,7 @@ function MoveToInProgressModal({
       />
     </MoveToInProgressModalContext.Provider>
   );
-}
+};
 
 MoveToInProgressModal.propTypes = {
   courseId: PropTypes.string.isRequired,
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx
index fa4357348a..9dfcfbba9c 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/tests/BaseCourseCard.test.jsx
@@ -21,7 +21,7 @@ const enterpriseConfig = {
   name: 'test-enterprise-name',
 };
 
-function CourseCardWrapper({ isLoading }) {
+const CourseCardWrapper = ({ isLoading }) => {
   const contextValue = useMemo(() => ({ enterpriseConfig }), []);
   return (
     <AppContext.Provider value={contextValue}>
@@ -35,7 +35,7 @@ function CourseCardWrapper({ isLoading }) {
       />
     </AppContext.Provider>
   );
-}
+};
 CourseCardWrapper.defaultProps = {
   isLoading: false,
 };
@@ -44,7 +44,7 @@ CourseCardWrapper.propTypes = {
   isLoading: PropTypes.bool,
 };
 
-function CourseEnrollmentWrapper() {
+const CourseEnrollmentWrapper = () => {
   const contextValue = useMemo(() => ({ enterpriseConfig }), []);
   const toastContextValue = useMemo(() => ({ addToast: jest.fn() }), []);
   const enrollmentContextValue = useMemo(() => ({ removeCourseEnrollment: jest.fn() }), []);
@@ -64,7 +64,7 @@ function CourseEnrollmentWrapper() {
       </ToastsContext.Provider>
     </AppContext.Provider>
   );
-}
+};
 
 describe('<BaseCourseCard />', () => {
   let wrapper;
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/tests/InProgressCourseCard.test.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/tests/InProgressCourseCard.test.jsx
index 7d7f9fc92d..7b6c090a17 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/tests/InProgressCourseCard.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/tests/InProgressCourseCard.test.jsx
@@ -26,7 +26,7 @@ const basicProps = {
   notifications: [],
 };
 
-function InProgressCourseCardWrapper({
+const InProgressCourseCardWrapper = ({
   appContextValue =
   {
     enterpriseConfig: {
@@ -48,19 +48,17 @@ function InProgressCourseCardWrapper({
     couponUpgradeUrl: undefined,
   },
   ...rest
-}) {
-  return (
-    <AppContext.Provider value={appContextValue}>
-      <UserSubsidyContext.Provider value={userSubsidyContextValue}>
-        <CourseEnrollmentsContext.Provider value={courseEnrollmentsContextValue}>
-          <UpgradeableCourseEnrollmentContext.Provider value={upgradeableCourseEnrollmentContextValue}>
-            <InProgressCourseCard {...rest} />
-          </UpgradeableCourseEnrollmentContext.Provider>
-        </CourseEnrollmentsContext.Provider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={appContextValue}>
+    <UserSubsidyContext.Provider value={userSubsidyContextValue}>
+      <CourseEnrollmentsContext.Provider value={courseEnrollmentsContextValue}>
+        <UpgradeableCourseEnrollmentContext.Provider value={upgradeableCourseEnrollmentContextValue}>
+          <InProgressCourseCard {...rest} />
+        </UpgradeableCourseEnrollmentContext.Provider>
+      </CourseEnrollmentsContext.Provider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 
 describe('<InProgressCourseCard />', () => {
   it('should not render upgrade course button if there is no couponUpgradeUrl', () => {
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.jsx
index 81e3bc6f97..b4bcee2562 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.jsx
@@ -14,13 +14,13 @@ const btnLabels = {
   pending: 'Unenrolling...',
 };
 
-export default function UnenrollModal({
+const UnenrollModal = ({
   courseRunId,
   enrollmentType,
   isOpen,
   onClose,
   onSuccess,
-}) {
+}) => {
   const { removeCourseEnrollment } = useContext(CourseEnrollmentsContext);
   const { addToast } = useContext(ToastsContext);
 
@@ -88,7 +88,7 @@ export default function UnenrollModal({
       </>
     </AlertModal>
   );
-}
+};
 
 UnenrollModal.propTypes = {
   courseRunId: PropTypes.string.isRequired,
@@ -97,3 +97,5 @@ UnenrollModal.propTypes = {
   onClose: PropTypes.func.isRequired,
   onSuccess: PropTypes.func.isRequired,
 };
+
+export default UnenrollModal;
diff --git a/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx b/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx
index d1687497eb..3559dc0632 100644
--- a/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/course-cards/unenroll/UnenrollModal.test.jsx
@@ -35,11 +35,11 @@ const baseUnenrollModalProps = {
 
 const mockAddToast = jest.fn();
 
-function UnenrollModalWrapper({
+const UnenrollModalWrapper = ({
   // eslint-disable-next-line react/prop-types
   courseEnrollmentsContextValue = defaultCourseEnrollmentsContextValue,
   ...props
-}) {
+}) => {
   const contextValue = useMemo(() => ({ addToast: mockAddToast }), []);
   return (
     <ToastsContext.Provider value={contextValue}>
@@ -48,7 +48,7 @@ function UnenrollModalWrapper({
       </CourseEnrollmentsContext.Provider>
     </ToastsContext.Provider>
   );
-}
+};
 
 describe('<UnenrollModal />', () => {
   beforeEach(() => {
diff --git a/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx b/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx
index 8e12fd4086..8e597c63dd 100644
--- a/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/tests/CourseEnrollments.test.jsx
@@ -58,7 +58,7 @@ hooks.useCourseEnrollments.mockReturnValue({
   updateCourseEnrollmentStatus: jest.fn(),
 });
 
-function RenderEnrollmentsComponent() {
+const RenderEnrollmentsComponent = () => {
   const contextValue = useMemo(() => ({ enterpriseConfig }), []);
   const requestsContextValue = useMemo(() => ({ isLoading: false }), []);
   return (
@@ -70,7 +70,7 @@ function RenderEnrollmentsComponent() {
       </SubsidyRequestsContext.Provider>
     </AppContext.Provider>
   );
-}
+};
 
 describe('Course enrollments', () => {
   beforeEach(() => {
diff --git a/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx b/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx
index fcff21eb44..2162fe6695 100644
--- a/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx
+++ b/src/components/dashboard/main-content/course-enrollments/tests/CourseSection.test.jsx
@@ -33,7 +33,7 @@ const CARD_COMPONENT_BY_COURSE_STATUS = {
 };
 const TEST_ENTERPRISE_UUID = 'test-uuid';
 
-function CourseSectionWrapper(props) {
+const CourseSectionWrapper = (props) => {
   const contextValue = useMemo(() => ({
     enterpriseConfig: {
       uuid: TEST_ENTERPRISE_UUID,
@@ -46,7 +46,7 @@ function CourseSectionWrapper(props) {
       />
     </AppContext.Provider>
   );
-}
+};
 
 describe('<CourseSection />', () => {
   it('should handle collapsible toggle', () => {
diff --git a/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx b/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx
index 6955e29f2f..85068fbf28 100644
--- a/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx
+++ b/src/components/dashboard/sidebar/CouponCodesSummaryCard.jsx
@@ -16,9 +16,9 @@ import {
 } from './data/constants';
 import CouponCodesWarningModal from '../../program-progress/CouponCodesWarningModal';
 
-function CouponCodesSummaryCard({
+const CouponCodesSummaryCard = ({
   couponCodesCount, couponCodeRequestsCount, className, totalCoursesEligibleForCertificate, programProgressPage,
-}) {
+}) => {
   const [
     isCouponCodeWarningModalOpen,
     couponCodeWarningModalOpen,
@@ -105,7 +105,7 @@ function CouponCodesSummaryCard({
         )}
     </>
   );
-}
+};
 
 CouponCodesSummaryCard.propTypes = {
   couponCodesCount: PropTypes.number,
diff --git a/src/components/dashboard/sidebar/DashboardSidebar.jsx b/src/components/dashboard/sidebar/DashboardSidebar.jsx
index c1af5fe06d..b020d51b51 100644
--- a/src/components/dashboard/sidebar/DashboardSidebar.jsx
+++ b/src/components/dashboard/sidebar/DashboardSidebar.jsx
@@ -4,17 +4,15 @@ import { Card } from '@edx/paragon';
 import SupportInformation from './SupportInformation';
 import SubsidiesSummary from './SubsidiesSummary';
 
-function DashboardSidebar() {
-  return (
-    <div className="mt-3 mt-lg-0">
-      <SubsidiesSummary />
-      <Card>
-        <Card.Section>
-          <SupportInformation />
-        </Card.Section>
-      </Card>
-    </div>
-  );
-}
+const DashboardSidebar = () => (
+  <div className="mt-3 mt-lg-0">
+    <SubsidiesSummary />
+    <Card>
+      <Card.Section>
+        <SupportInformation />
+      </Card.Section>
+    </Card>
+  </div>
+);
 
 export default DashboardSidebar;
diff --git a/src/components/dashboard/sidebar/EnterpriseOffersSummaryCard.jsx b/src/components/dashboard/sidebar/EnterpriseOffersSummaryCard.jsx
index 7073ec2f01..6c6148ec45 100644
--- a/src/components/dashboard/sidebar/EnterpriseOffersSummaryCard.jsx
+++ b/src/components/dashboard/sidebar/EnterpriseOffersSummaryCard.jsx
@@ -44,7 +44,7 @@ const EnterpriseOffersSummaryCard = ({ className, offer, searchCoursesCta }) =>
         </p>
       ) }
 
-      {offer.endDatetime
+    {offer.endDatetime
       && (
         <p data-testid="offer-summary-end-date-text">
           Available until <b>{moment(offer.endDatetime).format('MMM D, YYYY')}</b>
diff --git a/src/components/dashboard/sidebar/SidebarCard.jsx b/src/components/dashboard/sidebar/SidebarCard.jsx
index 02ed1fd39f..0fa3ea598a 100644
--- a/src/components/dashboard/sidebar/SidebarCard.jsx
+++ b/src/components/dashboard/sidebar/SidebarCard.jsx
@@ -2,23 +2,21 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { Card } from '@edx/paragon';
 
-function SidebarCard({
+const SidebarCard = ({
   title,
   children,
   cardClassNames,
   cardSectionClassNames,
-}) {
-  return (
-    <Card className={cardClassNames}>
-      {title && <Card.Header title={title} />}
-      <Card.Section
-        className={cardSectionClassNames}
-      >
-        {children}
-      </Card.Section>
-    </Card>
-  );
-}
+}) => (
+  <Card className={cardClassNames}>
+    {title && <Card.Header title={title} />}
+    <Card.Section
+      className={cardSectionClassNames}
+    >
+      {children}
+    </Card.Section>
+  </Card>
+);
 
 SidebarCard.propTypes = {
   title: PropTypes.node,
diff --git a/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx b/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx
index f11af04f53..3b3b7cb0a9 100644
--- a/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx
+++ b/src/components/dashboard/sidebar/SubscriptionSummaryCard.jsx
@@ -22,9 +22,9 @@ import {
 } from './data/constants';
 import SubscriptionExpirationWarningModal from '../../program-progress/SubscriptionExpiringWarningModal';
 
-function SubscriptionSummaryCard({
+const SubscriptionSummaryCard = ({
   subscriptionPlan, licenseRequest, className, courseEndDate, programProgressPage,
-}) {
+}) => {
   const [
     isSubscriptionExpiringWarningModalOpen,
     subscriptionExpiringWarningModalOpen,
@@ -147,7 +147,7 @@ function SubscriptionSummaryCard({
         )}
     </>
   );
-}
+};
 
 SubscriptionSummaryCard.propTypes = {
   subscriptionPlan: PropTypes.shape({
diff --git a/src/components/dashboard/sidebar/SubsidiesSummary.jsx b/src/components/dashboard/sidebar/SubsidiesSummary.jsx
index 2587ed692d..b4bcfb94dd 100644
--- a/src/components/dashboard/sidebar/SubsidiesSummary.jsx
+++ b/src/components/dashboard/sidebar/SubsidiesSummary.jsx
@@ -15,9 +15,9 @@ import SidebarCard from './SidebarCard';
 import { CourseEnrollmentsContext } from '../main-content/course-enrollments/CourseEnrollmentsContextProvider';
 import { SubsidyRequestsContext, SUBSIDY_TYPE } from '../../enterprise-subsidy-requests';
 
-function SubsidiesSummary({
+const SubsidiesSummary = ({
   className, showSearchCoursesCta, totalCoursesEligibleForCertificate, courseEndDate, programProgressPage,
-}) {
+}) => {
   const {
     enterpriseConfig: {
       slug,
@@ -77,48 +77,46 @@ function SubsidiesSummary({
 
   return (
   // TODO: Design debt, don't have cards in a card
-    <>
-      <SidebarCard
-        cardSectionClassNames="border-remove"
-        cardClassNames={classNames('mb-5', { 'col-8 border-remove': programProgressPage })}
-      >
-        <div className={className} data-testid="subsidies-summary">
-          {hasActiveLicenseOrLicenseRequest && (
-            <SubscriptionSummaryCard
-              subscriptionPlan={subscriptionPlan}
-              licenseRequest={licenseRequests[0]}
-              courseEndDate={courseEndDate}
-              programProgressPage={programProgressPage}
-              className="mb-2 border-remove"
-            />
-          )}
-          {hasAssignedCodesOrCodeRequests && (
-            <CouponCodesSummaryCard
-              couponCodesCount={couponCodesCount}
-              couponCodeRequestsCount={couponCodeRequests.length}
-              totalCoursesEligibleForCertificate={totalCoursesEligibleForCertificate}
-              programProgressPage={programProgressPage}
-              className="mb-2 border-remove"
-            />
-          )}
-          {canEnrollWithEnterpriseOffers && (
-            <EnterpriseOffersSummaryCard
-              className="border-remove"
-              offer={enterpriseOffers[0]}
-            />
-          )}
-        </div>
-        {searchCoursesCta && (
-          <SidebarCard
-            cardClassNames="border-remove"
-          >
-            {searchCoursesCta}
-          </SidebarCard>
+    <SidebarCard
+      cardSectionClassNames="border-remove"
+      cardClassNames={classNames('mb-5', { 'col-8 border-remove': programProgressPage })}
+    >
+      <div className={className} data-testid="subsidies-summary">
+        {hasActiveLicenseOrLicenseRequest && (
+          <SubscriptionSummaryCard
+            subscriptionPlan={subscriptionPlan}
+            licenseRequest={licenseRequests[0]}
+            courseEndDate={courseEndDate}
+            programProgressPage={programProgressPage}
+            className="mb-2 border-remove"
+          />
+        )}
+        {hasAssignedCodesOrCodeRequests && (
+          <CouponCodesSummaryCard
+            couponCodesCount={couponCodesCount}
+            couponCodeRequestsCount={couponCodeRequests.length}
+            totalCoursesEligibleForCertificate={totalCoursesEligibleForCertificate}
+            programProgressPage={programProgressPage}
+            className="mb-2 border-remove"
+          />
         )}
-      </SidebarCard>
-    </>
+        {canEnrollWithEnterpriseOffers && (
+          <EnterpriseOffersSummaryCard
+            className="border-remove"
+            offer={enterpriseOffers[0]}
+          />
+        )}
+      </div>
+      {searchCoursesCta && (
+        <SidebarCard
+          cardClassNames="border-remove"
+        >
+          {searchCoursesCta}
+        </SidebarCard>
+      )}
+    </SidebarCard>
   );
-}
+};
 
 SubsidiesSummary.propTypes = {
   totalCoursesEligibleForCertificate: PropTypes.number,
diff --git a/src/components/dashboard/sidebar/SupportInformation.jsx b/src/components/dashboard/sidebar/SupportInformation.jsx
index 78cfed7dad..1403098981 100644
--- a/src/components/dashboard/sidebar/SupportInformation.jsx
+++ b/src/components/dashboard/sidebar/SupportInformation.jsx
@@ -7,7 +7,7 @@ import PropTypes from 'prop-types';
 import { SidebarBlock } from '../../layout';
 import { CONTACT_HELP_EMAIL_MESSAGE, NEED_HELP_BLOCK_TITLE } from './data/constants';
 
-function SupportInformation({ className }) {
+const SupportInformation = ({ className }) => {
   const config = getConfig();
   const {
     enterpriseConfig: {
@@ -51,7 +51,7 @@ function SupportInformation({ className }) {
       </p>
     </SidebarBlock>
   );
-}
+};
 
 SupportInformation.propTypes = {
   className: PropTypes.string,
diff --git a/src/components/dashboard/sidebar/tests/DashboardSidebar.test.jsx b/src/components/dashboard/sidebar/tests/DashboardSidebar.test.jsx
index 5f6cceec35..0055ee89c9 100644
--- a/src/components/dashboard/sidebar/tests/DashboardSidebar.test.jsx
+++ b/src/components/dashboard/sidebar/tests/DashboardSidebar.test.jsx
@@ -20,7 +20,7 @@ import { SubsidyRequestsContext } from '../../../enterprise-subsidy-requests';
 import { SUBSIDY_REQUEST_STATE, SUBSIDY_TYPE } from '../../../enterprise-subsidy-requests/constants';
 
 /* eslint-disable react/prop-types */
-function DashboardSidebarWithContext({
+const DashboardSidebarWithContext = ({
   initialAppState = { fakeContext: 'foo' },
   initialUserSubsidyState = {},
   initialSubsidyRequestsState = {
@@ -34,19 +34,17 @@ function DashboardSidebarWithContext({
   initialCourseEnrollmentsState = {
     courseEnrollmentsByStatus: {},
   },
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
-          <CourseEnrollmentsContextProvider value={initialCourseEnrollmentsState}>
-            <DashboardSidebar />
-          </CourseEnrollmentsContextProvider>
-        </SubsidyRequestsContext.Provider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
+        <CourseEnrollmentsContextProvider value={initialCourseEnrollmentsState}>
+          <DashboardSidebar />
+        </CourseEnrollmentsContextProvider>
+      </SubsidyRequestsContext.Provider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 describe('<DashboardSidebar />', () => {
diff --git a/src/components/dashboard/sidebar/tests/SubscriptionSummaryCard.test.jsx b/src/components/dashboard/sidebar/tests/SubscriptionSummaryCard.test.jsx
index ce6c8d6350..57452becc5 100644
--- a/src/components/dashboard/sidebar/tests/SubscriptionSummaryCard.test.jsx
+++ b/src/components/dashboard/sidebar/tests/SubscriptionSummaryCard.test.jsx
@@ -42,15 +42,13 @@ const initialUserSubsidyState = {
   },
 };
 
-function SubscriptionSummaryCardForProgressPageWithContext(props) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <SubscriptionSummaryCard {...props} />
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+const SubscriptionSummaryCardForProgressPageWithContext = (props) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <SubscriptionSummaryCard {...props} />
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 
 describe('<SubscriptionSummaryCard />', () => {
   const subscriptionPlan = {
diff --git a/src/components/dashboard/tests/DashboardPage.test.jsx b/src/components/dashboard/tests/DashboardPage.test.jsx
index 77badd0cb8..c3a42f7e3b 100644
--- a/src/components/dashboard/tests/DashboardPage.test.jsx
+++ b/src/components/dashboard/tests/DashboardPage.test.jsx
@@ -104,26 +104,24 @@ let mockLocation = {
 };
 
 /* eslint-disable react/prop-types */
-function DashboardWithContext({
+const DashboardWithContext = ({
   initialAppState = defaultAppState,
   initialUserSubsidyState = defaultUserSubsidyState,
   initialCourseState = defaultCourseState,
   initialSubsidyRequestState = defaultSubsidyRequestState,
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
-          <CourseEnrollmentsContextProvider>
-            <CourseContextProvider initialState={initialCourseState}>
-              <DashboardPage />
-            </CourseContextProvider>
-          </CourseEnrollmentsContextProvider>
-        </SubsidyRequestsContext.Provider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
+        <CourseEnrollmentsContextProvider>
+          <CourseContextProvider initialState={initialCourseState}>
+            <DashboardPage />
+          </CourseContextProvider>
+        </CourseEnrollmentsContextProvider>
+      </SubsidyRequestsContext.Provider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 jest.mock('react-router-dom', () => ({
diff --git a/src/components/enterprise-banner/EnterpriseBanner.jsx b/src/components/enterprise-banner/EnterpriseBanner.jsx
index aaeb028c6e..0eddde8287 100644
--- a/src/components/enterprise-banner/EnterpriseBanner.jsx
+++ b/src/components/enterprise-banner/EnterpriseBanner.jsx
@@ -5,7 +5,7 @@ import { Button, Container } from '@edx/paragon';
 
 import './styles/EnterpriseBanner.scss';
 
-export default function EnterpriseBanner() {
+const EnterpriseBanner = () => {
   const location = useLocation();
   const { enterpriseConfig } = useContext(AppContext);
   const isSearchPage = `/${ enterpriseConfig.slug }/search` === location.pathname;
@@ -30,4 +30,6 @@ export default function EnterpriseBanner() {
       </Container>
     </div>
   );
-}
+};
+
+export default EnterpriseBanner;
diff --git a/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx b/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx
index f1dcd9b465..83872e2106 100644
--- a/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx
+++ b/src/components/enterprise-banner/tests/EnterpriseBanner.test.jsx
@@ -9,7 +9,7 @@ jest.mock('react-router-dom', () => ({
   useLocation: jest.fn(),
 }));
 
-function BannerWrapper() {
+const BannerWrapper = () => {
   const contextValue = useMemo(() => ({
     enterpriseConfig: {
       slug: 'slug',
@@ -23,7 +23,7 @@ function BannerWrapper() {
       <EnterpriseBanner />
     </AppContext.Provider>
   );
-}
+};
 
 describe('<EnterpriseBanner />', () => {
   afterAll(() => {
diff --git a/src/components/enterprise-invite/EnterpriseInvitePage.jsx b/src/components/enterprise-invite/EnterpriseInvitePage.jsx
index 2e09af24a6..2c1f38f57a 100644
--- a/src/components/enterprise-invite/EnterpriseInvitePage.jsx
+++ b/src/components/enterprise-invite/EnterpriseInvitePage.jsx
@@ -31,7 +31,7 @@ export const CTA_BUTTON_TEXT = 'Continue to edX.org';
  * If successful, the user is redirected to their enterprise customer's Learner Portal
  * slug. If an error occurred, an appropriate error page is shown and an error is logged.
  */
-function EnterpriseInvitePage() {
+const EnterpriseInvitePage = () => {
   const { enterpriseCustomerInviteKey } = useParams();
   const [inviteError, setInviteError] = useState();
   const [isLoading, setIsLoading] = useState(true);
@@ -114,6 +114,6 @@ function EnterpriseInvitePage() {
       )}
     </LoginRedirect>
   );
-}
+};
 
 export default EnterpriseInvitePage;
diff --git a/src/components/enterprise-page/EnterprisePage.jsx b/src/components/enterprise-page/EnterprisePage.jsx
index fb7eb85edd..4a27f4eee0 100644
--- a/src/components/enterprise-page/EnterprisePage.jsx
+++ b/src/components/enterprise-page/EnterprisePage.jsx
@@ -18,7 +18,7 @@ import { useAlgoliaSearch } from '../../utils/hooks';
 import { useUpdateActiveEnterpriseForUser, useEnterpriseCustomerConfig } from './data/hooks';
 import { pushUserCustomerAttributes } from '../../utils/optimizely';
 
-export default function EnterprisePage({ children, useEnterpriseConfigCache }) {
+const EnterprisePage = ({ children, useEnterpriseConfigCache }) => {
   const { enterpriseSlug } = useParams();
   const [enterpriseConfig, fetchError] = useEnterpriseCustomerConfig(enterpriseSlug, useEnterpriseConfigCache);
   const config = getConfig();
@@ -76,7 +76,7 @@ export default function EnterprisePage({ children, useEnterpriseConfigCache }) {
       {children}
     </AppContext.Provider>
   );
-}
+};
 
 EnterprisePage.propTypes = {
   children: PropTypes.node.isRequired,
@@ -86,3 +86,5 @@ EnterprisePage.propTypes = {
 EnterprisePage.defaultProps = {
   useEnterpriseConfigCache: true,
 };
+
+export default EnterprisePage;
diff --git a/src/components/enterprise-page/EnterprisePage.test.jsx b/src/components/enterprise-page/EnterprisePage.test.jsx
index f15c5ddedd..1596333296 100644
--- a/src/components/enterprise-page/EnterprisePage.test.jsx
+++ b/src/components/enterprise-page/EnterprisePage.test.jsx
@@ -56,10 +56,10 @@ describe('<EnterprisePage />', () => {
       slug: 'test-slug',
     };
     jest.spyOn(hooks, 'useEnterpriseCustomerConfig').mockImplementation(() => [mockEnterpriseConfig, undefined]);
-    function ChildComponent() {
+    const ChildComponent = () => {
       const contextValue = useContext(AppContext);
       return <div className="did-i-render" data-contextvalue={contextValue} />;
-    }
+    };
     const wrapper = mount(<EnterprisePage><ChildComponent /></EnterprisePage>);
     const actualContextValue = wrapper.find('.did-i-render').prop('data-contextvalue');
     expect(actualContextValue).toEqual(
diff --git a/src/components/enterprise-redirects/EnterpriseCustomerRedirect.jsx b/src/components/enterprise-redirects/EnterpriseCustomerRedirect.jsx
index 4663156f05..85daaaaf36 100644
--- a/src/components/enterprise-redirects/EnterpriseCustomerRedirect.jsx
+++ b/src/components/enterprise-redirects/EnterpriseCustomerRedirect.jsx
@@ -10,7 +10,7 @@ import {
   useSelectedEnterpriseUUIDByUserRoles,
 } from './data/hooks';
 
-function EnterpriseCustomerRedirect() {
+const EnterpriseCustomerRedirect = () => {
   const { authenticatedUser } = useContext(AppContext);
   const { roles } = authenticatedUser;
   const selectedEnterpriseUUID = useSelectedEnterpriseUUIDByUserRoles(roles);
@@ -29,6 +29,6 @@ function EnterpriseCustomerRedirect() {
   }
 
   return <Redirect to={`/${enterpriseCustomer.slug}`} />;
-}
+};
 
 export default EnterpriseCustomerRedirect;
diff --git a/src/components/enterprise-redirects/EnterprisePageRedirect.jsx b/src/components/enterprise-redirects/EnterprisePageRedirect.jsx
index 5756004e47..ea555d5826 100644
--- a/src/components/enterprise-redirects/EnterprisePageRedirect.jsx
+++ b/src/components/enterprise-redirects/EnterprisePageRedirect.jsx
@@ -10,7 +10,7 @@ import {
   useSelectedEnterpriseUUIDByUserRoles,
 } from './data/hooks';
 
-function EnterprisePageRedirect() {
+const EnterprisePageRedirect = () => {
   const { authenticatedUser } = useContext(AppContext);
   const { redirectPath } = useParams();
   const { roles } = authenticatedUser;
@@ -34,6 +34,6 @@ function EnterprisePageRedirect() {
   }
 
   return <Redirect to={`/${enterpriseCustomer.slug}/${redirectPath}`} />;
-}
+};
 
 export default EnterprisePageRedirect;
diff --git a/src/components/enterprise-redirects/tests/EnterpriseCustomerRedirect.test.jsx b/src/components/enterprise-redirects/tests/EnterpriseCustomerRedirect.test.jsx
index 180f877412..d1fb9a07a5 100644
--- a/src/components/enterprise-redirects/tests/EnterpriseCustomerRedirect.test.jsx
+++ b/src/components/enterprise-redirects/tests/EnterpriseCustomerRedirect.test.jsx
@@ -25,15 +25,13 @@ const TEST_ENTERPRISES = [
 ];
 
 /* eslint-disable react/prop-types */
-function EnterpriseCustomerRedirectWithContext({
+const EnterpriseCustomerRedirectWithContext = ({
   initialAppState = {},
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <EnterpriseCustomerRedirect />
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <EnterpriseCustomerRedirect />
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 describe('<EnterpriseCustomerRedirect />', () => {
diff --git a/src/components/enterprise-redirects/tests/EnterprisePageRedirect.test.jsx b/src/components/enterprise-redirects/tests/EnterprisePageRedirect.test.jsx
index abdc2493ea..6401340025 100644
--- a/src/components/enterprise-redirects/tests/EnterprisePageRedirect.test.jsx
+++ b/src/components/enterprise-redirects/tests/EnterprisePageRedirect.test.jsx
@@ -26,15 +26,13 @@ const TEST_ENTERPRISES = [
 ];
 
 /* eslint-disable react/prop-types */
-function EnterprisePageRedirectWithContext({
+const EnterprisePageRedirectWithContext = ({
   initialAppState = {},
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <EnterprisePageRedirect />
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <EnterprisePageRedirect />
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 describe('<EnterprisePageRedirect />', () => {
diff --git a/src/components/enterprise-subsidy-requests/SubsidyRequestsContextProvider.jsx b/src/components/enterprise-subsidy-requests/SubsidyRequestsContextProvider.jsx
index a074b2bc96..07ce904463 100644
--- a/src/components/enterprise-subsidy-requests/SubsidyRequestsContextProvider.jsx
+++ b/src/components/enterprise-subsidy-requests/SubsidyRequestsContextProvider.jsx
@@ -13,7 +13,7 @@ import { UserSubsidyContext } from '../enterprise-user-subsidy';
 
 export const SubsidyRequestsContext = createContext();
 
-function SubsidyRequestsContextProvider({ children }) {
+const SubsidyRequestsContextProvider = ({ children }) => {
   const {
     enterpriseConfig: {
       uuid: enterpriseUUID,
@@ -75,7 +75,7 @@ function SubsidyRequestsContextProvider({ children }) {
       {children}
     </SubsidyRequestsContext.Provider>
   );
-}
+};
 
 SubsidyRequestsContextProvider.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/enterprise-subsidy-requests/tests/SubsidyRequestsContextProvider.test.jsx b/src/components/enterprise-subsidy-requests/tests/SubsidyRequestsContextProvider.test.jsx
index 38f5758eb9..48b9589b71 100644
--- a/src/components/enterprise-subsidy-requests/tests/SubsidyRequestsContextProvider.test.jsx
+++ b/src/components/enterprise-subsidy-requests/tests/SubsidyRequestsContextProvider.test.jsx
@@ -15,7 +15,7 @@ const enterpriseConfig = {
   uuid: 'example-enterprise-uuid',
 };
 
-function SubsidyRequestsContextProviderWrapper({
+const SubsidyRequestsContextProviderWrapper = ({
   initialAppState = {
     enterpriseConfig,
   },
@@ -28,17 +28,15 @@ function SubsidyRequestsContextProviderWrapper({
       subscriptions: [],
     },
   },
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <SubsidyRequestsContextProvider>
-          <div>children</div>
-        </SubsidyRequestsContextProvider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <SubsidyRequestsContextProvider>
+        <div>children</div>
+      </SubsidyRequestsContextProvider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 
 describe('<SubsidyRequestsContextProvider />', () => {
   beforeEach(() => {
diff --git a/src/components/enterprise-user-subsidy/AutoActivateLicense.jsx b/src/components/enterprise-user-subsidy/AutoActivateLicense.jsx
index 91e537067d..34c8d60f06 100644
--- a/src/components/enterprise-user-subsidy/AutoActivateLicense.jsx
+++ b/src/components/enterprise-user-subsidy/AutoActivateLicense.jsx
@@ -8,7 +8,7 @@ import { LICENSE_STATUS } from './data/constants';
 /**
  * Redirects users to the license activation page if they have an assigned license.
  */
-function AutoActivateLicense() {
+const AutoActivateLicense = () => {
   const { enterpriseConfig } = useContext(AppContext);
   const { subscriptionLicense } = useContext(UserSubsidyContext);
   const location = useLocation();
@@ -28,6 +28,6 @@ function AutoActivateLicense() {
     }}
     />
   );
-}
+};
 
 export default AutoActivateLicense;
diff --git a/src/components/enterprise-user-subsidy/UserSubsidy.jsx b/src/components/enterprise-user-subsidy/UserSubsidy.jsx
index 2d840281c2..a721d5e8d6 100644
--- a/src/components/enterprise-user-subsidy/UserSubsidy.jsx
+++ b/src/components/enterprise-user-subsidy/UserSubsidy.jsx
@@ -17,7 +17,7 @@ import { LOADING_SCREEN_READER_TEXT } from './data/constants';
 
 export const UserSubsidyContext = createContext();
 
-function UserSubsidy({ children }) {
+const UserSubsidy = ({ children }) => {
   const { enterpriseConfig, authenticatedUser } = useContext(AppContext);
 
   const [customerAgreementConfig, isLoadingCustomerAgreementConfig] = useCustomerAgreementData(enterpriseConfig.uuid);
@@ -117,7 +117,7 @@ function UserSubsidy({ children }) {
       </UserSubsidyContext.Provider>
     </>
   );
-}
+};
 
 UserSubsidy.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/enterprise-user-subsidy/enterprise-offers/EnterpriseOffersBalanceAlert.jsx b/src/components/enterprise-user-subsidy/enterprise-offers/EnterpriseOffersBalanceAlert.jsx
index 64962b6bac..a680856a50 100644
--- a/src/components/enterprise-user-subsidy/enterprise-offers/EnterpriseOffersBalanceAlert.jsx
+++ b/src/components/enterprise-user-subsidy/enterprise-offers/EnterpriseOffersBalanceAlert.jsx
@@ -16,7 +16,7 @@ import {
   OFFER_BALANCE_CLICK_EVENT,
 } from './data/constants';
 
-function EnterpriseOffersBalanceAlert({ hasNoEnterpriseOffersBalance }) {
+const EnterpriseOffersBalanceAlert = ({ hasNoEnterpriseOffersBalance }) => {
   const {
     enterpriseConfig: { uuid: enterpriseCustomerUUID, adminUsers },
   } = useContext(AppContext);
@@ -59,7 +59,7 @@ function EnterpriseOffersBalanceAlert({ hasNoEnterpriseOffersBalance }) {
       </Alert>
     </Container>
   );
-}
+};
 
 EnterpriseOffersBalanceAlert.propTypes = {
   hasNoEnterpriseOffersBalance: PropTypes.bool.isRequired,
diff --git a/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx b/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx
index c1220e13fb..94c699f8d7 100644
--- a/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx
+++ b/src/components/enterprise-user-subsidy/enterprise-offers/tests/EnterpriseOffersBalanceAlert.test.jsx
@@ -10,12 +10,12 @@ import {
   NO_BALANCE_ALERT_TEXT,
 } from '../data/constants';
 
-function EnterpriseOffersBalanceAlertWrapper({
+const EnterpriseOffersBalanceAlertWrapper = ({
   enterpriseConfig = {
     adminUsers: [],
   },
   hasNoEnterpriseOffersBalance,
-}) {
+}) => {
   const contextValue = useMemo(() => ({
     enterpriseConfig,
   }), [enterpriseConfig]);
@@ -26,7 +26,7 @@ function EnterpriseOffersBalanceAlertWrapper({
       />
     </AppContext.Provider>
   );
-}
+};
 
 describe('<EnterpriseOffersBalanceAlert />', () => {
   it('should not render mailto link if there are no enterprise admins', () => {
diff --git a/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx b/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx
index b625d4cc26..f344dd8b79 100644
--- a/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx
+++ b/src/components/enterprise-user-subsidy/tests/AutoActivateLicense.test.jsx
@@ -12,7 +12,7 @@ const TEST_ENTERPRISE_SLUG = 'test-slug';
 const initialPathname = `/${TEST_ENTERPRISE_SLUG}`;
 
 // eslint-disable-next-line react/prop-types
-function AutoActivateLicenseWrapper({ subscriptionLicense }) {
+const AutoActivateLicenseWrapper = ({ subscriptionLicense }) => {
   const contextValue = useMemo(() => ({ enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG } }), []);
   const subsidyContextValue = useMemo(() => ({ subscriptionLicense }), [subscriptionLicense]);
   return (
@@ -24,7 +24,7 @@ function AutoActivateLicenseWrapper({ subscriptionLicense }) {
       </AppContext.Provider>
     </Route>
   );
-}
+};
 
 describe('<AutoActivationLicense />', () => {
   afterEach(() => jest.clearAllMocks());
diff --git a/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx b/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
index 0d768ebcca..140a5cbb8a 100644
--- a/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
+++ b/src/components/enterprise-user-subsidy/tests/UserSubsidy.test.jsx
@@ -61,12 +61,12 @@ const mockEmptyListResponse = {
 };
 
 /* eslint-disable react/prop-types */
-function UserSubsidyWithAppContext({
+const UserSubsidyWithAppContext = ({
   enterpriseConfig = {},
   contextValue = {},
   authenticatedUser = TEST_USER,
   children,
-}) {
+}) => {
   const appContextValue = useMemo(() => ({
     enterpriseConfig: {
       slug: TEST_ENTERPRISE_SLUG,
@@ -83,18 +83,18 @@ function UserSubsidyWithAppContext({
       </UserSubsidy>
     </AppContext.Provider>
   );
-}
+};
 /* eslint-enable react/prop-types */
 
-function SubscriptionLicenseConsumer() {
+const SubscriptionLicenseConsumer = () => {
   const { subscriptionLicense } = useContext(UserSubsidyContext);
   return <div>License status: {subscriptionLicense?.status || 'none'}</div>;
-}
+};
 
-function CouponCodesConsumer() {
+const CouponCodesConsumer = () => {
   const { couponCodes } = useContext(UserSubsidyContext);
   return <div>Coupon codes count: {couponCodes?.couponCodesCount || 'none'}</div>;
-}
+};
 
 describe('UserSubsidy', () => {
   describe('without subsidy', () => {
diff --git a/src/components/error-page/ErrorPage.jsx b/src/components/error-page/ErrorPage.jsx
index 8e72e08ec5..1db97784dd 100644
--- a/src/components/error-page/ErrorPage.jsx
+++ b/src/components/error-page/ErrorPage.jsx
@@ -15,31 +15,29 @@ import ErrorPageContent from './ErrorPageContent';
  * a header, error alert, and a footer.
  */
 
-function ErrorPage({
+const ErrorPage = ({
   title,
   subtitle,
   showSiteHeader,
   showSiteFooter,
   children,
-}) {
-  return (
-    <>
-      {showSiteHeader && <ErrorPageHeader />}
-      <main id="content">
-        <ErrorPageContent>
-          <Col xs={12} lg={{ span: 10, offset: 1 }}>
-            <ErrorPageTitle>{title}</ErrorPageTitle>
-            {subtitle && (
-              <ErrorPageSubtitle>{subtitle}</ErrorPageSubtitle>
-            )}
-            {children}
-          </Col>
-        </ErrorPageContent>
-      </main>
-      {showSiteFooter && <SiteFooter />}
-    </>
-  );
-}
+}) => (
+  <>
+    {showSiteHeader && <ErrorPageHeader />}
+    <main id="content">
+      <ErrorPageContent>
+        <Col xs={12} lg={{ span: 10, offset: 1 }}>
+          <ErrorPageTitle>{title}</ErrorPageTitle>
+          {subtitle && (
+            <ErrorPageSubtitle>{subtitle}</ErrorPageSubtitle>
+          )}
+          {children}
+        </Col>
+      </ErrorPageContent>
+    </main>
+    {showSiteFooter && <SiteFooter />}
+  </>
+);
 
 ErrorPage.Content = ErrorPageContent;
 ErrorPage.Title = ErrorPageTitle;
diff --git a/src/components/error-page/ErrorPageContent.jsx b/src/components/error-page/ErrorPageContent.jsx
index 2307353091..1d1b9fcbf6 100644
--- a/src/components/error-page/ErrorPageContent.jsx
+++ b/src/components/error-page/ErrorPageContent.jsx
@@ -10,13 +10,11 @@ import classNames from 'classnames';
  * Different components can be passed for a greater level of customization
  * for error pages.
  */
-function ErrorPageContent({ children, className }) {
-  return (
-    <Container size="lg" className={classNames('error-page-container', className)}>
-      {children}
-    </Container>
-  );
-}
+const ErrorPageContent = ({ children, className }) => (
+  <Container size="lg" className={classNames('error-page-container', className)}>
+    {children}
+  </Container>
+);
 
 ErrorPageContent.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/error-page/ErrorPageHeader.jsx b/src/components/error-page/ErrorPageHeader.jsx
index 308c3e0957..03cf67a1c7 100644
--- a/src/components/error-page/ErrorPageHeader.jsx
+++ b/src/components/error-page/ErrorPageHeader.jsx
@@ -16,7 +16,7 @@ import { getConfig } from '@edx/frontend-platform/config';
  * This component also acts as a message page for the logout case, hence adding some checks for
  * non existent variables.
  */
-function ErrorPageHeader() {
+const ErrorPageHeader = () => {
   const config = getConfig();
   const authenticatedUser = getAuthenticatedUser();
   const { username, profileImage } = authenticatedUser || { username: '', profileImage: '' };
@@ -55,6 +55,6 @@ function ErrorPageHeader() {
       </Navbar>
     </header>
   );
-}
+};
 
 export default ErrorPageHeader;
diff --git a/src/components/error-page/ErrorPageSubtitle.jsx b/src/components/error-page/ErrorPageSubtitle.jsx
index 50434171c0..d170ce9ee8 100644
--- a/src/components/error-page/ErrorPageSubtitle.jsx
+++ b/src/components/error-page/ErrorPageSubtitle.jsx
@@ -4,9 +4,7 @@ import PropTypes from 'prop-types';
  * Individual subtitle component of ErrorPage component parent.
  * Includes default styling for error pages.
  */
-function ErrorPageSubtitle({ children }) {
-  return <h3 className="mb-4.5 text-gray-700">{children}</h3>;
-}
+const ErrorPageSubtitle = ({ children }) => <h3 className="mb-4.5 text-gray-700">{children}</h3>;
 
 ErrorPageSubtitle.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/error-page/ErrorPageTitle.jsx b/src/components/error-page/ErrorPageTitle.jsx
index 3f55894c21..8077d24071 100644
--- a/src/components/error-page/ErrorPageTitle.jsx
+++ b/src/components/error-page/ErrorPageTitle.jsx
@@ -4,9 +4,7 @@ import PropTypes from 'prop-types';
  * Individual title component of ErrorPage component parent.
  * Includes default styling for error pages.
  */
-function ErrorPageTitle({ children }) {
-  return <h2 className="text-danger mb-4">{children}</h2>;
-}
+const ErrorPageTitle = ({ children }) => <h2 className="text-danger mb-4">{children}</h2>;
 
 ErrorPageTitle.propTypes = {
   children: PropTypes.node,
diff --git a/src/components/executive-education-2u/ExecutiveEducation2UError.jsx b/src/components/executive-education-2u/ExecutiveEducation2UError.jsx
index 35fb0dfa60..5a571b3cde 100644
--- a/src/components/executive-education-2u/ExecutiveEducation2UError.jsx
+++ b/src/components/executive-education-2u/ExecutiveEducation2UError.jsx
@@ -9,7 +9,7 @@ import {
   ErrorPage,
 } from '../error-page';
 
-function ExecutiveEducation2UError({ failureReason, httpReferrer }) {
+const ExecutiveEducation2UError = ({ failureReason, httpReferrer }) => {
   const { enterpriseConfig: { uuid: enterpriseId } } = useContext(AppContext);
 
   const createExecutiveEducationFailureMessage = (failureCode) => {
@@ -54,7 +54,7 @@ function ExecutiveEducation2UError({ failureReason, httpReferrer }) {
       </Row>
     </ErrorPage.Content>
   );
-}
+};
 
 ExecutiveEducation2UError.propTypes = {
   failureReason: PropTypes.string,
diff --git a/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx b/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx
index ceb3207e71..429fe11859 100644
--- a/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx
+++ b/src/components/executive-education-2u/ExecutiveEducation2UPage.jsx
@@ -15,7 +15,7 @@ import {
 } from './data';
 import ExecutiveEducation2UError from './ExecutiveEducation2UError';
 
-function ExecutiveEducation2UPage() {
+const ExecutiveEducation2UPage = () => {
   const { enterpriseConfig } = useContext(AppContext);
   const activeQueryParams = useActiveQueryParams();
 
@@ -114,6 +114,6 @@ function ExecutiveEducation2UPage() {
       )}
     </Container>
   );
-}
+};
 
 export default ExecutiveEducation2UPage;
diff --git a/src/components/executive-education-2u/ExecutiveEducation2UPage.test.jsx b/src/components/executive-education-2u/ExecutiveEducation2UPage.test.jsx
index 2bfc34ed70..d22e1a916c 100644
--- a/src/components/executive-education-2u/ExecutiveEducation2UPage.test.jsx
+++ b/src/components/executive-education-2u/ExecutiveEducation2UPage.test.jsx
@@ -46,15 +46,13 @@ const initialAppContextValue = {
   },
 };
 
-function ExecutiveEducation2UPageWrapper({
+const ExecutiveEducation2UPageWrapper = ({
   appContextValue = initialAppContextValue,
-}) {
-  return (
-    <AppContext.Provider value={appContextValue}>
-      <ExecutiveEducation2UPage />
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={appContextValue}>
+    <ExecutiveEducation2UPage />
+  </AppContext.Provider>
+);
 
 describe('ExecutiveEducation2UPage', () => {
   beforeEach(() => {
diff --git a/src/components/executive-education-2u/FormSectionHeading.jsx b/src/components/executive-education-2u/FormSectionHeading.jsx
index cca35d5a0a..d790784666 100644
--- a/src/components/executive-education-2u/FormSectionHeading.jsx
+++ b/src/components/executive-education-2u/FormSectionHeading.jsx
@@ -1,9 +1,7 @@
 import React from 'react';
 import PropTypes from 'prop-types';
 
-function FormSectionHeading({ children }) {
-  return <h3 className="h4 mb-4">{children}</h3>;
-}
+const FormSectionHeading = ({ children }) => <h3 className="h4 mb-4">{children}</h3>;
 
 FormSectionHeading.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/executive-education-2u/UserEnrollmentForm.jsx b/src/components/executive-education-2u/UserEnrollmentForm.jsx
index 93acae6f99..e6fd5467c6 100644
--- a/src/components/executive-education-2u/UserEnrollmentForm.jsx
+++ b/src/components/executive-education-2u/UserEnrollmentForm.jsx
@@ -22,11 +22,11 @@ export const formValidationMessages = {
   studentTermsAndConditionsRequired: 'Please agree to Terms and Conditions for Students',
 };
 
-function UserEnrollmentForm({
+const UserEnrollmentForm = ({
   className,
   productSKU,
   onCheckoutSuccess,
-}) {
+}) => {
   const { enterpriseConfig: { uuid: enterpriseId } } = useContext(AppContext);
 
   const config = getConfig();
@@ -262,7 +262,7 @@ function UserEnrollmentForm({
       }}
     </Formik>
   );
-}
+};
 
 UserEnrollmentForm.propTypes = {
   className: PropTypes.string,
diff --git a/src/components/executive-education-2u/UserEnrollmentForm.test.jsx b/src/components/executive-education-2u/UserEnrollmentForm.test.jsx
index 5ad8ef70ac..8320877d92 100644
--- a/src/components/executive-education-2u/UserEnrollmentForm.test.jsx
+++ b/src/components/executive-education-2u/UserEnrollmentForm.test.jsx
@@ -31,22 +31,20 @@ const initialAppContextValue = {
   },
 };
 
-function UserEnrollmentFormWrapper({
+const UserEnrollmentFormWrapper = ({
   appContextValue = initialAppContextValue,
   enterpriseId = mockEnterpriseId,
   productSKU = mockProductSKU,
   onCheckoutSuccess = mockOnCheckoutSuccess,
-}) {
-  return (
-    <AppContext.Provider value={appContextValue}>
-      <UserEnrollmentForm
-        enterpriseId={enterpriseId}
-        productSKU={productSKU}
-        onCheckoutSuccess={onCheckoutSuccess}
-      />
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={appContextValue}>
+    <UserEnrollmentForm
+      enterpriseId={enterpriseId}
+      productSKU={productSKU}
+      onCheckoutSuccess={onCheckoutSuccess}
+    />
+  </AppContext.Provider>
+);
 
 describe('UserEnrollmentForm', () => {
   beforeEach(() => {
diff --git a/src/components/integration-warning-modal/IntegrationWarningModal.jsx b/src/components/integration-warning-modal/IntegrationWarningModal.jsx
index d0fee67c57..073557a7d6 100644
--- a/src/components/integration-warning-modal/IntegrationWarningModal.jsx
+++ b/src/components/integration-warning-modal/IntegrationWarningModal.jsx
@@ -6,9 +6,9 @@ import { getConfig } from '@edx/frontend-platform/config';
 import { MODAL_BUTTON_TEXT, MODAL_TITLE } from './data/constants';
 import ModalBody from './ModalBody';
 
-function IntegrationWarningModal({
+const IntegrationWarningModal = ({
   isOpen,
-}) {
+}) => {
   const config = getConfig();
   const cookies = new Cookies();
   const isWarningDismissed = () => {
@@ -45,7 +45,7 @@ function IntegrationWarningModal({
       />
     </div>
   );
-}
+};
 
 IntegrationWarningModal.propTypes = {
   isOpen: PropTypes.bool,
diff --git a/src/components/integration-warning-modal/ModalBody.jsx b/src/components/integration-warning-modal/ModalBody.jsx
index 90d9a9edc4..bc0e98fed8 100644
--- a/src/components/integration-warning-modal/ModalBody.jsx
+++ b/src/components/integration-warning-modal/ModalBody.jsx
@@ -1,15 +1,13 @@
 import React from 'react';
 
-function ModalBody() {
-  return (
-    <div>
-      <p className="m-0">
-        You are viewing only the edX courses that your organization has made available to you.
-        There may be other learning resources from different sources available in your learning
-        management system.
-      </p>
-    </div>
-  );
-}
+const ModalBody = () => (
+  <div>
+    <p className="m-0">
+      You are viewing only the edX courses that your organization has made available to you.
+      There may be other learning resources from different sources available in your learning
+      management system.
+    </p>
+  </div>
+);
 
 export default ModalBody;
diff --git a/src/components/layout/Layout.jsx b/src/components/layout/Layout.jsx
index e59b5ed3e5..0c7a0210d7 100644
--- a/src/components/layout/Layout.jsx
+++ b/src/components/layout/Layout.jsx
@@ -14,7 +14,7 @@ import './styles/Layout.scss';
 export const TITLE_TEMPLATE = '%s - edX';
 export const DEFAULT_TITLE = 'edX';
 
-export default function Layout({ children }) {
+const Layout = ({ children }) => {
   const { config, enterpriseConfig } = useContext(AppContext);
   const brandStyles = useStylesForCustomBrandColors(enterpriseConfig);
 
@@ -57,8 +57,10 @@ export default function Layout({ children }) {
       </>
     </IntlProvider>
   );
-}
+};
 
 Layout.propTypes = {
   children: PropTypes.node.isRequired,
 };
+
+export default Layout;
diff --git a/src/components/layout/MainContent.jsx b/src/components/layout/MainContent.jsx
index e89b406033..576e5c946a 100644
--- a/src/components/layout/MainContent.jsx
+++ b/src/components/layout/MainContent.jsx
@@ -1,13 +1,11 @@
 import React from 'react';
 import PropTypes from 'prop-types';
 
-function MainContent(props) {
-  return (
-    <article className="col-xs-12 col-lg-8">
-      {props.children}
-    </article>
-  );
-}
+const MainContent = (props) => (
+  <article className="col-xs-12 col-lg-8">
+    {props.children}
+  </article>
+);
 
 MainContent.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/layout/SidebarBlock.jsx b/src/components/layout/SidebarBlock.jsx
index 4b9adef600..91a5da9432 100644
--- a/src/components/layout/SidebarBlock.jsx
+++ b/src/components/layout/SidebarBlock.jsx
@@ -2,12 +2,12 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import classNames from 'classnames';
 
-function SidebarBlock({
+const SidebarBlock = ({
   className,
   title,
   children,
   titleOptions,
-}) {
+}) => {
   const { tag: TitleTag } = titleOptions;
   return (
     <div className={className}>
@@ -19,7 +19,7 @@ function SidebarBlock({
       {children}
     </div>
   );
-}
+};
 
 SidebarBlock.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/license-activation/LicenseActivation.jsx b/src/components/license-activation/LicenseActivation.jsx
index a326bbf1e4..127b3de0bd 100644
--- a/src/components/license-activation/LicenseActivation.jsx
+++ b/src/components/license-activation/LicenseActivation.jsx
@@ -12,7 +12,7 @@ import { UserSubsidyContext } from '../enterprise-user-subsidy/UserSubsidy';
 
 export const LOADING_MESSAGE = 'Your enterprise license is being activated! You will be automatically redirected to your organization\'s learner portal shortly.';
 
-function LicenseActivation() {
+const LicenseActivation = () => {
   const { enterpriseConfig } = useContext(AppContext);
   const renderContactHelpText = useRenderContactHelpText(enterpriseConfig);
   const location = useLocation();
@@ -66,6 +66,6 @@ function LicenseActivation() {
       </Container>
     </>
   );
-}
+};
 
 export default LicenseActivation;
diff --git a/src/components/license-activation/LicenseActivationErrorAlert.jsx b/src/components/license-activation/LicenseActivationErrorAlert.jsx
index 93f9cf1118..264a821cb4 100644
--- a/src/components/license-activation/LicenseActivationErrorAlert.jsx
+++ b/src/components/license-activation/LicenseActivationErrorAlert.jsx
@@ -4,20 +4,18 @@ import PropTypes from 'prop-types';
 import { Helmet } from 'react-helmet';
 import { Alert, Container } from '@edx/paragon';
 
-function LicenseActivationErrorAlert({ title, contactHelpText }) {
-  return (
-    <>
-      <Helmet title={title} />
-      <Container size="lg" className="mt-3">
-        <Alert variant="danger">
-          We were unable to activate a license for this user. Please double-check that you have an
-          assigned license and verify the email to which it was sent. If you run into further issues,
-          please {contactHelpText} for assistance.
-        </Alert>
-      </Container>
-    </>
-  );
-}
+const LicenseActivationErrorAlert = ({ title, contactHelpText }) => (
+  <>
+    <Helmet title={title} />
+    <Container size="lg" className="mt-3">
+      <Alert variant="danger">
+        We were unable to activate a license for this user. Please double-check that you have an
+        assigned license and verify the email to which it was sent. If you run into further issues,
+        please {contactHelpText} for assistance.
+      </Alert>
+    </Container>
+  </>
+);
 
 LicenseActivationErrorAlert.propTypes = {
   title: PropTypes.string.isRequired,
diff --git a/src/components/license-activation/LicenseActivationPage.jsx b/src/components/license-activation/LicenseActivationPage.jsx
index 2499d86ad9..80b5391598 100644
--- a/src/components/license-activation/LicenseActivationPage.jsx
+++ b/src/components/license-activation/LicenseActivationPage.jsx
@@ -14,7 +14,7 @@ import { useRenderContactHelpText } from '../../utils/hooks';
 
 export const LOADING_MESSAGE = 'Your enterprise license is being activated! You will be automatically redirected to your organization\'s learner portal shortly.';
 
-function LicenseActivationPage() {
+const LicenseActivationPage = () => {
   const user = getAuthenticatedUser();
   const { enterpriseConfig } = useContext(AppContext);
   const { subscriptionLicense } = useContext(UserSubsidyContext);
@@ -55,6 +55,6 @@ function LicenseActivationPage() {
   }
 
   return <LicenseActivation />;
-}
+};
 
 export default LicenseActivationPage;
diff --git a/src/components/license-activation/tests/LicenseActivation.test.jsx b/src/components/license-activation/tests/LicenseActivation.test.jsx
index 6b1800df40..fb79049b72 100644
--- a/src/components/license-activation/tests/LicenseActivation.test.jsx
+++ b/src/components/license-activation/tests/LicenseActivation.test.jsx
@@ -21,11 +21,11 @@ const TEST_ENTERPRISE_SLUG = 'test-enterprise-slug';
 const TEST_ACTIVATION_KEY = '00000000-0000-0000-0000-000000000000';
 const TEST_ROUTE = `/${TEST_ENTERPRISE_SLUG}/licenses/${TEST_ACTIVATION_KEY}/activate`;
 
-function LicenseActivationWithAppContext({
+const LicenseActivationWithAppContext = ({
   initialUserSubsidyState = {
     activateUserLicense: jest.fn(() => true),
   },
-}) {
+}) => {
   const contextValue = useMemo(() => ({
     enterpriseConfig: {
       uuid: TEST_ENTERPRISE_UUID,
@@ -42,7 +42,7 @@ function LicenseActivationWithAppContext({
       </UserSubsidyContext.Provider>
     </AppContext.Provider>
   );
-}
+};
 
 describe('LicenseActivation', () => {
   beforeEach(() => jest.clearAllMocks());
diff --git a/src/components/license-activation/tests/LicenseActivationPage.test.jsx b/src/components/license-activation/tests/LicenseActivationPage.test.jsx
index 496983d980..448d9a1b92 100644
--- a/src/components/license-activation/tests/LicenseActivationPage.test.jsx
+++ b/src/components/license-activation/tests/LicenseActivationPage.test.jsx
@@ -35,7 +35,7 @@ const TEST_ENTERPRISE_SLUG = 'test-enterprise-slug';
 const TEST_ACTIVATION_KEY = '00000000-0000-0000-0000-000000000000';
 const TEST_ROUTE = `/${TEST_ENTERPRISE_SLUG}/licenses/${TEST_ACTIVATION_KEY}/activate`;
 
-function LicenseActivationPageWithContext({
+const LicenseActivationPageWithContext = ({
   initialUserSubsidyState = {
     subscriptionLicense: undefined,
     couponCodes: {
@@ -43,7 +43,7 @@ function LicenseActivationPageWithContext({
       couponCodesCount: 0,
     },
   },
-}) {
+}) => {
   const contextValue = useMemo(() => ({
     enterpriseConfig: {
       uuid: TEST_ENTERPRISE_UUID,
@@ -60,7 +60,7 @@ function LicenseActivationPageWithContext({
       </UserSubsidyContext.Provider>
     </AppContext.Provider>
   );
-}
+};
 
 describe('<LicenseActivationPageWithAppContext />', () => {
   it.each(
diff --git a/src/components/loading-spinner/LoadingSpinner.jsx b/src/components/loading-spinner/LoadingSpinner.jsx
index ba80877dc8..58954d52c2 100644
--- a/src/components/loading-spinner/LoadingSpinner.jsx
+++ b/src/components/loading-spinner/LoadingSpinner.jsx
@@ -3,15 +3,13 @@ import PropTypes from 'prop-types';
 
 import './styles/LoadingSpinner.scss';
 
-function LoadingSpinner({ screenReaderText }) {
-  return (
-    <div className="loading-spinner d-flex justify-content-center align-items-center">
-      <div className="spinner-border text-primary" role="status">
-        <span className="sr-only">{screenReaderText}</span>
-      </div>
+const LoadingSpinner = ({ screenReaderText }) => (
+  <div className="loading-spinner d-flex justify-content-center align-items-center">
+    <div className="spinner-border text-primary" role="status">
+      <span className="sr-only">{screenReaderText}</span>
     </div>
-  );
-}
+  </div>
+);
 
 LoadingSpinner.propTypes = {
   screenReaderText: PropTypes.string.isRequired,
diff --git a/src/components/pathway-progress/PathwayNode.jsx b/src/components/pathway-progress/PathwayNode.jsx
index b94546fa56..c94d616b94 100644
--- a/src/components/pathway-progress/PathwayNode.jsx
+++ b/src/components/pathway-progress/PathwayNode.jsx
@@ -6,7 +6,7 @@ import capitalize from 'lodash.capitalize';
 
 import { CONTENT_TYPES, IN_PROGRESS } from './constants';
 
-function PathwayNode({ node }) {
+const PathwayNode = ({ node }) => {
   const { enterpriseSlug } = useParams();
 
   const linkToNode = useMemo(
@@ -53,7 +53,7 @@ function PathwayNode({ node }) {
       </div>
     </div>
   );
-}
+};
 
 export default PathwayNode;
 
diff --git a/src/components/pathway-progress/PathwayProgressCard.jsx b/src/components/pathway-progress/PathwayProgressCard.jsx
index c60d1ddd97..9793eb6f5b 100644
--- a/src/components/pathway-progress/PathwayProgressCard.jsx
+++ b/src/components/pathway-progress/PathwayProgressCard.jsx
@@ -7,7 +7,7 @@ import { AppContext } from '@edx/frontend-platform/react';
 import { getProgressFromSteps } from './data/utils';
 import { ProgressCategoryBubbles } from '../progress-category-bubbles';
 
-function PathwayProgressCard({ pathway: { learnerPathwayProgress } }) {
+const PathwayProgressCard = ({ pathway: { learnerPathwayProgress } }) => {
   const progress = getProgressFromSteps(learnerPathwayProgress.steps);
   const history = useHistory();
   const { enterpriseConfig: { slug } } = useContext(AppContext);
@@ -44,7 +44,7 @@ function PathwayProgressCard({ pathway: { learnerPathwayProgress } }) {
       </Card.Section>
     </Card>
   );
-}
+};
 
 PathwayProgressCard.propTypes = {
   pathway: PropTypes.shape({
diff --git a/src/components/pathway-progress/PathwayProgressContextProvider.jsx b/src/components/pathway-progress/PathwayProgressContextProvider.jsx
index c326125eef..8a915dda49 100644
--- a/src/components/pathway-progress/PathwayProgressContextProvider.jsx
+++ b/src/components/pathway-progress/PathwayProgressContextProvider.jsx
@@ -3,13 +3,11 @@ import PropTypes from 'prop-types';
 
 export const PathwayProgressContext = createContext();
 
-export function PathwayProgressContextProvider({ children, initialState }) {
-  return (
-    <PathwayProgressContext.Provider value={initialState}>
-      {children}
-    </PathwayProgressContext.Provider>
-  );
-}
+export const PathwayProgressContextProvider = ({ children, initialState }) => (
+  <PathwayProgressContext.Provider value={initialState}>
+    {children}
+  </PathwayProgressContext.Provider>
+);
 
 PathwayProgressContextProvider.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/pathway-progress/PathwayProgressHeader.jsx b/src/components/pathway-progress/PathwayProgressHeader.jsx
index 2d60b01ef2..d3a8b1dcb0 100644
--- a/src/components/pathway-progress/PathwayProgressHeader.jsx
+++ b/src/components/pathway-progress/PathwayProgressHeader.jsx
@@ -5,7 +5,7 @@ import { useParams } from 'react-router-dom';
 import { PathwayProgressContext } from './PathwayProgressContextProvider';
 import SubscriptionStatusCard from './SubscriptionStatusCard';
 
-function PathwayProgressHeader() {
+const PathwayProgressHeader = () => {
   const { learnerPathwayProgress } = useContext(PathwayProgressContext);
   const { enterpriseSlug } = useParams();
   const links = [
@@ -40,6 +40,6 @@ function PathwayProgressHeader() {
       </div>
     </header>
   );
-}
+};
 
 export default PathwayProgressHeader;
diff --git a/src/components/pathway-progress/PathwayProgressListingPage.jsx b/src/components/pathway-progress/PathwayProgressListingPage.jsx
index 1d5defac32..4bb3ca8c02 100644
--- a/src/components/pathway-progress/PathwayProgressListingPage.jsx
+++ b/src/components/pathway-progress/PathwayProgressListingPage.jsx
@@ -20,7 +20,7 @@ import PathwayProgressCard from './PathwayProgressCard';
 
 import { CONTENT_TYPE_PATHWAY } from '../search/constants';
 
-function PathwayProgressListingPage() {
+const PathwayProgressListingPage = () => {
   const { enterpriseConfig } = useContext(AppContext);
 
   const [pathwayProgressData, fetchError] = useInProgressPathwaysData(enterpriseConfig.uuid);
@@ -38,28 +38,26 @@ function PathwayProgressListingPage() {
   }
 
   return (
-    <>
-      <Container size="lg" className="py-5 w-100">
-        <Row>
-          {pathwayProgressData?.length > 0 ? (
-            pathwayProgressData.map((pathway) => (
-              <PathwayProgressCard
-                pathway={pathway}
-                key={pathway.learnerPathwayProgress.uuid}
-              />
-            ))
-          ) : (
-            <div className="no-content-message">
-              <h2>{NO_PATHWAYS_ERROR_MESSAGE}</h2>
-              <Link to={`/${enterpriseConfig.slug}/search?content_type=${CONTENT_TYPE_PATHWAY}`}>
-                <Button variant="primary" iconBefore={Search} className="btn-brand-primary mt-2">Explore pathways</Button>
-              </Link>
-            </div>
-          )}
-        </Row>
-      </Container>
-    </>
+    <Container size="lg" className="py-5 w-100">
+      <Row>
+        {pathwayProgressData?.length > 0 ? (
+          pathwayProgressData.map((pathway) => (
+            <PathwayProgressCard
+              pathway={pathway}
+              key={pathway.learnerPathwayProgress.uuid}
+            />
+          ))
+        ) : (
+          <div className="no-content-message">
+            <h2>{NO_PATHWAYS_ERROR_MESSAGE}</h2>
+            <Link to={`/${enterpriseConfig.slug}/search?content_type=${CONTENT_TYPE_PATHWAY}`}>
+              <Button variant="primary" iconBefore={Search} className="btn-brand-primary mt-2">Explore pathways</Button>
+            </Link>
+          </div>
+        )}
+      </Row>
+    </Container>
   );
-}
+};
 
 export default PathwayProgressListingPage;
diff --git a/src/components/pathway-progress/PathwayProgressPage.jsx b/src/components/pathway-progress/PathwayProgressPage.jsx
index 629a5ff2ae..24ef8812dc 100644
--- a/src/components/pathway-progress/PathwayProgressPage.jsx
+++ b/src/components/pathway-progress/PathwayProgressPage.jsx
@@ -15,7 +15,7 @@ import PathwayProgressHeader from './PathwayProgressHeader';
 import PathwayRequirements from './PathwayRequirements';
 import './styles/index.scss';
 
-export default function PathwayProgressPage() {
+const PathwayProgressPage = () => {
   const { pathwayUUID } = useParams();
   const [pathwayProgressDetails, fetchError] = useLearnerPathwayProgressData(pathwayUUID);
 
@@ -55,4 +55,6 @@ export default function PathwayProgressPage() {
       </CourseEnrollmentsContextProvider>
     </>
   );
-}
+};
+
+export default PathwayProgressPage;
diff --git a/src/components/pathway-progress/PathwayRequirements.jsx b/src/components/pathway-progress/PathwayRequirements.jsx
index 2e3e42c1b0..c67efaef87 100644
--- a/src/components/pathway-progress/PathwayRequirements.jsx
+++ b/src/components/pathway-progress/PathwayRequirements.jsx
@@ -2,7 +2,7 @@ import React, { useContext } from 'react';
 import { PathwayProgressContext } from './PathwayProgressContextProvider';
 import PathwayStep from './PathwayStep';
 
-export default function PathwayRequirements() {
+const PathwayRequirements = () => {
   const { learnerPathwayProgress } = useContext(PathwayProgressContext);
   const getStepNodes = (step) => [...step.courses, ...step.programs];
 
@@ -21,4 +21,6 @@ export default function PathwayRequirements() {
       </section>
     </div>
   );
-}
+};
+
+export default PathwayRequirements;
diff --git a/src/components/pathway-progress/PathwayStep.jsx b/src/components/pathway-progress/PathwayStep.jsx
index eb38e78016..71c382a259 100644
--- a/src/components/pathway-progress/PathwayStep.jsx
+++ b/src/components/pathway-progress/PathwayStep.jsx
@@ -7,7 +7,7 @@ import { faChevronDown, faChevronUp } from '@fortawesome/free-solid-svg-icons';
 
 import PathwayNode from './PathwayNode';
 
-function PathwayStep({ index, minRequirements, nodes }) {
+const PathwayStep = ({ index, minRequirements, nodes }) => {
   const [isOpen, setIsOpen] = useState(true);
 
   return (
@@ -25,7 +25,7 @@ function PathwayStep({ index, minRequirements, nodes }) {
       }
     </Collapsible>
   );
-}
+};
 
 export default PathwayStep;
 
diff --git a/src/components/pathway-progress/SubscriptionStatusCard.jsx b/src/components/pathway-progress/SubscriptionStatusCard.jsx
index 73e4628dbc..b4a612a491 100644
--- a/src/components/pathway-progress/SubscriptionStatusCard.jsx
+++ b/src/components/pathway-progress/SubscriptionStatusCard.jsx
@@ -5,7 +5,7 @@ import { UserSubsidyContext } from '../enterprise-user-subsidy';
 import { LICENSE_STATUS } from '../enterprise-user-subsidy/data/constants';
 import { SubsidyRequestsContext, SUBSIDY_TYPE } from '../enterprise-subsidy-requests';
 
-function SubscriptionStatusCard() {
+const SubscriptionStatusCard = () => {
   const {
     subscriptionPlan,
     subscriptionLicense: userSubscriptionLicense,
@@ -37,6 +37,6 @@ function SubscriptionStatusCard() {
       </Card>
     </div>
   );
-}
+};
 
 export default SubscriptionStatusCard;
diff --git a/src/components/pathway-progress/tests/PathwayProgressListingCard.test.jsx b/src/components/pathway-progress/tests/PathwayProgressListingCard.test.jsx
index 813010dfd2..5477ff5359 100644
--- a/src/components/pathway-progress/tests/PathwayProgressListingCard.test.jsx
+++ b/src/components/pathway-progress/tests/PathwayProgressListingCard.test.jsx
@@ -21,15 +21,13 @@ jest.mock('react-router-dom', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-function PathwayProgressListingCardWithContext({ initialAppState, initialUserSubsidyState, pathwayData }) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <PathwayProgressCard pathway={pathwayData} />
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+const PathwayProgressListingCardWithContext = ({ initialAppState, initialUserSubsidyState, pathwayData }) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <PathwayProgressCard pathway={pathwayData} />
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 
 const appState = {
   enterpriseConfig: {
diff --git a/src/components/pathway-progress/tests/PathwayProgressListingPage.test.jsx b/src/components/pathway-progress/tests/PathwayProgressListingPage.test.jsx
index 4f31545e92..e2de15939d 100644
--- a/src/components/pathway-progress/tests/PathwayProgressListingPage.test.jsx
+++ b/src/components/pathway-progress/tests/PathwayProgressListingPage.test.jsx
@@ -26,20 +26,18 @@ jest.mock('../data/hooks', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-function PathwayProgressListingWithContext({
+const PathwayProgressListingWithContext = ({
   initialAppState = {},
   initialUserSubsidyState = {},
-}) {
-  return (
-    <IntlProvider locale="en">
-      <AppContext.Provider value={initialAppState}>
-        <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-          <PathwayProgressListingPage />
-        </UserSubsidyContext.Provider>
-      </AppContext.Provider>
-    </IntlProvider>
-  );
-}
+}) => (
+  <IntlProvider locale="en">
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <PathwayProgressListingPage />
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  </IntlProvider>
+);
 
 describe('<PathwayProgressListingPage />', () => {
   const initialAppState = {
diff --git a/src/components/pathway/PathwayModal.jsx b/src/components/pathway/PathwayModal.jsx
index 40bc5d772c..f4cd473e88 100644
--- a/src/components/pathway/PathwayModal.jsx
+++ b/src/components/pathway/PathwayModal.jsx
@@ -54,7 +54,7 @@ const renderStepNodes = (step, slug) => [].concat(step.courses, step.programs).m
   );
 });
 
-function PathwayModal({ learnerPathwayUuid, isOpen, onClose }) {
+const PathwayModal = ({ learnerPathwayUuid, isOpen, onClose }) => {
   const { enterpriseConfig: { slug } } = useContext(AppContext);
   const pathwayUuid = isOpen ? learnerPathwayUuid : null;
   const [pathway, isLoading] = useLearnerPathwayData({ learnerPathwayUuid: pathwayUuid });
@@ -167,11 +167,9 @@ function PathwayModal({ learnerPathwayUuid, isOpen, onClose }) {
 
     </MarketingModal>
   );
-}
+};
 
-function SkeletonPathwayModal(props) {
-  return <PathwayModal {...props} isLoading />;
-}
+const SkeletonPathwayModal = (props) => <PathwayModal {...props} isLoading />;
 
 PathwayModal.propTypes = {
   learnerPathwayUuid: PropTypes.string.isRequired,
diff --git a/src/components/pathway/SearchPathwayCard.jsx b/src/components/pathway/SearchPathwayCard.jsx
index 7231956cd4..f5efed2355 100644
--- a/src/components/pathway/SearchPathwayCard.jsx
+++ b/src/components/pathway/SearchPathwayCard.jsx
@@ -37,7 +37,7 @@ const filterSkillNames = skillNames => {
   return skillsToReturn;
 };
 
-function SearchPathwayCard({ hit, isLoading, isSkillQuizResult }) {
+const SearchPathwayCard = ({ hit, isLoading, isSkillQuizResult }) => {
   const { enterpriseConfig: { uuid: enterpriseCustomerUUID, slug } } = useContext(AppContext);
 
   const pathway = useMemo(() => {
@@ -158,11 +158,9 @@ function SearchPathwayCard({ hit, isLoading, isSkillQuizResult }) {
       </Link>
     </div>
   );
-}
+};
 
-function SkeletonPathwayCard(props) {
-  return <SearchPathwayCard {...props} isLoading />;
-}
+const SkeletonPathwayCard = (props) => <SearchPathwayCard {...props} isLoading />;
 
 SearchPathwayCard.propTypes = {
   hit: PropTypes.shape({
diff --git a/src/components/pathway/tests/PathwayModal.test.jsx b/src/components/pathway/tests/PathwayModal.test.jsx
index 1e8eec394c..b77814e096 100644
--- a/src/components/pathway/tests/PathwayModal.test.jsx
+++ b/src/components/pathway/tests/PathwayModal.test.jsx
@@ -26,7 +26,7 @@ jest.mock('react-loading-skeleton', () => ({
   default: (props = {}) => <div data-testid={props['data-testid']} />,
 }));
 
-function PathwayModalWithAppContext(props) {
+const PathwayModalWithAppContext = (props) => {
   const contextValue = useMemo(() => ({
     enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG },
   }), []);
@@ -35,7 +35,7 @@ function PathwayModalWithAppContext(props) {
       <PathwayModal {...props} />
     </AppContext.Provider>
   );
-}
+};
 
 const defaultProps = {
   learnerPathwayUuid: TEST_PATHWAY_DATA.uuid,
diff --git a/src/components/pathway/tests/SearchPathwayCard.test.jsx b/src/components/pathway/tests/SearchPathwayCard.test.jsx
index d87321c377..ce77a4fd89 100644
--- a/src/components/pathway/tests/SearchPathwayCard.test.jsx
+++ b/src/components/pathway/tests/SearchPathwayCard.test.jsx
@@ -28,7 +28,7 @@ jest.mock('@edx/frontend-enterprise-utils', () => {
   });
 });
 
-function SearchPathwayCardWithAppContext(props) {
+const SearchPathwayCardWithAppContext = (props) => {
   const contextValue = useMemo(() => ({
     enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG, uuid: TEST_ENTERPRISE_UUID },
   }), []);
@@ -37,7 +37,7 @@ function SearchPathwayCardWithAppContext(props) {
       <SearchPathwayCard {...props} />
     </AppContext.Provider>
   );
-}
+};
 
 const TEST_PATHWAY_UUID = 'test-pathway-uuid';
 const TEST_TITLE = 'Test Title';
diff --git a/src/components/preview-expand/PreviewExpand.jsx b/src/components/preview-expand/PreviewExpand.jsx
index 34baa73d96..6962a85ed7 100644
--- a/src/components/preview-expand/PreviewExpand.jsx
+++ b/src/components/preview-expand/PreviewExpand.jsx
@@ -5,12 +5,12 @@ import { Button } from '@edx/paragon';
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { faMinusCircle, faPlusCircle } from '@fortawesome/free-solid-svg-icons';
 
-export default function PreviewExpand({
+const PreviewExpand = ({
   className,
   children,
   cta,
   heading,
-}) {
+}) => {
   const [isExpanded, setIsExpanded] = useState(false);
   return (
     <div className={classNames('preview-expand-component', className)}>
@@ -32,7 +32,7 @@ export default function PreviewExpand({
       </Button>
     </div>
   );
-}
+};
 
 PreviewExpand.propTypes = {
   children: PropTypes.element.isRequired,
@@ -48,3 +48,5 @@ PreviewExpand.propTypes = {
 PreviewExpand.defaultProps = {
   className: null,
 };
+
+export default PreviewExpand;
diff --git a/src/components/program-progress/CouponCodesWarningModal.jsx b/src/components/program-progress/CouponCodesWarningModal.jsx
index 5e8fdf9b37..d50102de98 100644
--- a/src/components/program-progress/CouponCodesWarningModal.jsx
+++ b/src/components/program-progress/CouponCodesWarningModal.jsx
@@ -6,7 +6,7 @@ import { AppContext } from '@edx/frontend-platform/react';
 import PropTypes from 'prop-types';
 import { COUPON_CODE_EXPIRING_MODAL_TITLE } from './data/constants';
 
-function CouponCodesWarningModal({ isCouponCodeWarningModalOpen, onCouponCodeWarningModalClose, couponCodesCount }) {
+const CouponCodesWarningModal = ({ isCouponCodeWarningModalOpen, onCouponCodeWarningModalClose, couponCodesCount }) => {
   const {
     enterpriseConfig: { contactEmail },
   } = useContext(AppContext);
@@ -55,7 +55,7 @@ function CouponCodesWarningModal({ isCouponCodeWarningModalOpen, onCouponCodeWar
       {renderExpiredBody()}
     </StandardModal>
   );
-}
+};
 CouponCodesWarningModal.propTypes = {
   isCouponCodeWarningModalOpen: PropTypes.bool.isRequired,
   onCouponCodeWarningModalClose: PropTypes.func.isRequired,
diff --git a/src/components/program-progress/ProgramListingCard.jsx b/src/components/program-progress/ProgramListingCard.jsx
index 3f43473147..12e87d56e5 100644
--- a/src/components/program-progress/ProgramListingCard.jsx
+++ b/src/components/program-progress/ProgramListingCard.jsx
@@ -11,7 +11,7 @@ import Truncate from 'react-truncate';
 import { getProgramIcon } from '../course/data/utils';
 import { ProgressCategoryBubbles } from '../progress-category-bubbles';
 
-function ProgramListingCard({ program }) {
+const ProgramListingCard = ({ program }) => {
   const { enterpriseConfig } = useContext(AppContext);
   const [windowWidth, setWindowWidth] = useState(window.innerWidth);
   const history = useHistory();
@@ -104,7 +104,7 @@ function ProgramListingCard({ program }) {
       </Card.Section>
     </Card>
   );
-}
+};
 
 ProgramListingCard.propTypes = {
   program: PropTypes.shape({
diff --git a/src/components/program-progress/ProgramListingPage.jsx b/src/components/program-progress/ProgramListingPage.jsx
index 01df2e08c1..8240909dcf 100644
--- a/src/components/program-progress/ProgramListingPage.jsx
+++ b/src/components/program-progress/ProgramListingPage.jsx
@@ -20,7 +20,7 @@ import ProgramListingCard from './ProgramListingCard';
 
 import { CONTENT_TYPE_PROGRAM } from '../search/constants';
 
-function ProgramListingPage() {
+const ProgramListingPage = () => {
   const { enterpriseConfig } = useContext(AppContext);
 
   const [learnerProgramsData, fetchError] = useLearnerProgramsListData(enterpriseConfig.uuid);
@@ -38,23 +38,21 @@ function ProgramListingPage() {
   }
 
   return (
-    <>
-      <Container size="lg" className="py-5 w-100">
-        <Row>
-          {learnerProgramsData.length > 0 ? (
-            learnerProgramsData.map((program) => <ProgramListingCard program={program} key={program.title} />)
-          ) : (
-            <div className="no-content-message">
-              <h2>{NO_PROGRAMS_ERROR_MESSAGE}</h2>
-              <Link to={`/${enterpriseConfig.slug}/search?content_type=${CONTENT_TYPE_PROGRAM}`}>
-                <Button variant="primary" iconBefore={Search} className="btn-brand-primary mt-2">Explore programs</Button>
-              </Link>
-            </div>
-          )}
-        </Row>
-      </Container>
-    </>
+    <Container size="lg" className="py-5 w-100">
+      <Row>
+        {learnerProgramsData.length > 0 ? (
+          learnerProgramsData.map((program) => <ProgramListingCard program={program} key={program.title} />)
+        ) : (
+          <div className="no-content-message">
+            <h2>{NO_PROGRAMS_ERROR_MESSAGE}</h2>
+            <Link to={`/${enterpriseConfig.slug}/search?content_type=${CONTENT_TYPE_PROGRAM}`}>
+              <Button variant="primary" iconBefore={Search} className="btn-brand-primary mt-2">Explore programs</Button>
+            </Link>
+          </div>
+        )}
+      </Row>
+    </Container>
   );
-}
+};
 
 export default ProgramListingPage;
diff --git a/src/components/program-progress/ProgramPathwayOpportunity.jsx b/src/components/program-progress/ProgramPathwayOpportunity.jsx
index 14a3946ea4..5d8544a4a3 100644
--- a/src/components/program-progress/ProgramPathwayOpportunity.jsx
+++ b/src/components/program-progress/ProgramPathwayOpportunity.jsx
@@ -2,35 +2,33 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import { Button } from '@edx/paragon';
 
-function ProgramPathwayOpportunity({ pathways, title, pathwayClass }) {
-  return (
-    <div className={pathwayClass}>
-      <h2 className="divider-heading"> { title } </h2>
-      {pathways.map((pathway) => (
-        <div className="pathway-wrapper" key={pathway.uuid}>
-          <div className="pathway-info">
-            <h2 className="pathway-heading"> { pathway.name } </h2>
-            { pathway.description && <p> {pathway.description}</p> }
-            { pathway.destinationUrl && (
-              <div className="sidebar-button-wrapper">
-                <a href={pathway.destinationUrl} className="pathway-link">
-                  <Button
-                    variant="outline-primary"
-                    className="btn pathway-button sidebar-button"
-                    data-pathway-uuid={pathway.uuid}
-                    data-pathway-name={pathway.name}
-                  >
-                    Learn More
-                  </Button>
-                </a>
-              </div>
-            )}
-          </div>
+const ProgramPathwayOpportunity = ({ pathways, title, pathwayClass }) => (
+  <div className={pathwayClass}>
+    <h2 className="divider-heading"> { title } </h2>
+    {pathways.map((pathway) => (
+      <div className="pathway-wrapper" key={pathway.uuid}>
+        <div className="pathway-info">
+          <h2 className="pathway-heading"> { pathway.name } </h2>
+          { pathway.description && <p> {pathway.description}</p> }
+          { pathway.destinationUrl && (
+            <div className="sidebar-button-wrapper">
+              <a href={pathway.destinationUrl} className="pathway-link">
+                <Button
+                  variant="outline-primary"
+                  className="btn pathway-button sidebar-button"
+                  data-pathway-uuid={pathway.uuid}
+                  data-pathway-name={pathway.name}
+                >
+                  Learn More
+                </Button>
+              </a>
+            </div>
+          )}
         </div>
-      ))}
-    </div>
-  );
-}
+      </div>
+    ))}
+  </div>
+);
 
 export default ProgramPathwayOpportunity;
 
diff --git a/src/components/program-progress/ProgramProgress.jsx b/src/components/program-progress/ProgramProgress.jsx
index 94d8ce7859..69f3112829 100644
--- a/src/components/program-progress/ProgramProgress.jsx
+++ b/src/components/program-progress/ProgramProgress.jsx
@@ -3,10 +3,10 @@ import React from 'react';
 import ProgramProgressPage from './ProgramProgressPage';
 import AuthenticatedUserSubsidyPage from '../app/AuthenticatedUserSubsidyPage';
 
-export default function ProgramProgress() {
-  return (
-    <AuthenticatedUserSubsidyPage>
-      <ProgramProgressPage />
-    </AuthenticatedUserSubsidyPage>
-  );
-}
+const ProgramProgress = () => (
+  <AuthenticatedUserSubsidyPage>
+    <ProgramProgressPage />
+  </AuthenticatedUserSubsidyPage>
+);
+
+export default ProgramProgress;
diff --git a/src/components/program-progress/ProgramProgressCircle.jsx b/src/components/program-progress/ProgramProgressCircle.jsx
index 600f04f47b..905a648844 100644
--- a/src/components/program-progress/ProgramProgressCircle.jsx
+++ b/src/components/program-progress/ProgramProgressCircle.jsx
@@ -5,9 +5,9 @@ import {
   X_AXIS, Y_AXIS, CIRCLE_RADIUS, CIRCLE_DEGREES, STROKE_WIDTH, CIRCLE_LABEL,
 } from './data/constants';
 
-function CircleSegment({
+const CircleSegment = ({
   total, index, classList,
-}) {
+}) => {
   const segmentDash = 2 * Math.PI * CIRCLE_RADIUS;
   const degreeInc = 360 / total;
   // Remove strokeWidth to show a gap between the segments
@@ -33,9 +33,9 @@ function CircleSegment({
       strokeDashoffset={offset}
     />
   );
-}
+};
 
-function ProgramProgressCircle() {
+const ProgramProgressCircle = () => {
   const { programData, courseData } = useContext(ProgramProgressContext);
   const { inProgress, completed, notStarted } = courseData;
   const totalCourses = inProgress.length + completed.length + notStarted.length;
@@ -63,7 +63,7 @@ function ProgramProgressCircle() {
       </div>
     </>
   );
-}
+};
 
 export default ProgramProgressCircle;
 
diff --git a/src/components/program-progress/ProgramProgressContextProvider.jsx b/src/components/program-progress/ProgramProgressContextProvider.jsx
index cecb1bd9d1..3b82206bb4 100644
--- a/src/components/program-progress/ProgramProgressContextProvider.jsx
+++ b/src/components/program-progress/ProgramProgressContextProvider.jsx
@@ -3,13 +3,11 @@ import PropTypes from 'prop-types';
 
 export const ProgramProgressContext = createContext();
 
-export function ProgramProgressContextProvider({ children, initialState }) {
-  return (
-    <ProgramProgressContext.Provider value={initialState}>
-      {children}
-    </ProgramProgressContext.Provider>
-  );
-}
+export const ProgramProgressContextProvider = ({ children, initialState }) => (
+  <ProgramProgressContext.Provider value={initialState}>
+    {children}
+  </ProgramProgressContext.Provider>
+);
 
 ProgramProgressContextProvider.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/program-progress/ProgramProgressCourses.jsx b/src/components/program-progress/ProgramProgressCourses.jsx
index 5d47ffd8c8..af97c9e7ae 100644
--- a/src/components/program-progress/ProgramProgressCourses.jsx
+++ b/src/components/program-progress/ProgramProgressCourses.jsx
@@ -18,7 +18,7 @@ import {
 } from './data/utils';
 import { NotCurrentlyAvailable } from './data/constants';
 
-function ProgramProgressCourses({ courseData }) {
+const ProgramProgressCourses = ({ courseData }) => {
   const { enterpriseConfig } = useContext(AppContext);
   const {
     subscriptionPlan,
@@ -244,7 +244,7 @@ function ProgramProgressCourses({ courseData }) {
     </div>
 
   );
-}
+};
 ProgramProgressCourses.propTypes = {
   courseData: PropTypes.shape([]).isRequired,
 };
diff --git a/src/components/program-progress/ProgramProgressHeader.jsx b/src/components/program-progress/ProgramProgressHeader.jsx
index ec95df34cc..8d56b33d07 100644
--- a/src/components/program-progress/ProgramProgressHeader.jsx
+++ b/src/components/program-progress/ProgramProgressHeader.jsx
@@ -2,7 +2,7 @@ import React, { useContext } from 'react';
 import { ProgramProgressContext } from './ProgramProgressContextProvider';
 import { getProgramIcon } from './data/utils';
 
-function ProgramProgressHeader() {
+const ProgramProgressHeader = () => {
   const { programData } = useContext(ProgramProgressContext);
   const programIcon = getProgramIcon(programData.type);
 
@@ -36,6 +36,6 @@ function ProgramProgressHeader() {
       </div>
     </div>
   );
-}
+};
 
 export default ProgramProgressHeader;
diff --git a/src/components/program-progress/ProgramProgressPage.jsx b/src/components/program-progress/ProgramProgressPage.jsx
index 56c21bfc6f..6c41abbc0f 100644
--- a/src/components/program-progress/ProgramProgressPage.jsx
+++ b/src/components/program-progress/ProgramProgressPage.jsx
@@ -23,7 +23,7 @@ import {
 
 import SubsidiesSummary from '../dashboard/sidebar/SubsidiesSummary';
 
-function ProgramProgressPage() {
+const ProgramProgressPage = () => {
   const { programUUID } = useParams();
   const [program, fetchError] = useLearnerProgramProgressData(programUUID);
 
@@ -118,6 +118,6 @@ function ProgramProgressPage() {
       </CourseEnrollmentsContextProvider>
     </>
   );
-}
+};
 
 export default ProgramProgressPage;
diff --git a/src/components/program-progress/ProgramProgressRedirect.jsx b/src/components/program-progress/ProgramProgressRedirect.jsx
index 3db2ed71b3..2673263ff7 100644
--- a/src/components/program-progress/ProgramProgressRedirect.jsx
+++ b/src/components/program-progress/ProgramProgressRedirect.jsx
@@ -2,11 +2,11 @@ import React, { useContext } from 'react';
 import { Redirect, useParams } from 'react-router-dom';
 import { AppContext } from '@edx/frontend-platform/react';
 
-function ProgramProgressRedirect() {
+const ProgramProgressRedirect = () => {
   const { enterpriseConfig } = useContext(AppContext);
   const { programUUID } = useParams();
 
   return <Redirect to={`/${enterpriseConfig.slug}/program/${programUUID}/progress`} />;
-}
+};
 
 export default ProgramProgressRedirect;
diff --git a/src/components/program-progress/ProgramProgressSidebar.jsx b/src/components/program-progress/ProgramProgressSidebar.jsx
index 3db1770ab3..bbc613acba 100644
--- a/src/components/program-progress/ProgramProgressSidebar.jsx
+++ b/src/components/program-progress/ProgramProgressSidebar.jsx
@@ -7,7 +7,7 @@ import ProgramPathwayOpportunity from './ProgramPathwayOpportunity';
 import { getProgramCertImage } from './data/utils';
 import progSampleCertImage from './images/sample-cert.png';
 
-function ProgramProgressSideBar() {
+const ProgramProgressSideBar = () => {
   const {
     programData, industryPathways, creditPathways, certificateData, urls: { programRecordUrl },
   } = useContext(ProgramProgressContext);
@@ -99,6 +99,6 @@ function ProgramProgressSideBar() {
       )}
     </div>
   );
-}
+};
 
 export default ProgramProgressSideBar;
diff --git a/src/components/program-progress/SubscriptionExpiringWarningModal.jsx b/src/components/program-progress/SubscriptionExpiringWarningModal.jsx
index c993ebbfd6..a4f2c79597 100644
--- a/src/components/program-progress/SubscriptionExpiringWarningModal.jsx
+++ b/src/components/program-progress/SubscriptionExpiringWarningModal.jsx
@@ -9,10 +9,10 @@ import PropTypes from 'prop-types';
 import { UserSubsidyContext } from '../enterprise-user-subsidy';
 import { SUBSCRIPTION_EXPIRING_MODAL_TITLE } from './data/constants';
 
-function SubscriptionExpirationWarningModal({
+const SubscriptionExpirationWarningModal = ({
   isSubscriptionExpiringWarningModalOpen,
   onSubscriptionExpiringWarningModalClose,
-}) {
+}) => {
   const {
     enterpriseConfig: { name, contactEmail },
   } = useContext(AppContext);
@@ -63,7 +63,7 @@ function SubscriptionExpirationWarningModal({
       {renderExpiredBody()}
     </StandardModal>
   );
-}
+};
 SubscriptionExpirationWarningModal.propTypes = {
   isSubscriptionExpiringWarningModalOpen: PropTypes.bool.isRequired,
   onSubscriptionExpiringWarningModalClose: PropTypes.func.isRequired,
diff --git a/src/components/program-progress/tests/ProgramListingCard.test.jsx b/src/components/program-progress/tests/ProgramListingCard.test.jsx
index 7c27320a74..b2b96d3e95 100644
--- a/src/components/program-progress/tests/ProgramListingCard.test.jsx
+++ b/src/components/program-progress/tests/ProgramListingCard.test.jsx
@@ -19,15 +19,13 @@ jest.mock('react-router-dom', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-function ProgramListingCardWithContext({ initialAppState, initialUserSubsidyState, programData }) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <ProgramListingCard program={programData} />
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+const ProgramListingCardWithContext = ({ initialAppState, initialUserSubsidyState, programData }) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <ProgramListingCard program={programData} />
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 
 const appState = {
   enterpriseConfig: {
diff --git a/src/components/program-progress/tests/ProgramListingPage.test.jsx b/src/components/program-progress/tests/ProgramListingPage.test.jsx
index 1db59a1972..cdc052191b 100644
--- a/src/components/program-progress/tests/ProgramListingPage.test.jsx
+++ b/src/components/program-progress/tests/ProgramListingPage.test.jsx
@@ -64,20 +64,18 @@ jest.mock('../data/hooks', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-function ProgramListingWithContext({
+const ProgramListingWithContext = ({
   initialAppState = {},
   initialUserSubsidyState = {},
-}) {
-  return (
-    <IntlProvider locale="en">
-      <AppContext.Provider value={initialAppState}>
-        <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-          <ProgramListingPage />
-        </UserSubsidyContext.Provider>
-      </AppContext.Provider>
-    </IntlProvider>
-  );
-}
+}) => (
+  <IntlProvider locale="en">
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <ProgramListingPage />
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  </IntlProvider>
+);
 
 describe('<ProgramListing />', () => {
   const initialAppState = {
diff --git a/src/components/program-progress/tests/ProgramProgressCircle.test.jsx b/src/components/program-progress/tests/ProgramProgressCircle.test.jsx
index 5a9017cec9..2c7f144f34 100644
--- a/src/components/program-progress/tests/ProgramProgressCircle.test.jsx
+++ b/src/components/program-progress/tests/ProgramProgressCircle.test.jsx
@@ -9,15 +9,13 @@ import {
 } from '../data/constants';
 
 /* eslint-disable react/prop-types */
-function ProgramProgressCircleWithContext({
+const ProgramProgressCircleWithContext = ({
   initialProgramProgressContext = {},
-}) {
-  return (
-    <ProgramProgressContext.Provider value={initialProgramProgressContext}>
-      <ProgramProgressCircle />
-    </ProgramProgressContext.Provider>
-  );
-}
+}) => (
+  <ProgramProgressContext.Provider value={initialProgramProgressContext}>
+    <ProgramProgressCircle />
+  </ProgramProgressContext.Provider>
+);
 
 const testProgramData = {
   type: 'MicroMasters',
diff --git a/src/components/program-progress/tests/ProgramProgressCourses.test.jsx b/src/components/program-progress/tests/ProgramProgressCourses.test.jsx
index 0b735219fd..cd84377391 100644
--- a/src/components/program-progress/tests/ProgramProgressCourses.test.jsx
+++ b/src/components/program-progress/tests/ProgramProgressCourses.test.jsx
@@ -43,20 +43,18 @@ const subsidyRequestsState = {
   },
 };
 
-function ProgramProgressCoursesWithContext({
+const ProgramProgressCoursesWithContext = ({
   // eslint-disable-next-line react/prop-types
   initialAppState, initialUserSubsidyState, courseData, initialSubsidyRequestsState,
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
-          <ProgramProgressCourses courseData={courseData} />
-        </SubsidyRequestsContext.Provider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
+        <ProgramProgressCourses courseData={courseData} />
+      </SubsidyRequestsContext.Provider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 
 describe('<ProgramProgressCourses />', () => {
   it('displays the completed course with enrolled course run', () => {
diff --git a/src/components/program-progress/tests/ProgramProgressHeader.test.jsx b/src/components/program-progress/tests/ProgramProgressHeader.test.jsx
index 5c57b6e3cf..118b5fb3f1 100644
--- a/src/components/program-progress/tests/ProgramProgressHeader.test.jsx
+++ b/src/components/program-progress/tests/ProgramProgressHeader.test.jsx
@@ -7,15 +7,13 @@ import { ProgramProgressContext } from '../ProgramProgressContextProvider';
 import { getProgramIcon } from '../data/utils';
 
 /* eslint-disable react/prop-types */
-function ProgramProgressHeaderWithContext({
+const ProgramProgressHeaderWithContext = ({
   initialProgramProgressContext = {},
-}) {
-  return (
-    <ProgramProgressContext.Provider value={initialProgramProgressContext}>
-      <ProgramProgressHeader />
-    </ProgramProgressContext.Provider>
-  );
-}
+}) => (
+  <ProgramProgressContext.Provider value={initialProgramProgressContext}>
+    <ProgramProgressHeader />
+  </ProgramProgressContext.Provider>
+);
 
 const testProgramData = {
   type: 'MicroMasters',
diff --git a/src/components/program-progress/tests/ProgramProgressSidebar.test.jsx b/src/components/program-progress/tests/ProgramProgressSidebar.test.jsx
index 36f665e7c6..40ca0d0f9d 100644
--- a/src/components/program-progress/tests/ProgramProgressSidebar.test.jsx
+++ b/src/components/program-progress/tests/ProgramProgressSidebar.test.jsx
@@ -8,15 +8,13 @@ import { getProgramCertImage } from '../data/utils';
 import progSampleCertImage from '../images/sample-cert.png';
 
 /* eslint-disable react/prop-types */
-function ProgramProgressSideBarWithContext({
+const ProgramProgressSideBarWithContext = ({
   initialProgramProgressContext = {},
-}) {
-  return (
-    <ProgramProgressContext.Provider value={initialProgramProgressContext}>
-      <ProgramProgressSidebar />
-    </ProgramProgressContext.Provider>
-  );
-}
+}) => (
+  <ProgramProgressContext.Provider value={initialProgramProgressContext}>
+    <ProgramProgressSidebar />
+  </ProgramProgressContext.Provider>
+);
 
 const testProgramData = {
   type: 'MicroMasters',
diff --git a/src/components/program/BulletList.jsx b/src/components/program/BulletList.jsx
index fa6a886206..4c5aa2966f 100644
--- a/src/components/program/BulletList.jsx
+++ b/src/components/program/BulletList.jsx
@@ -1,17 +1,15 @@
 import React from 'react';
 import PropTypes from 'prop-types';
 
-function BulletList({ items }) {
-  return (
-    <ul>
-      {items.map(item => (
-        <li className="bullet-point mb-2" key={item}>
-          {item}
-        </li>
-      ))}
-    </ul>
-  );
-}
+const BulletList = ({ items }) => (
+  <ul>
+    {items.map(item => (
+      <li className="bullet-point mb-2" key={item}>
+        {item}
+      </li>
+    ))}
+  </ul>
+);
 
 BulletList.propTypes = {
   items: PropTypes.arrayOf(PropTypes.string).isRequired,
diff --git a/src/components/program/ProgramCTA.jsx b/src/components/program/ProgramCTA.jsx
index 8da9df6e58..b4e9dd2f8b 100644
--- a/src/components/program/ProgramCTA.jsx
+++ b/src/components/program/ProgramCTA.jsx
@@ -9,7 +9,7 @@ import { getAuthenticatedUser } from '@edx/frontend-platform/auth';
 import { ProgramContext } from './ProgramContextProvider';
 import { getProgramDuration } from './data/utils';
 
-function ProgramCTA() {
+const ProgramCTA = () => {
   const intl = useIntl();
   const { program } = useContext(ProgramContext);
   const { courses, subjects } = program;
@@ -138,6 +138,6 @@ function ProgramCTA() {
       </div>
     </div>
   );
-}
+};
 
 export default ProgramCTA;
diff --git a/src/components/program/ProgramContextProvider.jsx b/src/components/program/ProgramContextProvider.jsx
index c3c2d53ab6..5e92e35c2e 100644
--- a/src/components/program/ProgramContextProvider.jsx
+++ b/src/components/program/ProgramContextProvider.jsx
@@ -3,13 +3,11 @@ import PropTypes from 'prop-types';
 
 export const ProgramContext = createContext();
 
-export function ProgramContextProvider({ children, initialState }) {
-  return (
-    <ProgramContext.Provider value={initialState}>
-      {children}
-    </ProgramContext.Provider>
-  );
-}
+export const ProgramContextProvider = ({ children, initialState }) => (
+  <ProgramContext.Provider value={initialState}>
+    {children}
+  </ProgramContext.Provider>
+);
 
 ProgramContextProvider.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/program/ProgramCourses.jsx b/src/components/program/ProgramCourses.jsx
index 8f69ab6fc0..8a9665c7ba 100644
--- a/src/components/program/ProgramCourses.jsx
+++ b/src/components/program/ProgramCourses.jsx
@@ -24,7 +24,7 @@ const getCourseRun = course => (
   )[0]
 );
 
-function ProgramCourses() {
+const ProgramCourses = () => {
   const { enterpriseConfig: { slug, uuid } } = useContext(AppContext);
   const { program } = useContext(ProgramContext);
   const { programUuid } = useParams();
@@ -103,6 +103,6 @@ function ProgramCourses() {
       </div>
     </>
   );
-}
+};
 
 export default ProgramCourses;
diff --git a/src/components/program/ProgramDataBar.jsx b/src/components/program/ProgramDataBar.jsx
index 54cefdd610..f1a1d98259 100644
--- a/src/components/program/ProgramDataBar.jsx
+++ b/src/components/program/ProgramDataBar.jsx
@@ -7,7 +7,7 @@ import { faChevronCircleDown } from '@fortawesome/free-solid-svg-icons';
 import { ProgramContext } from './ProgramContextProvider';
 import ProgramDataBarDetails from './ProgramDataBarDetails';
 
-function ProgramDataBar() {
+const ProgramDataBar = () => {
   const [stickProgramDataBar, setStickProgramDataBar] = useState(false);
   const {
     program: { authoringOrganizations: owners, isProgramEligibleForOneClickPurchase },
@@ -54,5 +54,5 @@ function ProgramDataBar() {
       </div>
     </div>
   );
-}
+};
 export default ProgramDataBar;
diff --git a/src/components/program/ProgramDataBarDetails.jsx b/src/components/program/ProgramDataBarDetails.jsx
index 4401f34335..7c2b7b642c 100644
--- a/src/components/program/ProgramDataBarDetails.jsx
+++ b/src/components/program/ProgramDataBarDetails.jsx
@@ -5,7 +5,7 @@ import PropTypes from 'prop-types';
 import { ProgramContext } from './ProgramContextProvider';
 import { appendProgramToProgramType } from './data/utils';
 
-function ProgramDataBarDetails({ handleStick, handleRelease }) {
+const ProgramDataBarDetails = ({ handleStick, handleRelease }) => {
   const {
     program: {
       title, authoringOrganizations: owners, type,
@@ -66,7 +66,7 @@ function ProgramDataBarDetails({ handleStick, handleRelease }) {
       <div className="institution">{partnerList}</div>
     </div>
   );
-}
+};
 
 ProgramDataBarDetails.propTypes = {
   handleStick: PropTypes.func.isRequired,
diff --git a/src/components/program/ProgramEndorsements.jsx b/src/components/program/ProgramEndorsements.jsx
index 5e586e9277..251507f916 100644
--- a/src/components/program/ProgramEndorsements.jsx
+++ b/src/components/program/ProgramEndorsements.jsx
@@ -4,7 +4,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { breakpoints, MediaQuery } from '@edx/paragon';
 import { ProgramContext } from './ProgramContextProvider';
 
-function ProgramEndorsements() {
+const ProgramEndorsements = () => {
   const { program: { corporateEndorsements } } = useContext(ProgramContext);
   const formatAuthorFullName = endorser => `${endorser.givenName} ${endorser.familyName}`;
   const title = endorser => (endorser.position ? endorser.position.title : '');
@@ -54,6 +54,6 @@ function ProgramEndorsements() {
         </div>
       </div>
     ) : null;
-}
+};
 
 export default ProgramEndorsements;
diff --git a/src/components/program/ProgramFAQ.jsx b/src/components/program/ProgramFAQ.jsx
index 141efaaec3..3818d88624 100644
--- a/src/components/program/ProgramFAQ.jsx
+++ b/src/components/program/ProgramFAQ.jsx
@@ -4,7 +4,7 @@ import { faChevronUp, faChevronDown } from '@fortawesome/free-solid-svg-icons';
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { ProgramContext } from './ProgramContextProvider';
 
-function ProgramFAQ() {
+const ProgramFAQ = () => {
   const { program: { faq } } = useContext(ProgramContext);
   return faq?.length > 0
     ? (
@@ -28,6 +28,6 @@ function ProgramFAQ() {
         </div>
       </div>
     ) : null;
-}
+};
 
 export default ProgramFAQ;
diff --git a/src/components/program/ProgramHeader.jsx b/src/components/program/ProgramHeader.jsx
index f53c081419..d97714940c 100644
--- a/src/components/program/ProgramHeader.jsx
+++ b/src/components/program/ProgramHeader.jsx
@@ -6,7 +6,7 @@ import { useParams } from 'react-router-dom';
 import { ProgramContext } from './ProgramContextProvider';
 import { fixedEncodeURIComponent } from '../../utils/common';
 
-function ProgramHeader() {
+const ProgramHeader = () => {
   const config = getConfig();
   const { enterpriseSlug } = useParams();
   const {
@@ -93,6 +93,6 @@ function ProgramHeader() {
         : ''}
     </>
   );
-}
+};
 
 export default ProgramHeader;
diff --git a/src/components/program/ProgramInstructors.jsx b/src/components/program/ProgramInstructors.jsx
index 26e235380d..279f492fd2 100644
--- a/src/components/program/ProgramInstructors.jsx
+++ b/src/components/program/ProgramInstructors.jsx
@@ -7,7 +7,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 
 import { ProgramContext } from './ProgramContextProvider';
 
-function ProgramStaff({ program }) {
+const ProgramStaff = ({ program }) => {
   const { config } = useContext(AppContext);
   const formatStaffFullName = staff => `${staff.givenName} ${staff.familyName}`;
 
@@ -40,7 +40,7 @@ function ProgramStaff({ program }) {
       ))}
     </div>
   );
-}
+};
 
 ProgramStaff.propTypes = {
   program: PropTypes.shape({
@@ -57,7 +57,7 @@ ProgramStaff.propTypes = {
   }).isRequired,
 };
 
-function ProgramInstructors() {
+const ProgramInstructors = () => {
   const { program } = useContext(ProgramContext);
 
   return (
@@ -106,6 +106,6 @@ function ProgramInstructors() {
       )}
     </div>
   );
-}
+};
 
 export default ProgramInstructors;
diff --git a/src/components/program/ProgramMainContent.jsx b/src/components/program/ProgramMainContent.jsx
index d8972d353b..0af387c275 100644
--- a/src/components/program/ProgramMainContent.jsx
+++ b/src/components/program/ProgramMainContent.jsx
@@ -5,7 +5,7 @@ import { PreviewExpand } from '../preview-expand';
 import { ProgramContext } from './ProgramContextProvider';
 import BulletList from './BulletList';
 
-function ProgramMainContent() {
+const ProgramMainContent = () => {
   const { program } = useContext(ProgramContext);
   const { expectedLearningItems } = program;
   const { overview } = program;
@@ -42,6 +42,6 @@ function ProgramMainContent() {
       <ProgramInstructors />
     </div>
   );
-}
+};
 
 export default ProgramMainContent;
diff --git a/src/components/program/ProgramPage.jsx b/src/components/program/ProgramPage.jsx
index a85c33166d..12a2090ae1 100644
--- a/src/components/program/ProgramPage.jsx
+++ b/src/components/program/ProgramPage.jsx
@@ -22,7 +22,7 @@ import NotFoundPage from '../NotFoundPage';
 import { PROGRAM_NOT_FOUND_MESSAGE, PROGRAM_NOT_FOUND_TITLE } from './data/constants';
 import ProgramDataBar from './ProgramDataBar';
 
-function ProgramPage() {
+const ProgramPage = () => {
   const { programUuid } = useParams();
   const { enterpriseConfig } = useContext(AppContext);
 
@@ -94,6 +94,6 @@ function ProgramPage() {
       </ProgramContextProvider>
     </>
   );
-}
+};
 
 export default ProgramPage;
diff --git a/src/components/program/ProgramSidebar.jsx b/src/components/program/ProgramSidebar.jsx
index 3c1c9ade2d..902443eecb 100644
--- a/src/components/program/ProgramSidebar.jsx
+++ b/src/components/program/ProgramSidebar.jsx
@@ -13,7 +13,7 @@ import {
   getVerboseProgramPacing,
 } from './data/utils';
 
-function ProgramSidebar() {
+const ProgramSidebar = () => {
   const { program } = useContext(ProgramContext);
   const expertInstructionSecondaryContent = getExpertInstructionSecondaryContent(program);
   const programPacingType = getProgramPacing(program);
@@ -59,6 +59,6 @@ function ProgramSidebar() {
       }
     </ul>
   );
-}
+};
 
 export default ProgramSidebar;
diff --git a/src/components/program/ProgramSidebarListItem.jsx b/src/components/program/ProgramSidebarListItem.jsx
index baa1f6af6d..2cba261752 100644
--- a/src/components/program/ProgramSidebarListItem.jsx
+++ b/src/components/program/ProgramSidebarListItem.jsx
@@ -3,26 +3,26 @@ import PropTypes from 'prop-types';
 import { Row, Col } from '@edx/paragon';
 import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 
-export default function ProgramSidebarListItem({
+const ProgramSidebarListItem = ({
   icon,
   label,
   content,
-}) {
-  return (
-    <Row as="li" className="d-flex align-items-start border-bottom py-3">
-      <Col className="d-flex align-items-center">
-        <FontAwesomeIcon className="mr-3" icon={icon} />
-        <span>{label}:</span>
-      </Col>
-      <Col>
-        {content}
-      </Col>
-    </Row>
-  );
-}
+}) => (
+  <Row as="li" className="d-flex align-items-start border-bottom py-3">
+    <Col className="d-flex align-items-center">
+      <FontAwesomeIcon className="mr-3" icon={icon} />
+      <span>{label}:</span>
+    </Col>
+    <Col>
+      {content}
+    </Col>
+  </Row>
+);
 
 ProgramSidebarListItem.propTypes = {
   icon: PropTypes.shape().isRequired,
   label: PropTypes.string.isRequired,
   content: PropTypes.node.isRequired,
 };
+
+export default ProgramSidebarListItem;
diff --git a/src/components/program/tests/ProgramCTA.test.jsx b/src/components/program/tests/ProgramCTA.test.jsx
index e7ccbbdc2b..a701bbc0cd 100644
--- a/src/components/program/tests/ProgramCTA.test.jsx
+++ b/src/components/program/tests/ProgramCTA.test.jsx
@@ -30,23 +30,21 @@ jest.mock('@edx/frontend-enterprise-utils', () => {
 });
 
 /* eslint-disable react/prop-types */
-function ProgramCTAtWithContext({
+const ProgramCTAtWithContext = ({
   initialAppState = {},
   initialProgramState = {},
   initialUserSubsidyState = {},
-}) {
-  return (
-    <IntlProvider locale="en">
-      <AppContext.Provider value={initialAppState}>
-        <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-          <ProgramContextProvider initialState={initialProgramState}>
-            <ProgramCTA />
-          </ProgramContextProvider>
-        </UserSubsidyContext.Provider>
-      </AppContext.Provider>
-    </IntlProvider>
-  );
-}
+}) => (
+  <IntlProvider locale="en">
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <ProgramContextProvider initialState={initialProgramState}>
+          <ProgramCTA />
+        </ProgramContextProvider>
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  </IntlProvider>
+);
 /* eslint-enable react/prop-types */
 
 describe('<ProgramCTA />', () => {
diff --git a/src/components/program/tests/ProgramCourses.test.jsx b/src/components/program/tests/ProgramCourses.test.jsx
index ff7557579e..ce4e581445 100644
--- a/src/components/program/tests/ProgramCourses.test.jsx
+++ b/src/components/program/tests/ProgramCourses.test.jsx
@@ -31,21 +31,19 @@ jest.mock('@edx/frontend-enterprise-utils', () => {
 });
 
 /* eslint-disable react/prop-types */
-function ProgramCoursestWithContext({
+const ProgramCoursestWithContext = ({
   initialAppState = {},
   initialProgramState = {},
   initialUserSubsidyState = {},
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <ProgramContextProvider initialState={initialProgramState}>
-          <ProgramCourses />
-        </ProgramContextProvider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <ProgramContextProvider initialState={initialProgramState}>
+        <ProgramCourses />
+      </ProgramContextProvider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 describe('<ProgramCourses />', () => {
diff --git a/src/components/program/tests/ProgramDataBar.test.jsx b/src/components/program/tests/ProgramDataBar.test.jsx
index 4d6181acb7..e689027ae3 100644
--- a/src/components/program/tests/ProgramDataBar.test.jsx
+++ b/src/components/program/tests/ProgramDataBar.test.jsx
@@ -14,17 +14,15 @@ jest.mock('react-router-dom', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-function ProgramDataBarWithContext({ initialAppState, initialUserSubsidyState, initialProgramState }) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <ProgramContextProvider initialState={initialProgramState}>
-          <ProgramDataBar />
-        </ProgramContextProvider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+const ProgramDataBarWithContext = ({ initialAppState, initialUserSubsidyState, initialProgramState }) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <ProgramContextProvider initialState={initialProgramState}>
+        <ProgramDataBar />
+      </ProgramContextProvider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 
 const appState = {
   enterpriseConfig: {
diff --git a/src/components/program/tests/ProgramEndorsements.test.jsx b/src/components/program/tests/ProgramEndorsements.test.jsx
index 3798384b9f..4b5bcf74a7 100644
--- a/src/components/program/tests/ProgramEndorsements.test.jsx
+++ b/src/components/program/tests/ProgramEndorsements.test.jsx
@@ -12,21 +12,19 @@ jest.mock('react-router-dom', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-function ProgramEndorsementsWithContext({
+const ProgramEndorsementsWithContext = ({
   initialAppState = {},
   initialProgramState = {},
   initialUserSubsidyState = {},
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <ProgramContextProvider initialState={initialProgramState}>
-          <ProgramEndorsements />
-        </ProgramContextProvider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <ProgramContextProvider initialState={initialProgramState}>
+        <ProgramEndorsements />
+      </ProgramContextProvider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 describe('<ProgramEndorsements />', () => {
diff --git a/src/components/program/tests/ProgramFAQ.test.jsx b/src/components/program/tests/ProgramFAQ.test.jsx
index f1eb2f4d77..6fe13e57f4 100644
--- a/src/components/program/tests/ProgramFAQ.test.jsx
+++ b/src/components/program/tests/ProgramFAQ.test.jsx
@@ -14,21 +14,19 @@ jest.mock('react-router-dom', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-function ProgramFAQWithContext({
+const ProgramFAQWithContext = ({
   initialAppState = {},
   initialProgramState = {},
   initialUserSubsidyState = {},
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <ProgramContextProvider initialState={initialProgramState}>
-          <ProgramFAQ />
-        </ProgramContextProvider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <ProgramContextProvider initialState={initialProgramState}>
+        <ProgramFAQ />
+      </ProgramContextProvider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 describe('<ProgramFAQ />', () => {
diff --git a/src/components/program/tests/ProgramHeader.test.jsx b/src/components/program/tests/ProgramHeader.test.jsx
index c3150a4194..45b0a41ebb 100644
--- a/src/components/program/tests/ProgramHeader.test.jsx
+++ b/src/components/program/tests/ProgramHeader.test.jsx
@@ -13,21 +13,19 @@ jest.mock('react-router-dom', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-function ProgramHeaderWithContext({
+const ProgramHeaderWithContext = ({
   initialAppState = {},
   initialProgramState = {},
   initialUserSubsidyState = {},
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <ProgramContextProvider initialState={initialProgramState}>
-          <ProgramHeader />
-        </ProgramContextProvider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <ProgramContextProvider initialState={initialProgramState}>
+        <ProgramHeader />
+      </ProgramContextProvider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 describe('<ProgramHeader />', () => {
diff --git a/src/components/program/tests/ProgramInstructors.test.jsx b/src/components/program/tests/ProgramInstructors.test.jsx
index 60c4302ac6..4104be0da3 100644
--- a/src/components/program/tests/ProgramInstructors.test.jsx
+++ b/src/components/program/tests/ProgramInstructors.test.jsx
@@ -6,13 +6,11 @@ import { ProgramContextProvider } from '../ProgramContextProvider';
 import ProgramInstructors from '../ProgramInstructors';
 
 // eslint-disable-next-line react/prop-types
-function ProgramInstructorsWithContext({ initialState = {} }) {
-  return (
-    <ProgramContextProvider initialState={initialState}>
-      <ProgramInstructors />
-    </ProgramContextProvider>
-  );
-}
+const ProgramInstructorsWithContext = ({ initialState = {} }) => (
+  <ProgramContextProvider initialState={initialState}>
+    <ProgramInstructors />
+  </ProgramContextProvider>
+);
 
 describe('<ProgramInstructors />', () => {
   const initialState = {
diff --git a/src/components/program/tests/ProgramMainContent.test.jsx b/src/components/program/tests/ProgramMainContent.test.jsx
index 9f4eb91b56..916e232eef 100644
--- a/src/components/program/tests/ProgramMainContent.test.jsx
+++ b/src/components/program/tests/ProgramMainContent.test.jsx
@@ -17,21 +17,19 @@ jest.mock('@edx/frontend-platform/auth', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-function ProgramMainContentWithContext({
+const ProgramMainContentWithContext = ({
   initialAppState = {},
   initialProgramState = {},
   initialUserSubsidyState = {},
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <ProgramContextProvider initialState={initialProgramState}>
-          <ProgramMainContent />
-        </ProgramContextProvider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <ProgramContextProvider initialState={initialProgramState}>
+        <ProgramMainContent />
+      </ProgramContextProvider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 describe('<ProgramMainContent />', () => {
diff --git a/src/components/program/tests/ProgramPage.test.jsx b/src/components/program/tests/ProgramPage.test.jsx
index e9bda0c76e..f933223c26 100644
--- a/src/components/program/tests/ProgramPage.test.jsx
+++ b/src/components/program/tests/ProgramPage.test.jsx
@@ -39,20 +39,18 @@ jest.mock('../data/hooks', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-function ProgramWithContext({
+const ProgramWithContext = ({
   initialAppState = {},
   initialUserSubsidyState = {},
-}) {
-  return (
-    <IntlProvider locale="en">
-      <AppContext.Provider value={initialAppState}>
-        <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-          <ProgramPage />
-        </UserSubsidyContext.Provider>
-      </AppContext.Provider>
-    </IntlProvider>
-  );
-}
+}) => (
+  <IntlProvider locale="en">
+    <AppContext.Provider value={initialAppState}>
+      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+        <ProgramPage />
+      </UserSubsidyContext.Provider>
+    </AppContext.Provider>
+  </IntlProvider>
+);
 /* eslint-enable react/prop-types */
 
 describe('<Program />', () => {
diff --git a/src/components/program/tests/ProgramSidebar.test.jsx b/src/components/program/tests/ProgramSidebar.test.jsx
index 62a528cf1e..d34df59950 100644
--- a/src/components/program/tests/ProgramSidebar.test.jsx
+++ b/src/components/program/tests/ProgramSidebar.test.jsx
@@ -15,21 +15,19 @@ jest.mock('react-router-dom', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-function ProgramSidebarWithContext({
+const ProgramSidebarWithContext = ({
   initialAppState = {},
   initialProgramState = {},
   initialUserSubsidyState = {},
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <ProgramContextProvider initialState={initialProgramState}>
-          <ProgramSidebar />
-        </ProgramContextProvider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <ProgramContextProvider initialState={initialProgramState}>
+        <ProgramSidebar />
+      </ProgramContextProvider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 describe('<ProgramSidebar />', () => {
diff --git a/src/components/progress-category-bubbles/ProgressCategoryBubbles.jsx b/src/components/progress-category-bubbles/ProgressCategoryBubbles.jsx
index 58c7c47102..0f6a9891c6 100644
--- a/src/components/progress-category-bubbles/ProgressCategoryBubbles.jsx
+++ b/src/components/progress-category-bubbles/ProgressCategoryBubbles.jsx
@@ -3,26 +3,24 @@ import { Bubble, Stack } from '@edx/paragon';
 import PropTypes from 'prop-types';
 import './styles/index.scss';
 
-function ProgressCategoryBubbles({ notStarted, inProgress, completed }) {
-  return (
-    <Stack direction="horizontal" gap={2}>
-      <Bubble className="remaining-courses" data-testid="remaining-count">
-        {notStarted}
-      </Bubble>
-      <div>Remaining</div>
+const ProgressCategoryBubbles = ({ notStarted, inProgress, completed }) => (
+  <Stack direction="horizontal" gap={2}>
+    <Bubble className="remaining-courses" data-testid="remaining-count">
+      {notStarted}
+    </Bubble>
+    <div>Remaining</div>
 
-      <Bubble className="in-progress-courses" data-testid="in-progress-count">
-        {inProgress}
-      </Bubble>
-      <div>In progress</div>
+    <Bubble className="in-progress-courses" data-testid="in-progress-count">
+      {inProgress}
+    </Bubble>
+    <div>In progress</div>
 
-      <Bubble className="completed-courses" data-testid="completed-count">
-        {completed}
-      </Bubble>
-      <div>Completed</div>
-    </Stack>
-  );
-}
+    <Bubble className="completed-courses" data-testid="completed-count">
+      {completed}
+    </Bubble>
+    <div>Completed</div>
+  </Stack>
+);
 
 ProgressCategoryBubbles.propTypes = {
   notStarted: PropTypes.number.isRequired,
diff --git a/src/components/search/Search.jsx b/src/components/search/Search.jsx
index 4dd217d34f..cef27a7b2f 100644
--- a/src/components/search/Search.jsx
+++ b/src/components/search/Search.jsx
@@ -35,7 +35,7 @@ import SearchPathwayCard from '../pathway/SearchPathwayCard';
 import { SubsidyRequestsContext } from '../enterprise-subsidy-requests';
 import PathwayModal from '../pathway/PathwayModal';
 
-function Search() {
+const Search = () => {
   const { pathwayUUID } = useParams();
   const history = useHistory();
   const { refinements: { content_type: contentType } } = useContext(SearchContext);
@@ -150,6 +150,6 @@ function Search() {
       <IntegrationWarningModal isOpen={enterpriseConfig.showIntegrationWarning} />
     </>
   );
-}
+};
 
 export default Search;
diff --git a/src/components/search/SearchCourse.jsx b/src/components/search/SearchCourse.jsx
index 3c7f3ea3b7..e73211807c 100644
--- a/src/components/search/SearchCourse.jsx
+++ b/src/components/search/SearchCourse.jsx
@@ -6,7 +6,7 @@ import { NUM_RESULTS_COURSE, CONTENT_TYPE_COURSE, COURSE_TITLE } from './constan
 import SearchResults from './SearchResults';
 import SearchCourseCard from './SearchCourseCard';
 
-function SearchCourse({ filter }) {
+const SearchCourse = ({ filter }) => {
   const defaultFilter = `content_type:${CONTENT_TYPE_COURSE} AND ${filter}`;
   const config = getConfig();
 
@@ -20,7 +20,7 @@ function SearchCourse({ filter }) {
       <SearchResults hitComponent={SearchCourseCard} title={COURSE_TITLE} />
     </Index>
   );
-}
+};
 
 SearchCourse.propTypes = {
   filter: PropTypes.string.isRequired,
diff --git a/src/components/search/SearchCourseCard.jsx b/src/components/search/SearchCourseCard.jsx
index 95f62b6489..b5e9162e04 100644
--- a/src/components/search/SearchCourseCard.jsx
+++ b/src/components/search/SearchCourseCard.jsx
@@ -11,7 +11,7 @@ import { sendEnterpriseTrackEvent } from '@edx/frontend-enterprise-utils';
 
 import { getPrimaryPartnerLogo, isDefinedAndNotNull } from '../../utils/common';
 
-function SearchCourseCard({ hit, isLoading }) {
+const SearchCourseCard = ({ hit, isLoading }) => {
   const { enterpriseConfig: { slug, uuid } } = useContext(AppContext);
 
   const course = useMemo(() => (hit ? camelCaseObject(hit) : {}), [hit]);
@@ -153,11 +153,9 @@ function SearchCourseCard({ hit, isLoading }) {
       </Link>
     </div>
   );
-}
+};
 
-function SkeletonCourseCard(props) {
-  return <SearchCourseCard {...props} isLoading />;
-}
+const SkeletonCourseCard = (props) => <SearchCourseCard {...props} isLoading />;
 
 SearchCourseCard.propTypes = {
   hit: PropTypes.shape({
diff --git a/src/components/search/SearchError.jsx b/src/components/search/SearchError.jsx
index 0d7685bfc1..b69b7aed17 100644
--- a/src/components/search/SearchError.jsx
+++ b/src/components/search/SearchError.jsx
@@ -5,7 +5,7 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
 import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';
 import { getSearchErrorMessage } from '../utils/search';
 
-function SearchError({ title }) {
+const SearchError = ({ title }) => {
   const searchErrorMessage = getSearchErrorMessage(title);
   const renderDialog = useCallback(
     () => (
@@ -32,7 +32,7 @@ function SearchError({ title }) {
       open
     />
   );
-}
+};
 
 SearchError.propTypes = {
   title: PropTypes.string.isRequired,
diff --git a/src/components/search/SearchNoResults.jsx b/src/components/search/SearchNoResults.jsx
index 226aed307c..71f7bbfde0 100644
--- a/src/components/search/SearchNoResults.jsx
+++ b/src/components/search/SearchNoResults.jsx
@@ -7,7 +7,7 @@ import { faSearchMinus } from '@fortawesome/free-solid-svg-icons';
 import { PopularResults } from './popular-results';
 import { getNoResultsMessage } from '../utils/search';
 
-function SearchNoResults({ title }) {
+const SearchNoResults = ({ title }) => {
   const noResultsMessage = getNoResultsMessage(title);
   const renderDialog = useCallback(
     () => (
@@ -38,7 +38,7 @@ function SearchNoResults({ title }) {
       <PopularResults title={title} />
     </>
   );
-}
+};
 
 SearchNoResults.propTypes = {
   title: PropTypes.string.isRequired,
diff --git a/src/components/search/SearchPathway.jsx b/src/components/search/SearchPathway.jsx
index 446bf19925..dc7d90dc3c 100644
--- a/src/components/search/SearchPathway.jsx
+++ b/src/components/search/SearchPathway.jsx
@@ -7,7 +7,7 @@ import { NUM_RESULTS_PATHWAY, CONTENT_TYPE_PATHWAY, PATHWAY_TITLE } from './cons
 import SearchResults from './SearchResults';
 import SearchPathwayCard from '../pathway/SearchPathwayCard';
 
-function SearchPathway({ filter }) {
+const SearchPathway = ({ filter }) => {
   const defaultFilter = `content_type:${CONTENT_TYPE_PATHWAY}  AND ${filter}`;
   const config = getConfig();
 
@@ -21,7 +21,7 @@ function SearchPathway({ filter }) {
       <SearchResults hitComponent={SearchPathwayCard} title={PATHWAY_TITLE} />
     </Index>
   );
-}
+};
 
 SearchPathway.propTypes = {
   filter: PropTypes.string.isRequired,
diff --git a/src/components/search/SearchProgram.jsx b/src/components/search/SearchProgram.jsx
index 1b86dd4322..fe3e971ecc 100644
--- a/src/components/search/SearchProgram.jsx
+++ b/src/components/search/SearchProgram.jsx
@@ -7,7 +7,7 @@ import { NUM_RESULTS_PROGRAM, CONTENT_TYPE_PROGRAM, PROGRAM_TITLE } from './cons
 import SearchResults from './SearchResults';
 import SearchProgramCard from './SearchProgramCard';
 
-function SearchProgram({ filter }) {
+const SearchProgram = ({ filter }) => {
   const defaultFilter = `content_type:${CONTENT_TYPE_PROGRAM} AND ${filter}`;
   const config = getConfig();
 
@@ -21,7 +21,7 @@ function SearchProgram({ filter }) {
       <SearchResults hitComponent={SearchProgramCard} title={PROGRAM_TITLE} />
     </Index>
   );
-}
+};
 
 SearchProgram.propTypes = {
   filter: PropTypes.string.isRequired,
diff --git a/src/components/search/SearchProgramCard.jsx b/src/components/search/SearchProgramCard.jsx
index 4ebe5c1a8c..af8c95df03 100644
--- a/src/components/search/SearchProgramCard.jsx
+++ b/src/components/search/SearchProgramCard.jsx
@@ -37,7 +37,7 @@ export const ProgramType = ({ type }) => {
   return programTypeToDisplay;
 };
 
-function SearchProgramCard({ hit, isLoading }) {
+const SearchProgramCard = ({ hit, isLoading }) => {
   const { enterpriseConfig: { slug, uuid } } = useContext(AppContext);
   const program = useMemo(() => {
     if (!hit) {
@@ -192,11 +192,9 @@ function SearchProgramCard({ hit, isLoading }) {
       </Link>
     </div>
   );
-}
+};
 
-function SkeletonProgramCard(props) {
-  return <SearchProgramCard {...props} isLoading />;
-}
+const SkeletonProgramCard = (props) => <SearchProgramCard {...props} isLoading />;
 
 SearchProgramCard.propTypes = {
   hit: PropTypes.shape({
diff --git a/src/components/search/SearchResults.jsx b/src/components/search/SearchResults.jsx
index 905697fbcc..e1dbf5361b 100644
--- a/src/components/search/SearchResults.jsx
+++ b/src/components/search/SearchResults.jsx
@@ -17,7 +17,7 @@ import {
 } from './constants';
 import { getContentTypeFromTitle, getNoOfResultsFromTitle, getSkeletonCardFromTitle } from '../utils/search';
 
-function SearchResults({
+const SearchResults = ({
   searchResults,
   searchState,
   isSearchStalled,
@@ -25,7 +25,7 @@ function SearchResults({
   hitComponent,
   title,
   contentType,
-}) {
+}) => {
   const { refinements, dispatch } = useContext(SearchContext);
   const nbHits = useNbHitsFromSearchResults(searchResults);
   const linkText = `Show (${nbHits}) >`;
@@ -137,7 +137,7 @@ function SearchResults({
       </>
     </Container>
   );
-}
+};
 
 SearchResults.propTypes = {
   searchState: PropTypes.shape({
diff --git a/src/components/search/popular-results/PopularResults.jsx b/src/components/search/popular-results/PopularResults.jsx
index 4ff81cefdc..b088224d0d 100644
--- a/src/components/search/popular-results/PopularResults.jsx
+++ b/src/components/search/popular-results/PopularResults.jsx
@@ -10,13 +10,13 @@ import { isDefinedAndNotNull } from '../../../utils/common';
 import { NUM_RESULTS_TO_DISPLAY } from './data/constants';
 import { getHitComponentFromTitle, getSkeletonCardFromTitle } from '../../utils/search';
 
-function PopularResults({
+const PopularResults = ({
   searchResults,
   isSearchStalled,
   error,
   title,
   numberResultsToDisplay,
-}) {
+}) => {
   const nbHits = useNbHitsFromSearchResults(searchResults);
 
   return (
@@ -48,7 +48,7 @@ function PopularResults({
       )}
     </>
   );
-}
+};
 
 PopularResults.propTypes = {
   searchResults: PropTypes.shape(),
diff --git a/src/components/search/popular-results/PopularResultsIndex.jsx b/src/components/search/popular-results/PopularResultsIndex.jsx
index a55f5e3a53..b5fdac246d 100644
--- a/src/components/search/popular-results/PopularResultsIndex.jsx
+++ b/src/components/search/popular-results/PopularResultsIndex.jsx
@@ -10,7 +10,7 @@ import { NUM_RESULTS_TO_DISPLAY } from './data/constants';
 import { getContentTypeFromTitle } from '../../utils/search';
 import { SubsidyRequestsContext } from '../../enterprise-subsidy-requests';
 
-function PopularResultsIndex({ title, numberResultsToDisplay }) {
+const PopularResultsIndex = ({ title, numberResultsToDisplay }) => {
   const { enterpriseConfig } = useContext(AppContext);
   const {
     subscriptionPlan, subscriptionLicense, couponCodes: { couponCodes }, enterpriseOffers,
@@ -43,7 +43,7 @@ function PopularResultsIndex({ title, numberResultsToDisplay }) {
       <PopularResults title={title} numberResultsToDisplay={numberResultsToDisplay} />
     </Index>
   );
-}
+};
 
 PopularResultsIndex.propTypes = {
   title: PropTypes.string.isRequired,
diff --git a/src/components/search/tests/SearchCourseCard.test.jsx b/src/components/search/tests/SearchCourseCard.test.jsx
index 63a186c03f..afde137e3d 100644
--- a/src/components/search/tests/SearchCourseCard.test.jsx
+++ b/src/components/search/tests/SearchCourseCard.test.jsx
@@ -19,7 +19,7 @@ jest.mock('react-loading-skeleton', () => ({
   default: (props = {}) => <div data-testid={props['data-testid']} />,
 }));
 
-function SearchCourseCardWithAppContext(props) {
+const SearchCourseCardWithAppContext = (props) => {
   const contextValue = useMemo(() => ({
     enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG },
   }), []);
@@ -28,7 +28,7 @@ function SearchCourseCardWithAppContext(props) {
       <SearchCourseCard {...props} />
     </AppContext.Provider>
   );
-}
+};
 
 const TEST_COURSE_KEY = 'test-course-key';
 const TEST_TITLE = 'Test Title';
diff --git a/src/components/search/tests/SearchProgramCard.test.jsx b/src/components/search/tests/SearchProgramCard.test.jsx
index d48712f239..0ad1990814 100644
--- a/src/components/search/tests/SearchProgramCard.test.jsx
+++ b/src/components/search/tests/SearchProgramCard.test.jsx
@@ -30,7 +30,7 @@ jest.mock('@edx/frontend-enterprise-utils', () => ({
   sendEnterpriseTrackEvent: jest.fn(),
 }));
 
-function SearchProgramCardWithAppContext(props) {
+const SearchProgramCardWithAppContext = (props) => {
   const contextValue = useMemo(() => ({
     enterpriseConfig: { slug: TEST_ENTERPRISE_SLUG, uuid: enterpriseUuid },
   }), []);
@@ -39,7 +39,7 @@ function SearchProgramCardWithAppContext(props) {
       <SearchProgramCard {...props} />
     </AppContext.Provider>
   );
-}
+};
 
 const PROGRAM_UUID = 'a9cbdeb6-5fc0-44ef-97f7-9ed605a149db';
 const PROGRAM_TITLE = 'Intro to BatVerse';
diff --git a/src/components/search/tests/SearchResults.test.jsx b/src/components/search/tests/SearchResults.test.jsx
index d522fa3679..dc318ea114 100644
--- a/src/components/search/tests/SearchResults.test.jsx
+++ b/src/components/search/tests/SearchResults.test.jsx
@@ -84,19 +84,17 @@ const initialSubsidyRequestsState = {
 };
 
 /* eslint-enable react/prop-types */
-function SearchResultsWithContext(props) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
-          <SearchContext.Provider value={searchContext}>
-            <SearchResults {...props} />
-          </SearchContext.Provider>
-        </SubsidyRequestsContext.Provider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+const SearchResultsWithContext = (props) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <SubsidyRequestsContext.Provider value={initialSubsidyRequestsState}>
+        <SearchContext.Provider value={searchContext}>
+          <SearchResults {...props} />
+        </SearchContext.Provider>
+      </SubsidyRequestsContext.Provider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 const TEST_COURSE_KEY = 'test-course-key';
diff --git a/src/components/site-header/AvatarDropdown.jsx b/src/components/site-header/AvatarDropdown.jsx
index 1e9e3262c4..14d80a156d 100644
--- a/src/components/site-header/AvatarDropdown.jsx
+++ b/src/components/site-header/AvatarDropdown.jsx
@@ -6,7 +6,7 @@ import { AppContext } from '@edx/frontend-platform/react';
 import { AvatarButton, Dropdown } from '@edx/paragon';
 import { isDefinedAndNotNull } from '../../utils/common';
 
-function AvatarDropdown({ showLabel }) {
+const AvatarDropdown = ({ showLabel }) => {
   const {
     BASE_URL,
     LMS_BASE_URL,
@@ -55,7 +55,7 @@ function AvatarDropdown({ showLabel }) {
       </Dropdown.Menu>
     </Dropdown>
   );
-}
+};
 
 AvatarDropdown.propTypes = {
   showLabel: PropTypes.bool,
diff --git a/src/components/site-header/SiteHeader.jsx b/src/components/site-header/SiteHeader.jsx
index d90bf784ac..3b9b6d8158 100644
--- a/src/components/site-header/SiteHeader.jsx
+++ b/src/components/site-header/SiteHeader.jsx
@@ -10,7 +10,7 @@ import SiteHeaderNavMenu from './SiteHeaderNavMenu';
 import { Menu, MenuTrigger, MenuContent } from './menu';
 import AvatarDropdown from './AvatarDropdown';
 
-export default function SiteHeader() {
+const SiteHeader = () => {
   const config = getConfig();
   const { enterpriseConfig } = useContext(AppContext);
 
@@ -84,4 +84,6 @@ export default function SiteHeader() {
       </MediaQuery>
     </>
   );
-}
+};
+
+export default SiteHeader;
diff --git a/src/components/site-header/SiteHeaderLogos.jsx b/src/components/site-header/SiteHeaderLogos.jsx
index 71dece16e7..a969565b12 100644
--- a/src/components/site-header/SiteHeaderLogos.jsx
+++ b/src/components/site-header/SiteHeaderLogos.jsx
@@ -5,7 +5,7 @@ import { AppContext } from '@edx/frontend-platform/react';
 
 import GetSmarterLogo from '../../assets/icons/getsmarter-logo.svg';
 
-function SiteHeaderLogos() {
+const SiteHeaderLogos = () => {
   const { enterpriseConfig } = useContext(AppContext);
   const { pathname } = useLocation();
   const isInExecutiveEducationPath = pathname.includes('executive-education-2u');
@@ -42,6 +42,6 @@ function SiteHeaderLogos() {
       )}
     </>
   );
-}
+};
 
 export default SiteHeaderLogos;
diff --git a/src/components/site-header/SiteHeaderNavMenu.jsx b/src/components/site-header/SiteHeaderNavMenu.jsx
index aaa54078d6..a4843b10f9 100644
--- a/src/components/site-header/SiteHeaderNavMenu.jsx
+++ b/src/components/site-header/SiteHeaderNavMenu.jsx
@@ -2,7 +2,7 @@ import React, { useContext } from 'react';
 import { NavLink } from 'react-router-dom';
 import { AppContext } from '@edx/frontend-platform/react';
 
-function SiteHeaderNavMenu() {
+const SiteHeaderNavMenu = () => {
   const { enterpriseConfig } = useContext(AppContext);
   const mainMenuLinkClassName = 'nav-link';
 
@@ -20,6 +20,6 @@ function SiteHeaderNavMenu() {
       </NavLink>
     </>
   );
-}
+};
 
 export default SiteHeaderNavMenu;
diff --git a/src/components/site-header/menu/Menu.jsx b/src/components/site-header/menu/Menu.jsx
index 65954a202b..d165643a95 100644
--- a/src/components/site-header/menu/Menu.jsx
+++ b/src/components/site-header/menu/Menu.jsx
@@ -2,12 +2,10 @@ import React from 'react';
 import { CSSTransition } from 'react-transition-group';
 import PropTypes from 'prop-types';
 
-function MenuTrigger({ tag, className, ...attributes }) {
-  return React.createElement(tag, {
-    className: `menu-trigger ${className}`,
-    ...attributes,
-  });
-}
+const MenuTrigger = ({ tag, className, ...attributes }) => React.createElement(tag, {
+  className: `menu-trigger ${className}`,
+  ...attributes,
+});
 MenuTrigger.propTypes = {
   tag: PropTypes.string,
   className: PropTypes.string,
@@ -18,12 +16,10 @@ MenuTrigger.defaultProps = {
 };
 const MenuTriggerType = <MenuTrigger />.type;
 
-function MenuContent({ tag, className, ...attributes }) {
-  return React.createElement(tag, {
-    className: ['menu-content', className].join(' '),
-    ...attributes,
-  });
-}
+const MenuContent = ({ tag, className, ...attributes }) => React.createElement(tag, {
+  className: ['menu-content', className].join(' '),
+  ...attributes,
+});
 MenuContent.propTypes = {
   tag: PropTypes.string,
   className: PropTypes.string,
diff --git a/src/components/site-header/tests/SiteHeader.test.jsx b/src/components/site-header/tests/SiteHeader.test.jsx
index 4b0b4fc0a2..6d1c15a021 100644
--- a/src/components/site-header/tests/SiteHeader.test.jsx
+++ b/src/components/site-header/tests/SiteHeader.test.jsx
@@ -29,15 +29,13 @@ const appState = {
 };
 
 /* eslint-disable react/prop-types */
-function SiteHeaderWithContext({
+const SiteHeaderWithContext = ({
   initialAppState = appState,
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <SiteHeader />
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <SiteHeader />
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 const mockWindowConfig = {
diff --git a/src/components/skills-quiz/CardLoadingSkeleton.jsx b/src/components/skills-quiz/CardLoadingSkeleton.jsx
index b5ce4691b4..68fa9d4b49 100644
--- a/src/components/skills-quiz/CardLoadingSkeleton.jsx
+++ b/src/components/skills-quiz/CardLoadingSkeleton.jsx
@@ -4,40 +4,38 @@ import { Card } from '@edx/paragon';
 import Skeleton from 'react-loading-skeleton';
 import { LOADING_NO_OF_CARDS } from './constants';
 
-function CardLoadingSkeleton() {
-  return (
-    <div className="row col col-12 p-0">
-      <div className="skill-quiz-results align-items-l-between col col-xl-10">
-        {Array.from({ length: LOADING_NO_OF_CARDS }, (_, i) => (
-          <div
-            className="search-result-card mb-4"
-            role="group"
-            key={i}
-          >
-            {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
-            <Link to="#">
-              <Card>
-                <Card.ImageCap
-                  as={Skeleton}
-                  duration={0}
-                />
+const CardLoadingSkeleton = () => (
+  <div className="row col col-12 p-0">
+    <div className="skill-quiz-results align-items-l-between col col-xl-10">
+      {Array.from({ length: LOADING_NO_OF_CARDS }, (_, i) => (
+        <div
+          className="search-result-card mb-4"
+          role="group"
+          key={i}
+        >
+          {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}
+          <Link to="#">
+            <Card>
+              <Card.ImageCap
+                as={Skeleton}
+                duration={0}
+              />
 
-                <Card.Header
-                  title={
-                    <Skeleton count={2} data-testid="course-title-loading" />
-                  }
-                />
-                <Card.Section>
-                  <Skeleton duration={0} data-testid="partner-name-loading" />
-                  <Skeleton count={1} data-testid="skills-loading" />
-                </Card.Section>
-              </Card>
-            </Link>
-          </div>
-        ))}
-      </div>
+              <Card.Header
+                title={
+                  <Skeleton count={2} data-testid="course-title-loading" />
+                }
+              />
+              <Card.Section>
+                <Skeleton duration={0} data-testid="partner-name-loading" />
+                <Skeleton count={1} data-testid="skills-loading" />
+              </Card.Section>
+            </Card>
+          </Link>
+        </div>
+      ))}
     </div>
-  );
-}
+  </div>
+);
 
 export default CardLoadingSkeleton;
diff --git a/src/components/skills-quiz/CourseCard.jsx b/src/components/skills-quiz/CourseCard.jsx
index 4cf02eeb34..a197a6514e 100644
--- a/src/components/skills-quiz/CourseCard.jsx
+++ b/src/components/skills-quiz/CourseCard.jsx
@@ -12,9 +12,9 @@ import { ELLIPSIS_STR } from '../course/data/constants';
 import { isDefinedAndNotNull } from '../../utils/common';
 import { MAX_VISIBLE_SKILLS_COURSE, SKILL_NAME_CUTOFF_LIMIT } from './constants';
 
-function CourseCard({
+const CourseCard = ({
   isLoading, course, allSkills,
-}) {
+}) => {
   const { enterpriseConfig } = useContext(AppContext);
   const { slug, uuid } = enterpriseConfig;
   const partnerDetails = useMemo(() => {
@@ -134,7 +134,7 @@ function CourseCard({
       </Link>
     </div>
   );
-}
+};
 
 CourseCard.propTypes = {
   course: PropTypes.shape({
diff --git a/src/components/skills-quiz/CurrentJobDropdown.jsx b/src/components/skills-quiz/CurrentJobDropdown.jsx
index c9562d4613..f9b2c1a881 100644
--- a/src/components/skills-quiz/CurrentJobDropdown.jsx
+++ b/src/components/skills-quiz/CurrentJobDropdown.jsx
@@ -4,7 +4,7 @@ import FacetListRefinement from '@edx/frontend-enterprise-catalog-search/FacetLi
 
 import { CURRENT_JOB_FACET } from './constants';
 
-function CurrentJobDropdown() {
+const CurrentJobDropdown = () => {
   const { refinements } = useContext(SearchContext);
   const {
     title, attribute, typeaheadOptions, facetValueType, customAttribute,
@@ -25,6 +25,6 @@ function CurrentJobDropdown() {
       showBadge={false}
     />
   );
-}
+};
 
 export default CurrentJobDropdown;
diff --git a/src/components/skills-quiz/GoalDropdown.jsx b/src/components/skills-quiz/GoalDropdown.jsx
index 76feddbd58..6871f95115 100644
--- a/src/components/skills-quiz/GoalDropdown.jsx
+++ b/src/components/skills-quiz/GoalDropdown.jsx
@@ -7,7 +7,7 @@ import {
 import { SET_KEY_VALUE } from './data/constants';
 import { SkillsContext } from './SkillsContextProvider';
 
-function GoalDropdown() {
+const GoalDropdown = () => {
   const { dispatch, state } = useContext(SkillsContext);
   const { goal } = state;
   const selectGoal = (selectedGoal) => {
@@ -30,6 +30,6 @@ function GoalDropdown() {
       </Dropdown.Menu>
     </Dropdown>
   );
-}
+};
 
 export default GoalDropdown;
diff --git a/src/components/skills-quiz/JobCardComponent.jsx b/src/components/skills-quiz/JobCardComponent.jsx
index 4db0e6fda5..152d21154e 100644
--- a/src/components/skills-quiz/JobCardComponent.jsx
+++ b/src/components/skills-quiz/JobCardComponent.jsx
@@ -6,7 +6,7 @@ import PropTypes from 'prop-types';
 import { formatStringAsNumber } from '../../utils/common';
 import { NOT_AVAILABLE } from './constants';
 
-function JobCardComponent({ jobs, isLoading }) {
+const JobCardComponent = ({ jobs, isLoading }) => {
   const { enterpriseConfig: { hideLaborMarketData } } = useContext(AppContext);
   return (
     // eslint-disable-next-line react/jsx-no-useless-fragment
@@ -60,7 +60,7 @@ function JobCardComponent({ jobs, isLoading }) {
       ))}
     </>
   );
-}
+};
 
 JobCardComponent.defaultProps = {
   jobs: undefined,
diff --git a/src/components/skills-quiz/SearchCourseCard.jsx b/src/components/skills-quiz/SearchCourseCard.jsx
index be8cd0b0a5..b1dfb2378b 100644
--- a/src/components/skills-quiz/SearchCourseCard.jsx
+++ b/src/components/skills-quiz/SearchCourseCard.jsx
@@ -28,7 +28,7 @@ const renderDialog = () => (
   </div>
 );
 
-function SearchCourseCard({ index }) {
+const SearchCourseCard = ({ index }) => {
   const { enterpriseConfig } = useContext(AppContext);
   const {
     subscriptionPlan, subscriptionLicense, couponCodes: { couponCodes }, enterpriseOffers,
@@ -117,7 +117,7 @@ function SearchCourseCard({ index }) {
       </div>
     </div>
   );
-}
+};
 
 SearchCourseCard.propTypes = {
   index: PropTypes.shape({
diff --git a/src/components/skills-quiz/SearchCurrentJobCard.jsx b/src/components/skills-quiz/SearchCurrentJobCard.jsx
index 5388ccba5d..ee6810003c 100644
--- a/src/components/skills-quiz/SearchCurrentJobCard.jsx
+++ b/src/components/skills-quiz/SearchCurrentJobCard.jsx
@@ -8,7 +8,7 @@ import { SkillsContext } from './SkillsContextProvider';
 import JobCardComponent from './JobCardComponent';
 import { SET_KEY_VALUE } from './data/constants';
 
-function SearchCurrentJobCard({ index }) {
+const SearchCurrentJobCard = ({ index }) => {
   const { refinements } = useContext(SearchContext);
   const { current_job: currentJob } = refinements;
   const [isLoading, setIsLoading] = useState(true);
@@ -51,7 +51,7 @@ function SearchCurrentJobCard({ index }) {
       <JobCardComponent jobs={currentJobRole} isLoading={isLoading} />
     </div>
   );
-}
+};
 
 SearchCurrentJobCard.propTypes = {
   index: PropTypes.shape({
diff --git a/src/components/skills-quiz/SearchJobCard.jsx b/src/components/skills-quiz/SearchJobCard.jsx
index eeee8fd185..53815ba450 100644
--- a/src/components/skills-quiz/SearchJobCard.jsx
+++ b/src/components/skills-quiz/SearchJobCard.jsx
@@ -7,7 +7,7 @@ import { SkillsContext } from './SkillsContextProvider';
 import { SET_KEY_VALUE } from './data/constants';
 import JobCardComponent from './JobCardComponent';
 
-function SearchJobCard({ index }) {
+const SearchJobCard = ({ index }) => {
   const { refinements } = useContext(SearchContext);
   const { name: jobs } = refinements;
   const [isLoading, setIsLoading] = useState(true);
@@ -51,7 +51,7 @@ function SearchJobCard({ index }) {
       <JobCardComponent jobs={interestedJobs} isLoading={isLoading} />
     </div>
   );
-}
+};
 
 SearchJobCard.propTypes = {
   index: PropTypes.shape({
diff --git a/src/components/skills-quiz/SearchJobDropdown.jsx b/src/components/skills-quiz/SearchJobDropdown.jsx
index 07280c6c6a..25a31ec1e6 100644
--- a/src/components/skills-quiz/SearchJobDropdown.jsx
+++ b/src/components/skills-quiz/SearchJobDropdown.jsx
@@ -4,7 +4,7 @@ import FacetListRefinement from '@edx/frontend-enterprise-catalog-search/FacetLi
 
 import { DESIRED_JOB_FACET } from './constants';
 
-function SearchJobDropdown() {
+const SearchJobDropdown = () => {
   const { refinements } = useContext(SearchContext);
   const { title, attribute, typeaheadOptions } = DESIRED_JOB_FACET;
 
@@ -22,6 +22,6 @@ function SearchJobDropdown() {
       showBadge={false}
     />
   );
-}
+};
 
 export default SearchJobDropdown;
diff --git a/src/components/skills-quiz/SearchPathways.jsx b/src/components/skills-quiz/SearchPathways.jsx
index 32bd56f35a..4a2bff56ee 100644
--- a/src/components/skills-quiz/SearchPathways.jsx
+++ b/src/components/skills-quiz/SearchPathways.jsx
@@ -13,7 +13,7 @@ import { UserSubsidyContext } from '../enterprise-user-subsidy';
 import SearchPathwayCard from '../pathway/SearchPathwayCard';
 import { SubsidyRequestsContext } from '../enterprise-subsidy-requests';
 
-function SearchPathways({ index }) {
+const SearchPathways = ({ index }) => {
   const { enterpriseConfig } = useContext(AppContext);
   const {
     subscriptionPlan, subscriptionLicense, couponCodes: { couponCodes }, enterpriseOffers,
@@ -86,7 +86,7 @@ function SearchPathways({ index }) {
       </div>
     </div>
   );
-}
+};
 
 SearchPathways.propTypes = {
   index: PropTypes.shape({
diff --git a/src/components/skills-quiz/SearchProgramCard.jsx b/src/components/skills-quiz/SearchProgramCard.jsx
index 69ae036a50..25c3c9e558 100644
--- a/src/components/skills-quiz/SearchProgramCard.jsx
+++ b/src/components/skills-quiz/SearchProgramCard.jsx
@@ -56,7 +56,7 @@ const renderDialog = () => (
   </div>
 );
 
-function SearchProgramCard({ index }) {
+const SearchProgramCard = ({ index }) => {
   const { enterpriseConfig } = useContext(AppContext);
   const { slug, uuid } = enterpriseConfig;
   const {
@@ -291,7 +291,7 @@ function SearchProgramCard({ index }) {
       </div>
     </div>
   );
-}
+};
 
 SearchProgramCard.propTypes = {
   index: PropTypes.shape({
diff --git a/src/components/skills-quiz/SelectJobCard.jsx b/src/components/skills-quiz/SelectJobCard.jsx
index 7feee2d8e5..6e4c4b09d3 100644
--- a/src/components/skills-quiz/SelectJobCard.jsx
+++ b/src/components/skills-quiz/SelectJobCard.jsx
@@ -7,7 +7,7 @@ import { formatStringAsNumber } from '../../utils/common';
 import { checkValidGoalAndJobSelected } from '../utils/skills-quiz';
 import { NOT_AVAILABLE } from './constants';
 
-function SelectJobCard() {
+const SelectJobCard = () => {
   const { dispatch, state } = useContext(SkillsContext);
   const { enterpriseConfig: { hideLaborMarketData } } = useContext(AppContext);
   const {
@@ -64,6 +64,6 @@ function SelectJobCard() {
       </SelectableBox.Set>
     </div>
   );
-}
+};
 
 export default SelectJobCard;
diff --git a/src/components/skills-quiz/SelectedJobSkills.jsx b/src/components/skills-quiz/SelectedJobSkills.jsx
index 9e572ed85a..8bbd7d7204 100644
--- a/src/components/skills-quiz/SelectedJobSkills.jsx
+++ b/src/components/skills-quiz/SelectedJobSkills.jsx
@@ -3,7 +3,7 @@ import { Badge } from '@edx/paragon';
 import { SkillsContext } from './SkillsContextProvider';
 import { DROPDOWN_OPTION_IMPROVE_CURRENT_ROLE } from './constants';
 
-function SelectedJobSkills() {
+const SelectedJobSkills = () => {
   const { state } = useContext(SkillsContext);
   const {
     interestedJobs, selectedJob, goal, currentJobRole,
@@ -32,6 +32,6 @@ function SelectedJobSkills() {
       </div>
     </div>
   );
-}
+};
 
 export default SelectedJobSkills;
diff --git a/src/components/skills-quiz/SkillsContextProvider.jsx b/src/components/skills-quiz/SkillsContextProvider.jsx
index 3bf141c0b2..95966b189b 100644
--- a/src/components/skills-quiz/SkillsContextProvider.jsx
+++ b/src/components/skills-quiz/SkillsContextProvider.jsx
@@ -19,7 +19,7 @@ const reducer = (state, action) => {
   }
 };
 
-export function SkillsContextProvider({ children, initialState = { goal: GOAL_DROPDOWN_DEFAULT_OPTION } }) {
+export const SkillsContextProvider = ({ children, initialState = { goal: GOAL_DROPDOWN_DEFAULT_OPTION } }) => {
   const [state, dispatch] = useReducer(reducer, initialState);
   const value = useMemo(() => ({ state, dispatch }), [state]);
 
@@ -28,7 +28,7 @@ export function SkillsContextProvider({ children, initialState = { goal: GOAL_DR
       {children}
     </SkillsContext.Provider>
   );
-}
+};
 
 SkillsContextProvider.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/components/skills-quiz/SkillsCourses.jsx b/src/components/skills-quiz/SkillsCourses.jsx
index 9ae49dea88..c679cdf8b0 100644
--- a/src/components/skills-quiz/SkillsCourses.jsx
+++ b/src/components/skills-quiz/SkillsCourses.jsx
@@ -36,7 +36,7 @@ const renderDialog = () => (
   </div>
 );
 
-function SkillsCourses({ index }) {
+const SkillsCourses = ({ index }) => {
   const { enterpriseConfig } = useContext(AppContext);
   const { state: { selectedJob } } = useContext(SkillsContext);
   const [isLoading, setIsLoading] = useState(false);
@@ -163,7 +163,7 @@ function SkillsCourses({ index }) {
       </div>
     </div>
   );
-}
+};
 
 SkillsCourses.propTypes = {
   index: PropTypes.shape({
diff --git a/src/components/skills-quiz/SkillsDropDown.jsx b/src/components/skills-quiz/SkillsDropDown.jsx
index af4fe24aee..e9ce7c214f 100644
--- a/src/components/skills-quiz/SkillsDropDown.jsx
+++ b/src/components/skills-quiz/SkillsDropDown.jsx
@@ -4,7 +4,7 @@ import FacetListRefinement from '@edx/frontend-enterprise-catalog-search/FacetLi
 
 import { SKILLS_FACET } from './constants';
 
-function SkillsDropDown() {
+const SkillsDropDown = () => {
   const { refinements } = useContext(SearchContext);
   const {
     title, attribute, typeaheadOptions, facetValueType,
@@ -23,6 +23,6 @@ function SkillsDropDown() {
       doRefinement={false}
     />
   );
-}
+};
 
 export default SkillsDropDown;
diff --git a/src/components/skills-quiz/SkillsQuiz.jsx b/src/components/skills-quiz/SkillsQuiz.jsx
index a2635baa8c..d2f6c34e4a 100644
--- a/src/components/skills-quiz/SkillsQuiz.jsx
+++ b/src/components/skills-quiz/SkillsQuiz.jsx
@@ -12,7 +12,7 @@ import { MainContent } from '../layout';
 import SkillsQuizStepper from './SkillsQuizStepper';
 import { SkillsContextProvider } from './SkillsContextProvider';
 
-function SkillsQuiz() {
+const SkillsQuiz = () => {
   const { enterpriseConfig } = useContext(AppContext);
   const PAGE_TITLE = `Skills Quiz - ${enterpriseConfig.name}`;
 
@@ -33,6 +33,6 @@ function SkillsQuiz() {
       </Container>
     </>
   );
-}
+};
 
 export default SkillsQuiz;
diff --git a/src/components/skills-quiz/SkillsQuizHeader.jsx b/src/components/skills-quiz/SkillsQuizHeader.jsx
index d26baa396b..d6a79d227e 100644
--- a/src/components/skills-quiz/SkillsQuizHeader.jsx
+++ b/src/components/skills-quiz/SkillsQuizHeader.jsx
@@ -1,21 +1,19 @@
 import React from 'react';
 import edxLogo from './images/edx-logo.svg';
 
-function SkillsQuizHeader() {
-  return (
-    <div className="d-flex ml-2">
-      <img src={edxLogo} alt="edx-logo" height="110px" />
-      <div
-        className="ml-5 vertical-line"
-      />
-      <div style={{ minWidth: 'max-content' }} className="ml-5 header-text">
-        <h1 className="heading">Skills Builder</h1>
-        <h2 className="subheading">
-          Start your learning journey with edX
-        </h2>
-      </div>
+const SkillsQuizHeader = () => (
+  <div className="d-flex ml-2">
+    <img src={edxLogo} alt="edx-logo" height="110px" />
+    <div
+      className="ml-5 vertical-line"
+    />
+    <div style={{ minWidth: 'max-content' }} className="ml-5 header-text">
+      <h1 className="heading">Skills Builder</h1>
+      <h2 className="subheading">
+        Start your learning journey with edX
+      </h2>
     </div>
-  );
-}
+  </div>
+);
 
 export default SkillsQuizHeader;
diff --git a/src/components/skills-quiz/SkillsQuizPage.jsx b/src/components/skills-quiz/SkillsQuizPage.jsx
index 100b424187..530122cf38 100644
--- a/src/components/skills-quiz/SkillsQuizPage.jsx
+++ b/src/components/skills-quiz/SkillsQuizPage.jsx
@@ -5,10 +5,12 @@ import { Redirect } from 'react-router-dom';
 
 import SkillsQuiz from './SkillsQuiz';
 
-export default function DashboardPage() {
+const DashboardPage = () => {
   const config = getConfig();
   if (!config.ENABLE_SKILLS_QUIZ) {
     return <Redirect to="/" />;
   }
   return <SkillsQuiz />;
-}
+};
+
+export default DashboardPage;
diff --git a/src/components/skills-quiz/SkillsQuizStepper.jsx b/src/components/skills-quiz/SkillsQuizStepper.jsx
index 939722d248..4fdd7c55bd 100644
--- a/src/components/skills-quiz/SkillsQuizStepper.jsx
+++ b/src/components/skills-quiz/SkillsQuizStepper.jsx
@@ -49,7 +49,7 @@ import { SubsidyRequestsContext } from '../enterprise-subsidy-requests';
 import { saveSkillsGoalsAndJobsUserSelected } from './data/utils';
 import { fetchCourseEnrollments } from './data/service';
 
-function SkillsQuizStepper() {
+const SkillsQuizStepper = () => {
   const config = getConfig();
   const { userId } = getAuthenticatedUser();
   const [searchClient, courseIndex, jobIndex] = useMemo(
@@ -384,6 +384,6 @@ function SkillsQuizStepper() {
       </ModalDialog>
     </Stepper>
   );
-}
+};
 
 export default SkillsQuizStepper;
diff --git a/src/components/skills-quiz/data/tests/service.test.jsx b/src/components/skills-quiz/data/tests/service.test.jsx
index b95b16b2c7..25547b2254 100644
--- a/src/components/skills-quiz/data/tests/service.test.jsx
+++ b/src/components/skills-quiz/data/tests/service.test.jsx
@@ -42,6 +42,7 @@ describe('skills quiz service', () => {
     const skillsId = [1, 2];
     const interestedJobsId = [3, 4];
     const currentJobRoleId = 5;
+    // eslint-disable-next-line no-import-assign
     service.postSkillsGoalsAndJobsUserSelected = jest.fn()
       .mockImplementation(() => Promise.resolve({
       }));
diff --git a/src/components/skills-quiz/tests/GoalsDropdown.test.jsx b/src/components/skills-quiz/tests/GoalsDropdown.test.jsx
index 9c2bd8cec1..18189c6b9e 100644
--- a/src/components/skills-quiz/tests/GoalsDropdown.test.jsx
+++ b/src/components/skills-quiz/tests/GoalsDropdown.test.jsx
@@ -13,20 +13,18 @@ import GoalDropdown from '../GoalDropdown';
 import { SkillsContextProvider } from '../SkillsContextProvider';
 
 /* eslint-disable react/prop-types */
-function GoalDropdownWithContext({
+const GoalDropdownWithContext = ({
   initialAppState = {},
   initialUserSubsidyState = {},
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <SkillsContextProvider>
-          <GoalDropdown />
-        </SkillsContextProvider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <SkillsContextProvider>
+        <GoalDropdown />
+      </SkillsContextProvider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 const mockLocation = {
diff --git a/src/components/skills-quiz/tests/SearchCourseCard.test.jsx b/src/components/skills-quiz/tests/SearchCourseCard.test.jsx
index cbfbf12068..fb58d3161e 100644
--- a/src/components/skills-quiz/tests/SearchCourseCard.test.jsx
+++ b/src/components/skills-quiz/tests/SearchCourseCard.test.jsx
@@ -109,28 +109,26 @@ const defaultSubsidyRequestState = {
   catalogsForSubsidyRequests: [],
 };
 
-function SearchCourseCardWithContext({
+const SearchCourseCardWithContext = ({
   initialAppState = defaultAppState,
   initialSkillsState = defaultSkillsState,
   initialUserSubsidyState = defaultUserSubsidyState,
   initialSubsidyRequestState = defaultSubsidyRequestState,
   searchContext = defaultSearchContext,
   index,
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
-          <SearchContext.Provider value={searchContext}>
-            <SkillsContext.Provider value={initialSkillsState}>
-              <SearchCourseCard index={index} />
-            </SkillsContext.Provider>
-          </SearchContext.Provider>
-        </SubsidyRequestsContext.Provider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
+        <SearchContext.Provider value={searchContext}>
+          <SkillsContext.Provider value={initialSkillsState}>
+            <SearchCourseCard index={index} />
+          </SkillsContext.Provider>
+        </SearchContext.Provider>
+      </SubsidyRequestsContext.Provider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 
 describe('<SearchCourseCard />', () => {
   test('renders the correct data', async () => {
diff --git a/src/components/skills-quiz/tests/SearchCurrentJobCard.test.jsx b/src/components/skills-quiz/tests/SearchCurrentJobCard.test.jsx
index b3feda1ae0..50d245e57d 100644
--- a/src/components/skills-quiz/tests/SearchCurrentJobCard.test.jsx
+++ b/src/components/skills-quiz/tests/SearchCurrentJobCard.test.jsx
@@ -19,22 +19,20 @@ jest.mock('react-loading-skeleton', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-function SearchCurrentJobCardWithContext({
+const SearchCurrentJobCardWithContext = ({
   index,
   initialAppState,
   initialSearchState,
   initialJobsState,
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <SearchContext.Provider value={initialSearchState}>
-        <SkillsContextProvider initialState={initialJobsState}>
-          <SearchCurrentJobCard index={index} />
-        </SkillsContextProvider>
-      </SearchContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <SearchContext.Provider value={initialSearchState}>
+      <SkillsContextProvider initialState={initialJobsState}>
+        <SearchCurrentJobCard index={index} />
+      </SkillsContextProvider>
+    </SearchContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 const TEST_JOB_KEY = 'test-job-key';
diff --git a/src/components/skills-quiz/tests/SearchJobCard.test.jsx b/src/components/skills-quiz/tests/SearchJobCard.test.jsx
index 1b3225764e..ac4ec4fb4e 100644
--- a/src/components/skills-quiz/tests/SearchJobCard.test.jsx
+++ b/src/components/skills-quiz/tests/SearchJobCard.test.jsx
@@ -19,22 +19,20 @@ jest.mock('react-loading-skeleton', () => ({
 }));
 
 /* eslint-disable react/prop-types */
-function SearchJobCardWithContext({
+const SearchJobCardWithContext = ({
   index,
   initialAppState,
   initialSearchState,
   initialJobsState,
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <SearchContext.Provider value={initialSearchState}>
-        <SkillsContextProvider initialState={initialJobsState}>
-          <SearchJobCard index={index} />
-        </SkillsContextProvider>
-      </SearchContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <SearchContext.Provider value={initialSearchState}>
+      <SkillsContextProvider initialState={initialJobsState}>
+        <SearchJobCard index={index} />
+      </SkillsContextProvider>
+    </SearchContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 const TEST_JOB_KEY = 'test-job-key';
diff --git a/src/components/skills-quiz/tests/SearchPathways.test.jsx b/src/components/skills-quiz/tests/SearchPathways.test.jsx
index 3027a57d34..e1a8bb664b 100644
--- a/src/components/skills-quiz/tests/SearchPathways.test.jsx
+++ b/src/components/skills-quiz/tests/SearchPathways.test.jsx
@@ -100,28 +100,26 @@ const defaultSubsidyRequestState = {
   catalogsForSubsidyRequests: [],
 };
 
-function SearchPathwaysWithContext({
+const SearchPathwaysWithContext = ({
   initialAppState = defaultAppState,
   initialSkillsState = defaultSkillsState,
   initialUserSubsidyState = defaultUserSubsidyState,
   initialSubsidyRequestState = defaultSubsidyRequestState,
   initialSearchContext = defaultSearchContext,
   index,
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
-          <SearchContext.Provider value={initialSearchContext}>
-            <SkillsContext.Provider value={initialSkillsState}>
-              <SearchPathways index={index} />
-            </SkillsContext.Provider>
-          </SearchContext.Provider>
-        </SubsidyRequestsContext.Provider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
+        <SearchContext.Provider value={initialSearchContext}>
+          <SkillsContext.Provider value={initialSkillsState}>
+            <SearchPathways index={index} />
+          </SkillsContext.Provider>
+        </SearchContext.Provider>
+      </SubsidyRequestsContext.Provider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 
 describe('<SearchPathways />', () => {
   test('renders the correct data', async () => {
diff --git a/src/components/skills-quiz/tests/SearchProgramCard.test.jsx b/src/components/skills-quiz/tests/SearchProgramCard.test.jsx
index 33b952a20b..95e5a7d962 100644
--- a/src/components/skills-quiz/tests/SearchProgramCard.test.jsx
+++ b/src/components/skills-quiz/tests/SearchProgramCard.test.jsx
@@ -118,27 +118,25 @@ const defaultSubsidyRequestState = {
   catalogsForSubsidyRequests: [],
 };
 
-function SearchProgramCardWithContext({
+const SearchProgramCardWithContext = ({
   initialAppState = defaultAppState,
   initialSkillsState = defaultSkillsState,
   initialUserSubsidyState = defaultUserSubsidyState,
   initialSearchContext = defaultSearchContext,
   index,
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <SubsidyRequestsContext.Provider value={defaultSubsidyRequestState}>
-          <SearchContext.Provider value={initialSearchContext}>
-            <SkillsContext.Provider value={initialSkillsState}>
-              <SearchProgramCard index={index} />
-            </SkillsContext.Provider>
-          </SearchContext.Provider>
-        </SubsidyRequestsContext.Provider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <SubsidyRequestsContext.Provider value={defaultSubsidyRequestState}>
+        <SearchContext.Provider value={initialSearchContext}>
+          <SkillsContext.Provider value={initialSkillsState}>
+            <SearchProgramCard index={index} />
+          </SkillsContext.Provider>
+        </SearchContext.Provider>
+      </SubsidyRequestsContext.Provider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 
 describe('<SearchProgramCard />', () => {
   test('renders the correct data', async () => {
diff --git a/src/components/skills-quiz/tests/SelectJobCard.test.jsx b/src/components/skills-quiz/tests/SelectJobCard.test.jsx
index 0e21b9d08a..2c00cbdd11 100644
--- a/src/components/skills-quiz/tests/SelectJobCard.test.jsx
+++ b/src/components/skills-quiz/tests/SelectJobCard.test.jsx
@@ -8,20 +8,18 @@ import SelectJobCard from '../SelectJobCard';
 import { NOT_AVAILABLE } from '../constants';
 
 /* eslint-disable react/prop-types */
-function SelectJobCardWithContext({
+const SelectJobCardWithContext = ({
   initialJobCardState = {},
   initialAppState,
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <SearchContext.Provider>
-        <SkillsContextProvider initialState={initialJobCardState}>
-          <SelectJobCard />
-        </SkillsContextProvider>
-      </SearchContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <SearchContext.Provider>
+      <SkillsContextProvider initialState={initialJobCardState}>
+        <SelectJobCard />
+      </SkillsContextProvider>
+    </SearchContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 const TEST_MEDIAN_SALARY = '100000';
diff --git a/src/components/skills-quiz/tests/SelectedJobSkills.test.jsx b/src/components/skills-quiz/tests/SelectedJobSkills.test.jsx
index 35d13443f7..1db847f071 100644
--- a/src/components/skills-quiz/tests/SelectedJobSkills.test.jsx
+++ b/src/components/skills-quiz/tests/SelectedJobSkills.test.jsx
@@ -7,20 +7,18 @@ import { SkillsContextProvider } from '../SkillsContextProvider';
 import SelectedJobSkills from '../SelectedJobSkills';
 
 /* eslint-disable react/prop-types */
-function SelectedJobSkillsWithContext({
+const SelectedJobSkillsWithContext = ({
   initialSelectedJobSkillsState = {},
   initialAppState,
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <SearchContext.Provider>
-        <SkillsContextProvider initialState={initialSelectedJobSkillsState}>
-          <SelectedJobSkills />
-        </SkillsContextProvider>
-      </SearchContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <SearchContext.Provider>
+      <SkillsContextProvider initialState={initialSelectedJobSkillsState}>
+        <SelectedJobSkills />
+      </SkillsContextProvider>
+    </SearchContext.Provider>
+  </AppContext.Provider>
+);
 /* eslint-enable react/prop-types */
 
 const PROGRAMMING = 'Programming';
diff --git a/src/components/skills-quiz/tests/SkillsCourses.test.jsx b/src/components/skills-quiz/tests/SkillsCourses.test.jsx
index be6fa3eb3c..48c38a5a04 100644
--- a/src/components/skills-quiz/tests/SkillsCourses.test.jsx
+++ b/src/components/skills-quiz/tests/SkillsCourses.test.jsx
@@ -107,28 +107,26 @@ const defaultSubsidyRequestState = {
   catalogsForSubsidyRequests: [],
 };
 
-function SkillsCoursesWithContext({
+const SkillsCoursesWithContext = ({
   initialAppState = defaultAppState,
   initialSkillsState = defaultSkillsState,
   initialUserSubsidyState = defaultUserSubsidyState,
   initialSubsidyRequestState = defaultSubsidyRequestState,
   searchContext = defaultSearchContext,
   index,
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
-          <SearchContext.Provider value={searchContext}>
-            <SkillsContext.Provider value={initialSkillsState}>
-              <SkillsCourses index={index} />
-            </SkillsContext.Provider>
-          </SearchContext.Provider>
-        </SubsidyRequestsContext.Provider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
+        <SearchContext.Provider value={searchContext}>
+          <SkillsContext.Provider value={initialSkillsState}>
+            <SkillsCourses index={index} />
+          </SkillsContext.Provider>
+        </SearchContext.Provider>
+      </SubsidyRequestsContext.Provider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 
 describe('<SkillsCourses />', () => {
   test('renders the correct data', async () => {
diff --git a/src/components/skills-quiz/tests/SkillsQuiz.test.jsx b/src/components/skills-quiz/tests/SkillsQuiz.test.jsx
index 6e977d0154..3150373e75 100644
--- a/src/components/skills-quiz/tests/SkillsQuiz.test.jsx
+++ b/src/components/skills-quiz/tests/SkillsQuiz.test.jsx
@@ -59,21 +59,19 @@ const defaultSubsidyRequestState = {
   catalogsForSubsidyRequests: [],
 };
 
-function SkillsQuizWithContext({
+const SkillsQuizWithContext = ({
   initialAppState = defaultAppState,
   initialUserSubsidyState = defaultUserSubsidyState,
   initialSubsidyRequestState = defaultSubsidyRequestState,
-}) {
-  return (
-    <AppContext.Provider value={initialAppState}>
-      <UserSubsidyContext.Provider value={initialUserSubsidyState}>
-        <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
-          <SkillsQuiz />
-        </SubsidyRequestsContext.Provider>
-      </UserSubsidyContext.Provider>
-    </AppContext.Provider>
-  );
-}
+}) => (
+  <AppContext.Provider value={initialAppState}>
+    <UserSubsidyContext.Provider value={initialUserSubsidyState}>
+      <SubsidyRequestsContext.Provider value={initialSubsidyRequestState}>
+        <SkillsQuiz />
+      </SubsidyRequestsContext.Provider>
+    </UserSubsidyContext.Provider>
+  </AppContext.Provider>
+);
 
 describe('<SkillsQuiz />', () => {
   afterAll(() => {
diff --git a/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx b/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx
index 560e4b8d7a..c131f24944 100644
--- a/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx
+++ b/src/components/skills-quiz/tests/SkillsQuizStepper.test.jsx
@@ -69,7 +69,7 @@ const defaultSubsidyRequestState = {
   catalogsForSubsidyRequests: [],
 };
 
-function SkillsQuizStepperWrapper({ searchContext, skillsQuizContextState }) {
+const SkillsQuizStepperWrapper = ({ searchContext, skillsQuizContextState }) => {
   const contextValue = useMemo(() => ({ ...searchContext }), [searchContext]);
   const skillContextProvider = skillsQuizContextState ? (
     <SkillsContext.Provider value={skillsQuizContextState}>
@@ -101,7 +101,7 @@ function SkillsQuizStepperWrapper({ searchContext, skillsQuizContextState }) {
       </UserSubsidyContext.Provider>
     </AppContext.Provider>
   );
-}
+};
 SkillsQuizStepperWrapper.defaultProps = {
   searchContext: null,
   skillsQuizContextState: null,
diff --git a/src/components/system-wide-banner/SystemWideWarningBanner.jsx b/src/components/system-wide-banner/SystemWideWarningBanner.jsx
index 7fd7c4a191..c6a4d034b2 100644
--- a/src/components/system-wide-banner/SystemWideWarningBanner.jsx
+++ b/src/components/system-wide-banner/SystemWideWarningBanner.jsx
@@ -3,14 +3,12 @@ import PropTypes from 'prop-types';
 import { PageBanner, Icon } from '@edx/paragon';
 import { WarningFilled } from '@edx/paragon/icons';
 
-function SystemWideWarningBanner({ children }) {
-  return (
-    <PageBanner variant="warning">
-      <Icon src={WarningFilled} className="mr-2" />
-      {children}
-    </PageBanner>
-  );
-}
+const SystemWideWarningBanner = ({ children }) => (
+  <PageBanner variant="warning">
+    <Icon src={WarningFilled} className="mr-2" />
+    {children}
+  </PageBanner>
+);
 
 SystemWideWarningBanner.propTypes = {
   children: PropTypes.node.isRequired,
diff --git a/src/utils/tests.jsx b/src/utils/tests.jsx
index e960d6bd07..5197d927d1 100644
--- a/src/utils/tests.jsx
+++ b/src/utils/tests.jsx
@@ -13,9 +13,7 @@ export function renderWithRouter(
   } = {},
 ) {
   // eslint-disable-next-line react/prop-types
-  function Wrapper({ children }) {
-    return <Router history={history}>{children}</Router>;
-  }
+  const Wrapper = ({ children }) => <Router history={history}>{children}</Router>;
   return {
     ...render(ui, { wrapper: Wrapper }),
     // adding `history` to the returned utilities to allow us

From 3063711b7db2d4e272c02121c4703b9413ad756c Mon Sep 17 00:00:00 2001
From: Bilal Qamar <59555732+BilalQamar95@users.noreply.github.com>
Date: Thu, 17 Nov 2022 13:44:53 +0500
Subject: [PATCH 13/13] refactor: resolved eslint issues

---
 .../dashboard/sidebar/SubsidiesSummary.jsx    | 76 +++++++++----------
 1 file changed, 37 insertions(+), 39 deletions(-)

diff --git a/src/components/dashboard/sidebar/SubsidiesSummary.jsx b/src/components/dashboard/sidebar/SubsidiesSummary.jsx
index dd5bdc0005..f8ba3dc095 100644
--- a/src/components/dashboard/sidebar/SubsidiesSummary.jsx
+++ b/src/components/dashboard/sidebar/SubsidiesSummary.jsx
@@ -77,46 +77,44 @@ const SubsidiesSummary = ({
 
   return (
   // TODO: Design debt, don't have cards in a card
-    <>
-      <SidebarCard
-        cardSectionClassNames="border-remove"
-        cardClassNames={classNames('mb-5', { 'col-8 border-remove': programProgressPage })}
-      >
-        <div className={className} data-testid="subsidies-summary">
-          {hasActiveLicenseOrLicenseRequest && (
-            <SubscriptionSummaryCard
-              subscriptionPlan={subscriptionPlan}
-              licenseRequest={licenseRequests[0]}
-              courseEndDate={courseEndDate}
-              programProgressPage={programProgressPage}
-              className="mb-2 border-remove"
-            />
-          )}
-          {hasAssignedCodesOrCodeRequests && (
-            <CouponCodesSummaryCard
-              couponCodesCount={couponCodesCount}
-              couponCodeRequestsCount={couponCodeRequests.length}
-              totalCoursesEligibleForCertificate={totalCoursesEligibleForCertificate}
-              programProgressPage={programProgressPage}
-              className="mb-2 border-remove"
-            />
-          )}
-          {canEnrollWithEnterpriseOffers && (
-            <EnterpriseOffersSummaryCard
-              className="border-remove"
-              offers={enterpriseOffers}
-            />
-          )}
-        </div>
-        {searchCoursesCta && (
-          <SidebarCard
-            cardClassNames="border-remove"
-          >
-            {searchCoursesCta}
-          </SidebarCard>
+    <SidebarCard
+      cardSectionClassNames="border-remove"
+      cardClassNames={classNames('mb-5', { 'col-8 border-remove': programProgressPage })}
+    >
+      <div className={className} data-testid="subsidies-summary">
+        {hasActiveLicenseOrLicenseRequest && (
+          <SubscriptionSummaryCard
+            subscriptionPlan={subscriptionPlan}
+            licenseRequest={licenseRequests[0]}
+            courseEndDate={courseEndDate}
+            programProgressPage={programProgressPage}
+            className="mb-2 border-remove"
+          />
+        )}
+        {hasAssignedCodesOrCodeRequests && (
+          <CouponCodesSummaryCard
+            couponCodesCount={couponCodesCount}
+            couponCodeRequestsCount={couponCodeRequests.length}
+            totalCoursesEligibleForCertificate={totalCoursesEligibleForCertificate}
+            programProgressPage={programProgressPage}
+            className="mb-2 border-remove"
+          />
+        )}
+        {canEnrollWithEnterpriseOffers && (
+          <EnterpriseOffersSummaryCard
+            className="border-remove"
+            offers={enterpriseOffers}
+          />
         )}
-      </SidebarCard>
-    </>
+      </div>
+      {searchCoursesCta && (
+        <SidebarCard
+          cardClassNames="border-remove"
+        >
+          {searchCoursesCta}
+        </SidebarCard>
+      )}
+    </SidebarCard>
   );
 };