diff --git a/package-lock.json b/package-lock.json
index eb3659fdf4387cc0ec857c4ce1687d030155baab..1589ff07e8c78b5309cb52a25c28077677dc9c3d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17,9 +17,10 @@
         "@angular/platform-browser": "^17.3.12",
         "@angular/platform-browser-dynamic": "^17.3.12",
         "@angular/router": "^17.3.12",
-        "@edugouvfr/ngx-dsfr": "1.13.4",
+        "@edugouvfr/ngx-dsfr": "1.13.5",
         "@edugouvfr/ngx-dsfr-ext": "1.1.2",
         "@ng-select/ng-select": "^12.0.7",
+        "crisp-sdk-web": "^1.0.25",
         "ngx-matomo-client": "^6.4.1",
         "rxjs": "~7.8.0",
         "slugify": "^1.6.6",
@@ -2561,9 +2562,9 @@
       }
     },
     "node_modules/@edugouvfr/ngx-dsfr": {
-      "version": "1.13.4",
-      "resolved": "https://registry.npmjs.org/@edugouvfr/ngx-dsfr/-/ngx-dsfr-1.13.4.tgz",
-      "integrity": "sha512-O8t6MOyDi78QCsgeWNKCuh1YknQ1dhizpHl9Ybo1AMqZx0qxYQgauPzJlKREvqS4OZgvRn2df2Bww/Vz1eES9g==",
+      "version": "1.13.5",
+      "resolved": "https://registry.npmjs.org/@edugouvfr/ngx-dsfr/-/ngx-dsfr-1.13.5.tgz",
+      "integrity": "sha512-8uNZ5nP+kAY0M5ZP6bh73v49p6upSvU7507O3oUXMoCA4m3gSfCtHE/Dg7o46Q05L9VOeGGGi//+6D4lJNpefQ==",
       "license": "EUPL-1.2",
       "dependencies": {
         "@gouvfr/dsfr": "1.13.0",
@@ -2617,1063 +2618,875 @@
         }
       }
     },
-    "node_modules/@esbuild/aix-ppc64": {
+    "node_modules/@esbuild/linux-x64": {
       "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz",
-      "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz",
+      "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==",
       "cpu": [
-        "ppc64"
+        "x64"
       ],
       "dev": true,
       "license": "MIT",
       "optional": true,
       "os": [
-        "aix"
+        "linux"
       ],
       "engines": {
         "node": ">=12"
       }
     },
-    "node_modules/@esbuild/android-arm": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz",
-      "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==",
-      "cpu": [
-        "arm"
-      ],
+    "node_modules/@eslint-community/eslint-utils": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
+      "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
+      "dependencies": {
+        "eslint-visitor-keys": "^3.4.3"
+      },
       "engines": {
-        "node": ">=12"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
+      },
+      "peerDependencies": {
+        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
       }
     },
-    "node_modules/@esbuild/android-arm64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz",
-      "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@eslint-community/regexpp": {
+      "version": "4.12.1",
+      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+      "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
       }
     },
-    "node_modules/@esbuild/android-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz",
-      "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@eslint/eslintrc": {
+      "version": "2.1.4",
+      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
+      "dependencies": {
+        "ajv": "^6.12.4",
+        "debug": "^4.3.2",
+        "espree": "^9.6.0",
+        "globals": "^13.19.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"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/eslint"
       }
     },
-    "node_modules/@esbuild/darwin-arm64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz",
-      "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@eslint/eslintrc/node_modules/ajv": {
+      "version": "6.12.6",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
+      "dependencies": {
+        "fast-deep-equal": "^3.1.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/epoberezkin"
       }
     },
-    "node_modules/@esbuild/darwin-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz",
-      "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==",
-      "cpu": [
-        "x64"
-      ],
+    "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,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      "license": "Python-2.0"
     },
-    "node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz",
-      "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
-      "engines": {
-        "node": ">=12"
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
-    "node_modules/@esbuild/freebsd-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz",
-      "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@eslint/eslintrc/node_modules/globals": {
+      "version": "13.24.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
+      "dependencies": {
+        "type-fest": "^0.20.2"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/@esbuild/linux-arm": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz",
-      "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==",
-      "cpu": [
-        "arm"
-      ],
+    "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,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
       }
     },
-    "node_modules/@esbuild/linux-arm64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz",
-      "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "license": "MIT"
+    },
+    "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
       "engines": {
-        "node": ">=12"
+        "node": "*"
       }
     },
-    "node_modules/@esbuild/linux-ia32": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz",
-      "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==",
-      "cpu": [
-        "ia32"
-      ],
+    "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,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "license": "(MIT OR CC0-1.0)",
       "engines": {
-        "node": ">=12"
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/@esbuild/linux-loong64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz",
-      "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==",
-      "cpu": [
-        "loong64"
-      ],
+    "node_modules/@eslint/js": {
+      "version": "8.57.1",
+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
+      "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
       }
     },
-    "node_modules/@esbuild/linux-mips64el": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz",
-      "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==",
-      "cpu": [
-        "mips64el"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+    "node_modules/@gouvfr/dsfr": {
+      "version": "1.13.0",
+      "resolved": "https://registry.npmjs.org/@gouvfr/dsfr/-/dsfr-1.13.0.tgz",
+      "integrity": "sha512-I6JLYfE63dogk5qOx69gMfW/bKsm+daFgfx2QX75isbKBy5khlJdVxOD0A6ohvywvUJlEcZTmVK8rNHeVvGmgw==",
+      "license": "SEE LICENSE IN LICENSE.md",
       "engines": {
-        "node": ">=12"
+        "node": ">=18.16.1"
       }
     },
-    "node_modules/@esbuild/linux-ppc64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz",
-      "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==",
-      "cpu": [
-        "ppc64"
-      ],
+    "node_modules/@humanwhocodes/config-array": {
+      "version": "0.13.0",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
+      "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
+      "deprecated": "Use @eslint/config-array instead",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "license": "Apache-2.0",
+      "dependencies": {
+        "@humanwhocodes/object-schema": "^2.0.3",
+        "debug": "^4.3.1",
+        "minimatch": "^3.0.5"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=10.10.0"
       }
     },
-    "node_modules/@esbuild/linux-riscv64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz",
-      "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==",
-      "cpu": [
-        "riscv64"
-      ],
+    "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
       "engines": {
-        "node": ">=12"
+        "node": "*"
       }
     },
-    "node_modules/@esbuild/linux-s390x": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz",
-      "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==",
-      "cpu": [
-        "s390x"
-      ],
+    "node_modules/@humanwhocodes/module-importer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "license": "Apache-2.0",
       "engines": {
-        "node": ">=12"
+        "node": ">=12.22"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/nzakas"
       }
     },
-    "node_modules/@esbuild/linux-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz",
-      "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@humanwhocodes/object-schema": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+      "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+      "deprecated": "Use @eslint/object-schema instead",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "license": "BSD-3-Clause"
+    },
+    "node_modules/@isaacs/cliui": {
+      "version": "8.0.2",
+      "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "string-width": "^5.1.2",
+        "string-width-cjs": "npm:string-width@^4.2.0",
+        "strip-ansi": "^7.0.1",
+        "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+        "wrap-ansi": "^8.1.0",
+        "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+      },
       "engines": {
         "node": ">=12"
       }
     },
-    "node_modules/@esbuild/netbsd-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz",
-      "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
       "engines": {
         "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
       }
     },
-    "node_modules/@esbuild/openbsd-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz",
-      "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
       "engines": {
         "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/@esbuild/sunos-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz",
-      "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
+      "version": "9.2.2",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@isaacs/cliui/node_modules/string-width": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "sunos"
-      ],
+      "dependencies": {
+        "eastasianwidth": "^0.2.0",
+        "emoji-regex": "^9.2.2",
+        "strip-ansi": "^7.0.1"
+      },
       "engines": {
         "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/@esbuild/win32-arm64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz",
-      "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
       "engines": {
         "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
       }
     },
-    "node_modules/@esbuild/win32-ia32": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz",
-      "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==",
-      "cpu": [
-        "ia32"
-      ],
+    "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+      "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
+      "dependencies": {
+        "ansi-styles": "^6.1.0",
+        "string-width": "^5.0.1",
+        "strip-ansi": "^7.0.1"
+      },
       "engines": {
         "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
       }
     },
-    "node_modules/@esbuild/win32-x64": {
-      "version": "0.20.1",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz",
-      "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==",
-      "cpu": [
-        "x64"
-      ],
+    "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",
+      "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
+      "license": "ISC",
+      "dependencies": {
+        "camelcase": "^5.3.1",
+        "find-up": "^4.1.0",
+        "get-package-type": "^0.1.0",
+        "js-yaml": "^3.13.1",
+        "resolve-from": "^5.0.0"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=8"
       }
     },
-    "node_modules/@eslint-community/eslint-utils": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
-      "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
+    "node_modules/@istanbuljs/load-nyc-config/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,
       "license": "MIT",
       "dependencies": {
-        "eslint-visitor-keys": "^3.4.3"
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/eslint"
-      },
-      "peerDependencies": {
-        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+        "node": ">=8"
       }
     },
-    "node_modules/@eslint-community/regexpp": {
-      "version": "4.12.1",
-      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
-      "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
+    "node_modules/@istanbuljs/load-nyc-config/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,
       "license": "MIT",
+      "dependencies": {
+        "p-locate": "^4.1.0"
+      },
       "engines": {
-        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+        "node": ">=8"
       }
     },
-    "node_modules/@eslint/eslintrc": {
-      "version": "2.1.4",
-      "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
-      "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+    "node_modules/@istanbuljs/load-nyc-config/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,
       "license": "MIT",
       "dependencies": {
-        "ajv": "^6.12.4",
-        "debug": "^4.3.2",
-        "espree": "^9.6.0",
-        "globals": "^13.19.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"
+        "p-try": "^2.0.0"
       },
       "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+        "node": ">=6"
       },
       "funding": {
-        "url": "https://opencollective.com/eslint"
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/ajv": {
-      "version": "6.12.6",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
-      "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+    "node_modules/@istanbuljs/load-nyc-config/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,
       "license": "MIT",
       "dependencies": {
-        "fast-deep-equal": "^3.1.1",
-        "fast-json-stable-stringify": "^2.0.0",
-        "json-schema-traverse": "^0.4.1",
-        "uri-js": "^4.2.2"
+        "p-limit": "^2.2.0"
       },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/epoberezkin"
+      "engines": {
+        "node": ">=8"
       }
     },
-    "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,
-      "license": "Python-2.0"
-    },
-    "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+    "node_modules/@istanbuljs/schema": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+      "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
+      "engines": {
+        "node": ">=8"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/globals": {
-      "version": "13.24.0",
-      "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
-      "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+    "node_modules/@jest/schemas": {
+      "version": "29.6.3",
+      "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+      "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "type-fest": "^0.20.2"
+        "@sinclair/typebox": "^0.27.8"
       },
       "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
-    "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==",
+    "node_modules/@jridgewell/gen-mapping": {
+      "version": "0.3.8",
+      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+      "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "argparse": "^2.0.1"
+        "@jridgewell/set-array": "^1.2.1",
+        "@jridgewell/sourcemap-codec": "^1.4.10",
+        "@jridgewell/trace-mapping": "^0.3.24"
       },
-      "bin": {
-        "js-yaml": "bin/js-yaml.js"
+      "engines": {
+        "node": ">=6.0.0"
       }
     },
-    "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+    "node_modules/@jridgewell/resolve-uri": {
       "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
       "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
+      "license": "MIT",
       "engines": {
-        "node": "*"
+        "node": ">=6.0.0"
       }
     },
-    "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==",
+    "node_modules/@jridgewell/set-array": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
       "dev": true,
-      "license": "(MIT OR CC0-1.0)",
+      "license": "MIT",
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=6.0.0"
       }
     },
-    "node_modules/@eslint/js": {
-      "version": "8.57.1",
-      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
-      "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
+    "node_modules/@jridgewell/source-map": {
+      "version": "0.3.6",
+      "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
+      "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+      "dependencies": {
+        "@jridgewell/gen-mapping": "^0.3.5",
+        "@jridgewell/trace-mapping": "^0.3.25"
       }
     },
-    "node_modules/@gouvfr/dsfr": {
-      "version": "1.13.0",
-      "resolved": "https://registry.npmjs.org/@gouvfr/dsfr/-/dsfr-1.13.0.tgz",
-      "integrity": "sha512-I6JLYfE63dogk5qOx69gMfW/bKsm+daFgfx2QX75isbKBy5khlJdVxOD0A6ohvywvUJlEcZTmVK8rNHeVvGmgw==",
-      "license": "SEE LICENSE IN LICENSE.md",
-      "engines": {
-        "node": ">=18.16.1"
-      }
+    "node_modules/@jridgewell/sourcemap-codec": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+      "dev": true,
+      "license": "MIT"
     },
-    "node_modules/@humanwhocodes/config-array": {
-      "version": "0.13.0",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
-      "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
-      "deprecated": "Use @eslint/config-array instead",
+    "node_modules/@jridgewell/trace-mapping": {
+      "version": "0.3.25",
+      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
       "dev": true,
-      "license": "Apache-2.0",
+      "license": "MIT",
       "dependencies": {
-        "@humanwhocodes/object-schema": "^2.0.3",
-        "debug": "^4.3.1",
-        "minimatch": "^3.0.5"
-      },
-      "engines": {
-        "node": ">=10.10.0"
+        "@jridgewell/resolve-uri": "^3.1.0",
+        "@jridgewell/sourcemap-codec": "^1.4.14"
       }
     },
-    "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+    "node_modules/@leichtgewicht/ip-codec": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
+      "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@ljharb/through": {
+      "version": "2.3.14",
+      "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.14.tgz",
+      "integrity": "sha512-ajBvlKpWucBB17FuQYUShqpqy8GRgYEpJW0vWJbUu1CV9lWyrDCapy0lScU8T8Z6qn49sSwJB3+M+evYIdGg+A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
+        "call-bind": "^1.0.8"
+      },
+      "engines": {
+        "node": ">= 0.4"
       }
     },
-    "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "license": "ISC",
+    "node_modules/@ng-select/ng-select": {
+      "version": "12.0.7",
+      "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-12.0.7.tgz",
+      "integrity": "sha512-Eht1zlLP0DJxiXcKnq3aY/EJ8odomgU0hM0BJoPY6oX3XFHndtFtdPxlZfhVtQn+FwyDEh7306rRx6digxVssA==",
+      "license": "MIT",
       "dependencies": {
-        "brace-expansion": "^1.1.7"
+        "tslib": "^2.3.1"
       },
       "engines": {
-        "node": "*"
+        "node": ">= 16",
+        "npm": ">= 8"
+      },
+      "peerDependencies": {
+        "@angular/common": "^17.0.0-rc.0",
+        "@angular/core": "^17.0.0-rc.0",
+        "@angular/forms": "^17.0.0-rc.0"
       }
     },
-    "node_modules/@humanwhocodes/module-importer": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
-      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+    "node_modules/@ngtools/webpack": {
+      "version": "17.3.12",
+      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.12.tgz",
+      "integrity": "sha512-zFFFpcYsqKWdQNNKNZZIouaJco5LQ6sIFxnrG1tbn6sApFWWKRiDS3mguWdyZfD1R4yD4ZaZApGdWhfwJLuM0w==",
       "dev": true,
-      "license": "Apache-2.0",
+      "license": "MIT",
       "engines": {
-        "node": ">=12.22"
+        "node": "^18.13.0 || >=20.9.0",
+        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+        "yarn": ">= 1.13.0"
       },
-      "funding": {
-        "type": "github",
-        "url": "https://github.com/sponsors/nzakas"
+      "peerDependencies": {
+        "@angular/compiler-cli": "^17.0.0",
+        "typescript": ">=5.2 <5.5",
+        "webpack": "^5.54.0"
       }
     },
-    "node_modules/@humanwhocodes/object-schema": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
-      "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
-      "deprecated": "Use @eslint/object-schema instead",
+    "node_modules/@ngx-env/builder": {
+      "version": "16.1.3",
+      "resolved": "https://registry.npmjs.org/@ngx-env/builder/-/builder-16.1.3.tgz",
+      "integrity": "sha512-Us17dnTqhC/RzHmcK9i0iJd9KpyZopsSzZwPuRDBhLxhn8Qs1jxRbDEMsEtuZOLbwfzJo1TUQsOZBF6TPT/SsA==",
       "dev": true,
-      "license": "BSD-3-Clause"
+      "license": "MIT",
+      "dependencies": {
+        "@dotenv-run/webpack": "^1.0.1"
+      }
     },
-    "node_modules/@isaacs/cliui": {
-      "version": "8.0.2",
-      "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
-      "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+    "node_modules/@nodelib/fs.scandir": {
+      "version": "2.1.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "string-width": "^5.1.2",
-        "string-width-cjs": "npm:string-width@^4.2.0",
-        "strip-ansi": "^7.0.1",
-        "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
-        "wrap-ansi": "^8.1.0",
-        "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+        "@nodelib/fs.stat": "2.0.5",
+        "run-parallel": "^1.1.9"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">= 8"
       }
     },
-    "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
-      "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
+    "node_modules/@nodelib/fs.stat": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+        "node": ">= 8"
       }
     },
-    "node_modules/@isaacs/cliui/node_modules/ansi-styles": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
-      "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+    "node_modules/@nodelib/fs.walk": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">=12"
+      "dependencies": {
+        "@nodelib/fs.scandir": "2.1.5",
+        "fastq": "^1.6.0"
       },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      "engines": {
+        "node": ">= 8"
       }
     },
-    "node_modules/@isaacs/cliui/node_modules/emoji-regex": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@isaacs/cliui/node_modules/string-width": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
-      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+    "node_modules/@npmcli/agent": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz",
+      "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "eastasianwidth": "^0.2.0",
-        "emoji-regex": "^9.2.2",
-        "strip-ansi": "^7.0.1"
+        "agent-base": "^7.1.0",
+        "http-proxy-agent": "^7.0.0",
+        "https-proxy-agent": "^7.0.1",
+        "lru-cache": "^10.0.1",
+        "socks-proxy-agent": "^8.0.3"
       },
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
-      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+    "node_modules/@npmcli/agent/node_modules/lru-cache": {
+      "version": "10.4.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC"
+    },
+    "node_modules/@npmcli/fs": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz",
+      "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==",
+      "dev": true,
+      "license": "ISC",
       "dependencies": {
-        "ansi-regex": "^6.0.1"
+        "semver": "^7.3.5"
       },
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
-      "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+    "node_modules/@npmcli/git": {
+      "version": "5.0.8",
+      "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz",
+      "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "ansi-styles": "^6.1.0",
-        "string-width": "^5.0.1",
-        "strip-ansi": "^7.0.1"
+        "@npmcli/promise-spawn": "^7.0.0",
+        "ini": "^4.1.3",
+        "lru-cache": "^10.0.1",
+        "npm-pick-manifest": "^9.0.0",
+        "proc-log": "^4.0.0",
+        "promise-inflight": "^1.0.1",
+        "promise-retry": "^2.0.1",
+        "semver": "^7.3.5",
+        "which": "^4.0.0"
       },
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+        "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "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",
-      "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+    "node_modules/@npmcli/git/node_modules/ini": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz",
+      "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==",
       "dev": true,
       "license": "ISC",
-      "dependencies": {
-        "camelcase": "^5.3.1",
-        "find-up": "^4.1.0",
-        "get-package-type": "^0.1.0",
-        "js-yaml": "^3.13.1",
-        "resolve-from": "^5.0.0"
-      },
       "engines": {
-        "node": ">=8"
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/@istanbuljs/load-nyc-config/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==",
+    "node_modules/@npmcli/git/node_modules/isexe": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+      "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "locate-path": "^5.0.0",
-        "path-exists": "^4.0.0"
-      },
+      "license": "ISC",
       "engines": {
-        "node": ">=8"
+        "node": ">=16"
       }
     },
-    "node_modules/@istanbuljs/load-nyc-config/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==",
+    "node_modules/@npmcli/git/node_modules/lru-cache": {
+      "version": "10.4.3",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
       "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "p-locate": "^4.1.0"
-      },
+      "license": "ISC"
+    },
+    "node_modules/@npmcli/git/node_modules/proc-log": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
+      "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
+      "dev": true,
+      "license": "ISC",
       "engines": {
-        "node": ">=8"
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/@istanbuljs/load-nyc-config/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==",
+    "node_modules/@npmcli/git/node_modules/which": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+      "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "p-try": "^2.0.0"
+        "isexe": "^3.1.1"
       },
-      "engines": {
-        "node": ">=6"
+      "bin": {
+        "node-which": "bin/which.js"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "engines": {
+        "node": "^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/@istanbuljs/load-nyc-config/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==",
+    "node_modules/@npmcli/installed-package-contents": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz",
+      "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "p-limit": "^2.2.0"
+        "npm-bundled": "^3.0.0",
+        "npm-normalize-package-bin": "^3.0.0"
+      },
+      "bin": {
+        "installed-package-contents": "bin/index.js"
       },
       "engines": {
-        "node": ">=8"
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/@istanbuljs/schema": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
-      "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+    "node_modules/@npmcli/node-gyp": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz",
+      "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "engines": {
-        "node": ">=8"
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/@jest/schemas": {
-      "version": "29.6.3",
-      "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
-      "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+    "node_modules/@npmcli/package-json": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz",
+      "integrity": "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "@sinclair/typebox": "^0.27.8"
+        "@npmcli/git": "^5.0.0",
+        "glob": "^10.2.2",
+        "hosted-git-info": "^7.0.0",
+        "json-parse-even-better-errors": "^3.0.0",
+        "normalize-package-data": "^6.0.0",
+        "proc-log": "^4.0.0",
+        "semver": "^7.5.3"
       },
       "engines": {
-        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+        "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/@jridgewell/gen-mapping": {
-      "version": "0.3.8",
-      "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
-      "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+    "node_modules/@npmcli/package-json/node_modules/glob": {
+      "version": "10.4.5",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "@jridgewell/set-array": "^1.2.1",
-        "@jridgewell/sourcemap-codec": "^1.4.10",
-        "@jridgewell/trace-mapping": "^0.3.24"
+        "foreground-child": "^3.1.0",
+        "jackspeak": "^3.1.2",
+        "minimatch": "^9.0.4",
+        "minipass": "^7.1.2",
+        "package-json-from-dist": "^1.0.0",
+        "path-scurry": "^1.11.1"
       },
-      "engines": {
-        "node": ">=6.0.0"
+      "bin": {
+        "glob": "dist/esm/bin.mjs"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
-    "node_modules/@jridgewell/resolve-uri": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
-      "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+    "node_modules/@npmcli/package-json/node_modules/proc-log": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
+      "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "engines": {
-        "node": ">=6.0.0"
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/@jridgewell/set-array": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
-      "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+    "node_modules/@npmcli/promise-spawn": {
+      "version": "7.0.2",
+      "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz",
+      "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==",
       "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/source-map": {
-      "version": "0.3.6",
-      "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
-      "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/gen-mapping": "^0.3.5",
-        "@jridgewell/trace-mapping": "^0.3.25"
-      }
-    },
-    "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
-      "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.25",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
-      "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@jridgewell/resolve-uri": "^3.1.0",
-        "@jridgewell/sourcemap-codec": "^1.4.14"
-      }
-    },
-    "node_modules/@leichtgewicht/ip-codec": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
-      "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@ljharb/through": {
-      "version": "2.3.14",
-      "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.14.tgz",
-      "integrity": "sha512-ajBvlKpWucBB17FuQYUShqpqy8GRgYEpJW0vWJbUu1CV9lWyrDCapy0lScU8T8Z6qn49sSwJB3+M+evYIdGg+A==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
-    },
-    "node_modules/@ng-select/ng-select": {
-      "version": "12.0.7",
-      "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-12.0.7.tgz",
-      "integrity": "sha512-Eht1zlLP0DJxiXcKnq3aY/EJ8odomgU0hM0BJoPY6oX3XFHndtFtdPxlZfhVtQn+FwyDEh7306rRx6digxVssA==",
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "tslib": "^2.3.1"
+        "which": "^4.0.0"
       },
       "engines": {
-        "node": ">= 16",
-        "npm": ">= 8"
-      },
-      "peerDependencies": {
-        "@angular/common": "^17.0.0-rc.0",
-        "@angular/core": "^17.0.0-rc.0",
-        "@angular/forms": "^17.0.0-rc.0"
+        "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/@ngtools/webpack": {
-      "version": "17.3.12",
-      "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-17.3.12.tgz",
-      "integrity": "sha512-zFFFpcYsqKWdQNNKNZZIouaJco5LQ6sIFxnrG1tbn6sApFWWKRiDS3mguWdyZfD1R4yD4ZaZApGdWhfwJLuM0w==",
+    "node_modules/@npmcli/promise-spawn/node_modules/isexe": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+      "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "engines": {
-        "node": "^18.13.0 || >=20.9.0",
-        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
-        "yarn": ">= 1.13.0"
-      },
-      "peerDependencies": {
-        "@angular/compiler-cli": "^17.0.0",
-        "typescript": ">=5.2 <5.5",
-        "webpack": "^5.54.0"
-      }
-    },
-    "node_modules/@ngx-env/builder": {
-      "version": "16.1.3",
-      "resolved": "https://registry.npmjs.org/@ngx-env/builder/-/builder-16.1.3.tgz",
-      "integrity": "sha512-Us17dnTqhC/RzHmcK9i0iJd9KpyZopsSzZwPuRDBhLxhn8Qs1jxRbDEMsEtuZOLbwfzJo1TUQsOZBF6TPT/SsA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@dotenv-run/webpack": "^1.0.1"
+        "node": ">=16"
       }
     },
-    "node_modules/@nodelib/fs.scandir": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
-      "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+    "node_modules/@npmcli/promise-spawn/node_modules/which": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+      "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "@nodelib/fs.stat": "2.0.5",
-        "run-parallel": "^1.1.9"
+        "isexe": "^3.1.1"
       },
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.stat": {
-      "version": "2.0.5",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
-      "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 8"
-      }
-    },
-    "node_modules/@nodelib/fs.walk": {
-      "version": "1.2.8",
-      "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
-      "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@nodelib/fs.scandir": "2.1.5",
-        "fastq": "^1.6.0"
+      "bin": {
+        "node-which": "bin/which.js"
       },
       "engines": {
-        "node": ">= 8"
+        "node": "^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/@npmcli/agent": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz",
-      "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==",
+    "node_modules/@npmcli/redact": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz",
+      "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==",
       "dev": true,
       "license": "ISC",
-      "dependencies": {
-        "agent-base": "^7.1.0",
-        "http-proxy-agent": "^7.0.0",
-        "https-proxy-agent": "^7.0.1",
-        "lru-cache": "^10.0.1",
-        "socks-proxy-agent": "^8.0.3"
-      },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/@npmcli/agent/node_modules/lru-cache": {
-      "version": "10.4.3",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
-      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/@npmcli/fs": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz",
-      "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "semver": "^7.3.5"
-      },
-      "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@npmcli/git": {
-      "version": "5.0.8",
-      "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz",
-      "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==",
+    "node_modules/@npmcli/run-script": {
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz",
+      "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
+        "@npmcli/node-gyp": "^3.0.0",
+        "@npmcli/package-json": "^5.0.0",
         "@npmcli/promise-spawn": "^7.0.0",
-        "ini": "^4.1.3",
-        "lru-cache": "^10.0.1",
-        "npm-pick-manifest": "^9.0.0",
-        "proc-log": "^4.0.0",
-        "promise-inflight": "^1.0.1",
-        "promise-retry": "^2.0.1",
-        "semver": "^7.3.5",
+        "node-gyp": "^10.0.0",
         "which": "^4.0.0"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/@npmcli/git/node_modules/ini": {
-      "version": "4.1.3",
-      "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz",
-      "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==",
-      "dev": true,
-      "license": "ISC",
-      "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@npmcli/git/node_modules/isexe": {
+    "node_modules/@npmcli/run-script/node_modules/isexe": {
       "version": "3.1.1",
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
       "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
@@ -3683,24 +3496,7 @@
         "node": ">=16"
       }
     },
-    "node_modules/@npmcli/git/node_modules/lru-cache": {
-      "version": "10.4.3",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
-      "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/@npmcli/git/node_modules/proc-log": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
-      "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
-      "dev": true,
-      "license": "ISC",
-      "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@npmcli/git/node_modules/which": {
+    "node_modules/@npmcli/run-script/node_modules/which": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
       "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
@@ -3716,642 +3512,235 @@
         "node": "^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/@npmcli/installed-package-contents": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz",
-      "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==",
+    "node_modules/@pkgjs/parseargs": {
+      "version": "0.11.0",
+      "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+      "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
       "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "npm-bundled": "^3.0.0",
-        "npm-normalize-package-bin": "^3.0.0"
-      },
-      "bin": {
-        "installed-package-contents": "bin/index.js"
-      },
+      "license": "MIT",
+      "optional": true,
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": ">=14"
       }
     },
-    "node_modules/@npmcli/node-gyp": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz",
-      "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==",
+    "node_modules/@pkgr/core": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
+      "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://opencollective.com/unts"
       }
     },
-    "node_modules/@npmcli/package-json": {
-      "version": "5.2.1",
-      "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.1.tgz",
-      "integrity": "sha512-f7zYC6kQautXHvNbLEWgD/uGu1+xCn9izgqBfgItWSx22U0ZDekxN08A1vM8cTxj/cRVe0Q94Ode+tdoYmIOOQ==",
+    "node_modules/@rollup/rollup-linux-x64-gnu": {
+      "version": "4.34.6",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz",
+      "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==",
+      "cpu": [
+        "x64"
+      ],
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rollup/rollup-linux-x64-musl": {
+      "version": "4.34.6",
+      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz",
+      "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "license": "MIT",
+      "optional": true,
+      "os": [
+        "linux"
+      ]
+    },
+    "node_modules/@rtsao/scc": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
+      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@schematics/angular": {
+      "version": "17.3.12",
+      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.12.tgz",
+      "integrity": "sha512-fGFoyq1pEzwtpqHi//erd5nO9KPMmEYTM0oF+XrybNAvm84B2iVSWNm+8uozmEy4QgYuayKzGnGK3NlprC/8rQ==",
+      "dev": true,
+      "license": "MIT",
       "dependencies": {
-        "@npmcli/git": "^5.0.0",
-        "glob": "^10.2.2",
-        "hosted-git-info": "^7.0.0",
-        "json-parse-even-better-errors": "^3.0.0",
-        "normalize-package-data": "^6.0.0",
-        "proc-log": "^4.0.0",
-        "semver": "^7.5.3"
+        "@angular-devkit/core": "17.3.12",
+        "@angular-devkit/schematics": "17.3.12",
+        "jsonc-parser": "3.2.1"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": "^18.13.0 || >=20.9.0",
+        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
+        "yarn": ">= 1.13.0"
       }
     },
-    "node_modules/@npmcli/package-json/node_modules/glob": {
-      "version": "10.4.5",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
-      "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+    "node_modules/@sigstore/bundle": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz",
+      "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==",
       "dev": true,
-      "license": "ISC",
+      "license": "Apache-2.0",
       "dependencies": {
-        "foreground-child": "^3.1.0",
-        "jackspeak": "^3.1.2",
-        "minimatch": "^9.0.4",
-        "minipass": "^7.1.2",
-        "package-json-from-dist": "^1.0.0",
-        "path-scurry": "^1.11.1"
-      },
-      "bin": {
-        "glob": "dist/esm/bin.mjs"
+        "@sigstore/protobuf-specs": "^0.3.2"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
+      "engines": {
+        "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/@npmcli/package-json/node_modules/proc-log": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
-      "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
+    "node_modules/@sigstore/core": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz",
+      "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==",
       "dev": true,
-      "license": "ISC",
+      "license": "Apache-2.0",
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/@npmcli/promise-spawn": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz",
-      "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==",
+    "node_modules/@sigstore/protobuf-specs": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz",
+      "integrity": "sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==",
       "dev": true,
-      "license": "ISC",
+      "license": "Apache-2.0",
+      "engines": {
+        "node": "^18.17.0 || >=20.5.0"
+      }
+    },
+    "node_modules/@sigstore/sign": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz",
+      "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==",
+      "dev": true,
+      "license": "Apache-2.0",
       "dependencies": {
-        "which": "^4.0.0"
+        "@sigstore/bundle": "^2.3.2",
+        "@sigstore/core": "^1.0.0",
+        "@sigstore/protobuf-specs": "^0.3.2",
+        "make-fetch-happen": "^13.0.1",
+        "proc-log": "^4.2.0",
+        "promise-retry": "^2.0.1"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/@npmcli/promise-spawn/node_modules/isexe": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
-      "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+    "node_modules/@sigstore/sign/node_modules/proc-log": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
+      "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
       "dev": true,
       "license": "ISC",
       "engines": {
-        "node": ">=16"
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/@npmcli/promise-spawn/node_modules/which": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
-      "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+    "node_modules/@sigstore/tuf": {
+      "version": "2.3.4",
+      "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz",
+      "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==",
       "dev": true,
-      "license": "ISC",
+      "license": "Apache-2.0",
       "dependencies": {
-        "isexe": "^3.1.1"
-      },
-      "bin": {
-        "node-which": "bin/which.js"
+        "@sigstore/protobuf-specs": "^0.3.2",
+        "tuf-js": "^2.2.1"
       },
-      "engines": {
-        "node": "^16.13.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@npmcli/redact": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz",
-      "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==",
-      "dev": true,
-      "license": "ISC",
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/@npmcli/run-script": {
-      "version": "7.0.4",
-      "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.4.tgz",
-      "integrity": "sha512-9ApYM/3+rBt9V80aYg6tZfzj3UWdiYyCt7gJUD1VJKvWF5nwKDSICXbYIQbspFTq6TOpbsEtIC0LArB8d9PFmg==",
+    "node_modules/@sigstore/verify": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz",
+      "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==",
       "dev": true,
-      "license": "ISC",
+      "license": "Apache-2.0",
       "dependencies": {
-        "@npmcli/node-gyp": "^3.0.0",
-        "@npmcli/package-json": "^5.0.0",
-        "@npmcli/promise-spawn": "^7.0.0",
-        "node-gyp": "^10.0.0",
-        "which": "^4.0.0"
+        "@sigstore/bundle": "^2.3.2",
+        "@sigstore/core": "^1.1.0",
+        "@sigstore/protobuf-specs": "^0.3.2"
       },
       "engines": {
         "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/@npmcli/run-script/node_modules/isexe": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
-      "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+    "node_modules/@sinclair/typebox": {
+      "version": "0.27.8",
+      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+      "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT"
+    },
+    "node_modules/@socket.io/component-emitter": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
+      "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/@tufjs/canonical-json": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz",
+      "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==",
+      "dev": true,
+      "license": "MIT",
       "engines": {
-        "node": ">=16"
+        "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/@npmcli/run-script/node_modules/which": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
-      "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
+    "node_modules/@tufjs/models": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz",
+      "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "isexe": "^3.1.1"
-      },
-      "bin": {
-        "node-which": "bin/which.js"
+        "@tufjs/canonical-json": "2.0.0",
+        "minimatch": "^9.0.4"
       },
       "engines": {
-        "node": "^16.13.0 || >=18.0.0"
+        "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/@pkgjs/parseargs": {
-      "version": "0.11.0",
-      "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
-      "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+    "node_modules/@types/body-parser": {
+      "version": "1.19.5",
+      "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
+      "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "engines": {
-        "node": ">=14"
+      "dependencies": {
+        "@types/connect": "*",
+        "@types/node": "*"
       }
     },
-    "node_modules/@pkgr/core": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz",
-      "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==",
+    "node_modules/@types/bonjour": {
+      "version": "3.5.13",
+      "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz",
+      "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/unts"
+      "dependencies": {
+        "@types/node": "*"
       }
     },
-    "node_modules/@rollup/rollup-android-arm-eabi": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.6.tgz",
-      "integrity": "sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-android-arm64": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.6.tgz",
-      "integrity": "sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-arm64": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.6.tgz",
-      "integrity": "sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-darwin-x64": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.6.tgz",
-      "integrity": "sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ]
-    },
-    "node_modules/@rollup/rollup-freebsd-arm64": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.6.tgz",
-      "integrity": "sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-freebsd-x64": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.6.tgz",
-      "integrity": "sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.6.tgz",
-      "integrity": "sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.6.tgz",
-      "integrity": "sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==",
-      "cpu": [
-        "arm"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-gnu": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.6.tgz",
-      "integrity": "sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-arm64-musl": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.6.tgz",
-      "integrity": "sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.6.tgz",
-      "integrity": "sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==",
-      "cpu": [
-        "loong64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.6.tgz",
-      "integrity": "sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==",
-      "cpu": [
-        "ppc64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.6.tgz",
-      "integrity": "sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==",
-      "cpu": [
-        "riscv64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-s390x-gnu": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.6.tgz",
-      "integrity": "sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==",
-      "cpu": [
-        "s390x"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-x64-gnu": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.6.tgz",
-      "integrity": "sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-linux-x64-musl": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.6.tgz",
-      "integrity": "sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-arm64-msvc": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.6.tgz",
-      "integrity": "sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==",
-      "cpu": [
-        "arm64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-ia32-msvc": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.6.tgz",
-      "integrity": "sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==",
-      "cpu": [
-        "ia32"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rollup/rollup-win32-x64-msvc": {
-      "version": "4.34.6",
-      "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.6.tgz",
-      "integrity": "sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ]
-    },
-    "node_modules/@rtsao/scc": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
-      "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@schematics/angular": {
-      "version": "17.3.12",
-      "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.3.12.tgz",
-      "integrity": "sha512-fGFoyq1pEzwtpqHi//erd5nO9KPMmEYTM0oF+XrybNAvm84B2iVSWNm+8uozmEy4QgYuayKzGnGK3NlprC/8rQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@angular-devkit/core": "17.3.12",
-        "@angular-devkit/schematics": "17.3.12",
-        "jsonc-parser": "3.2.1"
-      },
-      "engines": {
-        "node": "^18.13.0 || >=20.9.0",
-        "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
-        "yarn": ">= 1.13.0"
-      }
-    },
-    "node_modules/@sigstore/bundle": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz",
-      "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@sigstore/protobuf-specs": "^0.3.2"
-      },
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@sigstore/core": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz",
-      "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@sigstore/protobuf-specs": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz",
-      "integrity": "sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "engines": {
-        "node": "^18.17.0 || >=20.5.0"
-      }
-    },
-    "node_modules/@sigstore/sign": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz",
-      "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@sigstore/bundle": "^2.3.2",
-        "@sigstore/core": "^1.0.0",
-        "@sigstore/protobuf-specs": "^0.3.2",
-        "make-fetch-happen": "^13.0.1",
-        "proc-log": "^4.2.0",
-        "promise-retry": "^2.0.1"
-      },
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@sigstore/sign/node_modules/proc-log": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
-      "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
-      "dev": true,
-      "license": "ISC",
-      "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@sigstore/tuf": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz",
-      "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@sigstore/protobuf-specs": "^0.3.2",
-        "tuf-js": "^2.2.1"
-      },
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@sigstore/verify": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz",
-      "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "@sigstore/bundle": "^2.3.2",
-        "@sigstore/core": "^1.1.0",
-        "@sigstore/protobuf-specs": "^0.3.2"
-      },
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@sinclair/typebox": {
-      "version": "0.27.8",
-      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
-      "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@socket.io/component-emitter": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
-      "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/@tufjs/canonical-json": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz",
-      "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@tufjs/models": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz",
-      "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@tufjs/canonical-json": "2.0.0",
-        "minimatch": "^9.0.4"
-      },
-      "engines": {
-        "node": "^16.14.0 || >=18.0.0"
-      }
-    },
-    "node_modules/@types/body-parser": {
-      "version": "1.19.5",
-      "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
-      "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/connect": "*",
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/bonjour": {
-      "version": "3.5.13",
-      "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz",
-      "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "@types/node": "*"
-      }
-    },
-    "node_modules/@types/connect": {
-      "version": "3.4.38",
-      "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
-      "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
+    "node_modules/@types/connect": {
+      "version": "3.4.38",
+      "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
+      "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6685,6 +6074,12 @@
         "js-yaml": "bin/js-yaml.js"
       }
     },
+    "node_modules/crisp-sdk-web": {
+      "version": "1.0.25",
+      "resolved": "https://registry.npmjs.org/crisp-sdk-web/-/crisp-sdk-web-1.0.25.tgz",
+      "integrity": "sha512-CWTHFFeHRV0oqiXoPh/aIAKhFs6xcIM4NenGPnClAMCZUDQgQsF1OWmZWmnVNjJriXUmWRgDfeUxcxygS0dCRA==",
+      "license": "MIT"
+    },
     "node_modules/critters": {
       "version": "0.0.22",
       "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.22.tgz",
@@ -8660,28 +8055,13 @@
       "dev": true,
       "license": "Unlicense"
     },
-    "node_modules/fs.realpath": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
-      "dev": true,
-      "license": "ISC"
-    },
-    "node_modules/fsevents": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
-      "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
-      "dev": true,
-      "hasInstallScript": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
-      "engines": {
-        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-      }
-    },
+    "node_modules/fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+      "dev": true,
+      "license": "ISC"
+    },
     "node_modules/function-bind": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
@@ -14511,1515 +13891,1141 @@
     },
     "node_modules/source-map-loader/node_modules/iconv-lite": {
       "version": "0.6.3",
-      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
-      "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "safer-buffer": ">= 2.1.2 < 3.0.0"
-      },
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/source-map-support": {
-      "version": "0.5.21",
-      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
-      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "buffer-from": "^1.0.0",
-        "source-map": "^0.6.0"
-      }
-    },
-    "node_modules/source-map-support/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,
-      "license": "BSD-3-Clause",
-      "engines": {
-        "node": ">=0.10.0"
-      }
-    },
-    "node_modules/spdx-correct": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
-      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
-      "dev": true,
-      "license": "Apache-2.0",
-      "dependencies": {
-        "spdx-expression-parse": "^3.0.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "node_modules/spdx-exceptions": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
-      "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
-      "dev": true,
-      "license": "CC-BY-3.0"
-    },
-    "node_modules/spdx-expression-parse": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
-      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "spdx-exceptions": "^2.1.0",
-        "spdx-license-ids": "^3.0.0"
-      }
-    },
-    "node_modules/spdx-license-ids": {
-      "version": "3.0.21",
-      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz",
-      "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==",
-      "dev": true,
-      "license": "CC0-1.0"
-    },
-    "node_modules/spdy": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
-      "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "debug": "^4.1.0",
-        "handle-thing": "^2.0.0",
-        "http-deceiver": "^1.2.7",
-        "select-hose": "^2.0.0",
-        "spdy-transport": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/spdy-transport": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
-      "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "debug": "^4.1.0",
-        "detect-node": "^2.0.4",
-        "hpack.js": "^2.1.6",
-        "obuf": "^1.1.2",
-        "readable-stream": "^3.0.6",
-        "wbuf": "^1.7.3"
-      }
-    },
-    "node_modules/sprintf-js": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
-      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
-      "dev": true,
-      "license": "BSD-3-Clause"
-    },
-    "node_modules/ssri": {
-      "version": "10.0.6",
-      "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
-      "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "minipass": "^7.0.3"
-      },
-      "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
-      }
-    },
-    "node_modules/statuses": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
-      "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">= 0.6"
-      }
-    },
-    "node_modules/streamroller": {
-      "version": "3.1.5",
-      "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
-      "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "date-format": "^4.0.14",
-        "debug": "^4.3.4",
-        "fs-extra": "^8.1.0"
-      },
-      "engines": {
-        "node": ">=8.0"
-      }
-    },
-    "node_modules/string_decoder": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
-      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "safe-buffer": "~5.2.0"
-      }
-    },
-    "node_modules/string-width": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/string-width-cjs": {
-      "name": "string-width",
-      "version": "4.2.3",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
-      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "emoji-regex": "^8.0.0",
-        "is-fullwidth-code-point": "^3.0.0",
-        "strip-ansi": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/string.prototype.trim": {
-      "version": "1.2.10",
-      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
-      "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.2",
-        "define-data-property": "^1.1.4",
-        "define-properties": "^1.2.1",
-        "es-abstract": "^1.23.5",
-        "es-object-atoms": "^1.0.0",
-        "has-property-descriptors": "^1.0.2"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimend": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
-      "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.8",
-        "call-bound": "^1.0.2",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/string.prototype.trimstart": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
-      "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "call-bind": "^1.0.7",
-        "define-properties": "^1.2.1",
-        "es-object-atoms": "^1.0.0"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
-    "node_modules/strip-ansi": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+      "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ansi-regex": "^5.0.1"
+        "safer-buffer": ">= 2.1.2 < 3.0.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/strip-ansi-cjs": {
-      "name": "strip-ansi",
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
-      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+    "node_modules/source-map-support": {
+      "version": "0.5.21",
+      "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+      "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ansi-regex": "^5.0.1"
-      },
-      "engines": {
-        "node": ">=8"
+        "buffer-from": "^1.0.0",
+        "source-map": "^0.6.0"
       }
     },
-    "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==",
+    "node_modules/source-map-support/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,
-      "license": "MIT",
+      "license": "BSD-3-Clause",
       "engines": {
-        "node": ">=4"
+        "node": ">=0.10.0"
       }
     },
-    "node_modules/strip-final-newline": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
-      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
+    "node_modules/spdx-correct": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+      "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
       "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
+      "license": "Apache-2.0",
+      "dependencies": {
+        "spdx-expression-parse": "^3.0.0",
+        "spdx-license-ids": "^3.0.0"
       }
     },
-    "node_modules/strip-json-comments": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
-      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+    "node_modules/spdx-exceptions": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+      "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+      "dev": true,
+      "license": "CC-BY-3.0"
+    },
+    "node_modules/spdx-expression-parse": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+      "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "dependencies": {
+        "spdx-exceptions": "^2.1.0",
+        "spdx-license-ids": "^3.0.0"
       }
     },
-    "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==",
+    "node_modules/spdx-license-ids": {
+      "version": "3.0.21",
+      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz",
+      "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==",
+      "dev": true,
+      "license": "CC0-1.0"
+    },
+    "node_modules/spdy": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
+      "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "has-flag": "^4.0.0"
+        "debug": "^4.1.0",
+        "handle-thing": "^2.0.0",
+        "http-deceiver": "^1.2.7",
+        "select-hose": "^2.0.0",
+        "spdy-transport": "^3.0.0"
       },
       "engines": {
-        "node": ">=8"
+        "node": ">=6.0.0"
       }
     },
-    "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==",
+    "node_modules/spdy-transport": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz",
+      "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "dependencies": {
+        "debug": "^4.1.0",
+        "detect-node": "^2.0.4",
+        "hpack.js": "^2.1.6",
+        "obuf": "^1.1.2",
+        "readable-stream": "^3.0.6",
+        "wbuf": "^1.7.3"
       }
     },
-    "node_modules/symbol-observable": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz",
-      "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==",
+    "node_modules/sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
       "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=0.10"
-      }
+      "license": "BSD-3-Clause"
     },
-    "node_modules/synckit": {
-      "version": "0.9.2",
-      "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz",
-      "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==",
+    "node_modules/ssri": {
+      "version": "10.0.6",
+      "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
+      "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "@pkgr/core": "^0.1.0",
-        "tslib": "^2.6.2"
+        "minipass": "^7.0.3"
       },
       "engines": {
-        "node": "^14.18.0 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://opencollective.com/unts"
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/tapable": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
-      "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+    "node_modules/statuses": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
+      "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=6"
+        "node": ">= 0.6"
       }
     },
-    "node_modules/tar": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
-      "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
+    "node_modules/streamroller": {
+      "version": "3.1.5",
+      "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
+      "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "chownr": "^2.0.0",
-        "fs-minipass": "^2.0.0",
-        "minipass": "^5.0.0",
-        "minizlib": "^2.1.1",
-        "mkdirp": "^1.0.3",
-        "yallist": "^4.0.0"
+        "date-format": "^4.0.14",
+        "debug": "^4.3.4",
+        "fs-extra": "^8.1.0"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">=8.0"
       }
     },
-    "node_modules/tar/node_modules/fs-minipass": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
-      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
+    "node_modules/string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "minipass": "^3.0.0"
-      },
-      "engines": {
-        "node": ">= 8"
+        "safe-buffer": "~5.2.0"
       }
     },
-    "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": {
-      "version": "3.3.6",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
-      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+    "node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "yallist": "^4.0.0"
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
       },
       "engines": {
         "node": ">=8"
       }
     },
-    "node_modules/tar/node_modules/minipass": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
-      "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
-      "dev": true,
-      "license": "ISC",
-      "engines": {
-        "node": ">=8"
-      }
-    },
-    "node_modules/tar/node_modules/mkdirp": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
-      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+    "node_modules/string-width-cjs": {
+      "name": "string-width",
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
       "dev": true,
       "license": "MIT",
-      "bin": {
-        "mkdirp": "bin/cmd.js"
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">=8"
       }
     },
-    "node_modules/tar/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,
-      "license": "ISC"
-    },
-    "node_modules/terser": {
-      "version": "5.29.1",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz",
-      "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==",
+    "node_modules/string.prototype.trim": {
+      "version": "1.2.10",
+      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz",
+      "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==",
       "dev": true,
-      "license": "BSD-2-Clause",
+      "license": "MIT",
       "dependencies": {
-        "@jridgewell/source-map": "^0.3.3",
-        "acorn": "^8.8.2",
-        "commander": "^2.20.0",
-        "source-map-support": "~0.5.20"
-      },
-      "bin": {
-        "terser": "bin/terser"
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.2",
+        "define-data-property": "^1.1.4",
+        "define-properties": "^1.2.1",
+        "es-abstract": "^1.23.5",
+        "es-object-atoms": "^1.0.0",
+        "has-property-descriptors": "^1.0.2"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/terser-webpack-plugin": {
-      "version": "5.3.11",
-      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz",
-      "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==",
+    "node_modules/string.prototype.trimend": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz",
+      "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "@jridgewell/trace-mapping": "^0.3.25",
-        "jest-worker": "^27.4.5",
-        "schema-utils": "^4.3.0",
-        "serialize-javascript": "^6.0.2",
-        "terser": "^5.31.1"
+        "call-bind": "^1.0.8",
+        "call-bound": "^1.0.2",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
       },
       "engines": {
-        "node": ">= 10.13.0"
+        "node": ">= 0.4"
       },
       "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/webpack"
-      },
-      "peerDependencies": {
-        "webpack": "^5.1.0"
-      },
-      "peerDependenciesMeta": {
-        "@swc/core": {
-          "optional": true
-        },
-        "esbuild": {
-          "optional": true
-        },
-        "uglify-js": {
-          "optional": true
-        }
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/terser-webpack-plugin/node_modules/terser": {
-      "version": "5.39.0",
-      "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz",
-      "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==",
+    "node_modules/string.prototype.trimstart": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz",
+      "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==",
       "dev": true,
-      "license": "BSD-2-Clause",
+      "license": "MIT",
       "dependencies": {
-        "@jridgewell/source-map": "^0.3.3",
-        "acorn": "^8.8.2",
-        "commander": "^2.20.0",
-        "source-map-support": "~0.5.20"
-      },
-      "bin": {
-        "terser": "bin/terser"
+        "call-bind": "^1.0.7",
+        "define-properties": "^1.2.1",
+        "es-object-atoms": "^1.0.0"
       },
       "engines": {
-        "node": ">=10"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/test-exclude": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
-      "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+    "node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "@istanbuljs/schema": "^0.1.2",
-        "glob": "^7.1.4",
-        "minimatch": "^3.0.4"
+        "ansi-regex": "^5.0.1"
       },
       "engines": {
         "node": ">=8"
       }
     },
-    "node_modules/test-exclude/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+    "node_modules/strip-ansi-cjs": {
+      "name": "strip-ansi",
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/test-exclude/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
+        "ansi-regex": "^5.0.1"
       },
       "engines": {
-        "node": "*"
+        "node": ">=8"
       }
     },
-    "node_modules/text-table": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
-      "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+    "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,
-      "license": "MIT"
+      "license": "MIT",
+      "engines": {
+        "node": ">=4"
+      }
     },
-    "node_modules/thunky": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
-      "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
+    "node_modules/strip-final-newline": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
       "dev": true,
-      "license": "MIT"
+      "license": "MIT",
+      "engines": {
+        "node": ">=6"
+      }
     },
-    "node_modules/tmp": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
-      "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
+    "node_modules/strip-json-comments": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=14.14"
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/to-regex-range": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
-      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+    "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,
       "license": "MIT",
       "dependencies": {
-        "is-number": "^7.0.0"
+        "has-flag": "^4.0.0"
       },
       "engines": {
-        "node": ">=8.0"
+        "node": ">=8"
       }
     },
-    "node_modules/toidentifier": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
-      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+    "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,
       "license": "MIT",
       "engines": {
-        "node": ">=0.6"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/tree-kill": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
-      "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
+    "node_modules/symbol-observable": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz",
+      "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==",
       "dev": true,
       "license": "MIT",
-      "bin": {
-        "tree-kill": "cli.js"
+      "engines": {
+        "node": ">=0.10"
       }
     },
-    "node_modules/ts-api-utils": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
-      "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
+    "node_modules/synckit": {
+      "version": "0.9.2",
+      "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz",
+      "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "@pkgr/core": "^0.1.0",
+        "tslib": "^2.6.2"
+      },
       "engines": {
-        "node": ">=16"
+        "node": "^14.18.0 || >=16.0.0"
       },
-      "peerDependencies": {
-        "typescript": ">=4.2.0"
+      "funding": {
+        "url": "https://opencollective.com/unts"
       }
     },
-    "node_modules/tsconfig-paths": {
-      "version": "3.15.0",
-      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
-      "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
+    "node_modules/tapable": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+      "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "@types/json5": "^0.0.29",
-        "json5": "^1.0.2",
-        "minimist": "^1.2.6",
-        "strip-bom": "^3.0.0"
+      "engines": {
+        "node": ">=6"
       }
     },
-    "node_modules/tsconfig-paths/node_modules/json5": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
-      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+    "node_modules/tar": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
+      "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "minimist": "^1.2.0"
+        "chownr": "^2.0.0",
+        "fs-minipass": "^2.0.0",
+        "minipass": "^5.0.0",
+        "minizlib": "^2.1.1",
+        "mkdirp": "^1.0.3",
+        "yallist": "^4.0.0"
       },
-      "bin": {
-        "json5": "lib/cli.js"
+      "engines": {
+        "node": ">=10"
       }
     },
-    "node_modules/tslib": {
-      "version": "2.8.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
-      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
-      "license": "0BSD"
-    },
-    "node_modules/tuf-js": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz",
-      "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==",
+    "node_modules/tar/node_modules/fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+      "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "@tufjs/models": "2.0.1",
-        "debug": "^4.3.4",
-        "make-fetch-happen": "^13.0.1"
+        "minipass": "^3.0.0"
       },
       "engines": {
-        "node": "^16.14.0 || >=18.0.0"
+        "node": ">= 8"
       }
     },
-    "node_modules/type-check": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
-      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+    "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": {
+      "version": "3.3.6",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+      "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "prelude-ls": "^1.2.1"
+        "yallist": "^4.0.0"
       },
       "engines": {
-        "node": ">= 0.8.0"
+        "node": ">=8"
       }
     },
-    "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==",
+    "node_modules/tar/node_modules/minipass": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+      "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
       "dev": true,
-      "license": "(MIT OR CC0-1.0)",
+      "license": "ISC",
       "engines": {
-        "node": ">=10"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+        "node": ">=8"
       }
     },
-    "node_modules/type-is": {
-      "version": "1.6.18",
-      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
-      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+    "node_modules/tar/node_modules/mkdirp": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+      "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
       "dev": true,
       "license": "MIT",
-      "dependencies": {
-        "media-typer": "0.3.0",
-        "mime-types": "~2.1.24"
+      "bin": {
+        "mkdirp": "bin/cmd.js"
       },
       "engines": {
-        "node": ">= 0.6"
+        "node": ">=10"
       }
     },
-    "node_modules/typed-array-buffer": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
-      "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
+    "node_modules/tar/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,
-      "license": "MIT",
-      "dependencies": {
-        "call-bound": "^1.0.3",
-        "es-errors": "^1.3.0",
-        "is-typed-array": "^1.1.14"
-      },
-      "engines": {
-        "node": ">= 0.4"
-      }
+      "license": "ISC"
     },
-    "node_modules/typed-array-byte-length": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
-      "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
+    "node_modules/terser": {
+      "version": "5.29.1",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.29.1.tgz",
+      "integrity": "sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==",
       "dev": true,
-      "license": "MIT",
+      "license": "BSD-2-Clause",
       "dependencies": {
-        "call-bind": "^1.0.8",
-        "for-each": "^0.3.3",
-        "gopd": "^1.2.0",
-        "has-proto": "^1.2.0",
-        "is-typed-array": "^1.1.14"
+        "@jridgewell/source-map": "^0.3.3",
+        "acorn": "^8.8.2",
+        "commander": "^2.20.0",
+        "source-map-support": "~0.5.20"
       },
-      "engines": {
-        "node": ">= 0.4"
+      "bin": {
+        "terser": "bin/terser"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "engines": {
+        "node": ">=10"
       }
     },
-    "node_modules/typed-array-byte-offset": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
-      "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
+    "node_modules/terser-webpack-plugin": {
+      "version": "5.3.11",
+      "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz",
+      "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "available-typed-arrays": "^1.0.7",
-        "call-bind": "^1.0.8",
-        "for-each": "^0.3.3",
-        "gopd": "^1.2.0",
-        "has-proto": "^1.2.0",
-        "is-typed-array": "^1.1.15",
-        "reflect.getprototypeof": "^1.0.9"
+        "@jridgewell/trace-mapping": "^0.3.25",
+        "jest-worker": "^27.4.5",
+        "schema-utils": "^4.3.0",
+        "serialize-javascript": "^6.0.2",
+        "terser": "^5.31.1"
       },
       "engines": {
-        "node": ">= 0.4"
+        "node": ">= 10.13.0"
       },
       "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "type": "opencollective",
+        "url": "https://opencollective.com/webpack"
+      },
+      "peerDependencies": {
+        "webpack": "^5.1.0"
+      },
+      "peerDependenciesMeta": {
+        "@swc/core": {
+          "optional": true
+        },
+        "esbuild": {
+          "optional": true
+        },
+        "uglify-js": {
+          "optional": true
+        }
       }
     },
-    "node_modules/typed-array-length": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
-      "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
+    "node_modules/terser-webpack-plugin/node_modules/terser": {
+      "version": "5.39.0",
+      "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz",
+      "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==",
       "dev": true,
-      "license": "MIT",
+      "license": "BSD-2-Clause",
       "dependencies": {
-        "call-bind": "^1.0.7",
-        "for-each": "^0.3.3",
-        "gopd": "^1.0.1",
-        "is-typed-array": "^1.1.13",
-        "possible-typed-array-names": "^1.0.0",
-        "reflect.getprototypeof": "^1.0.6"
+        "@jridgewell/source-map": "^0.3.3",
+        "acorn": "^8.8.2",
+        "commander": "^2.20.0",
+        "source-map-support": "~0.5.20"
       },
-      "engines": {
-        "node": ">= 0.4"
+      "bin": {
+        "terser": "bin/terser"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+      "engines": {
+        "node": ">=10"
       }
     },
-    "node_modules/typed-assert": {
-      "version": "1.0.9",
-      "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz",
-      "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/typescript": {
-      "version": "5.4.5",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
-      "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+    "node_modules/test-exclude": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+      "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
       "dev": true,
-      "license": "Apache-2.0",
-      "bin": {
-        "tsc": "bin/tsc",
-        "tsserver": "bin/tsserver"
+      "license": "ISC",
+      "dependencies": {
+        "@istanbuljs/schema": "^0.1.2",
+        "glob": "^7.1.4",
+        "minimatch": "^3.0.4"
       },
       "engines": {
-        "node": ">=14.17"
+        "node": ">=8"
       }
     },
-    "node_modules/ua-parser-js": {
-      "version": "0.7.40",
-      "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.40.tgz",
-      "integrity": "sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ==",
+    "node_modules/test-exclude/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/ua-parser-js"
-        },
-        {
-          "type": "paypal",
-          "url": "https://paypal.me/faisalman"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/faisalman"
-        }
-      ],
       "license": "MIT",
-      "bin": {
-        "ua-parser-js": "script/cli.js"
-      },
-      "engines": {
-        "node": "*"
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
       }
     },
-    "node_modules/unbox-primitive": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
-      "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
+    "node_modules/test-exclude/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
-      "license": "MIT",
+      "license": "ISC",
       "dependencies": {
-        "call-bound": "^1.0.3",
-        "has-bigints": "^1.0.2",
-        "has-symbols": "^1.1.0",
-        "which-boxed-primitive": "^1.1.1"
+        "brace-expansion": "^1.1.7"
       },
       "engines": {
-        "node": ">= 0.4"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
+        "node": "*"
       }
     },
-    "node_modules/undici": {
-      "version": "6.11.1",
-      "resolved": "https://registry.npmjs.org/undici/-/undici-6.11.1.tgz",
-      "integrity": "sha512-KyhzaLJnV1qa3BSHdj4AZ2ndqI0QWPxYzaIOio0WzcEJB9gvuysprJSLtpvc2D9mhR9jPDUk7xlJlZbH2KR5iw==",
+    "node_modules/text-table": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+      "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
       "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=18.0"
-      }
+      "license": "MIT"
     },
-    "node_modules/undici-types": {
-      "version": "6.20.0",
-      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
-      "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
+    "node_modules/thunky": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz",
+      "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==",
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/unicode-canonical-property-names-ecmascript": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",
-      "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",
+    "node_modules/tmp": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
+      "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=4"
+        "node": ">=14.14"
       }
     },
-    "node_modules/unicode-match-property-ecmascript": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
-      "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+    "node_modules/to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "unicode-canonical-property-names-ecmascript": "^2.0.0",
-        "unicode-property-aliases-ecmascript": "^2.0.0"
+        "is-number": "^7.0.0"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=8.0"
       }
     },
-    "node_modules/unicode-match-property-value-ecmascript": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz",
-      "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==",
+    "node_modules/toidentifier": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+      "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
       "dev": true,
       "license": "MIT",
       "engines": {
-        "node": ">=4"
+        "node": ">=0.6"
       }
     },
-    "node_modules/unicode-property-aliases-ecmascript": {
-      "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==",
+    "node_modules/tree-kill": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
+      "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">=4"
+      "bin": {
+        "tree-kill": "cli.js"
       }
     },
-    "node_modules/unique-filename": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
-      "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==",
+    "node_modules/ts-api-utils": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz",
+      "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==",
       "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "unique-slug": "^4.0.0"
-      },
+      "license": "MIT",
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": ">=16"
+      },
+      "peerDependencies": {
+        "typescript": ">=4.2.0"
       }
     },
-    "node_modules/unique-slug": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz",
-      "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==",
+    "node_modules/tsconfig-paths": {
+      "version": "3.15.0",
+      "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz",
+      "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==",
       "dev": true,
-      "license": "ISC",
+      "license": "MIT",
       "dependencies": {
-        "imurmurhash": "^0.1.4"
-      },
-      "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "@types/json5": "^0.0.29",
+        "json5": "^1.0.2",
+        "minimist": "^1.2.6",
+        "strip-bom": "^3.0.0"
       }
     },
-    "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==",
+    "node_modules/tsconfig-paths/node_modules/json5": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
+      "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
       "dev": true,
       "license": "MIT",
-      "engines": {
-        "node": ">= 4.0.0"
+      "dependencies": {
+        "minimist": "^1.2.0"
+      },
+      "bin": {
+        "json5": "lib/cli.js"
       }
     },
-    "node_modules/unpipe": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
-      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+    "node_modules/tslib": {
+      "version": "2.8.1",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+      "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+      "license": "0BSD"
+    },
+    "node_modules/tuf-js": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz",
+      "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "@tufjs/models": "2.0.1",
+        "debug": "^4.3.4",
+        "make-fetch-happen": "^13.0.1"
+      },
       "engines": {
-        "node": ">= 0.8"
+        "node": "^16.14.0 || >=18.0.0"
       }
     },
-    "node_modules/update-browserslist-db": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz",
-      "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==",
+    "node_modules/type-check": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
       "dev": true,
-      "funding": [
-        {
-          "type": "opencollective",
-          "url": "https://opencollective.com/browserslist"
-        },
-        {
-          "type": "tidelift",
-          "url": "https://tidelift.com/funding/github/npm/browserslist"
-        },
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai"
-        }
-      ],
       "license": "MIT",
       "dependencies": {
-        "escalade": "^3.2.0",
-        "picocolors": "^1.1.1"
-      },
-      "bin": {
-        "update-browserslist-db": "cli.js"
+        "prelude-ls": "^1.2.1"
       },
-      "peerDependencies": {
-        "browserslist": ">= 4.21.0"
+      "engines": {
+        "node": ">= 0.8.0"
       }
     },
-    "node_modules/uri-js": {
-      "version": "4.4.1",
-      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
-      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+    "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,
-      "license": "BSD-2-Clause",
-      "dependencies": {
-        "punycode": "^2.1.0"
+      "license": "(MIT OR CC0-1.0)",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/uri-js/node_modules/punycode": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
-      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+    "node_modules/type-is": {
+      "version": "1.6.18",
+      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+      "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "media-typer": "0.3.0",
+        "mime-types": "~2.1.24"
+      },
       "engines": {
-        "node": ">=6"
+        "node": ">= 0.6"
       }
     },
-    "node_modules/util-deprecate": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/utils-merge": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
-      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
+    "node_modules/typed-array-buffer": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz",
+      "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "call-bound": "^1.0.3",
+        "es-errors": "^1.3.0",
+        "is-typed-array": "^1.1.14"
+      },
       "engines": {
-        "node": ">= 0.4.0"
-      }
-    },
-    "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==",
-      "license": "MIT",
-      "bin": {
-        "uuid": "dist/bin/uuid"
+        "node": ">= 0.4"
       }
     },
-    "node_modules/validate-npm-package-license": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
-      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+    "node_modules/typed-array-byte-length": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz",
+      "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==",
       "dev": true,
-      "license": "Apache-2.0",
+      "license": "MIT",
       "dependencies": {
-        "spdx-correct": "^3.0.0",
-        "spdx-expression-parse": "^3.0.0"
-      }
-    },
-    "node_modules/validate-npm-package-name": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz",
-      "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==",
-      "dev": true,
-      "license": "ISC",
+        "call-bind": "^1.0.8",
+        "for-each": "^0.3.3",
+        "gopd": "^1.2.0",
+        "has-proto": "^1.2.0",
+        "is-typed-array": "^1.1.14"
+      },
       "engines": {
-        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/vary": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
-      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+    "node_modules/typed-array-byte-offset": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz",
+      "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==",
       "dev": true,
       "license": "MIT",
+      "dependencies": {
+        "available-typed-arrays": "^1.0.7",
+        "call-bind": "^1.0.8",
+        "for-each": "^0.3.3",
+        "gopd": "^1.2.0",
+        "has-proto": "^1.2.0",
+        "is-typed-array": "^1.1.15",
+        "reflect.getprototypeof": "^1.0.9"
+      },
       "engines": {
-        "node": ">= 0.8"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/vite": {
-      "version": "5.4.14",
-      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz",
-      "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==",
+    "node_modules/typed-array-length": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz",
+      "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "esbuild": "^0.21.3",
-        "postcss": "^8.4.43",
-        "rollup": "^4.20.0"
-      },
-      "bin": {
-        "vite": "bin/vite.js"
+        "call-bind": "^1.0.7",
+        "for-each": "^0.3.3",
+        "gopd": "^1.0.1",
+        "is-typed-array": "^1.1.13",
+        "possible-typed-array-names": "^1.0.0",
+        "reflect.getprototypeof": "^1.0.6"
       },
       "engines": {
-        "node": "^18.0.0 || >=20.0.0"
+        "node": ">= 0.4"
       },
       "funding": {
-        "url": "https://github.com/vitejs/vite?sponsor=1"
-      },
-      "optionalDependencies": {
-        "fsevents": "~2.3.3"
-      },
-      "peerDependencies": {
-        "@types/node": "^18.0.0 || >=20.0.0",
-        "less": "*",
-        "lightningcss": "^1.21.0",
-        "sass": "*",
-        "sass-embedded": "*",
-        "stylus": "*",
-        "sugarss": "*",
-        "terser": "^5.4.0"
-      },
-      "peerDependenciesMeta": {
-        "@types/node": {
-          "optional": true
-        },
-        "less": {
-          "optional": true
-        },
-        "lightningcss": {
-          "optional": true
-        },
-        "sass": {
-          "optional": true
-        },
-        "sass-embedded": {
-          "optional": true
-        },
-        "stylus": {
-          "optional": true
-        },
-        "sugarss": {
-          "optional": true
-        },
-        "terser": {
-          "optional": true
-        }
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/aix-ppc64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
-      "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
-      "cpu": [
-        "ppc64"
-      ],
+    "node_modules/typed-assert": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz",
+      "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "aix"
-      ],
+      "license": "MIT"
+    },
+    "node_modules/typescript": {
+      "version": "5.4.5",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
+      "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+      "dev": true,
+      "license": "Apache-2.0",
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=14.17"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/android-arm": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
-      "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
-      "cpu": [
-        "arm"
-      ],
+    "node_modules/ua-parser-js": {
+      "version": "0.7.40",
+      "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.40.tgz",
+      "integrity": "sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/ua-parser-js"
+        },
+        {
+          "type": "paypal",
+          "url": "https://paypal.me/faisalman"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/faisalman"
+        }
       ],
+      "license": "MIT",
+      "bin": {
+        "ua-parser-js": "script/cli.js"
+      },
       "engines": {
-        "node": ">=12"
+        "node": "*"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/android-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
-      "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/unbox-primitive": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
+      "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
+      "dependencies": {
+        "call-bound": "^1.0.3",
+        "has-bigints": "^1.0.2",
+        "has-symbols": "^1.1.0",
+        "which-boxed-primitive": "^1.1.1"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/android-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
-      "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/undici": {
+      "version": "6.11.1",
+      "resolved": "https://registry.npmjs.org/undici/-/undici-6.11.1.tgz",
+      "integrity": "sha512-KyhzaLJnV1qa3BSHdj4AZ2ndqI0QWPxYzaIOio0WzcEJB9gvuysprJSLtpvc2D9mhR9jPDUk7xlJlZbH2KR5iw==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "android"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">=18.0"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/darwin-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
-      "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/undici-types": {
+      "version": "6.20.0",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
+      "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
+      "dev": true,
+      "license": "MIT"
+    },
+    "node_modules/unicode-canonical-property-names-ecmascript": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz",
+      "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">=4"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/darwin-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
-      "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/unicode-match-property-ecmascript": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+      "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "darwin"
-      ],
+      "dependencies": {
+        "unicode-canonical-property-names-ecmascript": "^2.0.0",
+        "unicode-property-aliases-ecmascript": "^2.0.0"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=4"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
-      "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/unicode-match-property-value-ecmascript": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz",
+      "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">=4"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/freebsd-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
-      "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/unicode-property-aliases-ecmascript": {
+      "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,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "freebsd"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">=4"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/linux-arm": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
-      "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
-      "cpu": [
-        "arm"
-      ],
+    "node_modules/unique-filename": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
+      "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "license": "ISC",
+      "dependencies": {
+        "unique-slug": "^4.0.0"
+      },
       "engines": {
-        "node": ">=12"
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/linux-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
-      "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/unique-slug": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz",
+      "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
+      "license": "ISC",
+      "dependencies": {
+        "imurmurhash": "^0.1.4"
+      },
       "engines": {
-        "node": ">=12"
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/linux-ia32": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
-      "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
-      "cpu": [
-        "ia32"
-      ],
+    "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==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">= 4.0.0"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/linux-loong64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
-      "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
-      "cpu": [
-        "loong64"
-      ],
+    "node_modules/unpipe": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
+      "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">= 0.8"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/linux-mips64el": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
-      "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
-      "cpu": [
-        "mips64el"
-      ],
+    "node_modules/update-browserslist-db": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz",
+      "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
+      "funding": [
+        {
+          "type": "opencollective",
+          "url": "https://opencollective.com/browserslist"
+        },
+        {
+          "type": "tidelift",
+          "url": "https://tidelift.com/funding/github/npm/browserslist"
+        },
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai"
+        }
       ],
-      "engines": {
-        "node": ">=12"
+      "license": "MIT",
+      "dependencies": {
+        "escalade": "^3.2.0",
+        "picocolors": "^1.1.1"
+      },
+      "bin": {
+        "update-browserslist-db": "cli.js"
+      },
+      "peerDependencies": {
+        "browserslist": ">= 4.21.0"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/linux-ppc64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
-      "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
-      "cpu": [
-        "ppc64"
-      ],
+    "node_modules/uri-js": {
+      "version": "4.4.1",
+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
+      "license": "BSD-2-Clause",
+      "dependencies": {
+        "punycode": "^2.1.0"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/linux-riscv64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
-      "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
-      "cpu": [
-        "riscv64"
-      ],
+    "node_modules/uri-js/node_modules/punycode": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">=6"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/linux-s390x": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
-      "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
-      "cpu": [
-        "s390x"
-      ],
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
-      "engines": {
-        "node": ">=12"
-      }
+      "license": "MIT"
     },
-    "node_modules/vite/node_modules/@esbuild/linux-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
-      "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/utils-merge": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+      "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "linux"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">= 0.4.0"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/netbsd-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
-      "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
-      "cpu": [
-        "x64"
-      ],
-      "dev": true,
+    "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==",
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "netbsd"
-      ],
-      "engines": {
-        "node": ">=12"
+      "bin": {
+        "uuid": "dist/bin/uuid"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/openbsd-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
-      "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/validate-npm-package-license": {
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "openbsd"
-      ],
-      "engines": {
-        "node": ">=12"
+      "license": "Apache-2.0",
+      "dependencies": {
+        "spdx-correct": "^3.0.0",
+        "spdx-expression-parse": "^3.0.0"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/sunos-x64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
-      "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
-      "cpu": [
-        "x64"
-      ],
+    "node_modules/validate-npm-package-name": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz",
+      "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==",
       "dev": true,
-      "license": "MIT",
-      "optional": true,
-      "os": [
-        "sunos"
-      ],
+      "license": "ISC",
       "engines": {
-        "node": ">=12"
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/win32-arm64": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
-      "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
-      "cpu": [
-        "arm64"
-      ],
+    "node_modules/vary": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+      "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
       "engines": {
-        "node": ">=12"
+        "node": ">= 0.8"
       }
     },
-    "node_modules/vite/node_modules/@esbuild/win32-ia32": {
-      "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
-      "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
-      "cpu": [
-        "ia32"
-      ],
+    "node_modules/vite": {
+      "version": "5.4.14",
+      "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz",
+      "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==",
       "dev": true,
       "license": "MIT",
-      "optional": true,
-      "os": [
-        "win32"
-      ],
+      "dependencies": {
+        "esbuild": "^0.21.3",
+        "postcss": "^8.4.43",
+        "rollup": "^4.20.0"
+      },
+      "bin": {
+        "vite": "bin/vite.js"
+      },
       "engines": {
-        "node": ">=12"
+        "node": "^18.0.0 || >=20.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/vitejs/vite?sponsor=1"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.3"
+      },
+      "peerDependencies": {
+        "@types/node": "^18.0.0 || >=20.0.0",
+        "less": "*",
+        "lightningcss": "^1.21.0",
+        "sass": "*",
+        "sass-embedded": "*",
+        "stylus": "*",
+        "sugarss": "*",
+        "terser": "^5.4.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/node": {
+          "optional": true
+        },
+        "less": {
+          "optional": true
+        },
+        "lightningcss": {
+          "optional": true
+        },
+        "sass": {
+          "optional": true
+        },
+        "sass-embedded": {
+          "optional": true
+        },
+        "stylus": {
+          "optional": true
+        },
+        "sugarss": {
+          "optional": true
+        },
+        "terser": {
+          "optional": true
+        }
       }
     },
-    "node_modules/vite/node_modules/@esbuild/win32-x64": {
+    "node_modules/vite/node_modules/@esbuild/linux-x64": {
       "version": "0.21.5",
-      "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
-      "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+      "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
       "cpu": [
         "x64"
       ],
@@ -16027,7 +15033,7 @@
       "license": "MIT",
       "optional": true,
       "os": [
-        "win32"
+        "linux"
       ],
       "engines": {
         "node": ">=12"
diff --git a/package.json b/package.json
index 3355d4a57bad7301ff749f90c6e0f493e513d525..8a4f2817a05f820da75f245ddc56cca6cd6c9a9b 100644
--- a/package.json
+++ b/package.json
@@ -23,9 +23,10 @@
     "@angular/platform-browser": "^17.3.12",
     "@angular/platform-browser-dynamic": "^17.3.12",
     "@angular/router": "^17.3.12",
-    "@edugouvfr/ngx-dsfr": "1.13.4",
+    "@edugouvfr/ngx-dsfr": "1.13.5",
     "@edugouvfr/ngx-dsfr-ext": "1.1.2",
     "@ng-select/ng-select": "^12.0.7",
+    "crisp-sdk-web": "^1.0.25",
     "ngx-matomo-client": "^6.4.1",
     "rxjs": "~7.8.0",
     "slugify": "^1.6.6",
diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts
index 37dab8d4e721fe5b071b652de6bc5d31e7aa3231..205ec4a715541aca4e8b40948cde4f25fce262fc 100644
--- a/src/app/app-routing.module.ts
+++ b/src/app/app-routing.module.ts
@@ -129,6 +129,13 @@ const routes: Routes = [
     data: { role: Role.CLERK_DIRECTOR },
     children: courtRoutes
   },
+  {
+    path: 'adjoint-administratif',
+    canActivate: [RoleGuard, CourtServiceGuard],
+    data: { role: Role.ADMINISTRATIVE_ASSISTANT },
+    children: courtRoutes
+  },
+
   {
     path: 'attache-justice',
     canActivate: [RoleGuard, CourtServiceGuard],
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index e9f6ffab8e3b73af073d53a5177b02d58582ea1a..647e7d2e6755359c440581f559c391bda6a2f3e5 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -1,8 +1,11 @@
 import { Component } from '@angular/core';
+import { CrispService } from './service/crisp.service';
 
 @Component({
   selector: 'app-root',
   templateUrl: './app.component.html',
   styleUrls: ['./app.component.css']
 })
-export class AppComponent {}
+export class AppComponent {
+  constructor(private readonly crispService: CrispService) {}
+}
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 3a1861d9d926c41306351133137c50d27777efac..44976c4ac123c0d2680f38f88b1ed22278e034ea 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -24,6 +24,7 @@ import {
   DsfrHighlightModule,
   DsfrModalModule,
   DsfrNoticeModule,
+  DsfrStepperModule,
   DsfrTableComponent,
   DsfrTabsModule
 } from '@edugouvfr/ngx-dsfr';
@@ -77,7 +78,6 @@ import { RequestExpertComponent } from './component/common/request-list/request-
 import { RequestItemComponent } from './component/common/request-list/request-item/request-item.component';
 import { RequestListComponent } from './component/common/request-list/request-list.component';
 import { StatisticsComponent } from './component/common/statistics/statistics.component';
-import { StepperComponent } from './component/common/stepper/stepper.component';
 import { UserAvailabilityComponent } from './component/common/user-availability/user-availability.component';
 import { CourtAccountComponent } from './component/court/court-account/court-account.component';
 import { CourtAideSelectComponent } from './component/court/court-aide-select/court-aide-select.component';
@@ -138,7 +138,6 @@ registerLocaleData(localeFr, 'fr');
     PaginationComponent,
     FiltersComponent,
     RequestCreationComponent,
-    StepperComponent,
     ExpertSelectionComponent,
     InformationInputComponent,
     SortableExpertsComponent,
@@ -246,7 +245,8 @@ registerLocaleData(localeFr, 'fr');
     DsfrHighlightModule,
     DsfrAlertModule,
     DsfrDatePickerComponent,
-    TypeSelectionComponent
+    TypeSelectionComponent,
+    DsfrStepperModule
   ],
   providers: [
     {
diff --git a/src/app/component/auth/court-registration/court-registration.component.html b/src/app/component/auth/court-registration/court-registration.component.html
index 0bc82874051d5ba60eeeb8f8909147d103aeb164..3f1e53e2bc47a2d2b42fb0baa8708ffcc6c3f62e 100644
--- a/src/app/component/auth/court-registration/court-registration.component.html
+++ b/src/app/component/auth/court-registration/court-registration.component.html
@@ -77,26 +77,13 @@
                       </div>
 
                       <div class="fr-fieldset__element">
-                        <div class="fr-input-group">
-                          <label class="fr-label" for="role"> Fonction </label>
-                          <select
-                            id="role"
-                            name="role"
-                            [(ngModel)]="role"
-                            class="fr-select"
-                            required
-                            aria-required="true">
-                            <option value="MAGISTRATE">Magistrat</option>
-                            <option value="CLERK_DIRECTOR">
-                              Directeur de greffe
-                            </option>
-                            <option value="CLERK">Greffier</option>
-                            <option value="ATTACHE">Attaché de justice</option>
-                            <option value="ASSISTANT">
-                              Assistant de justice
-                            </option>
-                          </select>
-                        </div>
+                        <dsfr-ext-multiselect
+                          name="role"
+                          label="Fonction"
+                          placeHolder=" "
+                          selectionMode="single"
+                          [options]="roleOptions"
+                          [(ngModel)]="role"></dsfr-ext-multiselect>
                       </div>
                     </fieldset>
                   </div>
diff --git a/src/app/component/auth/court-registration/court-registration.component.ts b/src/app/component/auth/court-registration/court-registration.component.ts
index ed578861ba801a0487c2f71316addffaaebd09c7..79a44e8206cb3428a9f0678651d58ecc9107eb3b 100644
--- a/src/app/component/auth/court-registration/court-registration.component.ts
+++ b/src/app/component/auth/court-registration/court-registration.component.ts
@@ -1,4 +1,6 @@
 import { AfterViewInit, Component, ElementRef, ViewChild } from '@angular/core';
+import { DsfrOption } from '@edugouvfr/ngx-dsfr';
+import { CourtRole, Role } from 'src/app/model/role';
 import Utils from '../../../helper/utils';
 import { CourtRegistrationForm } from '../../../model/court-registration-form';
 import { CourtUserServiceUpdate } from '../../../model/court-user-service-update';
@@ -15,16 +17,25 @@ export class CourtRegistrationComponent implements AfterViewInit {
   lastName: string;
   service: CourtUserServiceUpdate | null;
   jurisdictionId: number;
-  role: 'MAGISTRATE' | 'CLERK' | 'CLERK_DIRECTOR' | 'ASSISTANT' | 'ATTACHE';
+  role: CourtRole;
   phoneLandline: string;
   phoneMobile: string;
   submitting = false;
   success = false;
   failure = false;
 
+  roleOptions: DsfrOption[] = [
+    { label: 'Magistrat', value: Role.MAGISTRATE },
+    { label: 'Directeur de greffe', value: Role.CLERK_DIRECTOR },
+    { label: 'Greffier', value: Role.CLERK },
+    { label: 'Attaché de justice', value: Role.ATTACHE },
+    { label: 'Assistant de justice', value: Role.ASSISTANT },
+    { label: 'Adjoint administratif', value: Role.ADMINISTRATIVE_ASSISTANT }
+  ];
+
   @ViewChild('emailInputRef') emailInput!: ElementRef;
 
-  constructor(private authService: AuthService) {}
+  constructor(private readonly authService: AuthService) {}
 
   ngAfterViewInit(): void {
     this.emailInput.nativeElement.focus();
diff --git a/src/app/component/common/file-upload/file-upload.component.html b/src/app/component/common/file-upload/file-upload.component.html
index ce72c116978af3ab8c61d96c7582599247f02f32..124558914a6ad424450f0380870bc3aa55f066c9 100644
--- a/src/app/component/common/file-upload/file-upload.component.html
+++ b/src/app/component/common/file-upload/file-upload.component.html
@@ -1,10 +1,12 @@
 <fieldset class="fr-fieldset frame">
   <div class="fr-fieldset__element">
-    <label class="fr-label" for="file-input">
+    <label class="fr-label fr-mb-2v" for="file-input">
       <span *ngIf="isAttachment">Ajouter une pièce jointe</span>
-      <span *ngIf="isDecision" class="text-xl text-bold"
-        >Ajouter la décision</span
-      >
+      <span *ngIf="isDecision || isConsignation" class="text-xl text-bold">
+        {{
+          isDecision ? 'Ajouter la décision' : "Ajouter l'avis de consignation"
+        }}
+      </span>
       (format PDF, max. {{ maxFileSizeMb }}Mo)
     </label>
     <div class="box-center">
@@ -16,7 +18,7 @@
         (change)="onFileChange($event)"
         (drop)="preventDrop()" />
       <button
-        *ngIf="isDecision"
+        *ngIf="isDecision || isConsignation"
         class="fr-btn fr-icon-check-line"
         (click)="validate()"
         [disabled]="!canUpload() || uploading"></button>
diff --git a/src/app/component/common/file-upload/file-upload.component.ts b/src/app/component/common/file-upload/file-upload.component.ts
index 652b83151a903370c794dd1866a332fe6f585a96..32f9ed7eb96faf0da5365ef1585f7dbd5dd88086 100644
--- a/src/app/component/common/file-upload/file-upload.component.ts
+++ b/src/app/component/common/file-upload/file-upload.component.ts
@@ -1,7 +1,7 @@
 import { Component, EventEmitter, Input, Output } from '@angular/core';
-import { FileUpload } from '../../../model/file-upload';
 import { environment } from '../../../../environments/environment';
 import { FileType } from '../../../model/file-type';
+import { FileUpload } from '../../../model/file-upload';
 
 @Component({
   selector: 'app-file-upload',
@@ -35,7 +35,10 @@ export class FileUploadComponent {
   }
 
   canUpload(): boolean {
-    return this.fileSizeOk() && (this.isDecision || this.descSizeOk());
+    return (
+      this.fileSizeOk() &&
+      (this.isDecision || this.isConsignation || this.descSizeOk())
+    );
   }
 
   fileSizeOk(): boolean {
@@ -56,6 +59,10 @@ export class FileUploadComponent {
     return this.fileType === FileType.DECISION;
   }
 
+  get isConsignation(): boolean {
+    return this.fileType === FileType.ESCROW;
+  }
+
   preventDrop() {
     return false;
   }
diff --git a/src/app/component/common/request-list/request-item/request-expert/request-expert.component.ts b/src/app/component/common/request-list/request-item/request-expert/request-expert.component.ts
index e691c1190a79b6691c4cedfe55b228d2b6954a37..d325efd76ac82b6f166daba986c127fe4245edcb 100644
--- a/src/app/component/common/request-list/request-item/request-expert/request-expert.component.ts
+++ b/src/app/component/common/request-list/request-item/request-expert/request-expert.component.ts
@@ -21,6 +21,7 @@ export class RequestExpertComponent implements OnInit {
   @Input() isAdmin: boolean;
   @Input() requestId: number;
   @Input() isDecision: boolean;
+  @Input() isEscrow: boolean;
   @Input() requestStatus: RequestStatus;
   @Input() isFirst: boolean;
   @Input() isLast: boolean;
@@ -81,6 +82,21 @@ export class RequestExpertComponent implements OnInit {
       });
   }
 
+  private addRequestAcceptedEvent() {
+    if (this.requestExpert.acceptOn) {
+      this.events.push(
+        RequestTimeLineEventsUtils.createRequestEvent(
+          this.requestExpert.acceptOn,
+          'Demande acceptée.',
+          'SUCCESS',
+          this.isDecision
+            ? ''
+            : 'Ajouter la copie de la décision pour en notifier l’expert'
+        )
+      );
+    }
+  }
+
   private addRequestSendEvent() {
     if (this.requestExpert.sentOn) {
       let description;
@@ -236,17 +252,11 @@ export class RequestExpertComponent implements OnInit {
     this.addRequestQueuedEvent();
     this.addRequestSendEvent();
     this.addGrantedDaysEvents();
+    this.addRequestAcceptedEvent();
 
     switch (requestExpert.status) {
       case RequestExpertStatus.ACCEPTED:
-        this.addRequestLastEvent(
-          'Demande acceptée.',
-          'SUCCESS',
-          this.isDecision
-            ? ''
-            : 'Vous devez maintenant ajouter la decision ci-dessous.'
-        );
-
+      case RequestExpertStatus.CONFIRMED:
         if (this.isDecision) {
           this.events.push(
             RequestTimeLineEventsUtils.createRequestEvent(
@@ -256,6 +266,16 @@ export class RequestExpertComponent implements OnInit {
             )
           );
         }
+
+        if (this.isEscrow) {
+          this.events.push(
+            RequestTimeLineEventsUtils.createRequestEvent(
+              undefined,
+              'Avis de consignation ajouté.',
+              'INFO'
+            )
+          );
+        }
         break;
       case RequestExpertStatus.REFUSED: {
         const refusalReason = requestExpert.refusalReason
@@ -290,6 +310,9 @@ export class RequestExpertComponent implements OnInit {
           'Un autre expert a accepté la demande.'
         );
         break;
+      case RequestExpertStatus.CONFIRMED:
+        this.addRequestLastEvent('Demande confirmée.', 'SUCCESS');
+        break;
       default:
     }
   }
diff --git a/src/app/component/common/request-list/request-item/request-item.component.html b/src/app/component/common/request-list/request-item/request-item.component.html
index 5588eed50c03e18fad557cf2d2d58c1137d4b27b..3f6c51f7a3c22da9306f2ba095c7805390738667 100644
--- a/src/app/component/common/request-list/request-item/request-item.component.html
+++ b/src/app/component/common/request-list/request-item/request-item.component.html
@@ -19,14 +19,15 @@
                   (click)="$event.stopPropagation()"
                   type="text" />
               </div>
-
               <button
                 aria-label="updateProcedureId"
                 class="fr-btn fr-icon-check-line"
                 (click)="
                   $event.stopPropagation(); updateProcedureId(procedureId.value)
                 "
-                [disabled]="!procedureId.value"></button>
+                [disabled]="
+                  !procedureId.value || !isSpaceFree(procedureId.value)
+                "></button>
               <button
                 aria-label="cancelEditingProcedureId"
                 class="fr-btn fr-btn--tertiary fr-icon-close-line"
@@ -50,9 +51,14 @@
         <dsfr-badge
           size="MD"
           [label]="statusLabel"
-          [noIcon]="!isComplete"
+          [noIcon]="!isComplete && !isEscrowComplete"
           [customClass]="statusbadgeColor"></dsfr-badge>
       </div>
+      <div *ngIf="isWaitingConsignation">
+        <dsfr-notice
+          heading="L'expert a confirmé son acceptation et est en attente de l'avis de consignation"
+          type="warning"></dsfr-notice>
+      </div>
 
       <div *ngIf="isRefused" class="box-left fr-my-2v">
         <dsfr-notice
@@ -136,7 +142,8 @@
               "
               [requestId]="request.id"
               [requestStatus]="request.status"
-              [isDecision]="isComplete && !!decision"
+              [isDecision]="!!decision"
+              [isEscrow]="!!escrow"
               [isAdmin]="userService.isAdmin"
               [requestExpert]="requestExpert"
               [isFirst]="isFirst"
@@ -180,6 +187,10 @@
               <span class="fr-text--bold">Greffiers : </span>
               {{ joinNames(requestClerks) }}
             </div>
+            <div *ngIf="requestAdministratifAssistant.length">
+              <span class="fr-text--bold">Adjoints administratifs : </span>
+              {{ joinNames(requestAdministratifAssistant) }}
+            </div>
             <div *ngIf="requestAttaches.length">
               <span class="fr-text--bold">Attachés de justice : </span>
               {{ joinNames(requestAttaches) }}
@@ -485,27 +496,96 @@
           </div>
         </div>
       </dsfr-highlight>
+
+      <span class="fr-text--md underlined">
+        Délai (en mois) dans lequel l’expert devra rendre son avis à compter de
+        la consignation par les parties
+      </span>
+      <button
+        *ngIf="canEdit && !editingdDelayAfterConsignation"
+        class="fr-tag fr-tag--sm fr-ml-2v"
+        (click)="editingdDelayAfterConsignation = true">
+        modifier
+      </button>
+
+      <dsfr-highlight [textSize]="'MD'" customClass="fr-mt-3v">
+        <ng-container *ngIf="!editingdDelayAfterConsignation">
+          {{ request.delayAfterConsignation }}
+        </ng-container>
+        <div *ngIf="editingdDelayAfterConsignation">
+          <div class="box-center-vertical">
+            <div class="fr-input-group fr-mb-0">
+              <input
+                id="delay-after-consignation"
+                class="fr-input"
+                #delayAfterConsignation="ngModel"
+                [ngModel]="request.delayAfterConsignation"
+                type="number" />
+            </div>
+
+            <button
+              aria-label="updateDeliberationDate"
+              class="fr-btn fr-icon-check-line"
+              (click)="
+                updateDelayAfterConsignation(delayAfterConsignation.value)
+              "
+              [disabled]="
+                !isPositiveInteger(delayAfterConsignation.value)
+              "></button>
+            <button
+              aria-label="cancelUpdateDelayAfterConsignation"
+              class="fr-btn fr-btn--tertiary fr-icon-close-line"
+              (click)="editingdDelayAfterConsignation = false"></button>
+          </div>
+          <div
+            *ngIf="!isPositiveInteger(delayAfterConsignation.value)"
+            class="fr-message--error fr-mt-3v text-xs">
+            Veuillez entrer un nombre entier positif, comme 1, 2 ...
+          </div>
+        </div>
+      </dsfr-highlight>
     }
 
+    <div *ngIf="isEscrowComplete || isComplete">
+      <div *ngIf="decision" class="fr-my-8v frame">
+        <div class="text-xl text-bold underlined box-center fr-mt-6v">
+          DÉCISION
+        </div>
+        <div class="box-center fr-mt-4v">
+          <app-file-download
+            [file]="decision"
+            [procedureId]="request.procedureId"
+            [requestArchived]="request.archived"></app-file-download>
+        </div>
+      </div>
+      <div *ngIf="escrow" class="fr-my-8v frame">
+        <div class="text-xl text-bold underlined box-center fr-mt-6v">
+          Avis de consignation
+        </div>
+        <div class="box-center fr-mt-4v">
+          <app-file-download
+            [file]="escrow"
+            [procedureId]="request.procedureId"
+            [requestArchived]="request.archived"></app-file-download>
+        </div>
+      </div>
+    </div>
     <div
       *ngIf="isAccepted && userService.isCourt && !this.isArchived"
       class="fr-my-8v box-center">
       <app-file-upload
         [fileType]="decisionType"
-        (onValidate)="addDecision($event)"
+        (onValidate)="addDocument($event, decisionType)"
         (onCancel)="showAddFile = false"></app-file-upload>
     </div>
 
-    <div *ngIf="isComplete && decision" class="fr-my-8v frame">
-      <div class="text-xl text-bold underlined box-center fr-mt-6v">
-        DÉCISION
-      </div>
-      <div class="box-center fr-mt-4v">
-        <app-file-download
-          [file]="decision"
-          [procedureId]="request.procedureId"
-          [requestArchived]="request.archived"></app-file-download>
-      </div>
+    <div
+      *ngIf="isWaitingConsignation && userService.isCourt && !this.isArchived"
+      class="fr-my-8v box-center">
+      <app-file-upload
+        [fileType]="consignationType"
+        (onValidate)="addDocument($event, consignationType)"
+        (onCancel)="showAddFile = false"></app-file-upload>
     </div>
   </ng-container>
 </dsfr-accordion>
diff --git a/src/app/component/common/request-list/request-item/request-item.component.ts b/src/app/component/common/request-list/request-item/request-item.component.ts
index 19c97566941068136e327adc0d489bb2d8465a2d..65939efa31f446b5a452074448505a599f8604e6 100644
--- a/src/app/component/common/request-list/request-item/request-item.component.ts
+++ b/src/app/component/common/request-list/request-item/request-item.component.ts
@@ -55,14 +55,14 @@ export class RequestItemComponent implements OnInit, OnChanges {
 
   editingExtraInfo: boolean = false;
   editingDeliberationDate: boolean = false;
+  editingdDelayAfterConsignation: boolean = false;
   editingProcedureId: boolean = false;
   editingMissionDeadline: boolean = false;
   editingProgressReportDate: boolean = false;
 
-  addingDecision = false;
-
   attachmentType = FileType.ATTACHMENT;
   decisionType = FileType.DECISION;
+  consignationType = FileType.ESCROW;
 
   tomorrow: string;
 
@@ -164,10 +164,28 @@ export class RequestItemComponent implements OnInit, OnChanges {
     return this.request.status === RequestStatus.ACCEPTED;
   }
 
+  get isWaitingConsignation(): boolean {
+    return (
+      this.request.status === RequestStatus.COMPLETE &&
+      [
+        RequestType.CIVIL,
+        RequestType.CONTROL_CIVIL,
+        RequestType.SUMMARY_PROCEEDINGS
+      ].includes(this.request.type) &&
+      this.request.requestExperts.some(
+        re => re.status === RequestExpertStatus.CONFIRMED
+      )
+    );
+  }
+
   get isComplete(): boolean {
     return this.request.status === RequestStatus.COMPLETE;
   }
 
+  get isEscrowComplete(): boolean {
+    return this.request.status === RequestStatus.ESCROW_COMPLETED;
+  }
+
   get isCancelled(): boolean {
     return [RequestStatus.CANCELLED, RequestStatus.CANCELLED_AUTO].includes(
       this.request.status
@@ -184,6 +202,12 @@ export class RequestItemComponent implements OnInit, OnChanges {
     );
   }
 
+  get escrow(): FileDownload | null {
+    return (
+      (this.request.files || []).find(f => f.type === FileType.ESCROW) || null
+    );
+  }
+
   toggleEditAides() {
     this.editingAides = !this.editingAides;
     if (this.editingAides) this.courtAides = [...this.request.aides];
@@ -239,6 +263,19 @@ export class RequestItemComponent implements OnInit, OnChanges {
     );
   }
 
+  updateDelayAfterConsignation(delayAfterConsignation: number) {
+    this.requestService.updateRequest(
+      this.request.id,
+      { delayAfterConsignation },
+      success => {
+        if (success) {
+          this.request.delayAfterConsignation = delayAfterConsignation;
+        }
+        this.editingdDelayAfterConsignation = false;
+      }
+    );
+  }
+
   updateProcedureId(procedureId: string) {
     this.requestService.updateRequest(
       this.request.id,
@@ -280,6 +317,14 @@ export class RequestItemComponent implements OnInit, OnChanges {
     );
   }
 
+  isPositiveInteger(value: number) {
+    return Number.isInteger(value) && value > 0;
+  }
+
+  isSpaceFree(value: string): boolean {
+    return /^\S+$/.test(value);
+  }
+
   get canFillProgressReportDate(): boolean {
     return (
       !!this.request.missionDeadline &&
@@ -352,18 +397,16 @@ export class RequestItemComponent implements OnInit, OnChanges {
     });
   }
 
-  addDecision(addedFile: FileUpload) {
-    this.addingDecision = true;
+  addDocument(addedFile: FileUpload, type: FileType) {
     this.apiService
       .addFile(
         {
           requestId: this.request.id,
-          type: FileType.DECISION
+          type
         },
         addedFile.file
       )
       .subscribe(() => {
-        this.addingDecision = false;
         this.refresh();
       });
   }
@@ -411,6 +454,12 @@ export class RequestItemComponent implements OnInit, OnChanges {
     );
   }
 
+  get requestAdministratifAssistant(): CourtAide[] {
+    return this.request.aides.filter(
+      c => Role.ADMINISTRATIVE_ASSISTANT === c.role
+    );
+  }
+
   get requestAttaches(): CourtAide[] {
     return this.request.aides.filter(c => c.role === Role.ATTACHE);
   }
diff --git a/src/app/component/common/stepper/stepper.component.css b/src/app/component/common/stepper/stepper.component.css
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/src/app/component/common/stepper/stepper.component.html b/src/app/component/common/stepper/stepper.component.html
deleted file mode 100644
index 8185321e4b5d6411e18793cc0fc49d9573508492..0000000000000000000000000000000000000000
--- a/src/app/component/common/stepper/stepper.component.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<div class="fr-stepper">
-  <h2 class="fr-stepper__title">
-    <span class="fr-stepper__state"
-      >Étape {{ stepNumber }} sur {{ totalSteps }}</span
-    >
-    {{ title }}
-  </h2>
-  <div
-    class="fr-stepper__steps"
-    [attr.data-fr-current-step]="stepNumber"
-    [attr.data-fr-steps]="totalSteps"></div>
-  <p class="fr-stepper__details">
-    <span class="fr-text--bold">Étape suivante :</span> {{ titleNext }}
-  </p>
-</div>
diff --git a/src/app/component/common/stepper/stepper.component.spec.ts b/src/app/component/common/stepper/stepper.component.spec.ts
deleted file mode 100644
index 29ed0001a2ea33332ca1f7cb35105bb5902e7d63..0000000000000000000000000000000000000000
--- a/src/app/component/common/stepper/stepper.component.spec.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { StepperComponent } from './stepper.component';
-
-describe('StepperComponent', () => {
-  let component: StepperComponent;
-  let fixture: ComponentFixture<StepperComponent>;
-
-  beforeEach(async () => {
-    await TestBed.configureTestingModule({
-      declarations: [StepperComponent]
-    }).compileComponents();
-
-    fixture = TestBed.createComponent(StepperComponent);
-    component = fixture.componentInstance;
-    fixture.detectChanges();
-  });
-
-  it('should create', () => {
-    expect(component).toBeTruthy();
-  });
-});
diff --git a/src/app/component/common/stepper/stepper.component.ts b/src/app/component/common/stepper/stepper.component.ts
deleted file mode 100644
index f88212b33de2c8939a3d83b9272c5b13ff52ae50..0000000000000000000000000000000000000000
--- a/src/app/component/common/stepper/stepper.component.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { Component, Input } from '@angular/core';
-
-@Component({
-  selector: 'app-stepper',
-  templateUrl: './stepper.component.html',
-  styleUrls: ['./stepper.component.css']
-})
-export class StepperComponent {
-  @Input()
-  stepNumber: number;
-
-  @Input()
-  totalSteps: number;
-
-  @Input()
-  title: string;
-
-  @Input()
-  titleNext: string;
-}
diff --git a/src/app/component/court/court-aide-select/court-aide-select.component.ts b/src/app/component/court/court-aide-select/court-aide-select.component.ts
index fea7e3a5ca913b5aeed8bf390f1f6383004bd384..059d89ac9b98239de71d22f387f4178a30b2847c 100644
--- a/src/app/component/court/court-aide-select/court-aide-select.component.ts
+++ b/src/app/component/court/court-aide-select/court-aide-select.component.ts
@@ -39,6 +39,8 @@ export class CourtAideSelectComponent implements OnInit, ControlValueAccessor {
         return 'Greffiers :';
       case Role.CLERK_DIRECTOR:
         return 'Directeurs de greffe :';
+      case Role.ADMINISTRATIVE_ASSISTANT:
+        return 'Adjoints administratifs :';
       case Role.ATTACHE:
         return 'Attachés de justice :';
       case Role.ASSISTANT:
diff --git a/src/app/component/court/request-creation/confirmation/confirmation.component.html b/src/app/component/court/request-creation/confirmation/confirmation.component.html
index e0debea5eb1f3c8e95126e4c4ce2a084f0210b6b..722bc34ef70f11f115e8ec529709c50b87db1fb3 100644
--- a/src/app/component/court/request-creation/confirmation/confirmation.component.html
+++ b/src/app/component/court/request-creation/confirmation/confirmation.component.html
@@ -10,7 +10,7 @@
       </div>
 
       <div *ngIf="magistrate" class="fr-mt-8v">
-        <span class="underlined">Magistrat</span> : {{ magistrate.name }}
+        <span class="underlined">Magistrat</span> : {{ magistrate }}
       </div>
 
       <div class="fr-mt-8v">
@@ -74,6 +74,13 @@
             {{ valueOf('deliberationDate') }}
           </span>
           <em *ngIf="noDeliberationDate">pas de date de délibéré</em>
+          <div class="fr-mt-8v">
+            <span class="underlined">
+              Délai (en mois) dans lequel l’expert devra rendre son avis à
+              compter de la consignation par les parties
+            </span>
+            : {{ valueOf('delayAfterConsignation') }}
+          </div>
         }
       </div>
 
diff --git a/src/app/component/court/request-creation/confirmation/confirmation.component.ts b/src/app/component/court/request-creation/confirmation/confirmation.component.ts
index c7310323af451e84059edfbb31ddb74476504d3b..1d8499154d386e3d253ff05262f0f5baf0b4506a 100644
--- a/src/app/component/court/request-creation/confirmation/confirmation.component.ts
+++ b/src/app/component/court/request-creation/confirmation/confirmation.component.ts
@@ -6,7 +6,6 @@ import { CourtAide } from '../../../../model/court-aide';
 import { Expert } from '../../../../model/expert';
 import { FileDuplicated } from '../../../../model/file-duplicated';
 import { FileUpload } from '../../../../model/file-upload';
-import { Magistrate } from '../../../../model/magistrate';
 
 @Component({
   selector: 'app-confirmation',
@@ -38,8 +37,16 @@ export class ConfirmationComponent {
     return this.requestCreationForm.get('selectedExperts')?.value;
   }
 
-  get magistrate(): Magistrate {
-    return this.requestCreationForm.get('magistrate')?.value;
+  get magistrate(): string {
+    if (this.requestCreationForm.get('magistrateId')?.enabled) {
+      return this.valueOf('magistrateFirstName');
+    } else {
+      return (
+        this.valueOf('magistrateLastName') +
+        ' ' +
+        this.valueOf('magistrateFirstName')
+      );
+    }
   }
 
   get typeLabel(): string {
diff --git a/src/app/component/court/request-creation/expert-selection/expert-selection.component.ts b/src/app/component/court/request-creation/expert-selection/expert-selection.component.ts
index caf946594d9444a887b0d007b958b95371112c87..2f49a18cf44a0d2bc6c6bb0722e92bd9b856af52 100644
--- a/src/app/component/court/request-creation/expert-selection/expert-selection.component.ts
+++ b/src/app/component/court/request-creation/expert-selection/expert-selection.component.ts
@@ -22,7 +22,7 @@ export class ExpertSelectionComponent implements DoCheck {
 
   constructor(
     private readonly confirmationDialogService: ConfirmationDialogService,
-    private iterableDiffers: IterableDiffers
+    private readonly iterableDiffers: IterableDiffers
   ) {
     this.selectedExpertsDiffer = iterableDiffers.find([]).create();
   }
diff --git a/src/app/component/court/request-creation/information-input/information-input.component.css b/src/app/component/court/request-creation/information-input/information-input.component.css
index 9fed9615f7358c373ecf0e84c0d5ae0d4625c0ae..030f5156a8bd03eca448063cae8203b5cb5d2da6 100644
--- a/src/app/component/court/request-creation/information-input/information-input.component.css
+++ b/src/app/component/court/request-creation/information-input/information-input.component.css
@@ -1,9 +1,17 @@
-:host ::ng-deep .fr-toggle label[data-fr-unchecked-label][data-fr-checked-label]:before {
-  padding-left: 0.6rem
+:host
+  ::ng-deep
+  .fr-toggle
+  label[data-fr-unchecked-label][data-fr-checked-label]:before {
+  padding-left: 0.6rem;
 }
 
 .agree-urgent {
   border: solid 1px var(--border-default-grey);
   border-radius: 4px;
   padding: 20px;
-}
\ No newline at end of file
+}
+
+.add-magistrate {
+  border: solid 1px var(--border-default-grey);
+  border-radius: 4px;
+}
diff --git a/src/app/component/court/request-creation/information-input/information-input.component.html b/src/app/component/court/request-creation/information-input/information-input.component.html
index b202b0df6958cdf165574cb9f88d8fa5bd80e8cc..9074c6920917e5ba94373d57350655c6e0bd5212 100644
--- a/src/app/component/court/request-creation/information-input/information-input.component.html
+++ b/src/app/component/court/request-creation/information-input/information-input.component.html
@@ -28,30 +28,52 @@
         </div>
 
         <div *ngIf="userService.isCourtAide" class="fr-my-10v">
-          <div class="fr-my-3v">
-            <span> La demande est faite au nom du magistrat suivant </span>
-          </div>
-          <div class="fr-select-group">
-            <select
-              *ngIf="magistrates$ | async as magistrates"
-              formControlName="magistrate"
-              class="fr-select"
-              [compareWith]="compareFn">
-              <option
-                *ngFor="let magistrate of magistrates"
-                [ngValue]="magistrate">
-                {{ magistrate.name }}
-              </option>
-            </select>
-          </div>
-          <div
-            *ngIf="
-              requestCreationForm.get('magistrate')?.errors?.['required'] &&
-              showErrors
-            "
-            class="fr-message fr-message--error">
-            Le magistrat doit être renseigné.
+          <dsfr-ext-multiselect
+            name="magistrate"
+            label="La demande est faite au nom du magistrat suivant"
+            placeHolder=" "
+            formControlName="magistrateId"
+            [disabled]="true"
+            selectionMode="single"
+            [options]="magistrateOptions"
+            messageSeverity="error"
+            [message]="magistrateIdError"
+            (selectionChange)="changeMagistrate($event)"></dsfr-ext-multiselect>
+
+          <div class="fr-mt-5v">
+            <dsfr-form-checkbox
+              label="Je ne trouve pas le magistrat."
+              formControlName="unknownMagistrate">
+            </dsfr-form-checkbox>
           </div>
+          <fieldset
+            *ngIf="unknownMagistrate"
+            class="fr-fieldset add-magistrate fr-mt-5v fr-ml-6v fr-p-2v">
+            <div class="fr-fieldset__element">
+              <dsfr-form-input
+                label="Adresse e-mail @justice.fr"
+                type="text"
+                formControlName="magistrateUsername"
+                messageSeverity="error"
+                [message]="magistrateUserNameError"></dsfr-form-input>
+            </div>
+            <div class="fr-fieldset__element">
+              <dsfr-form-input
+                label="Nom"
+                type="text"
+                formControlName="magistrateLastName"
+                messageSeverity="error"
+                [message]="magistrateLastNameError"></dsfr-form-input>
+            </div>
+            <div class="fr-fieldset__element">
+              <dsfr-form-input
+                label="Prénom"
+                type="text"
+                formControlName="magistrateFirstName"
+                messageSeverity="error"
+                [message]="magistrateFirstNameError"></dsfr-form-input>
+            </div>
+          </fieldset>
         </div>
 
         <div class="fr-my-10v">
@@ -200,6 +222,16 @@
               <label for="no-deliberation-date">Pas de date</label>
             </div>
           </div>
+
+          <div class="fr-mt-10v">
+            <dsfr-form-input
+              label="Délai (en mois) dans lequel l’expert devra rendre son avis à compter de la consignation par les parties"
+              type="number"
+              formControlName="delayAfterConsignation"
+              placeHolder="X mois"
+              [message]="delayAfterConsignationError"
+              messageSeverity="error"></dsfr-form-input>
+          </div>
         }
 
         <div class="fr-mt-10v" *ngIf="selectedExperts.length > 1">
diff --git a/src/app/component/court/request-creation/information-input/information-input.component.ts b/src/app/component/court/request-creation/information-input/information-input.component.ts
index bec42d6061cf2c7c2ad7f3904108ebe2a3f5f2a3..d1e6bebc2710ebb33913b029af742acd763a7637 100644
--- a/src/app/component/court/request-creation/information-input/information-input.component.ts
+++ b/src/app/component/court/request-creation/information-input/information-input.component.ts
@@ -7,6 +7,7 @@ import {
   Output
 } from '@angular/core';
 import { FormGroup } from '@angular/forms';
+import { DsfrOption } from '@edugouvfr/ngx-dsfr';
 import { Observable, shareReplay } from 'rxjs';
 import { RequestType } from 'src/app/model/request-type';
 import Utils from '../../../../helper/utils';
@@ -34,7 +35,6 @@ export class InformationInputComponent implements OnInit {
   stepChanged = new EventEmitter<1 | -1>();
 
   courtAides$: Observable<CourtAide[]>;
-  magistrates$: Observable<Magistrate[]>;
   showAddFile = false;
   showErrors = false;
 
@@ -43,6 +43,9 @@ export class InformationInputComponent implements OnInit {
   avgAcceptationTime$: Observable<number>;
   tomorrow: string;
 
+  private magistrates: Magistrate[];
+  magistrateOptions: DsfrOption[];
+
   constructor(
     private readonly apiService: ApiService,
     protected userService: UserService,
@@ -51,11 +54,44 @@ export class InformationInputComponent implements OnInit {
 
   ngOnInit(): void {
     this.courtAides$ = this.apiService.getCourtAides();
-    this.magistrates$ = this.apiService.getMagistrates();
+
+    if (this.userService.isCourtAide) {
+      this.apiService
+        .getMagistrates()
+        .subscribe((magistrates: Magistrate[]) => {
+          this.magistrates = magistrates;
+          this.magistrateOptions = magistrates.map(magistrate => ({
+            label: magistrate.name,
+            value: magistrate.id
+          }));
+        });
+    }
+
     this.avgAcceptationTime$ = this.apiService
       .getAvgAcceptationTime()
       .pipe(shareReplay(1));
     this.tomorrow = Utils.getTomorrow();
+
+    this.requestCreationForm
+      .get('unknownMagistrate')
+      ?.valueChanges.subscribe(value => {
+        this.requestCreationForm
+          .get('magistrateId')
+          ?.reset({ value: null, disabled: value });
+        this.requestCreationForm
+          .get('magistrateUsername')
+          ?.reset({ value: null, disabled: !value });
+        this.requestCreationForm
+          .get('magistrateFirstName')
+          ?.reset({ value: null, disabled: !value });
+        this.requestCreationForm
+          .get('magistrateLastName')
+          ?.reset({ value: null, disabled: !value });
+      });
+  }
+
+  get unknownMagistrate(): boolean {
+    return this.requestCreationForm.get('unknownMagistrate')?.value;
   }
 
   get selectedExperts(): Expert[] {
@@ -124,6 +160,14 @@ export class InformationInputComponent implements OnInit {
     }
   }
 
+  changeMagistrate(magistrateId: unknown) {
+    if (magistrateId) {
+      this.requestCreationForm
+        .get('magistrateFirstName')
+        ?.setValue(this.magistrates.find(m => m.id === magistrateId)?.name);
+    }
+  }
+
   onDateCheckboxChange(dateControlName: string, checkboxControlName: string) {
     const dateControl = this.requestCreationForm.get(dateControlName);
     const checkBoxControl = this.requestCreationForm.get(checkboxControlName);
@@ -143,10 +187,6 @@ export class InformationInputComponent implements OnInit {
     );
   }
 
-  compareFn(o1: any, o2: any) {
-    return o1 && o2 && o1.id === o2.id;
-  }
-
   get procedureIdError(): string {
     const control = this.requestCreationForm.get('procedureId');
     if (!this.showErrors || control?.valid) return '';
@@ -160,6 +200,52 @@ export class InformationInputComponent implements OnInit {
     return '';
   }
 
+  get magistrateUserNameError(): string {
+    const control = this.requestCreationForm.get('magistrateUsername');
+    if (!this.showErrors || control?.valid) return '';
+
+    if (control?.errors?.['required']) {
+      return "Veuillez renseigner l'adresse email du magistrat.";
+    } else if (control?.errors?.['pattern']) {
+      return "Le format de l'adresse email est invalide. Utilisez un email se terminant par @justice.fr.";
+    }
+
+    return '';
+  }
+
+  get magistrateLastNameError(): string {
+    const control = this.requestCreationForm.get('magistrateLastName');
+    if (!this.showErrors || control?.valid) return '';
+
+    if (control?.errors?.['required']) {
+      return 'Veuillez renseigner le nom du magistrat.';
+    }
+
+    return '';
+  }
+
+  get magistrateFirstNameError(): string {
+    const control = this.requestCreationForm.get('magistrateFirstName');
+    if (!this.showErrors || control?.valid) return '';
+
+    if (control?.errors?.['required']) {
+      return 'Veuillez renseigner le prénom du magistrat.';
+    }
+
+    return '';
+  }
+
+  get magistrateIdError(): string {
+    const control = this.requestCreationForm.get('magistrateId');
+    if (!this.showErrors || control?.valid) return '';
+
+    if (control?.errors?.['required']) {
+      return 'Le magistrat doit être renseigné.';
+    }
+
+    return '';
+  }
+
   get extraInfoError(): string {
     const control = this.requestCreationForm.get('extraInfo');
     if (!this.showErrors) return '';
@@ -202,6 +288,7 @@ export class InformationInputComponent implements OnInit {
 
     return '';
   }
+
   get deliberationDateError(): string {
     const control = this.requestCreationForm.get('deliberationDate');
     if (!this.showErrors || control?.valid) return '';
@@ -216,4 +303,17 @@ export class InformationInputComponent implements OnInit {
 
     return '';
   }
+
+  get delayAfterConsignationError(): string {
+    const control = this.requestCreationForm.get('delayAfterConsignation');
+    if (!this.showErrors || control?.valid) return '';
+
+    if (control?.errors?.['required']) {
+      return 'Le délai doit être renseigné.';
+    } else if (control?.errors?.['mustBePositiveInteger']) {
+      return 'Veuillez entrer un nombre entier positif, comme 1, 2 ...';
+    }
+
+    return '';
+  }
 }
diff --git a/src/app/component/court/request-creation/request-creation.component.html b/src/app/component/court/request-creation/request-creation.component.html
index 52c0098c7d530aab6149e08d3ea93c8e1d0d1855..bb6785543df5e49d5669bbb14c3e9e32a7ca96d7 100644
--- a/src/app/component/court/request-creation/request-creation.component.html
+++ b/src/app/component/court/request-creation/request-creation.component.html
@@ -13,13 +13,12 @@
   </div>
 </div>
 
-<app-stepper
-  id="stepper"
-  [stepNumber]="activeStep"
+<dsfr-stepper
   [totalSteps]="steps.length"
-  [title]="steps[activeStep - 1]"
-  [titleNext]="activeStep !== steps.length ? steps[activeStep] : ''">
-</app-stepper>
+  [currentStep]="activeStep"
+  [currentStepTitle]="steps[activeStep - 1]"
+  [nextStepTitle]="activeStep !== steps.length ? steps[activeStep] : ''">
+</dsfr-stepper>
 
 <app-type-selection
   [hidden]="activeStep !== 1"
diff --git a/src/app/component/court/request-creation/request-creation.component.ts b/src/app/component/court/request-creation/request-creation.component.ts
index d3e1b7a1ce6758c1a8cc668d0bda227da2247dd4..16e8ba03b504eecda9e005b90ed1edd20c0767da 100644
--- a/src/app/component/court/request-creation/request-creation.component.ts
+++ b/src/app/component/court/request-creation/request-creation.component.ts
@@ -17,7 +17,6 @@ import { Expert } from '../../../model/expert';
 import { FileDuplicated } from '../../../model/file-duplicated';
 import { FileType } from '../../../model/file-type';
 import { FileUpload } from '../../../model/file-upload';
-import { Magistrate } from '../../../model/magistrate';
 import { Request } from '../../../model/request';
 import { RequestCreation } from '../../../model/request-creation';
 import { RequestExpertStatus } from '../../../model/request-expert-status';
@@ -54,10 +53,28 @@ export class RequestCreationComponent implements OnInit {
           ]
         ],
         courtAides: [[]],
-        magistrate: [
+        unknownMagistrate: [false, Validators.required],
+        magistrateId: [
           null,
           this.userService.isCourtAide ? [Validators.required] : []
         ],
+        magistrateUsername: [
+          { value: '', disabled: true },
+          this.userService.isCourtAide
+            ? [
+                Validators.required,
+                Validators.pattern("^[a-zA-Z0-9._%+\\-']+@justice\\.fr$")
+              ]
+            : []
+        ],
+        magistrateFirstName: [
+          { value: '', disabled: true },
+          this.userService.isCourtAide ? [Validators.required] : []
+        ],
+        magistrateLastName: [
+          { value: '', disabled: true },
+          this.userService.isCourtAide ? [Validators.required] : []
+        ],
         procedureId: ['', [Validators.required, Validators.pattern('^\\S+$')]],
         extraInfo: ['', Validators.maxLength(1000)],
         noDeliberationDate: [false, Validators.required],
@@ -73,6 +90,22 @@ export class RequestCreationComponent implements OnInit {
             }
           ]
         ],
+
+        delayAfterConsignation: [
+          null,
+          [
+            Validators.required,
+            (control: AbstractControl) => {
+              const value = control.value;
+              if (!value) return null;
+              const parsedValue = Number(value);
+              const isPositiveInteger =
+                Number.isInteger(parsedValue) && parsedValue > 0;
+              return isPositiveInteger ? null : { mustBePositiveInteger: true };
+            }
+          ]
+        ],
+
         noMissionDeadline: [false, Validators.required],
         missionDeadline: [
           null,
@@ -178,20 +211,23 @@ export class RequestCreationComponent implements OnInit {
       });
 
     this.requestCreationForm.get('type')?.valueChanges.subscribe(type => {
-      const deliberationDateCtrl =
-        this.requestCreationForm.get('deliberationDate');
-      const missionDeadlineCtrl =
-        this.requestCreationForm.get('missionDeadline');
-
-      if ([RequestType.PENAL, RequestType.CONTROL_PENAL].includes(type)) {
-        deliberationDateCtrl?.reset();
-        deliberationDateCtrl?.disable();
-        missionDeadlineCtrl?.enable();
-      } else {
-        missionDeadlineCtrl?.reset();
-        missionDeadlineCtrl?.disable();
-        deliberationDateCtrl?.enable();
-      }
+      const isPenalForm = [
+        RequestType.PENAL,
+        RequestType.CONTROL_PENAL
+      ].includes(type);
+
+      this.requestCreationForm
+        .get('deliberationDate')
+        ?.reset({ value: null, disabled: isPenalForm });
+
+      this.requestCreationForm.get('delayAfterConsignation')?.reset({
+        value: null,
+        disabled: isPenalForm
+      });
+
+      this.requestCreationForm
+        .get('missionDeadline')
+        ?.reset({ value: null, disabled: !isPenalForm });
     });
 
     if (!history.state.duplicateRequestId) {
@@ -272,7 +308,7 @@ export class RequestCreationComponent implements OnInit {
 
   requestCreationForm: FormGroup;
   steps = [
-    'Type de demande',
+    'Votre demande s’inscrit dans le cadre d’une procédure',
     'Sélection des experts',
     'Saisie des informations',
     'Confirmation'
@@ -294,29 +330,40 @@ export class RequestCreationComponent implements OnInit {
     }
   }
 
+  private stringValueOf(formControl: string): string {
+    return this.requestCreationForm.get(formControl)?.value;
+  }
+
+  private booleanValueOf(formControl: string): boolean {
+    return this.requestCreationForm.get(formControl)?.value;
+  }
+
+  private numberValueOf(formControl: string): number {
+    return this.requestCreationForm.get(formControl)?.value;
+  }
+
   createRequest() {
     if (!this.requestCreationForm.valid) return;
     const requestCreation: RequestCreation = {
       type: RequestType[
         this.requestCreationForm.get('type')?.value as keyof typeof RequestType
       ],
-      procedureId: this.requestCreationForm.get('procedureId')?.value,
-      extraInfo: this.requestCreationForm.get('extraInfo')?.value,
-      urgent: this.requestCreationForm.get('emergencyMode')?.value,
+      procedureId: this.stringValueOf('procedureId'),
+      extraInfo: this.stringValueOf('extraInfo'),
+      urgent: this.booleanValueOf('emergencyMode'),
       expertIds: this.requestCreationForm
         .get('selectedExperts')
         ?.value.map((e: Expert) => e.id),
-      ...(this.userService.isCourtAide && {
-        magistrateId: (
-          this.requestCreationForm.get('magistrate')?.value as Magistrate
-        ).id
-      }),
+
       clerkIds: this.requestCreationForm
         .get('courtAides')
         ?.value.map((c: CourtAide) => c.id),
       deliberationDate: Utils.getDateISoString(
         this.requestCreationForm.get('deliberationDate')?.value
       ),
+      delayAfterConsignation: this.requestCreationForm.get(
+        'delayAfterConsignation'
+      )?.value,
       missionDeadline: Utils.getDateISoString(
         this.requestCreationForm.get('missionDeadline')?.value
       ),
@@ -330,6 +377,21 @@ export class RequestCreationComponent implements OnInit {
         .filter(d => d.selected)
         .map(d => d.path)
     };
+
+    if (this.userService.isCourtAide) {
+      if (this.booleanValueOf('unknownMagistrate')) {
+        requestCreation.magistrateUsername =
+          this.stringValueOf('magistrateUsername');
+        requestCreation.magistrateFirstName = this.stringValueOf(
+          'magistrateFirstName'
+        );
+        requestCreation.magistrateLastName =
+          this.stringValueOf('magistrateLastName');
+      } else {
+        requestCreation.magistrateId = this.numberValueOf('magistrateId');
+      }
+    }
+
     this.submitting = true;
     // create the request, get the id and then upload the files sequentially
     // warning: to upload the files in parallel, update backend mechanism and use forkJoin here
@@ -426,7 +488,14 @@ export class RequestCreationComponent implements OnInit {
     this.requestCreationForm
       .get('courtAides')
       ?.setValue(request.aides.filter(c => c.jurisdiction.id === jId));
-    if (request.magistrate.jurisdiction.id === jId)
-      this.requestCreationForm.get('magistrate')?.setValue(request.magistrate);
+    if (request.magistrate.jurisdiction.id === jId) {
+      this.requestCreationForm
+        .get('magistrateId')
+        ?.setValue(request.magistrate.id);
+
+      this.requestCreationForm
+        .get('magistrateFirstName')
+        ?.setValue(request.magistrate.name);
+    }
   }
 }
diff --git a/src/app/component/court/request-creation/type-selection/type-selection.component.css b/src/app/component/court/request-creation/type-selection/type-selection.component.css
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..b94410cea6489dd84bcda63bbaad3ac43255be97 100644
--- a/src/app/component/court/request-creation/type-selection/type-selection.component.css
+++ b/src/app/component/court/request-creation/type-selection/type-selection.component.css
@@ -0,0 +1,12 @@
+::ng-deep dsfr-card .fr-card {
+  border: 1px solid var(--blue-ecume-975-75-active);
+  border-radius: 50px;
+  background: var(--blue-ecume-975-75);
+  box-shadow: 0 2px 7px 0 rgba(0, 0, 0, 0.21);
+}
+::ng-deep dsfr-card .fr-card__body {
+  height: 7.5rem;
+}
+::ng-deep dsfr-card .fr-card__title {
+  text-align: center;
+}
diff --git a/src/app/component/court/request-creation/type-selection/type-selection.component.html b/src/app/component/court/request-creation/type-selection/type-selection.component.html
index d0271a8995e75f4e6797d23899b81135d597cb00..41b041bf34be9b6d892cb16602eab02a0e20634d 100644
--- a/src/app/component/court/request-creation/type-selection/type-selection.component.html
+++ b/src/app/component/court/request-creation/type-selection/type-selection.component.html
@@ -1,12 +1,12 @@
-<dsfr-form-radio
-  legend="Votre demande s’inscrit dans le cadre d’une procédure :"
-  [formControl]="getTypeAsControl()"
-  [options]="options">
-</dsfr-form-radio>
-
-<button
-  class="fr-btn"
-  (click)="stepChanged.emit(1)"
-  [disabled]="!requestCreationForm.get('type')?.valid">
-  Étape suivante
-</button>
+<div class="fr-grid-row fr-grid-row--gutters">
+  <div
+    class="fr-col-12 fr-col-sm-6 fr-col-md-6 fr-col-lg-4"
+    *ngFor="let option of options">
+    <dsfr-card
+      [heading]="option.label"
+      size="SM"
+      route="#"
+      (cardSelect)="chooseType(option.value)">
+    </dsfr-card>
+  </div>
+</div>
diff --git a/src/app/component/court/request-creation/type-selection/type-selection.component.ts b/src/app/component/court/request-creation/type-selection/type-selection.component.ts
index eb6424a17a2e7aa248f8f9cdf48f64eac641f120..16b3f9210f2c50638d287f24672dccd918d0d237 100644
--- a/src/app/component/court/request-creation/type-selection/type-selection.component.ts
+++ b/src/app/component/court/request-creation/type-selection/type-selection.component.ts
@@ -1,17 +1,14 @@
+import { CommonModule } from '@angular/common';
 import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
-import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
-import {
-  DsfrFormRadioModule,
-  DsfrFormSelectModule,
-  DsfrRadio
-} from '@edugouvfr/ngx-dsfr';
-import { RequestType } from '../../../../model/request-type';
+import { FormGroup } from '@angular/forms';
+import { DsfrCardModule, DsfrRadio } from '@edugouvfr/ngx-dsfr';
 import Utils from '../../../../helper/utils';
+import { RequestType } from '../../../../model/request-type';
 
 @Component({
   selector: 'app-type-selection',
   standalone: true,
-  imports: [DsfrFormSelectModule, ReactiveFormsModule, DsfrFormRadioModule],
+  imports: [DsfrCardModule, CommonModule],
   templateUrl: './type-selection.component.html',
   styleUrl: './type-selection.component.css'
 })
@@ -20,7 +17,7 @@ export class TypeSelectionComponent implements OnInit {
   requestCreationForm: FormGroup;
 
   @Output()
-  stepChanged = new EventEmitter<1>();
+  private readonly stepChanged = new EventEmitter<1>();
 
   options: DsfrRadio[];
 
@@ -33,7 +30,9 @@ export class TypeSelectionComponent implements OnInit {
     });
   }
 
-  getTypeAsControl(): FormControl {
-    return this.requestCreationForm.get('type') as FormControl;
+  chooseType(type: string) {
+    const control = this.requestCreationForm.get('type');
+    control?.setValue(type);
+    this.stepChanged.emit(1);
   }
 }
diff --git a/src/app/component/court/service-select/service-select.component.ts b/src/app/component/court/service-select/service-select.component.ts
index 7bebf31193d40268adb6c650cd36b6e3909f895d..bc96e72cdb834c2ead4edf022f7ae54c8d6473ba 100644
--- a/src/app/component/court/service-select/service-select.component.ts
+++ b/src/app/component/court/service-select/service-select.component.ts
@@ -17,7 +17,7 @@ export class ServiceSelectComponent implements OnInit {
   showServiceOther = false;
   @Output() valueChanged = new EventEmitter<CourtUserServiceUpdate | null>();
 
-  constructor(private apiService: ApiService) {}
+  constructor(private readonly apiService: ApiService) {}
 
   ngOnInit(): void {
     this.serviceOptions$ = this.apiService
diff --git a/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.css b/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.css
index 3b2d04401d3b71692c81cac7d9c32a553e962f2e..e69f5172189b2f6ff6444baba798ce7559ad694d 100644
--- a/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.css
+++ b/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.css
@@ -9,8 +9,8 @@
 
 .honorStatement {
   border: solid 1px var(--border-default-grey);
+  font-size: 0.875rem;
   border-radius: 4px;
-  padding: 20px;
 }
 
 :host ::ng-deep .fr-card__content {
@@ -24,3 +24,18 @@
 :host ::ng-deep .fr-card__desc {
   white-space: pre-wrap;
 }
+
+:host ::ng-deep dsfr-form-checkbox .fr-label {
+  color: var(--text-default-grey);
+  font-size: 0.875rem;
+}
+
+:host ::ng-deep dsfr-notice .fr-container {
+  padding-left: 1rem;
+  padding-right: 1rem;
+}
+
+:host ::ng-deep dsfr-notice .fr-notice {
+  padding-top: 0.5rem;
+  padding-bottom: 0.5rem;
+}
diff --git a/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.html b/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.html
index 25f69af3323cb0e99e0de6eb97989314244b3bce..29cd7333df3178db5c63e1cf59754b3f9d848b04 100644
--- a/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.html
+++ b/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.html
@@ -1,37 +1,44 @@
-<section class="fr-accordion">
-  <div class="fr-accordion__title">
-    <button
-      class="fr-accordion__btn"
-      (click)="toggleIsExpanded()"
-      [attr.aria-expanded]="expandAtInit"
-      [attr.aria-controls]="'accordion-' + request.id">
-      <div>
-        <div>
-          <span class="fr-text--bold fr-mr-2v">
-            <span *ngIf="request.archived">[archive] </span>
-            <span class="underlined uppercase">
-              {{ typeLabel }}
-              <span class="no-wrap">nº {{ request.procedureId }}</span>
-            </span>
-          </span>
-          <dsfr-badge
-            size="MD"
-            [label]="statusLabel"
-            [noIcon]="!awaitingResponse"
-            [customClass]="statusBadgeColor"></dsfr-badge>
-        </div>
-        <div class="fr-my-1v fr-ml-3v">
-          <i
-            >Demande reçue le {{ request.sentOn | date: 'dd/MM/yy à HH:mm' }}</i
-          >
-        </div>
-        <div>
-          Magistrat : {{ request.magistrate.name }} ({{ request.jurisdiction }})
+<dsfr-accordion
+  [index]="'accordion-' + request.id"
+  [expanded]="this.isExpanded"
+  (expandedChange)="expandedChange($event)">
+  <ng-container heading>
+    <div style="width: 100%">
+      <div class="fr-text--bold fr-toggle fr-mb-3v">
+        <span *ngIf="request.archived">[archive] </span>
+        <span class="underlined uppercase">{{ typeLabel }}&nbsp;</span>
+        <div class="fr-mr-3v">
+          <span class="underlined uppercase">nº {{ request.procedureId }}</span>
         </div>
+        <dsfr-badge
+          size="MD"
+          [label]="statusBadge.label"
+          [noIcon]="statusBadge.noIcon"
+          [customClass]="statusBadge.customClass"></dsfr-badge>
+      </div>
+      <div *ngIf="decision && !isConfirmed" class="box-left fr-my-2v">
+        <dsfr-notice
+          [heading]="
+            'La décision a été ajoutée.' +
+            (isCivilType ? ' Veuillez confirmer votre acceptation.' : '')
+          "
+          [type]="isCivilType ? 'warning' : 'info'"></dsfr-notice>
+      </div>
+      <div *ngIf="escrow && isConfirmed" class="box-left fr-my-2v">
+        <dsfr-notice
+          heading="L'avis de consignation a été ajouté."
+          type="info"></dsfr-notice>
+      </div>
+      <div class="fr-my-1v fr-ml-3v">
+        <i>Demande reçue le {{ request.sentOn | date: 'dd/MM/yy à HH:mm' }}</i>
+      </div>
+      <div>
+        Magistrat : {{ request.magistrate.name }} ({{ request.jurisdiction }})
       </div>
-    </button>
-  </div>
-  <div class="fr-collapse" id="accordion-{{ request.id }}">
+    </div>
+  </ng-container>
+
+  <ng-container content *ngIf="this.openRequestId === this.request.id">
     <div class="fr-mb-10v">
       <app-expert-question-list
         [request]="request"
@@ -44,157 +51,211 @@
 
     <div class="fr-mb-10v"></div>
     <dsfr-ext-timeline [events]="events"></dsfr-ext-timeline>
-    <ol class="dsfrx-timeline-container" *ngIf="customEvent">
-      <li class="timeline--bloc">
-        <dsfr-card
-          [description]="customEvent.description ?? ''"
-          [badges]="customEvent.badges ?? []"
-          [hasFooter]="true">
-          <ng-container footer>
-            <div
-              *ngIf="awaitingResponse && !request.archived"
-              class="fr-ml-8v fr-px-6v">
-              <form [formGroup]="responseForm" (ngSubmit)="onSubmit()">
-                <fieldset class="fr-fieldset">
-                  <div class="fr-fieldset__element">
-                    <div class="fr-radio-group">
-                      <input
-                        type="radio"
-                        id="accept-{{ request.id }}"
-                        formControlName="answer"
-                        value="{{ ANSWER_YES }}" />
-                      <label class="fr-label" for="accept-{{ request.id }}">
-                        J'accepte
-                      </label>
-                    </div>
-                  </div>
-                  <div
-                    *ngIf="responseForm.get('answer')!.value === ANSWER_YES"
-                    class="fr-fieldset__element fr-ml-8v fr-p-4v honorStatement">
-                    <dsfr-form-checkbox
-                      id="honorStatement-{{ request.id }}"
-                      label="Je jure d'accomplir ma mission, de faire mon rapport et de donner mon avis en mon honneur et conscience."
-                      formControlName="honorStatement"
-                      class="fr-mt-4v">
-                    </dsfr-form-checkbox>
-                  </div>
-
-                  <div class="fr-fieldset__element">
-                    <div class="fr-radio-group">
-                      <input
-                        type="radio"
-                        id="refuse-{{ request.id }}"
-                        formControlName="answer"
-                        value="{{ ANSWER_NO }}" />
-                      <label class="fr-label" for="refuse-{{ request.id }}">
-                        Je refuse
-                      </label>
-                    </div>
-                  </div>
-                  <div
-                    *ngIf="responseForm.get('answer')!.value === ANSWER_NO"
-                    class="fr-fieldset__element fr-ml-8v">
-                    <div class="fr-select-group">
-                      <select
-                        formControlName="refusalReason"
-                        class="fr-select"
-                        id="refusal-reason-{{ request.id }}">
-                        <option value="" selected disabled hidden>
-                          Selectionnez une raison
-                        </option>
-                        <option
-                          *ngFor="let reason of REFUSAL_REASON_ARRAY"
-                          [value]="reason.key">
-                          {{ reason.value }}
-                        </option>
-                      </select>
-                    </div>
 
-                    <div
-                      *ngIf="
-                        responseForm.get('refusalReason')?.value ===
-                          'UNAVAILABLE' && !isUnavailibleSet
-                      "
-                      class="fr-alert fr-alert--sm fr-alert--warning fr-mt-5v">
-                      Vous devez mettre à jour votre disponibilité sur la page
-                      <a routerLink="/expert/infos-compte">infos compte</a>
-                      avant de pouvoir refuser pour cette raison.
-                    </div>
-                    <div
-                      *ngIf="
-                        !isGeoConstraintSet &&
-                        responseForm.get('refusalReason')?.value ===
-                          'GEO_CONSTRAINT'
-                      "
-                      class="fr-alert fr-alert--sm fr-alert--warning fr-mt-5v">
-                      Vous devez mettre à jour votre zone géographique
-                      d'intervention sur la page
-                      <a routerLink="/expert/infos-compte">infos compte</a>
-                      avant de pouvoir refuser pour cette raison.
-                    </div>
-                    <div
-                      *ngIf="
-                        responseForm.get('refusalReason')?.value === 'OTHER'
-                      "
-                      class="fr-fieldset__element fr-p-0 fr-m-0">
-                      <textarea
-                        formControlName="refusalJustification"
-                        class="fr-input"
-                        id="refusal-justification-{{ request.id }}"
-                        placeholder="Précisez svp"
-                        rows="5"></textarea>
-                      <div class="fr-messages-group fr-mt-2v">
-                        <p
-                          class="fr-message fr-message--error"
-                          *ngIf="
-                            responseForm.get('refusalJustification')?.errors?.[
-                              'minlength'
-                            ]
-                          ">
-                          Votre saisie doit contenir au moins 20 caractères.
-                        </p>
+    @if (answerCustomEvent) {
+      <ng-container
+        *ngTemplateOutlet="
+          itemTemplate;
+          context: {
+            item: answerCustomEvent,
+            customContent: answerCustomContent
+          }
+        ">
+      </ng-container>
+      <ng-template #answerCustomContent>
+        <form [formGroup]="responseForm" (ngSubmit)="onResponseSubmit()">
+          <fieldset class="fr-fieldset fr-ml-8v fr-px-6v">
+            <div class="fr-fieldset__element">
+              <div class="fr-radio-group">
+                <input
+                  type="radio"
+                  id="accept-{{ request.id }}"
+                  formControlName="answer"
+                  value="{{ ANSWER_YES }}" />
+                <label class="fr-label" for="accept-{{ request.id }}">
+                  J'accepte
+                </label>
+              </div>
+            </div>
+            <div
+              *ngIf="responseForm.get('honorStatement')!.enabled"
+              class="fr-fieldset__element fr-ml-8v fr-p-4v honorStatement">
+              <dsfr-form-checkbox
+                id="honorStatement-{{ request.id }}"
+                label="Je jure d'accomplir ma mission, de faire mon rapport et de donner mon avis en mon honneur et conscience."
+                formControlName="honorStatement">
+              </dsfr-form-checkbox>
+            </div>
 
-                        <p
-                          class="fr-message fr-message--error"
-                          *ngIf="
-                            responseForm.get('refusalJustification')?.errors?.[
-                              'maxlength'
-                            ]
-                          ">
-                          Votre saisie doit contenir au maximum 1000 caractères.
-                        </p>
-                      </div>
-                    </div>
-                  </div>
-                  <div class="fr-fieldset__element fr-m-0 fr-mt-2v">
-                    <button
-                      class="fr-btn"
-                      type="submit"
-                      [disabled]="responseForm.invalid">
-                      Valider
-                    </button>
-                  </div>
-                </fieldset>
-              </form>
+            <div class="fr-fieldset__element">
+              <div class="fr-radio-group">
+                <input
+                  type="radio"
+                  id="refuse-{{ request.id }}"
+                  formControlName="answer"
+                  value="{{ ANSWER_NO }}" />
+                <label class="fr-label" for="refuse-{{ request.id }}">
+                  Je refuse
+                </label>
+              </div>
             </div>
-            <div *ngIf="isAccepted && decision">
-              <div class="text-xl text-bold underlined box-center">
-                DÉCISION
+            <div
+              *ngIf="responseForm.get('answer')!.value === ANSWER_NO"
+              class="fr-fieldset__element fr-ml-8v">
+              <dsfr-ext-multiselect
+                name="role"
+                appendTo="body"
+                placeHolder=" "
+                selectionMode="single"
+                [options]="REFUSAL_REASON_ARRAY"
+                formControlName="refusalReason"></dsfr-ext-multiselect>
+
+              <div
+                *ngIf="
+                  responseForm.get('refusalReason')?.value === 'UNAVAILABLE' &&
+                  !isUnavailibleSet
+                "
+                class="fr-alert fr-alert--sm fr-alert--warning fr-mt-5v">
+                Vous devez mettre à jour votre disponibilité sur la page
+                <a routerLink="/expert/infos-compte">infos compte</a>
+                avant de pouvoir refuser pour cette raison.
+              </div>
+              <div
+                *ngIf="
+                  !isGeoConstraintSet &&
+                  responseForm.get('refusalReason')?.value === 'GEO_CONSTRAINT'
+                "
+                class="fr-alert fr-alert--sm fr-alert--warning fr-mt-5v">
+                Vous devez mettre à jour votre zone géographique d'intervention
+                sur la page
+                <a routerLink="/expert/infos-compte">infos compte</a>
+                avant de pouvoir refuser pour cette raison.
               </div>
-              <div class="box-center fr-mt-4v">
-                <app-file-download
-                  [file]="decision"
-                  [procedureId]="request.procedureId"
-                  [requestArchived]="request.archived"></app-file-download>
+              <div
+                *ngIf="responseForm.get('refusalReason')?.value === 'OTHER'"
+                class="fr-fieldset__element fr-p-0 fr-m-0">
+                <dsfr-form-input
+                  formControlName="refusalJustification"
+                  placeholder="Précisez svp"
+                  type="textarea"
+                  messageSeverity="error"
+                  [message]="refusalJustificationError"
+                  [rows]="5"></dsfr-form-input>
               </div>
             </div>
-          </ng-container>
-        </dsfr-card>
-      </li>
-    </ol>
+            <div class="fr-fieldset__element fr-m-0 fr-mt-4v">
+              <dsfr-button
+                label="Valider"
+                type="submit"
+                size="SM"
+                [disabled]="responseForm.invalid"
+                ariaControls="response-form-submit"></dsfr-button>
+            </div>
+          </fieldset>
+        </form>
+      </ng-template>
+    }
 
-    <div *ngIf="!request.status" class="fr-messages-group fr-message--error">
-      erreur
-    </div>
-  </div>
-</section>
+    @if (decisionCustomEvent) {
+      <ng-container
+        *ngTemplateOutlet="
+          itemTemplate;
+          context: {
+            item: decisionCustomEvent,
+            customContent: decisionCustomContent
+          }
+        ">
+      </ng-container>
+      <ng-template #decisionCustomContent>
+        <div class="box-center">
+          <app-file-download
+            [file]="decision!"
+            [procedureId]="request.procedureId"
+            [requestArchived]="request.archived"></app-file-download>
+        </div>
+      </ng-template>
+    }
+
+    @if (escrowCustomEvent) {
+      <ng-container
+        *ngTemplateOutlet="
+          itemTemplate;
+          context: {
+            item: escrowCustomEvent,
+            customContent: escrowCustomContent
+          }
+        ">
+      </ng-container>
+      <ng-template #escrowCustomContent>
+        <div class="box-center">
+          <app-file-download
+            [file]="escrow!"
+            [procedureId]="request.procedureId"
+            [requestArchived]="request.archived"></app-file-download>
+        </div>
+      </ng-template>
+    }
+
+    @if (confirmCustomEvent) {
+      <ng-container
+        *ngTemplateOutlet="
+          itemTemplate;
+          context: {
+            item: confirmCustomEvent,
+            customContent: confirmCustomContent
+          }
+        ">
+      </ng-container>
+      <ng-template #confirmCustomContent>
+        <form [formGroup]="confirmForm" (ngSubmit)="onConfirmSubmit()">
+          <fieldset class="fr-fieldset fr-ml-4v fr-px-6v">
+            <div class="fr-fieldset__element fr-p-4v honorStatement">
+              <dsfr-form-checkbox
+                id="confirmStatement-{{ request.id }}"
+                label="J’accepte la mission confiée par {{
+                  request.jurisdiction
+                }} dans la procédure n° {{ request.procedureId }}."
+                formControlName="confirmStatement">
+              </dsfr-form-checkbox>
+            </div>
+            <div
+              *ngIf="confirmForm.get('honorStatement')!.enabled"
+              class="fr-fieldset__element fr-p-4v honorStatement">
+              <dsfr-form-checkbox
+                id="honorStatement-{{ request.id }}"
+                label="Je jure d'accomplir ma mission, de faire mon rapport et de donner mon avis en mon honneur et conscience."
+                formControlName="honorStatement">
+              </dsfr-form-checkbox>
+            </div>
+            <div class="fr-fieldset__element fr-m-0 fr-p-0">
+              <dsfr-button
+                label="Valider"
+                type="submit"
+                size="SM"
+                [disabled]="confirmForm.invalid"
+                ariaControls="confirm-form-submit"></dsfr-button>
+            </div>
+          </fieldset>
+        </form>
+      </ng-template>
+    }
+
+    <ng-template
+      #itemTemplate
+      let-item="item"
+      let-customContent="customContent">
+      <ol class="dsfrx-timeline-container" *ngIf="item">
+        <li class="timeline--bloc">
+          <dsfr-card
+            [description]="item.description ?? ''"
+            [badges]="item.badges ?? []"
+            [hasFooter]="true">
+            <div footer>
+              <ng-container *ngTemplateOutlet="customContent"> </ng-container>
+            </div>
+          </dsfr-card>
+        </li>
+      </ol>
+    </ng-template>
+  </ng-container>
+</dsfr-accordion>
diff --git a/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.ts b/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.ts
index 85e3ce0fb99b6f7ef27b91cc6c84db8ca0f6128e..6be45f18932d7878424deca570f7ea0586d4f579 100644
--- a/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.ts
+++ b/src/app/component/expert/expert-request-list/expert-request-item/expert-request-item.component.ts
@@ -8,14 +8,21 @@ import {
   Output,
   SimpleChanges
 } from '@angular/core';
-import { FormBuilder, FormGroup, Validators } from '@angular/forms';
+import {
+  AbstractControl,
+  FormBuilder,
+  FormGroup,
+  Validators
+} from '@angular/forms';
 import { DsfrBadgeSeverity } from '@edugouvfr/ngx-dsfr';
 import { DsfrTimelineEvent } from '@edugouvfr/ngx-dsfr-ext';
-import { concat } from 'rxjs';
+import LocaleDateUtils from 'src/app/helper/dateTransfromUtils';
 import RequestTimeLineEventsUtils from 'src/app/helper/requestTimeLineEventsUtils';
+import { BadgeProperties } from 'src/app/model/badge-properties';
 import { ExpertAvailabilityStatus } from 'src/app/model/expert-status';
 import { RequestType } from 'src/app/model/request-type';
 import { ExpertService } from 'src/app/service/expert.service';
+import { NotificationService } from 'src/app/service/notification.service';
 import Utils from '../../../../helper/utils';
 import { FileDownload } from '../../../../model/file-download';
 import { FileType } from '../../../../model/file-type';
@@ -30,7 +37,6 @@ import {
 } from '../../../../model/request-expert-status';
 import { RequestForExpert } from '../../../../model/request-for-expert';
 import { ApiService } from '../../../../service/api.service';
-import { AuthService } from '../../../../service/auth.service';
 import { UserService } from '../../../../service/user.service';
 
 @Component({
@@ -41,65 +47,110 @@ import { UserService } from '../../../../service/user.service';
 export class ExpertRequestItemComponent implements OnInit, OnChanges {
   @Input() request: RequestForExpert;
   @Input() openRequestId: number;
-  @Input() page: number; // used after adding experts to open the right page
 
-  @Output() expandToggled = new EventEmitter<number>();
+  @Output()
+  openRequest = new EventEmitter<number>();
+
+  @Input() page: number; // used after adding experts to open the right page
 
-  expandAtInit: boolean;
   isExpanded: boolean;
+
   tomorrow: string;
 
-  statusBadgeColor: string;
-  statusLabel: string;
+  statusBadge: BadgeProperties;
 
   typeLabel: string;
 
+  decision?: FileDownload;
+  escrow?: FileDownload;
+  attachments?: FileDownload[];
+
+  deliberationDate: string;
+  decisionDate: string;
+  missionDeadline: string;
+  progressReportDate: string;
+
   events: DsfrTimelineEvent[];
-  customEvent: DsfrTimelineEvent | undefined;
+  answerCustomEvent?: DsfrTimelineEvent;
+  decisionCustomEvent?: DsfrTimelineEvent;
+  escrowCustomEvent?: DsfrTimelineEvent;
+  confirmCustomEvent?: DsfrTimelineEvent;
 
   responseForm: FormGroup;
+  confirmForm: FormGroup;
 
-  readonly ANSWER_YES = 'y';
-  readonly ANSWER_NO = 'n';
+  readonly ANSWER_YES: string = 'y';
+  readonly ANSWER_NO: string = 'n';
 
   readonly REFUSAL_REASON_ARRAY = Object.keys(REFUSAL_REASON_LABEL_ENUM).map(
     key => ({
-      key: key,
-      value: REFUSAL_REASON_LABEL_ENUM[key as keyof typeof RefusalReason]
+      label: REFUSAL_REASON_LABEL_ENUM[key as keyof typeof RefusalReason],
+      value: key
     })
   );
 
-  isGeoConstraintSet = false;
-  isUnavailibleSet = false;
+  isGeoConstraintSet: boolean = false;
+  isUnavailibleSet: boolean = false;
+  isRegisteredCA: boolean = false;
+
+  isCivilType: boolean = false;
+  isConfirmed: boolean = false;
 
   constructor(
     private readonly fb: FormBuilder,
     private readonly apiService: ApiService,
     private readonly userService: UserService,
     private readonly expertService: ExpertService,
-    private readonly authService: AuthService,
+    private readonly notificationService: NotificationService,
     private readonly datePipe: DatePipe
   ) {}
 
   ngOnInit(): void {
-    this.expandAtInit = this.request.id === this.openRequestId;
+    this.isExpanded = this.request.id === this.openRequestId;
     this.typeLabel = Utils.requestTypeShortDisplay(this.request.type);
     this.tomorrow = Utils.getTomorrow();
+
+    this.isCivilType = [
+      RequestType.CIVIL,
+      RequestType.CONTROL_CIVIL,
+      RequestType.SUMMARY_PROCEEDINGS
+    ].includes(this.request.type);
+
+    this.deliberationDate = LocaleDateUtils.dateFormat(
+      this.request.deliberationDate
+    );
+
+    this.decisionDate = LocaleDateUtils.dateFormat(this.request.decisionDate);
+    this.missionDeadline = LocaleDateUtils.dateFormat(
+      this.request.missionDeadline
+    );
+    this.progressReportDate = LocaleDateUtils.dateFormat(
+      this.request.progressReportDate
+    );
+
+    this.decision = this.request.files?.find(f => f.type === FileType.DECISION);
+    this.escrow = this.request.files?.find(f => f.type === FileType.ESCROW);
+    this.attachments = this.request.files?.filter(
+      f => f.type === FileType.ATTACHMENT
+    );
+
     this.refrechStatusAndBadgeColor();
-    this.initializeForm();
     this.userService.getUser$().subscribe(user => {
       this.isGeoConstraintSet = !!user?.expert?.geoConstraint;
+      this.isRegisteredCA = !user?.expert?.notRegistered;
       this.isUnavailibleSet =
         user?.expert?.availabilityStatus !== ExpertAvailabilityStatus.AVAILABLE;
-      this.responseForm.get('refusalReason')?.updateValueAndValidity();
     });
     this.buildEvents(this.request);
   }
 
   ngOnChanges(changes: SimpleChanges): void {
     if (changes['openRequestId']) {
-      this.isExpanded =
-        this.request.id === changes['openRequestId'].currentValue;
+      if (this.request.id === this.openRequestId) {
+        setTimeout(() => {
+          Utils.scrollTo(`request-${this.request.id}`);
+        }, 500);
+      }
     }
   }
 
@@ -113,36 +164,53 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges {
       });
   }
 
-  toggleIsExpanded(): void {
-    this.expandToggled.emit(this.isExpanded ? 0 : this.request.id);
+  expandedChange(isExpanded: boolean): void {
+    if (isExpanded) {
+      this.openRequest.emit(this.request.id);
+    }
   }
 
-  private initializeForm(): void {
-    this.responseForm = this.fb.group({
-      answer: ['', Validators.required],
-      honorStatement: [false],
-      refusalReason: [''],
-      refusalJustification: ['']
+  private initConfirmForm(): void {
+    this.confirmForm = this.fb.group({
+      honorStatement: [
+        {
+          value: null,
+          disabled: this.isRegisteredCA
+        },
+        [
+          Validators.required,
+          (control: AbstractControl) =>
+            control.value === true ? null : { mustBeTrue: true }
+        ]
+      ],
+      confirmStatement: [
+        null,
+        [
+          Validators.required,
+          (control: AbstractControl) =>
+            control.value === true ? null : { mustBeTrue: true }
+        ]
+      ]
     });
-
-    this.handleDynamicValidation();
   }
 
-  private handleDynamicValidation(): void {
-    this.responseForm.get('answer')?.valueChanges.subscribe(answer => {
-      const honorStatement = this.responseForm.get('honorStatement');
-      const refusalReason = this.responseForm.get('refusalReason');
-
-      honorStatement?.clearValidators();
-      refusalReason?.clearValidators();
-
-      if (answer === this.ANSWER_YES) {
-        honorStatement?.setValidators(Validators.requiredTrue);
-        refusalReason?.setValue('');
-      } else if (answer === this.ANSWER_NO) {
-        refusalReason?.setValidators([
+  private initResponseForm(): void {
+    this.responseForm = this.fb.group({
+      answer: ['', Validators.required],
+      honorStatement: [
+        { value: null, disabled: true },
+        [
+          Validators.required,
+          (control: AbstractControl) =>
+            control.value === true ? null : { mustBeTrue: true }
+        ]
+      ],
+
+      refusalReason: [
+        '',
+        [
           Validators.required,
-          control => {
+          (control: AbstractControl) => {
             return (!this.isGeoConstraintSet &&
               control.value === RefusalReason.GEO_CONSTRAINT) ||
               (!this.isUnavailibleSet &&
@@ -150,33 +218,40 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges {
               ? { invalid: '' }
               : null;
           }
-        ]);
-        honorStatement?.setValue(false);
-      }
-
-      refusalReason?.updateValueAndValidity();
-      honorStatement?.updateValueAndValidity();
-    });
-
-    this.responseForm.get('refusalReason')?.valueChanges.subscribe(reason => {
-      const justification = this.responseForm.get('refusalJustification');
-
-      justification?.clearValidators();
-      justification?.reset('');
-
-      if (reason === RefusalReason.OTHER) {
-        justification?.setValidators([
+        ]
+      ],
+      refusalJustification: [
+        { value: '', disabled: true },
+        [
           Validators.required,
           Validators.minLength(20),
           Validators.maxLength(1000)
-        ]);
-      }
+        ]
+      ]
+    });
+
+    this.responseForm.get('answer')?.valueChanges.subscribe(answer => {
+      this.responseForm.get('honorStatement')?.reset({
+        value: null,
+        disabled:
+          this.isRegisteredCA || this.isCivilType || answer === this.ANSWER_NO
+      });
 
-      justification?.updateValueAndValidity();
+      this.responseForm.get('refusalReason')?.reset({
+        value: null,
+        disabled: answer === this.ANSWER_YES
+      });
+    });
+
+    this.responseForm.get('refusalReason')?.valueChanges.subscribe(reason => {
+      this.responseForm.get('refusalJustification')?.reset({
+        value: null,
+        disabled: reason !== RefusalReason.OTHER
+      });
     });
   }
 
-  onSubmit(): void {
+  onResponseSubmit(): void {
     if (this.responseForm.value.answer === this.ANSWER_YES) {
       this.accept();
     } else {
@@ -184,24 +259,60 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges {
     }
   }
 
-  get awaitingResponse(): boolean {
-    return this.request.status === RequestExpertStatus.SENT;
+  onConfirmSubmit() {
+    const values = this.confirmForm.value;
+    const confirmStatement = values.confirmStatement as boolean;
+    console.log(confirmStatement);
+
+    if (confirmStatement) {
+      this.apiService.confirmRequest(this.request.id).subscribe({
+        next: () => {
+          this.notificationService.toastSuccess(
+            'La demande a été confirmée avec succès.'
+          );
+          this.refresh();
+        },
+        error: () =>
+          this.notificationService.toastError(
+            "Une erreur s'est produite lors de la confirmation de la demande. Veuillez réessayer."
+          )
+      });
+    }
   }
 
-  get isAccepted(): boolean {
-    return this.request.status === RequestExpertStatus.ACCEPTED;
+  private addRequestAcceptedEvent() {
+    if (this.request.acceptOn) {
+      this.events.push(
+        RequestTimeLineEventsUtils.createRequestEvent(
+          this.request.acceptOn,
+          'Demande acceptée.',
+          'SUCCESS',
+          this.decision
+            ? ''
+            : 'Vous serez averti par e-mail dès que la décision sera disponible.'
+        )
+      );
+    }
   }
 
-  get attachments(): FileDownload[] {
-    return (this.request.files || []).filter(
-      f => f.type === FileType.ATTACHMENT
-    );
+  private addRequestDecisionEvent() {
+    if (this.decision) {
+      this.decisionCustomEvent = RequestTimeLineEventsUtils.createRequestEvent(
+        undefined,
+        'Decision ajoutée.',
+        'INFO'
+      );
+    }
   }
 
-  get decision(): FileDownload | null {
-    return (
-      (this.request.files || []).find(f => f.type === FileType.DECISION) || null
-    );
+  private addRequestEscrowEvent() {
+    if (this.escrow) {
+      this.escrowCustomEvent = RequestTimeLineEventsUtils.createRequestEvent(
+        undefined,
+        'Avis de consignation ajouté.',
+        'INFO'
+      );
+    }
   }
 
   private addRequestSendEvent() {
@@ -209,15 +320,21 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges {
       let description = '';
 
       if (this.request.type === RequestType.PENAL) {
-        if (this.request.missionDeadline) {
-          description += `<div class="fr-mb-2v">Date fixée pour l'exécution de la mission: <b>${this.datePipe.transform(this.request.missionDeadline, 'dd/MM/yy')}</b></div>`;
+        if (this.missionDeadline) {
+          description += `<div class="fr-mb-2v">Date fixée pour l'exécution de la mission: <b>${this.missionDeadline}</b></div>`;
         }
 
-        if (this.request.progressReportDate) {
-          description += `<div class="fr-mb-2v">Date de dépôt du rapport d’étape: <b>${this.datePipe.transform(this.request.progressReportDate, 'dd/MM/yy')}</b></div>`;
+        if (this.progressReportDate) {
+          description += `<div class="fr-mb-2v">Date de dépôt du rapport d’étape: <b>${this.progressReportDate}</b></div>`;
         }
-      } else if (this.request.deliberationDate) {
-        description += `<div class="fr-mb-2v">Date du délibéré: <b>${this.datePipe.transform(this.request.deliberationDate, 'dd/MM/yy')}</b></div>`;
+      } else if (this.deliberationDate) {
+        description += `<div class="fr-mb-2v">Date du délibéré: <b>${this.deliberationDate}</b></div>`;
+      } else if (this.decisionDate) {
+        description += `<div class="fr-mb-2v">Date de la décision: <b>${this.decisionDate}</b></div>`;
+      }
+
+      if (this.request.delayAfterConsignation) {
+        description += `<div class="fr-mb-2v">Délai (en mois) dans lequel vous devrez donner votre avis à compter de la consignation par les parties: <b>${this.request.delayAfterConsignation}</b></div>`;
       }
 
       description += `<u><b>Informations complémentaires: </b></u><div class="fr-mt-2v">${this.request.extraInfo?.length ? this.request.extraInfo : 'aucune information complémentaire'}</div>`;
@@ -248,20 +365,6 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges {
     );
   }
 
-  private createCustomEvent(
-    date?: string,
-    badgeLabel?: string,
-    badgeSeverity?: DsfrBadgeSeverity,
-    description?: string
-  ) {
-    this.customEvent = RequestTimeLineEventsUtils.createRequestEvent(
-      date,
-      badgeLabel,
-      badgeSeverity,
-      description
-    );
-  }
-
   private addGrantedDaysEvents(request: RequestForExpert) {
     const eventsToAdd = RequestTimeLineEventsUtils.addGrantedDaysEvents(
       request.extraDaysGranted,
@@ -275,19 +378,23 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges {
 
   private buildEvents(requestExpert: RequestForExpert): void {
     this.events = [];
-    this.customEvent = undefined;
+    this.answerCustomEvent = undefined;
+    this.decisionCustomEvent = undefined;
+    this.confirmCustomEvent = undefined;
     this.addRequestSendEvent();
     this.addGrantedDaysEvents(requestExpert);
+    this.addRequestAcceptedEvent();
 
     switch (requestExpert.status) {
       case RequestExpertStatus.SENT: {
+        this.initResponseForm();
         const description =
           `Réponse attendue ${this.request.paused ? '<s>' : ''}avant le <b>${this.datePipe.transform(this.request.deadline, 'dd/MM/yy à 23:59')}</b>${this.request.paused ? '</s>' : ''}.` +
           (requestExpert.paused
             ? '<br/><br/>Dans l’attente de réponse à votre question, le délai dont vous disposez pour accepter ou refuser la mission est suspendu. Vous pouvez tout de même choisir d’accepter ou de refuser la mission sans attendre.</em>'
             : '');
 
-        this.createCustomEvent(
+        this.answerCustomEvent = RequestTimeLineEventsUtils.createRequestEvent(
           undefined,
           'En attente de réponse.',
           'WARNING',
@@ -297,20 +404,37 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges {
         break;
       }
       case RequestExpertStatus.ACCEPTED: {
-        this.addRequestLastEvent(
-          'Demande acceptée.',
-          'SUCCESS',
-          this.decision
-            ? ''
-            : 'Vous serez averti par e-mail dès que la décision sera disponible.'
-        );
-
-        if (this.decision) {
-          this.createCustomEvent();
+        this.addRequestDecisionEvent();
+        if (this.decision && this.isCivilType) {
+          this.initConfirmForm();
+          this.confirmCustomEvent =
+            RequestTimeLineEventsUtils.createRequestEvent(
+              undefined,
+              'En attente de confirmation.',
+              'WARNING',
+              'Afin de satisfaire à l’article 267 du code civil, veuillez confirmer votre acceptation s’il-vous-plaît.'
+            );
         }
 
         break;
       }
+
+      case RequestExpertStatus.CONFIRMED: {
+        this.addRequestDecisionEvent();
+        this.addRequestEscrowEvent();
+        this.events.push(
+          RequestTimeLineEventsUtils.createRequestEvent(
+            this.request.updatedOn,
+            'Demande confirmée.',
+            'SUCCESS',
+            this.escrow
+              ? ''
+              : "Vous serez averti par e-mail dès que l'avis de consignation sera disponible"
+          )
+        );
+
+        break;
+      }
       case RequestExpertStatus.REFUSED: {
         const refusalReason = requestExpert.refusalReason
           ? `<b>Raison</b>: ${Utils.getRefusalReasonLabel(requestExpert.refusalReason)}.`
@@ -338,17 +462,22 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges {
     }
   }
 
-  accept(): void {
+  private accept(): void {
     this.apiService.acceptRequest(this.request.id).subscribe({
-      next: () => this.refresh(),
-      error: () => {
-        // @ts-ignore
-        this.request.status = undefined;
-      }
+      next: () => {
+        this.notificationService.toastSuccess(
+          'La demande a été acceptée avec succès.'
+        );
+        this.refresh();
+      },
+      error: () =>
+        this.notificationService.toastError(
+          "Une erreur s'est produite lors de l'acceptation de la demande. Veuillez réessayer."
+        )
     });
   }
 
-  refuse(): void {
+  private refuse(): void {
     const values = this.responseForm.value;
     const refusalReason = values.refusalReason as RefusalReason;
     const unavailableUntil: string = values.unavailableUntil;
@@ -361,24 +490,41 @@ export class ExpertRequestItemComponent implements OnInit, OnChanges {
       reasonDetail = values.refusalJustification;
     }
 
-    concat(
-      this.apiService.refuseRequest(
-        this.request.id,
-        refusalReason,
-        reasonDetail
-      ),
-      this.authService.getUserInfo() // in case of updated unavailability
-    ).subscribe({
-      next: () => this.refresh(),
-      error: () => {
-        // @ts-ignore
-        this.request.status = undefined;
-      }
-    });
+    this.apiService
+      .refuseRequest(this.request.id, refusalReason, reasonDetail)
+      .subscribe({
+        next: () => {
+          this.notificationService.toastSuccess(
+            'La demande a été refusée avec succès.'
+          );
+          this.refresh();
+        },
+        error: () =>
+          this.notificationService.toastError(
+            "Une erreur s'est produite lors du refus de la demande. Veuillez réessayer."
+          )
+      });
+  }
+
+  private refrechStatusAndBadgeColor(): void {
+    this.isConfirmed = this.request.status === RequestExpertStatus.CONFIRMED;
+    this.statusBadge = {
+      label: REQUEST_EXPERT_STATUS_LABEL[this.request.status],
+      customClass: REQUEST_EXPERT_STATUS_COLOR[this.request.status],
+      noIcon: this.request.status !== RequestExpertStatus.SENT
+    };
   }
 
-  refrechStatusAndBadgeColor(): void {
-    this.statusLabel = REQUEST_EXPERT_STATUS_LABEL[this.request.status];
-    this.statusBadgeColor = REQUEST_EXPERT_STATUS_COLOR[this.request.status];
+  get refusalJustificationError(): string {
+    const control = this.responseForm?.get('refusalJustification');
+    if (control?.valid) return '';
+
+    if (control?.errors?.['minlength']) {
+      return 'Votre saisie doit contenir au moins 20 caractères.';
+    } else if (control?.errors?.['maxlength']) {
+      return 'Votre saisie doit contenir au maximum 1000 caractères.';
+    }
+
+    return '';
   }
 }
diff --git a/src/app/component/expert/expert-request-list/expert-request-list.component.html b/src/app/component/expert/expert-request-list/expert-request-list.component.html
index 670a41391e54d57bdd162c53bd9593f794ced212..c079ec6bdec3466bd4ed169dbc4fd563ffff2a10 100644
--- a/src/app/component/expert/expert-request-list/expert-request-list.component.html
+++ b/src/app/component/expert/expert-request-list/expert-request-list.component.html
@@ -6,16 +6,15 @@
     class="fr-container--fluid fr-mb-3w fr-mt-10v">
     <div class="fr-grid-row fr-grid-row--center">
       <div class="fr-col-12 fr-col-md-8 fr-col-lg-7">
-        <div class="fr-accordions-group">
+        <dsfr-accordions-group>
           <app-expert-request-item
             *ngFor="let request of requestPage.elements"
             [request]="request"
             [id]="'request-' + request.id"
             [openRequestId]="openRequestId"
-            (expandToggled)="
-              openRequestId = $event; scrollToRequest(openRequestId)
-            "></app-expert-request-item>
-        </div>
+            (openRequest)="openRequestId = $event">
+          </app-expert-request-item>
+        </dsfr-accordions-group>
       </div>
     </div>
   </div>
diff --git a/src/app/component/expert/expert-request-list/expert-request-list.component.ts b/src/app/component/expert/expert-request-list/expert-request-list.component.ts
index 30eaa0934df663a24fd5bf4a9bd9339957a65514..b6479f1b5b9a44d6a695ed0e5215749610f99827 100644
--- a/src/app/component/expert/expert-request-list/expert-request-list.component.ts
+++ b/src/app/component/expert/expert-request-list/expert-request-list.component.ts
@@ -1,8 +1,8 @@
 import { Component, OnInit } from '@angular/core';
+import Utils from '../../../helper/utils';
+import { Page } from '../../../model/page';
 import { RequestForExpert } from '../../../model/request-for-expert';
 import { ApiService } from '../../../service/api.service';
-import { Page } from '../../../model/page';
-import Utils from '../../../helper/utils';
 
 @Component({
   selector: 'app-expert-request-list',
@@ -14,7 +14,7 @@ export class ExpertRequestListComponent implements OnInit {
 
   openRequestId: number;
 
-  constructor(private apiService: ApiService) {}
+  constructor(private readonly apiService: ApiService) {}
 
   ngOnInit(): void {
     this.openRequestId = history.state.openRequestId;
@@ -26,9 +26,6 @@ export class ExpertRequestListComponent implements OnInit {
     this.apiService.getRequestsOfExpert(page).subscribe(requestPage => {
       this.requestPage = requestPage;
       !isInitLoad && Utils.scrollTo('top');
-      if (this.openRequestId) {
-        this.scrollToRequest(this.openRequestId);
-      }
     });
   }
 
@@ -36,10 +33,4 @@ export class ExpertRequestListComponent implements OnInit {
     this.openRequestId = 0;
     this.loadRequestPage(page);
   }
-
-  scrollToRequest(requestId: number): void {
-    setTimeout(() => {
-      Utils.scrollTo(`request-${requestId}`);
-    }, 500);
-  }
 }
diff --git a/src/app/component/layout/menu/menu.component.ts b/src/app/component/layout/menu/menu.component.ts
index 7426fa8b0635f957264697dafdba4c149a6c6c55..92bafc16e7032b6a320767c0e09b17e200ffc78c 100644
--- a/src/app/component/layout/menu/menu.component.ts
+++ b/src/app/component/layout/menu/menu.component.ts
@@ -8,7 +8,7 @@ import { UserService } from '../../../service/user.service';
   styleUrls: ['./menu.component.css']
 })
 export class MenuComponent implements OnInit {
-  constructor(private userService: UserService) {}
+  constructor(private readonly userService: UserService) {}
 
   menu: MenuItem[];
 
@@ -19,6 +19,7 @@ export class MenuComponent implements OnInit {
           case Role.MAGISTRATE:
           case Role.CLERK:
           case Role.CLERK_DIRECTOR:
+          case Role.ADMINISTRATIVE_ASSISTANT:
           case Role.ASSISTANT:
           case Role.ATTACHE:
             this.menu = [
diff --git a/src/app/helper/dateTransfromUtils.ts b/src/app/helper/dateTransfromUtils.ts
new file mode 100644
index 0000000000000000000000000000000000000000..dce2fc92a808145c980b6e77590a6408a4360345
--- /dev/null
+++ b/src/app/helper/dateTransfromUtils.ts
@@ -0,0 +1,13 @@
+import { DatePipe } from '@angular/common';
+
+export default class LocaleDateUtils {
+  private static readonly datePipe: DatePipe = new DatePipe('fr-FR');
+
+  static dateFormat(dateISOStr?: string): string {
+    return this.datePipe.transform(dateISOStr, 'dd/MM/yyyy') ?? '';
+  }
+
+  static dateWithHrsFormat(dateISOStr?: string): string {
+    return this.datePipe.transform(dateISOStr, 'dd/MM/yy à 23:59') ?? '';
+  }
+}
diff --git a/src/app/helper/utils.ts b/src/app/helper/utils.ts
index 165b19aadad1aa05dd61f660a0b0b00e30053a65..ba3d8934e74c003d6d24efac9c1bf61a7a099ede 100644
--- a/src/app/helper/utils.ts
+++ b/src/app/helper/utils.ts
@@ -19,7 +19,7 @@ export default class Utils {
       block: 'start'
     });
 
-  static roleDisplay = (role: Role) => {
+  static readonly roleDisplay = (role: Role) => {
     switch (role) {
       case Role.EXPERT:
         return 'EXPERT·E';
@@ -29,6 +29,8 @@ export default class Utils {
         return 'GREFFIER·E';
       case Role.CLERK_DIRECTOR:
         return 'DIRECTEUR·RICE DE GREFFE';
+      case Role.ADMINISTRATIVE_ASSISTANT:
+        return 'ADJOINT·E ADMINISTRATIF·IVE';
       case Role.ATTACHE:
         return 'ATTACHE·E DE JUSTICE';
       case Role.ASSISTANT:
@@ -38,7 +40,7 @@ export default class Utils {
     }
   };
 
-  static roleDisplayShort = (role: Role) => {
+  static readonly roleDisplayShort = (role: Role) => {
     switch (role) {
       case Role.EXPERT:
         return 'E';
@@ -48,6 +50,8 @@ export default class Utils {
         return 'G';
       case Role.CLERK_DIRECTOR:
         return 'DG';
+      case Role.ADMINISTRATIVE_ASSISTANT:
+        return 'AA';
       case Role.ATTACHE:
         return 'AT';
       case Role.ASSISTANT:
diff --git a/src/app/model/badge-properties.ts b/src/app/model/badge-properties.ts
new file mode 100644
index 0000000000000000000000000000000000000000..72684d2850dd1db6e9120351231b10c8db3134c3
--- /dev/null
+++ b/src/app/model/badge-properties.ts
@@ -0,0 +1,5 @@
+export interface BadgeProperties {
+  label: string;
+  noIcon: boolean;
+  customClass: string;
+}
diff --git a/src/app/model/court-registration-form.ts b/src/app/model/court-registration-form.ts
index 8a134a42ef3c8eb6142da4dc986bee819fe4a53b..7292ae1c8d150201c5da156bdac533a3bac8ab76 100644
--- a/src/app/model/court-registration-form.ts
+++ b/src/app/model/court-registration-form.ts
@@ -1,4 +1,5 @@
 import { CourtUserServiceUpdate } from './court-user-service-update';
+import { CourtRole } from './role';
 
 export interface CourtRegistrationForm {
   email: string;
@@ -6,7 +7,7 @@ export interface CourtRegistrationForm {
   lastName: string;
   service: CourtUserServiceUpdate;
   jurisdictionId: number;
-  role: 'MAGISTRATE' | 'CLERK' | 'CLERK_DIRECTOR' | 'ASSISTANT' | 'ATTACHE';
+  role: CourtRole;
   phoneLandline?: string;
   phoneMobile?: string;
 }
diff --git a/src/app/model/file-type.ts b/src/app/model/file-type.ts
index 34b3b481cf70225da2c365d230c0cd41499f5b9c..81802aed65e781d5175776eb45e9038defc7a3ac 100644
--- a/src/app/model/file-type.ts
+++ b/src/app/model/file-type.ts
@@ -1,4 +1,5 @@
 export enum FileType {
   ATTACHMENT = 'ATTACHMENT',
-  DECISION = 'DECISION'
+  DECISION = 'DECISION',
+  ESCROW = 'ESCROW'
 }
diff --git a/src/app/model/request-creation.ts b/src/app/model/request-creation.ts
index 44571bf52ac547a1e5b1480b30cc31e10085d18d..327fa4792552e80e63fccc8a2cc6cc8356cbc0b2 100644
--- a/src/app/model/request-creation.ts
+++ b/src/app/model/request-creation.ts
@@ -8,7 +8,11 @@ export interface RequestCreation {
   expertIds: number[];
   clerkIds: number[];
   magistrateId?: number;
+  magistrateUsername?: string;
+  magistrateFirstName?: string;
+  magistrateLastName?: string;
   deliberationDate?: string;
+  delayAfterConsignation?: number;
   missionDeadline?: string;
   progressReportDate?: string;
   duplicatedFiles?: string[];
diff --git a/src/app/model/request-expert-status.ts b/src/app/model/request-expert-status.ts
index d43aeb3160f816f5a9427bd21b60cbf5f7a3c1e2..c16647a7feb3667c24097ab9bce1b6c208a17366 100644
--- a/src/app/model/request-expert-status.ts
+++ b/src/app/model/request-expert-status.ts
@@ -3,6 +3,7 @@ export enum RequestExpertStatus {
   SENDING = 'SENDING',
   SENT = 'SENT',
   ACCEPTED = 'ACCEPTED',
+  CONFIRMED = 'CONFIRMED',
   REFUSED = 'REFUSED',
   REFUSED_AUTO = 'REFUSED_AUTO',
   CANCELLED = 'CANCELLED',
@@ -15,6 +16,7 @@ export const REQUEST_EXPERT_STATUS_COLOR: Record<RequestExpertStatus, string> =
     [RequestExpertStatus.QUEUED]: 'fr-badge--new',
     [RequestExpertStatus.SENDING]: 'fr-badge--warning',
     [RequestExpertStatus.SENT]: 'fr-badge--warning',
+    [RequestExpertStatus.CONFIRMED]: 'fr-badge--success',
     [RequestExpertStatus.ACCEPTED]: 'fr-badge--success',
     [RequestExpertStatus.REFUSED]: 'fr-badge--error',
     [RequestExpertStatus.REFUSED_AUTO]: 'fr-badge--error',
@@ -28,6 +30,7 @@ export const REQUEST_EXPERT_STATUS_LABEL: Record<RequestExpertStatus, string> =
     [RequestExpertStatus.QUEUED]: '???',
     [RequestExpertStatus.SENDING]: 'RSVP',
     [RequestExpertStatus.SENT]: 'RSVP',
+    [RequestExpertStatus.CONFIRMED]: 'Confirmée',
     [RequestExpertStatus.ACCEPTED]: 'Acceptée',
     [RequestExpertStatus.REFUSED]: 'Refusée',
     [RequestExpertStatus.REFUSED_AUTO]: 'Refus auto',
diff --git a/src/app/model/request-expert.ts b/src/app/model/request-expert.ts
index ffdb4cdd28f19247d94c7c1e4bf68c38d8996ec8..2875e2a37fe14204302e8870a8892cf5e36aa9f4 100644
--- a/src/app/model/request-expert.ts
+++ b/src/app/model/request-expert.ts
@@ -1,12 +1,13 @@
 import { Expert } from './expert';
-import { RequestExpertStatus } from './request-expert-status';
 import { RefusalReason } from './refusal-reason';
+import { RequestExpertStatus } from './request-expert-status';
 
 export interface RequestExpert {
   expert: Expert;
   status: RequestExpertStatus;
   sentOn: string;
   updatedOn: string;
+  acceptOn: string;
   createdOn: string;
   timestamp: string;
   paused: boolean;
diff --git a/src/app/model/request-for-expert.ts b/src/app/model/request-for-expert.ts
index 553dcca32548398d682b5bc9b262db06bbb723dd..515bc491cc167c260881cd9d5e1b4ed3ce9820dd 100644
--- a/src/app/model/request-for-expert.ts
+++ b/src/app/model/request-for-expert.ts
@@ -11,12 +11,15 @@ export interface RequestForExpert {
   type: RequestType;
   extraInfo: string;
   deliberationDate?: string;
+  delayAfterConsignation?: number;
+  decisionDate?: string;
   missionDeadline?: string;
   progressReportDate?: string;
   sentOn: string;
   deadline: string;
   status: RequestExpertStatus;
   updatedOn: string;
+  acceptOn: string;
   createdOn: string;
   refusalReason?: RefusalReason;
   refusalJustification?: string;
diff --git a/src/app/model/request-status.ts b/src/app/model/request-status.ts
index 921c2648dfa0e00428cc77abc0a85e47902d06c6..c37157cc4aac4f21258e0b18455eeb3bb63ea1eb 100644
--- a/src/app/model/request-status.ts
+++ b/src/app/model/request-status.ts
@@ -3,6 +3,7 @@ export enum RequestStatus {
   ACCEPTED = 'ACCEPTED',
   REFUSED = 'REFUSED',
   COMPLETE = 'COMPLETE',
+  ESCROW_COMPLETED = 'ESCROW_COMPLETED',
   CANCELLED = 'CANCELLED',
   CANCELLED_AUTO = 'CANCELLED_AUTO'
 }
@@ -12,6 +13,7 @@ export const REQUEST_STATUS_COLOR: Record<RequestStatus, string> = {
   [RequestStatus.ACCEPTED]: 'fr-badge--success',
   [RequestStatus.REFUSED]: 'fr-badge--error',
   [RequestStatus.COMPLETE]: 'fr-badge--success',
+  [RequestStatus.ESCROW_COMPLETED]: 'fr-badge--success',
   [RequestStatus.CANCELLED]: 'fr-badge--grey',
   [RequestStatus.CANCELLED_AUTO]: 'fr-badge--grey'
 };
@@ -21,6 +23,7 @@ export const REQUEST_STATUS_LABEL: Record<RequestStatus, string> = {
   [RequestStatus.ACCEPTED]: 'Acceptée',
   [RequestStatus.REFUSED]: 'Refusée',
   [RequestStatus.COMPLETE]: 'Décision',
+  [RequestStatus.ESCROW_COMPLETED]: 'Consignation',
   [RequestStatus.CANCELLED]: 'Annulée',
   [RequestStatus.CANCELLED_AUTO]: 'Annulée Auto'
 };
diff --git a/src/app/model/request-type.ts b/src/app/model/request-type.ts
index 6a443527b64e6bdc6db02e3e10fd28d05646fc27..6808040f8b519ab12741ed7ca23d9dc8d19e4cb2 100644
--- a/src/app/model/request-type.ts
+++ b/src/app/model/request-type.ts
@@ -1,7 +1,8 @@
 export enum RequestType {
-  SUMMARY_PROCEEDINGS = 'SUMMARY_PROCEEDINGS',
   CIVIL = 'CIVIL',
+  SUMMARY_PROCEEDINGS = 'SUMMARY_PROCEEDINGS',
+
   CONTROL_CIVIL = 'CONTROL_CIVIL',
-  CONTROL_PENAL = 'CONTROL_PENAL',
-  PENAL = 'PENAL'
+  PENAL = 'PENAL',
+  CONTROL_PENAL = 'CONTROL_PENAL'
 }
diff --git a/src/app/model/request-update-request.ts b/src/app/model/request-update-request.ts
index 1a6d43152ab52a77a6f880fd75c29c06f720e076..df82a8ec629d271e51965133dfb5762c57b760e6 100644
--- a/src/app/model/request-update-request.ts
+++ b/src/app/model/request-update-request.ts
@@ -2,6 +2,7 @@ export interface RequestUpdateRequest {
   procedureId?: string;
   extraInfo?: string;
   deliberationDate?: string | null;
+  delayAfterConsignation?: number | null;
   missionDeadline?: string | null;
   progressReportDate?: string | null;
 }
diff --git a/src/app/model/request.ts b/src/app/model/request.ts
index 5634c9cf39aaf534c6d406f3f1ba3fd251e41ccf..02c69509d00dd0d335d421ed7ec633fcff3bbd91 100644
--- a/src/app/model/request.ts
+++ b/src/app/model/request.ts
@@ -25,6 +25,7 @@ export interface Request {
   files: FileDownload[];
   archived: boolean;
   deliberationDate?: string;
+  delayAfterConsignation?: number;
   missionDeadline?: string;
   progressReportDate?: string;
 }
@@ -42,7 +43,7 @@ export const ALL_REQUEST_TABS = [
     tabId: 'AC',
     label: 'Acceptation',
     icon: 'fr-icon-checkbox-circle-line',
-    statues: [RequestExpertStatus.ACCEPTED]
+    statues: [RequestExpertStatus.ACCEPTED, RequestExpertStatus.CONFIRMED]
   },
   {
     tabId: 'EC',
diff --git a/src/app/model/role.ts b/src/app/model/role.ts
index d4fbdcaf7348eb7ed8579ca6ec770223fc36cba9..bf67c2fed8bd3d685a09de8c127c08e4120fc06d 100644
--- a/src/app/model/role.ts
+++ b/src/app/model/role.ts
@@ -4,6 +4,29 @@ export enum Role {
   CLERK_DIRECTOR = 'CLERK_DIRECTOR',
   ASSISTANT = 'ASSISTANT',
   ATTACHE = 'ATTACHE',
+  ADMINISTRATIVE_ASSISTANT = 'ADMINISTRATIVE_ASSISTANT',
   EXPERT = 'EXPERT',
   ADMIN = 'ADMIN'
 }
+
+// Define COURT_AIDE_ROLES
+export const COURT_AIDE_ROLES: Role[] = [
+  Role.CLERK,
+  Role.CLERK_DIRECTOR,
+  Role.ADMINISTRATIVE_ASSISTANT,
+  Role.ASSISTANT,
+  Role.ATTACHE
+];
+
+// Define COURT_ROLES
+export const COURT_ROLES = [
+  Role.MAGISTRATE,
+  Role.CLERK,
+  Role.CLERK_DIRECTOR,
+  Role.ADMINISTRATIVE_ASSISTANT,
+  Role.ASSISTANT,
+  Role.ATTACHE
+] as const;
+
+// Derive a strict literal union type from COURT_ROLES
+export type CourtRole = (typeof COURT_ROLES)[number];
diff --git a/src/app/model/user-info.ts b/src/app/model/user-info.ts
index d2c413ed01731400b17431dab801381b478dfd86..f599055ebcbca5a81e6353178bb3e215b8bf4bf4 100644
--- a/src/app/model/user-info.ts
+++ b/src/app/model/user-info.ts
@@ -1,12 +1,13 @@
-import { Role } from './role';
-import { Expert } from './expert';
 import { AppealCourt } from './appeal-court';
-import { Jurisdiction } from './jurisdiction';
 import { CourtUserService } from './court-user-service';
+import { Expert } from './expert';
+import { Jurisdiction } from './jurisdiction';
+import { Role } from './role';
 
 export interface UserInfo {
   id?: number;
   name: string;
+  email: string;
   role: Role;
   accessToken: string;
   expert?: Expert;
diff --git a/src/app/rest/api.rest.service.ts b/src/app/rest/api.rest.service.ts
index 14c7bfb6f30e3541b0d4d8477e6110e07ed6f18c..4684f42c0854d1d0fc0f657b043c0b6002879aa7 100644
--- a/src/app/rest/api.rest.service.ts
+++ b/src/app/rest/api.rest.service.ts
@@ -170,6 +170,13 @@ export class ApiRestService {
     );
   }
 
+  confirmRequest(requestId: number): Observable<void> {
+    return this.http.post<void>(
+      `${this.BASE_PATH}/expert/request/${requestId}/confirm`,
+      {}
+    );
+  }
+
   refuseRequest(
     requestId: number,
     reason: RefusalReason,
diff --git a/src/app/service/api.service.ts b/src/app/service/api.service.ts
index c0a13052098368d9f71d44b6cc96ffcf8dbd983d..bbe0fb514d704d5d80515e442fe1bd6e7415311a 100644
--- a/src/app/service/api.service.ts
+++ b/src/app/service/api.service.ts
@@ -40,7 +40,8 @@ export class ApiService {
           ...courtAides.filter(ca => ca.role === Role.CLERK_DIRECTOR),
           ...courtAides.filter(ca => ca.role === Role.CLERK),
           ...courtAides.filter(ca => ca.role === Role.ATTACHE),
-          ...courtAides.filter(ca => ca.role === Role.ASSISTANT)
+          ...courtAides.filter(ca => ca.role === Role.ASSISTANT),
+          ...courtAides.filter(ca => ca.role === Role.ADMINISTRATIVE_ASSISTANT)
         ];
       })
     );
@@ -131,6 +132,10 @@ export class ApiService {
     return this.apiRestService.acceptRequest(requestId);
   }
 
+  confirmRequest(requestId: number): Observable<void> {
+    return this.apiRestService.confirmRequest(requestId);
+  }
+
   refuseRequest(
     requestId: number,
     reason: RefusalReason,
diff --git a/src/app/service/crisp.service.spec.ts b/src/app/service/crisp.service.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a6915278dea256df0b0866aa61c64097ee47b01f
--- /dev/null
+++ b/src/app/service/crisp.service.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+
+import { CrispService } from './crisp.service';
+
+describe('CrispService', () => {
+  let service: CrispService;
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({});
+    service = TestBed.inject(CrispService);
+  });
+
+  it('should be created', () => {
+    expect(service).toBeTruthy();
+  });
+});
diff --git a/src/app/service/crisp.service.ts b/src/app/service/crisp.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5bbe5edcc929ed36d7f48e777857677558b0eb2d
--- /dev/null
+++ b/src/app/service/crisp.service.ts
@@ -0,0 +1,82 @@
+import { Injectable } from '@angular/core';
+import { Crisp } from 'crisp-sdk-web';
+import { environment } from 'src/environments/environment';
+import Utils from '../helper/utils';
+import { Role } from '../model/role';
+import { UserInfo } from '../model/user-info';
+import { UserService } from './user.service';
+
+@Injectable({
+  providedIn: 'root'
+})
+export class CrispService {
+  private readonly crispWebsiteId = environment.crispWebsiteId;
+
+  constructor(protected userService: UserService) {
+    this.initializeCrisp();
+  }
+
+  /**
+   * Initialize Crisp chat widget and user subscription
+   */
+  private initializeCrisp(): void {
+    if (this.crispWebsiteId) {
+      Crisp.configure(this.crispWebsiteId);
+
+      // Subscribe to changes in user data
+      this.userService
+        .getUser$()
+        .subscribe(user => this.handleUserChange(user ?? undefined));
+    }
+  }
+
+  /**
+   * Handle Crisp session and user data updates
+   * @param user - User information from the UserService
+   */
+  private handleUserChange(user?: UserInfo): void {
+    if (user && user.role === Role.ADMIN) {
+      Crisp.chat.hide();
+    } else if (!user) {
+      Crisp.session.reset();
+    } else {
+      this.updateCrispUser(user);
+    }
+  }
+
+  /**
+   * Update Crisp user data with logged-in user information
+   * @param user - Logged-in user object
+   */
+  private updateCrispUser(user: UserInfo): void {
+    const { email, name, role, phoneMobile, phoneLandline } = user;
+
+    Crisp.user.setEmail(email);
+
+    const displayRole = Utils.roleDisplay(role);
+    Crisp.user.setNickname(`${name} (${displayRole})`);
+
+    const phone = this.determinePhoneNumber(phoneMobile, phoneLandline);
+    Crisp.user.setPhone(phone);
+
+    Crisp.chat.show();
+  }
+
+  /**
+   * Determine the phone number to set for the user
+   * @param phoneMobile - Mobile phone number
+   * @param phoneLandline - Landline phone number
+   * @returns {string} - Selected phone number
+   */
+  private determinePhoneNumber(
+    phoneMobile?: string,
+    phoneLandline?: string
+  ): string {
+    if (phoneMobile?.trim()) {
+      return phoneMobile;
+    } else if (phoneLandline?.trim()) {
+      return phoneLandline;
+    }
+    return '';
+  }
+}
diff --git a/src/app/service/user.service.ts b/src/app/service/user.service.ts
index fffc95ad9631eae572d843d02f0aeda320a4b753..0964ee25d350628b31950f020c78f83ff9f63815 100644
--- a/src/app/service/user.service.ts
+++ b/src/app/service/user.service.ts
@@ -1,14 +1,14 @@
 import { Injectable } from '@angular/core';
 import { BehaviorSubject, Observable } from 'rxjs';
 import { Jurisdiction } from '../model/jurisdiction';
-import { Role } from '../model/role';
+import { COURT_AIDE_ROLES, COURT_ROLES, CourtRole, Role } from '../model/role';
 import { UserInfo } from '../model/user-info';
 
 @Injectable({
   providedIn: 'root'
 })
 export class UserService {
-  private _user$ = new BehaviorSubject<UserInfo | null>(null);
+  private readonly _user$ = new BehaviorSubject<UserInfo | null>(null);
 
   getUser$(): Observable<UserInfo | null> {
     return this._user$.asObservable();
@@ -50,6 +50,8 @@ export class UserService {
         return 'greffier';
       case Role.CLERK_DIRECTOR:
         return 'directeur-greffe';
+      case Role.ADMINISTRATIVE_ASSISTANT:
+        return 'adjoint-administratif';
       case Role.ATTACHE:
         return 'attache-justice';
       case Role.ASSISTANT:
@@ -76,21 +78,10 @@ export class UserService {
   }
 
   get isCourt(): boolean {
-    return [
-      Role.MAGISTRATE,
-      Role.CLERK,
-      Role.CLERK_DIRECTOR,
-      Role.ATTACHE,
-      Role.ASSISTANT
-    ].includes(this.getRole()!);
+    return COURT_ROLES.includes(this.getRole()! as CourtRole);
   }
 
   get isCourtAide(): boolean {
-    return [
-      Role.CLERK,
-      Role.CLERK_DIRECTOR,
-      Role.ATTACHE,
-      Role.ASSISTANT
-    ].includes(this.getRole()!);
+    return COURT_AIDE_ROLES.includes(this.getRole()!);
   }
 }
diff --git a/src/environments/environment.demo.ts b/src/environments/environment.demo.ts
index 187c35c0b67dd0c13e9502f7307340b535ba16d8..95d8f0a4bfc437d8a146380a55aac484ac0d39f1 100644
--- a/src/environments/environment.demo.ts
+++ b/src/environments/environment.demo.ts
@@ -1,7 +1,10 @@
-export const environment = {
+import { Environment } from './environment.model';
+
+export const environment: Environment = {
   envName: 'demo',
   production: false,
   apiUrl: process.env.NG_APP_API_URL,
+  crispWebsiteId: '',
   maxSelectedExperts: 3,
   maxFileSizeMb: 5
 };
diff --git a/src/environments/environment.dev.ts b/src/environments/environment.dev.ts
index 53f625dea80f753542511508f264bbef00498c79..46387565fdf2d9c5a6e265075e9fe334d4c497b7 100644
--- a/src/environments/environment.dev.ts
+++ b/src/environments/environment.dev.ts
@@ -1,7 +1,10 @@
-export const environment = {
+import { Environment } from './environment.model';
+
+export const environment: Environment = {
   envName: 'development',
   production: false,
   apiUrl: process.env.NG_APP_API_URL,
+  crispWebsiteId: '077412e6-1430-4997-b4e7-3df5edb51b69',
   maxSelectedExperts: 3,
   maxFileSizeMb: 5
 };
diff --git a/src/environments/environment.model.ts b/src/environments/environment.model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7e8d0556a4976b796e8929a6a26b57393d3e66ca
--- /dev/null
+++ b/src/environments/environment.model.ts
@@ -0,0 +1,8 @@
+export interface Environment {
+  envName: string;
+  production: boolean;
+  apiUrl: string;
+  crispWebsiteId: string;
+  maxSelectedExperts: number;
+  maxFileSizeMb: number;
+}
diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts
index 0e34abd157c2e1725b2065f2391615b013682480..f0dfacc6128256d5ac115c06335f080bc1096037 100644
--- a/src/environments/environment.prod.ts
+++ b/src/environments/environment.prod.ts
@@ -1,7 +1,10 @@
-export const environment = {
+import { Environment } from './environment.model';
+
+export const environment: Environment = {
   envName: 'production',
   production: true,
   apiUrl: process.env.NG_APP_API_URL,
+  crispWebsiteId: '',
   maxSelectedExperts: 5,
   maxFileSizeMb: 5
 };
diff --git a/src/environments/environment.staging.ts b/src/environments/environment.staging.ts
index 31a52909528547759c94636f0d5244a6f88d4442..ba84b9e7ed780c456d856abe05ea3272ad30fff7 100644
--- a/src/environments/environment.staging.ts
+++ b/src/environments/environment.staging.ts
@@ -1,7 +1,10 @@
-export const environment = {
+import { Environment } from './environment.model';
+
+export const environment: Environment = {
   envName: 'staging',
   production: false,
   apiUrl: process.env.NG_APP_API_URL,
+  crispWebsiteId: '',
   maxSelectedExperts: 5,
   maxFileSizeMb: 5
 };
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index b816ec67cc2339b450164e713fa77c0900029ce8..59b4852d3bdb26d750f01dc9d9861d2eb096e871 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -1,7 +1,10 @@
-export const environment = {
+import { Environment } from './environment.model';
+
+export const environment: Environment = {
   envName: 'local',
   production: false,
   apiUrl: process.env.NG_APP_API_URL,
+  crispWebsiteId: '',
   maxSelectedExperts: 3,
   maxFileSizeMb: 5
 };