From 3076590e571fc4646d8a200cde5f15384ab99b7f Mon Sep 17 00:00:00 2001 From: Jon Harrell <4829245+jharrell@users.noreply.github.com> Date: Tue, 13 Feb 2024 19:08:56 -0600 Subject: [PATCH 1/4] Update to latest Docusaurus --- package-lock.json | 340 +++++++++++++++++++++++----------------------- package.json | 10 +- 2 files changed, 175 insertions(+), 175 deletions(-) diff --git a/package-lock.json b/package-lock.json index 63dd5b69ed..59a3c950fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,8 +8,8 @@ "name": "docs", "version": "0.0.0", "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/preset-classic": "3.1.0", + "@docusaurus/core": "^3.1.1", + "@docusaurus/preset-classic": "^3.1.1", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "prism-react-renderer": "^2.3.0", @@ -17,9 +17,9 @@ "react-dom": "^18.0.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "3.1.0", - "@docusaurus/tsconfig": "3.1.0", - "@docusaurus/types": "3.1.0", + "@docusaurus/module-type-aliases": "^3.1.1", + "@docusaurus/tsconfig": "^3.1.1", + "@docusaurus/types": "^3.1.1", "typescript": "~5.2.2" }, "engines": { @@ -2164,9 +2164,9 @@ } }, "node_modules/@docusaurus/core": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.1.0.tgz", - "integrity": "sha512-GWudMGYA9v26ssbAWJNfgeDZk+lrudUTclLPRsmxiknEBk7UMp7Rglonhqbsf3IKHOyHkMU4Fr5jFyg5SBx9jQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.1.1.tgz", + "integrity": "sha512-2nQfKFcf+MLEM7JXsXwQxPOmQAR6ytKMZVSx7tVi9HEm9WtfwBH1fp6bn8Gj4zLUhjWKCLoysQ9/Wm+EZCQ4yQ==", "dependencies": { "@babel/core": "^7.23.3", "@babel/generator": "^7.23.3", @@ -2178,13 +2178,13 @@ "@babel/runtime": "^7.22.6", "@babel/runtime-corejs3": "^7.22.6", "@babel/traverse": "^7.22.8", - "@docusaurus/cssnano-preset": "3.1.0", - "@docusaurus/logger": "3.1.0", - "@docusaurus/mdx-loader": "3.1.0", + "@docusaurus/cssnano-preset": "3.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/mdx-loader": "3.1.1", "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-common": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "@slorber/static-site-generator-webpack-plugin": "^4.0.7", "@svgr/webpack": "^6.5.1", "autoprefixer": "^10.4.14", @@ -2250,9 +2250,9 @@ } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.1.0.tgz", - "integrity": "sha512-ned7qsgCqSv/e7KyugFNroAfiszuxLwnvMW7gmT2Ywxb/Nyt61yIw7KHyAZCMKglOalrqnYA4gMhLUCK/mVePA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.1.1.tgz", + "integrity": "sha512-LnoIDjJWbirdbVZDMq+4hwmrTl2yHDnBf9MLG9qyExeAE3ac35s4yUhJI8yyTCdixzNfKit4cbXblzzqMu4+8g==", "dependencies": { "cssnano-preset-advanced": "^5.3.10", "postcss": "^8.4.26", @@ -2264,9 +2264,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.1.0.tgz", - "integrity": "sha512-p740M+HCst1VnKKzL60Hru9xfG4EUYJDarjlEC4hHeBy9+afPmY3BNPoSHx9/8zxuYfUlv/psf7I9NvRVdmdvg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.1.1.tgz", + "integrity": "sha512-BjkNDpQzewcTnST8trx4idSoAla6zZ3w22NqM/UMcFtvYJgmoE4layuTzlfql3VFPNuivvj7BOExa/+21y4X2Q==", "dependencies": { "chalk": "^4.1.2", "tslib": "^2.6.0" @@ -2276,15 +2276,15 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.1.0.tgz", - "integrity": "sha512-D7onDz/3mgBonexWoQXPw3V2E5Bc4+jYRf9gGUUK+KoQwU8xMDaDkUUfsr7t6UBa/xox9p5+/3zwLuXOYMzGSg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.1.1.tgz", + "integrity": "sha512-xN2IccH9+sv7TmxwsDJNS97BHdmlqWwho+kIVY4tcCXkp+k4QuzvWBeunIMzeayY4Fu13A6sAjHGv5qm72KyGA==", "dependencies": { "@babel/parser": "^7.22.7", "@babel/traverse": "^7.22.8", - "@docusaurus/logger": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "@docusaurus/logger": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "@mdx-js/mdx": "^3.0.0", "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", @@ -2316,12 +2316,12 @@ } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.1.0.tgz", - "integrity": "sha512-XUl7Z4PWlKg4l6KF05JQ3iDHQxnPxbQUqTNKvviHyuHdlalOFv6qeDAm7IbzyQPJD5VA6y4dpRbTWSqP9ClwPg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.1.1.tgz", + "integrity": "sha512-xBJyx0TMfAfVZ9ZeIOb1awdXgR4YJMocIEzTps91rq+hJDFJgJaylDtmoRhUxkwuYmNK1GJpW95b7DLztSBJ3A==", "dependencies": { "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "3.1.0", + "@docusaurus/types": "3.1.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2335,17 +2335,17 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.1.0.tgz", - "integrity": "sha512-iMa6WBaaEdYuxckvJtLcq/HQdlA4oEbCXf/OFfsYJCCULcDX7GDZpKxLF3X1fLsax3sSm5bmsU+CA0WD+R1g3A==", - "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/logger": "3.1.0", - "@docusaurus/mdx-loader": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-common": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.1.1.tgz", + "integrity": "sha512-ew/3VtVoG3emoAKmoZl7oKe1zdFOsI0NbcHS26kIxt2Z8vcXKCUgK9jJJrz0TbOipyETPhqwq4nbitrY3baibg==", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "cheerio": "^1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^11.1.1", @@ -2366,17 +2366,17 @@ } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.1.0.tgz", - "integrity": "sha512-el5GxhT8BLrsWD0qGa8Rq+Ttb/Ni6V3DGT2oAPio0qcs/mUAxeyXEAmihkvmLCnAgp6xD27Ce7dISZ5c6BXeqA==", - "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/logger": "3.1.0", - "@docusaurus/mdx-loader": "3.1.0", - "@docusaurus/module-type-aliases": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.1.1.tgz", + "integrity": "sha512-lhFq4E874zw0UOH7ujzxnCayOyAt0f9YPVYSb9ohxrdCM8B4szxitUw9rIX4V9JLLHVoqIJb6k+lJJ1jrcGJ0A==", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/module-type-aliases": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", "fs-extra": "^11.1.1", @@ -2395,15 +2395,15 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.1.0.tgz", - "integrity": "sha512-9gntYQFpk+93+Xl7gYczJu8I9uWoyRLnRwS0+NUFcs9iZtHKsdqKWPRrONC9elfN3wJ9ORwTbcVzsTiB8jvYlg==", - "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/mdx-loader": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.1.1.tgz", + "integrity": "sha512-NQHncNRAJbyLtgTim9GlEnNYsFhuCxaCNkMwikuxLTiGIPH7r/jpb7O3f3jUMYMebZZZrDq5S7om9a6rvB/YCA==", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "fs-extra": "^11.1.1", "tslib": "^2.6.0", "webpack": "^5.88.1" @@ -2417,13 +2417,13 @@ } }, "node_modules/@docusaurus/plugin-debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.1.0.tgz", - "integrity": "sha512-AbvJwCVRbmQ8w9d8QXbF4Iq/ui0bjPZNYFIhtducGFnm2YQRN1mraK8mCEQb0Aq0T8SqRRvSfC/far4n/s531w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.1.1.tgz", + "integrity": "sha512-xWeMkueM9wE/8LVvl4+Qf1WqwXmreMjI5Kgr7GYCDoJ8zu4kD+KaMhrh7py7MNM38IFvU1RfrGKacCEe2DRRfQ==", "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils": "3.1.0", + "@docusaurus/core": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", "fs-extra": "^11.1.1", "react-json-view-lite": "^1.2.0", "tslib": "^2.6.0" @@ -2437,13 +2437,13 @@ } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.1.0.tgz", - "integrity": "sha512-zvUOMzu9Uhz0ciqnSbtnp/5i1zEYlzarQrOXG90P3Is3efQI43p2YLW/rzSGdLb5MfQo2HvKT6Q5+tioMO045Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.1.1.tgz", + "integrity": "sha512-+q2UpWTqVi8GdlLoSlD5bS/YpxW+QMoBwrPrUH/NpvpuOi0Of7MTotsQf9JWd3hymZxl2uu1o3PIrbpxfeDFDQ==", "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "@docusaurus/core": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "tslib": "^2.6.0" }, "engines": { @@ -2455,13 +2455,13 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.1.0.tgz", - "integrity": "sha512-0txshvaY8qIBdkk2UATdVcfiCLGq3KAUfuRQD2cRNgO39iIf4/ihQxH9NXcRTwKs4Q5d9yYHoix3xT6pFuEYOg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.1.1.tgz", + "integrity": "sha512-0mMPiBBlQ5LFHTtjxuvt/6yzh8v7OxLi3CbeEsxXZpUzcKO/GC7UA1VOWUoBeQzQL508J12HTAlR3IBU9OofSw==", "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "@docusaurus/core": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "@types/gtag.js": "^0.0.12", "tslib": "^2.6.0" }, @@ -2474,13 +2474,13 @@ } }, "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.1.0.tgz", - "integrity": "sha512-zOWPEi8kMyyPtwG0vhyXrdbLs8fIZmY5vlbi9lUU+v8VsroO5iHmfR2V3SMsrsfOanw5oV/ciWqbxezY00qEZg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.1.1.tgz", + "integrity": "sha512-d07bsrMLdDIryDtY17DgqYUbjkswZQr8cLWl4tzXrt5OR/T/zxC1SYKajzB3fd87zTu5W5klV5GmUwcNSMXQXA==", "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "@docusaurus/core": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "tslib": "^2.6.0" }, "engines": { @@ -2492,16 +2492,16 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.1.0.tgz", - "integrity": "sha512-TkR5vGBpUooEB9SoW42thahqqwKzfHrQQhkB+JrEGERsl4bKODSuJNle4aA4h6LSkg4IyfXOW8XOI0NIPWb9Cg==", - "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/logger": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-common": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.1.1.tgz", + "integrity": "sha512-iJ4hCaMmDaUqRv131XJdt/C/jJQx8UreDWTRqZKtNydvZVh/o4yXGRRFOplea1D9b/zpwL1Y+ZDwX7xMhIOTmg==", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "fs-extra": "^11.1.1", "sitemap": "^7.1.1", "tslib": "^2.6.0" @@ -2515,23 +2515,23 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.1.0.tgz", - "integrity": "sha512-xGLQRFmmT9IinAGUDVRYZ54Ys28USNbA3OTXQXnSJLPr1rCY7CYnHI4XoOnKWrNnDiAI4ruMzunXWyaElUYCKQ==", - "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/plugin-content-blog": "3.1.0", - "@docusaurus/plugin-content-docs": "3.1.0", - "@docusaurus/plugin-content-pages": "3.1.0", - "@docusaurus/plugin-debug": "3.1.0", - "@docusaurus/plugin-google-analytics": "3.1.0", - "@docusaurus/plugin-google-gtag": "3.1.0", - "@docusaurus/plugin-google-tag-manager": "3.1.0", - "@docusaurus/plugin-sitemap": "3.1.0", - "@docusaurus/theme-classic": "3.1.0", - "@docusaurus/theme-common": "3.1.0", - "@docusaurus/theme-search-algolia": "3.1.0", - "@docusaurus/types": "3.1.0" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.1.1.tgz", + "integrity": "sha512-jG4ys/hWYf69iaN/xOmF+3kjs4Nnz1Ay3CjFLDtYa8KdxbmUhArA9HmP26ru5N0wbVWhY+6kmpYhTJpez5wTyg==", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/plugin-content-blog": "3.1.1", + "@docusaurus/plugin-content-docs": "3.1.1", + "@docusaurus/plugin-content-pages": "3.1.1", + "@docusaurus/plugin-debug": "3.1.1", + "@docusaurus/plugin-google-analytics": "3.1.1", + "@docusaurus/plugin-google-gtag": "3.1.1", + "@docusaurus/plugin-google-tag-manager": "3.1.1", + "@docusaurus/plugin-sitemap": "3.1.1", + "@docusaurus/theme-classic": "3.1.1", + "@docusaurus/theme-common": "3.1.1", + "@docusaurus/theme-search-algolia": "3.1.1", + "@docusaurus/types": "3.1.1" }, "engines": { "node": ">=18.0" @@ -2554,22 +2554,22 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.1.0.tgz", - "integrity": "sha512-/+jMl2Z9O8QQxves5AtHdt91gWsEZFgOV3La/6eyKEd7QLqQUtM5fxEJ40rq9NKYjqCd1HzZ9egIMeJoWwillw==", - "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/mdx-loader": "3.1.0", - "@docusaurus/module-type-aliases": "3.1.0", - "@docusaurus/plugin-content-blog": "3.1.0", - "@docusaurus/plugin-content-docs": "3.1.0", - "@docusaurus/plugin-content-pages": "3.1.0", - "@docusaurus/theme-common": "3.1.0", - "@docusaurus/theme-translations": "3.1.0", - "@docusaurus/types": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-common": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.1.1.tgz", + "integrity": "sha512-GiPE/jbWM8Qv1A14lk6s9fhc0LhPEQ00eIczRO4QL2nAQJZXkjPG6zaVx+1cZxPFWbAsqSjKe2lqkwF3fGkQ7Q==", + "dependencies": { + "@docusaurus/core": "3.1.1", + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/module-type-aliases": "3.1.1", + "@docusaurus/plugin-content-blog": "3.1.1", + "@docusaurus/plugin-content-docs": "3.1.1", + "@docusaurus/plugin-content-pages": "3.1.1", + "@docusaurus/theme-common": "3.1.1", + "@docusaurus/theme-translations": "3.1.1", + "@docusaurus/types": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "copy-text-to-clipboard": "^3.2.0", @@ -2593,17 +2593,17 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.1.0.tgz", - "integrity": "sha512-YGwEFALLIbF5ocW/Fy6Ae7tFWUOugEN3iwxTx8UkLAcLqYUboDSadesYtVBmRCEB4FVA2qoP7YaW3lu3apUPPw==", - "dependencies": { - "@docusaurus/mdx-loader": "3.1.0", - "@docusaurus/module-type-aliases": "3.1.0", - "@docusaurus/plugin-content-blog": "3.1.0", - "@docusaurus/plugin-content-docs": "3.1.0", - "@docusaurus/plugin-content-pages": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-common": "3.1.0", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.1.1.tgz", + "integrity": "sha512-38urZfeMhN70YaXkwIGXmcUcv2CEYK/2l4b05GkJPrbEbgpsIZM3Xc+Js2ehBGGZmfZq8GjjQ5RNQYG+MYzCYg==", + "dependencies": { + "@docusaurus/mdx-loader": "3.1.1", + "@docusaurus/module-type-aliases": "3.1.1", + "@docusaurus/plugin-content-blog": "3.1.1", + "@docusaurus/plugin-content-docs": "3.1.1", + "@docusaurus/plugin-content-pages": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-common": "3.1.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2622,18 +2622,18 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.1.0.tgz", - "integrity": "sha512-8cJH0ZhPsEDjq3jR3I+wHmWzVY2bXMQJ59v2QxUmsTZxbWA4u+IzccJMIJx4ooFl9J6iYynwYsFuHxyx/KUmfQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.1.1.tgz", + "integrity": "sha512-tBH9VY5EpRctVdaAhT+b1BY8y5dyHVZGFXyCHgTrvcXQy5CV4q7serEX7U3SveNT9zksmchPyct6i1sFDC4Z5g==", "dependencies": { "@docsearch/react": "^3.5.2", - "@docusaurus/core": "3.1.0", - "@docusaurus/logger": "3.1.0", - "@docusaurus/plugin-content-docs": "3.1.0", - "@docusaurus/theme-common": "3.1.0", - "@docusaurus/theme-translations": "3.1.0", - "@docusaurus/utils": "3.1.0", - "@docusaurus/utils-validation": "3.1.0", + "@docusaurus/core": "3.1.1", + "@docusaurus/logger": "3.1.1", + "@docusaurus/plugin-content-docs": "3.1.1", + "@docusaurus/theme-common": "3.1.1", + "@docusaurus/theme-translations": "3.1.1", + "@docusaurus/utils": "3.1.1", + "@docusaurus/utils-validation": "3.1.1", "algoliasearch": "^4.18.0", "algoliasearch-helper": "^3.13.3", "clsx": "^2.0.0", @@ -2652,9 +2652,9 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.1.0.tgz", - "integrity": "sha512-DApE4AbDI+WBajihxB54L4scWQhVGNZAochlC9fkbciPuFAgdRBD3NREb0rgfbKexDC/rioppu/WJA0u8tS+yA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.1.1.tgz", + "integrity": "sha512-xvWQFwjxHphpJq5fgk37FXCDdAa2o+r7FX8IpMg+bGZBNXyWBu3MjZ+G4+eUVNpDhVinTc+j6ucL0Ain5KCGrg==", "dependencies": { "fs-extra": "^11.1.1", "tslib": "^2.6.0" @@ -2664,15 +2664,15 @@ } }, "node_modules/@docusaurus/tsconfig": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.1.0.tgz", - "integrity": "sha512-PE6fSuj5gJy5sNC1OO+bYAU1/xZH5YqddGjhrNu3/T7OAUroqkMZfVl13Tz70CjYB8no4OWcraqSkObAeNdIcQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.1.1.tgz", + "integrity": "sha512-FTBuY3KvaHfMVBgvlPmDQ+KS9Q/bYtVftq2ugou3PgBDJoQmw2aUZ4Sg15HKqLGbfIkxoy9t6cqE4Yw1Ta8Q1A==", "dev": true }, "node_modules/@docusaurus/types": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.0.tgz", - "integrity": "sha512-VaczOZf7+re8aFBIWnex1XENomwHdsSTkrdX43zyor7G/FY4OIsP6X28Xc3o0jiY0YdNuvIDyA5TNwOtpgkCVw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.1.tgz", + "integrity": "sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==", "dependencies": { "@mdx-js/mdx": "^3.0.0", "@types/history": "^4.7.11", @@ -2690,11 +2690,11 @@ } }, "node_modules/@docusaurus/utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.1.0.tgz", - "integrity": "sha512-LgZfp0D+UBqAh7PZ//MUNSFBMavmAPku6Si9x8x3V+S318IGCNJ6hUr2O29UO0oLybEWUjD5Jnj9IUN6XyZeeg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.1.1.tgz", + "integrity": "sha512-ZJfJa5cJQtRYtqijsPEnAZoduW6sjAQ7ZCWSZavLcV10Fw0Z3gSaPKA/B4micvj2afRZ4gZxT7KfYqe5H8Cetg==", "dependencies": { - "@docusaurus/logger": "3.1.0", + "@docusaurus/logger": "3.1.1", "@svgr/webpack": "^6.5.1", "escape-string-regexp": "^4.0.0", "file-loader": "^6.2.0", @@ -2725,9 +2725,9 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.1.0.tgz", - "integrity": "sha512-SfvnRLHoZ9bwTw67knkSs7IcUR0GY2SaGkpdB/J9pChrDiGhwzKNUhcieoPyPYrOWGRPk3rVNYtoy+Bc7psPAw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.1.1.tgz", + "integrity": "sha512-eGne3olsIoNfPug5ixjepZAIxeYFzHHnor55Wb2P57jNbtVaFvij/T+MS8U0dtZRFi50QU+UPmRrXdVUM8uyMg==", "dependencies": { "tslib": "^2.6.0" }, @@ -2744,12 +2744,12 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.1.0.tgz", - "integrity": "sha512-dFxhs1NLxPOSzmcTk/eeKxLY5R+U4cua22g9MsAMiRWcwFKStZ2W3/GDY0GmnJGqNS8QAQepJrxQoyxXkJNDeg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.1.1.tgz", + "integrity": "sha512-KlY4P9YVDnwL+nExvlIpu79abfEv6ZCHuOX4ZQ+gtip+Wxj0daccdReIWWtqxM/Fb5Cz1nQvUCc7VEtT8IBUAA==", "dependencies": { - "@docusaurus/logger": "3.1.0", - "@docusaurus/utils": "3.1.0", + "@docusaurus/logger": "3.1.1", + "@docusaurus/utils": "3.1.1", "joi": "^17.9.2", "js-yaml": "^4.1.0", "tslib": "^2.6.0" diff --git a/package.json b/package.json index 441a9ac29f..392a153020 100644 --- a/package.json +++ b/package.json @@ -15,8 +15,8 @@ "typecheck": "tsc" }, "dependencies": { - "@docusaurus/core": "3.1.0", - "@docusaurus/preset-classic": "3.1.0", + "@docusaurus/core": "^3.1.1", + "@docusaurus/preset-classic": "^3.1.1", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "prism-react-renderer": "^2.3.0", @@ -24,9 +24,9 @@ "react-dom": "^18.0.0" }, "devDependencies": { - "@docusaurus/module-type-aliases": "3.1.0", - "@docusaurus/tsconfig": "3.1.0", - "@docusaurus/types": "3.1.0", + "@docusaurus/module-type-aliases": "^3.1.1", + "@docusaurus/tsconfig": "^3.1.1", + "@docusaurus/types": "^3.1.1", "typescript": "~5.2.2" }, "browserslist": { From 40ee3921d1ad3ed2b35caa4aad3768ecf0257f63 Mon Sep 17 00:00:00 2001 From: Jon Harrell <4829245+jharrell@users.noreply.github.com> Date: Tue, 13 Feb 2024 19:11:48 -0600 Subject: [PATCH 2/4] add all ORM docs --- .../100-introduction/100-what-is-prisma.mdx | 273 + .../100-introduction/200-why-prisma.mdx | 95 + .../250-should-you-use-prisma.mdx | 141 + .../100-introduction/300-data-modeling.mdx | 246 + .../050-overview/100-introduction/index.mdx | 19 + .../node-js-db-tools-tradeoffs.png | Bin 0 -> 17765 bytes .../prisma-makes-devs-productive.png | Bin 0 -> 23811 bytes .../100-introduction/prisma-rest-apis.png | Bin 0 -> 12866 bytes .../user-post-relation-1-n.png | Bin 0 -> 59297 bytes .../100-introduction/user-table.png | Bin 0 -> 4330 bytes .../100-introduction/user-table.svg | 1 + .../300-prisma-in-your-stack/01-rest.mdx | 166 + .../300-prisma-in-your-stack/02-graphql.mdx | 85 + .../300-prisma-in-your-stack/03-fullstack.mdx | 122 + .../04-is-prisma-an-orm.mdx | 445 ++ .../300-prisma-in-your-stack/index.mdx | 16 + .../500-databases/200-database-drivers.mdx | 132 + .../500-databases/300-postgresql.mdx | 302 + .../050-overview/500-databases/400-mysql.mdx | 206 + .../050-overview/500-databases/500-sqlite.mdx | 93 + .../500-databases/600-mongodb.mdx | 575 ++ .../800-sql-server/020-sql-server-local.mdx | 53 + .../800-sql-server/030-sql-server-docker.mdx | 49 + .../500-databases/800-sql-server/index.mdx | 185 + .../500-databases/850-planetscale.mdx | 316 + .../500-databases/860-cockroachdb.mdx | 224 + .../500-databases/880-supabase.mdx | 72 + .../050-overview/500-databases/890-neon.mdx | 183 + .../050-overview/500-databases/900-turso.mdx | 221 + .../drivers/qe-query-engine-adapter.png | Bin 0 -> 117668 bytes .../drivers/qe-query-execution-flow.png | Bin 0 -> 88110 bytes .../embedded-replica-create-replica.png | Bin 0 -> 82793 bytes .../images/embedded-replica-read.png | Bin 0 -> 79608 bytes .../images/embedded-replica-remote-read.png | Bin 0 -> 66251 bytes .../embedded-replica-write-propagation.png | Bin 0 -> 89371 bytes .../050-overview/500-databases/index.mdx | 16 + .../050-overview/500-databases/mongodb.png | Bin 0 -> 26812 bytes .../500-databases/mysql-connection-string.png | Bin 0 -> 14409 bytes .../postgresql-connection-string.png | Bin 0 -> 15637 bytes docs/200-orm/050-overview/index.mdx | 12 + .../10-overview/02-data-sources.mdx | 42 + .../10-overview/03-generators.mdx | 98 + .../100-prisma-schema/10-overview/index.mdx | 324 + .../20-data-model/10-models.mdx | 1186 ++++ .../20-relations/100-one-to-one-relations.mdx | 306 + .../200-one-to-many-relations.mdx | 280 + .../300-many-to-many-relations.mdx | 549 ++ .../20-relations/400-self-relations.mdx | 434 ++ ...-special-rules-for-referential-actions.mdx | 241 + .../410-referential-actions/index.mdx | 508 ++ .../20-relations/420-relation-mode.mdx | 259 + .../500-troubleshooting-relations.mdx | 271 + .../20-data-model/20-relations/index.mdx | 579 ++ .../20-relations/one-to-many.png | Bin 0 -> 41597 bytes .../20-relations/quick-fix-index.png | Bin 0 -> 27929 bytes .../20-relations/quick-fix-index.snagx | Bin 0 -> 99541 bytes .../20-relations/relations-intro.png | Bin 0 -> 36481 bytes .../20-relations/sample-schema.png | Bin 0 -> 130861 bytes .../20-data-model/30-indexes.mdx | 534 ++ .../20-data-model/40-views.mdx | 371 ++ .../20-data-model/50-database-mapping.mdx | 228 + .../20-data-model/60-multi-schema.mdx | 190 + .../70-unsupported-database-features.mdx | 99 + .../20-data-model/80-table-inheritance.mdx | 328 + .../100-prisma-schema/20-data-model/index.mdx | 10 + .../100-prisma-schema/50-introspection.mdx | 398 ++ .../80-postgresql-extensions.mdx | 116 + docs/200-orm/100-prisma-schema/index.mdx | 11 + .../prisma-schema/relations-intro.png | Bin 0 -> 36481 bytes .../prisma-schema/sample-database.png | Bin 0 -> 171134 bytes .../005-introduction.mdx | 172 + .../010-generating-prisma-client.mdx | 162 + .../015-instantiate-prisma-client.mdx | 63 + .../100-connection-management.mdx | 108 + .../115-connection-pool.mdx | 217 + .../200-pgbouncer.mdx | 82 + .../050-databases-connections/index.mdx | 337 + .../serverless-connections-2.png | Bin 0 -> 44932 bytes .../serverless-connections.png | Bin 0 -> 18742 bytes .../100-custom-model-and-field-names.mdx | 310 + .../150-error-formatting.mdx | 41 + .../200-read-replicas.mdx | 83 + .../220-database-polyfills.mdx | 22 + .../000-setup-and-configuration/index.mdx | 15 + .../prisma-client-generation-workflow.png | Bin 0 -> 43346 bytes .../prisma-client-node-module.png | Bin 0 -> 54310 bytes .../100-queries/030-crud.mdx | 996 +++ .../100-queries/035-select-fields.mdx | 321 + .../100-queries/037-relation-queries.mdx | 1315 ++++ .../100-queries/050-filtering-and-sorting.mdx | 452 ++ .../100-queries/055-pagination.mdx | 224 + .../056-aggregation-grouping-summarizing.mdx | 725 +++ .../100-queries/058-transactions.mdx | 1336 ++++ .../100-queries/060-full-text-search.mdx | 245 + .../100-queries/061-custom-validation.mdx | 190 + .../100-queries/062-computed-fields.mdx | 174 + .../100-queries/063-excluding-fields.mdx | 70 + .../100-queries/064-custom-models.mdx | 176 + .../100-queries/070-case-sensitivity.mdx | 187 + .../050-raw-queries.mdx | 691 ++ .../100-custom-and-type-safe-queries.mdx | 369 ++ .../090-raw-database-access/index.mdx | 9 + .../100-query-optimization-performance.mdx | 343 + .../200-prisma-client/100-queries/index.mdx | 9 + .../057-composite-types.mdx | 798 +++ .../080-null-and-undefined.mdx | 367 ++ .../100-working-with-json-fields.mdx | 992 +++ .../200-working-with-scalar-lists-arrays.mdx | 219 + ...ing-with-composite-ids-and-constraints.mdx | 206 + .../200-special-fields-and-types/index.mdx | 89 + .../300-client-extensions/100-model.mdx | 164 + .../300-client-extensions/110-client.mdx | 67 + .../300-client-extensions/120-query.mdx | 299 + .../300-client-extensions/130-result.mdx | 146 + .../140-shared-extensions.mdx | 143 + .../150-type-utilities.mdx | 101 + .../200-extension-examples.mdx | 64 + .../100-soft-delete-middleware.mdx | 669 ++ .../500-middleware/200-logging-middleware.mdx | 90 + .../300-session-data-middleware.mdx | 71 + .../500-middleware/index.mdx | 187 + .../300-client-extensions/index.mdx | 231 + .../400-type-safety/050-prisma-validator.mdx | 153 + ...inst-partial-structures-of-model-types.mdx | 137 + .../830-prisma-type-system.mdx | 164 + .../400-type-safety/index.mdx | 267 + .../450-testing/100-unit-testing.mdx | 351 ++ .../450-testing/150-integration-testing.mdx | 475 ++ .../450-testing/Docker_Diagram_V1.png | Bin 0 -> 28507 bytes .../200-prisma-client/450-testing/index.mdx | 14 + .../500-deployment/001-deploy-prisma.mdx | 40 + .../101-traditional/200-deploy-to-heroku.mdx | 280 + .../101-traditional/250-deploy-to-koyeb.mdx | 202 + .../images/heroku-architecture.png | Bin 0 -> 106454 bytes .../images/heroku-deployed.png | Bin 0 -> 42038 bytes .../images/koyeb-app-creation.png | Bin 0 -> 1273043 bytes .../images/koyeb-architecture.png | Bin 0 -> 32386 bytes .../101-traditional/images/koyeb-deployed.png | Bin 0 -> 24842 bytes .../500-deployment/101-traditional/index.mdx | 16 + .../150-deploy-to-azure-functions.mdx | 40 + .../201-serverless/300-deploy-to-vercel.mdx | 80 + .../400-deploy-to-aws-lambda.mdx | 325 + .../201-serverless/500-deploy-to-netlify.mdx | 86 + .../300-00-deploy-to-vercel-architecture.png | Bin 0 -> 122195 bytes .../300-10-deploy-to-vercel-deploy-button.png | Bin 0 -> 9067 bytes ...00-10-deploy-to-vercel-deploy-button.snagx | Bin 0 -> 42190 bytes .../300-20-deploy-to-vercel-select-github.png | Bin 0 -> 22173 bytes ...00-20-deploy-to-vercel-select-github.snagx | Bin 0 -> 76895 bytes ...00-30-deploy-to-vercel-create-git-repo.png | Bin 0 -> 24143 bytes ...-30-deploy-to-vercel-create-git-repo.snagx | Bin 0 -> 81187 bytes ...-40-deploy-to-vercel-configure-project.png | Bin 0 -> 25249 bytes ...0-deploy-to-vercel-configure-project.snagx | Bin 0 -> 83572 bytes .../300-50-deploy-to-vercel-success.png | Bin 0 -> 157343 bytes .../300-50-deploy-to-vercel-success.snagx | Bin 0 -> 470726 bytes ...to-vercel-preview-environment-variable.png | Bin 0 -> 135383 bytes ...-vercel-preview-environment-variable.snagx | Bin 0 -> 463210 bytes ...deploy-to-vercel-environment-variables.png | Bin 0 -> 35853 bytes ...ploy-to-vercel-environment-variables.snagx | Bin 0 -> 118906 bytes .../500-01-deploy-to-netlify-architecture.png | Bin 0 -> 36749 bytes ...loy-to-netlify-example-repo-click-fork.png | Bin 0 -> 39095 bytes ...y-to-netlify-example-repo-click-fork.snagx | Bin 0 -> 142205 bytes ...-netlify-example-repo-create-fork-page.png | Bin 0 -> 135794 bytes ...etlify-example-repo-create-fork-page.snagx | Bin 0 -> 501148 bytes ...etlify-copy-supabase-connection-string.png | Bin 0 -> 202619 bytes ...lify-copy-supabase-connection-string.snagx | Bin 0 -> 648293 bytes ...to-netlify-netlify-init-configure-site.png | Bin 0 -> 44874 bytes ...-netlify-netlify-init-configure-site.snagx | Bin 0 -> 172712 bytes ...500-06-deploy-to-netlify-site-settings.png | Bin 0 -> 151141 bytes ...0-06-deploy-to-netlify-site-settings.snagx | Bin 0 -> 519062 bytes ...netlify-environment-variables-settings.png | Bin 0 -> 113181 bytes ...tlify-environment-variables-settings.snagx | Bin 0 -> 399057 bytes ...deploy-to-netlify-application-deployed.png | Bin 0 -> 43961 bytes ...ploy-to-netlify-application-deployed.snagx | Bin 0 -> 241882 bytes ...tlify-application-deployed-call-result.png | Bin 0 -> 76095 bytes ...ify-application-deployed-call-result.snagx | Bin 0 -> 353362 bytes .../500-deployment/201-serverless/index.mdx | 16 + .../500-deployment/210-module-bundlers.mdx | 19 + .../450-deploy-to-cloudflare-workers.mdx | 309 + .../301-edge/550-deploy-to-deno-deploy.mdx | 271 + .../301-edge/images/450-03-import-project.png | Bin 0 -> 156365 bytes .../images/450-03-import-project.snagx | Bin 0 -> 837867 bytes .../301-edge/images/450-04-connect-db.png | Bin 0 -> 227305 bytes .../301-edge/images/450-04-connect-db.snagx | Bin 0 -> 879013 bytes .../301-edge/images/450-05-data-proxy.png | Bin 0 -> 173869 bytes .../301-edge/images/450-05-data-proxy.snagx | Bin 0 -> 629236 bytes .../301-edge/images/550-01-create-repo.png | Bin 0 -> 266787 bytes ...0-02-deploy-to-deno-project-parameters.png | Bin 0 -> 156843 bytes ...02-deploy-to-deno-project-parameters.snagx | Bin 0 -> 538715 bytes .../500-deployment/301-edge/index.mdx | 16 + ...y-database-changes-with-prisma-migrate.mdx | 68 + ...oy-migrations-from-a-local-environment.mdx | 54 + ...aveats-when-deploying-to-aws-platforms.mdx | 65 + .../700-deploy-to-a-different-os.mdx | 19 + .../500-deployment/index.mdx | 15 + .../130-logging.mdx | 174 + .../240-metrics.mdx | 563 ++ .../250-opentelemetry-tracing.mdx | 419 ++ .../600-observability-and-logging/index.mdx | 10 + .../600-observability-and-logging/jaeger.png | Bin 0 -> 126087 bytes .../trace-diagram.png | Bin 0 -> 15085 bytes .../140-debugging.mdx | 49 + .../230-handling-exceptions-and-errors.mdx | 45 + .../index.mdx | 16 + docs/200-orm/200-prisma-client/index.mdx | 11 + .../050-getting-started.mdx | 253 + .../005-overview.mdx | 31 + .../010-mental-model.mdx | 178 + .../070-migration-histories.mdx | 90 + .../200-shadow-database.mdx | 146 + .../300-limitations-and-known-issues.mdx | 77 + .../600-legacy-migrate.mdx | 466 ++ .../index.mdx | 9 + .../database-first-migration-flow.png | Bin 0 -> 36990 bytes .../db-push-flow.png | Bin 0 -> 25855 bytes .../entity-first-migration-flow.png | Bin 0 -> 26623 bytes .../prisma-migrate-dev-flow.png | Bin 0 -> 89947 bytes .../prisma-migrate-diff-flow.png | Bin 0 -> 67090 bytes .../prisma-migrate-lifecycle.png | Bin 0 -> 199855 bytes .../prisma-migrate-state-mgt.png | Bin 0 -> 69194 bytes .../migrate-mapping.png | Bin 0 -> 21073 bytes .../shadow-database.png | Bin 0 -> 1990156 bytes .../shadow-db.png | Bin 0 -> 37081 bytes .../300-workflows/10-seeding.mdx | 401 ++ .../300-workflows/100-team-development.mdx | 200 + .../110-native-database-types.mdx | 104 + .../120-native-database-functions.mdx | 81 + .../20-prototyping-your-schema.mdx | 288 + .../300-workflows/200-troubleshooting.mdx | 138 + .../300-workflows/30-baselining.mdx | 92 + .../40-customizing-migrations.mdx | 282 + .../300-workflows/45-data-migration.mdx | 258 + .../300-workflows/50-squashing-migrations.mdx | 129 + .../60-generating-down-migrations.mdx | 150 + .../70-patching-and-hotfixing.mdx | 273 + .../80-unsupported-database-features.mdx | 57 + .../90-development-and-production.mdx | 142 + .../300-workflows/deploy-db.png | Bin 0 -> 46449 bytes .../300-workflows/existing-database.png | Bin 0 -> 27823 bytes .../300-workflows/index.mdx | 9 + .../300-workflows/migrate-team-dev.png | Bin 0 -> 71339 bytes .../300-workflows/migration-history.png | Bin 0 -> 43852 bytes .../300-workflows/new-dev-db.png | Bin 0 -> 53917 bytes docs/200-orm/300-prisma-migrate/index.mdx | 11 + docs/200-orm/400-tools/05-prisma-cli.mdx | 261 + docs/200-orm/400-tools/06-prisma-studio.mdx | 286 + .../images/prisma-studio/01-models-view.png | Bin 0 -> 83810 bytes .../prisma-studio/02-open-close-models.png | Bin 0 -> 155648 bytes .../03-model-view-keyboard-shortcuts.png | Bin 0 -> 75142 bytes .../04-save-multiple-changes.png | Bin 0 -> 291111 bytes .../prisma-studio/05-add-remove-filters.png | Bin 0 -> 333662 bytes .../prisma-studio/06-show-hide-fields.png | Bin 0 -> 249416 bytes .../prisma-studio/07-show-hide-records.png | Bin 0 -> 189685 bytes .../images/prisma-studio/08-model-sort.png | Bin 0 -> 300174 bytes .../400-tools/images/prisma-studio/array.svg | 4 + .../images/prisma-studio/boolean.svg | 4 + .../images/prisma-studio/database.svg | 4 + .../images/prisma-studio/datetime.svg | 1 + .../400-tools/images/prisma-studio/enum.svg | 6 + .../400-tools/images/prisma-studio/number.svg | 7 + .../400-tools/images/prisma-studio/object.svg | 5 + .../400-tools/images/prisma-studio/string.svg | 4 + docs/200-orm/400-tools/index.mdx | 11 + .../050-prisma-client-reference.mdx | 5577 +++++++++++++++++ .../100-prisma-schema-reference.mdx | 3313 ++++++++++ .../200-prisma-cli-reference.mdx | 1449 +++++ .../500-reference/250-error-reference.mdx | 475 ++ .../300-environment-variables-reference.mdx | 279 + .../500-reference/350-database-features.mdx | 137 + .../500-reference/375-supported-databases.mdx | 53 + .../500-reference/380-connection-urls.mdx | 119 + .../500-reference/400-system-requirements.mdx | 131 + .../050-client-preview-features.mdx | 92 + .../080-cli-preview-features.mdx | 43 + .../500-preview-features/index.mdx | 17 + docs/200-orm/500-reference/index.mdx | 17 + .../100-under-the-hood/100-engines.mdx | 238 + .../800-more/100-under-the-hood/index.mdx | 19 + .../query-engine-node-js-at-runtime.png | Bin 0 -> 15880 bytes .../typical-flow-query-engine-at-runtime.png | Bin 0 -> 71100 bytes .../001-rejectonnotfound-changes.mdx | 177 + .../101-jsonprotocol-changes.mdx | 336 + .../600-upgrading-to-prisma-5/index.mdx | 362 ++ .../700-upgrading-to-prisma-4.mdx | 493 ++ .../100-named-constraints.mdx | 162 + .../150-referential-actions.mdx | 202 + .../800-upgrading-to-prisma-3/index.mdx | 161 + .../200-upgrading-versions/900-codemods.mdx | 43 + .../200-upgrading-versions/index.mdx | 55 + .../250-upgrading-to-use-preview-features.mdx | 25 + .../01-how-to-upgrade.mdx | 137 + .../02-schema-incompatibilities.mdx | 856 +++ .../03-upgrading-the-prisma-layer.mdx | 1618 +++++ .../04-upgrading-nexus-prisma-to-nexus.mdx | 750 +++ .../05-upgrading-prisma-binding-to-nexus.mdx | 1290 ++++ ...-upgrading-prisma-binding-to-sdl-first.mdx | 1669 +++++ .../07-upgrading-a-rest-api.mdx | 251 + .../08-upgrade-from-mongodb-beta.mdx | 232 + .../images/TablePlus-GUI.png | Bin 0 -> 165631 bytes ...missing-default-constraints-to-columns.png | Bin 0 -> 131401 bytes .../images/altering-columns-to-use-enum.png | Bin 0 -> 212604 bytes .../images/download-graphql-schema.png | Bin 0 -> 586217 bytes ...xpose-prisma-model-fields-with-t-model.png | Bin 0 -> 39518 bytes .../fix-columns-with-json-data-types.png | Bin 0 -> 132890 bytes .../fix-incorrect-m-n-relations-sql.png | Bin 0 -> 193876 bytes .../images/fix-schema-incompatibilities.png | Bin 0 -> 50051 bytes .../images/prisma-cli-introspection-flow.png | Bin 0 -> 30299 bytes .../regenerate-resolvers-with-t-crud.png | Bin 0 -> 71855 bytes .../run-sql-command-to-alter-column.png | Bin 0 -> 120846 bytes .../use-t-crud-to-generate-resolvers.png | Bin 0 -> 48878 bytes .../800-upgrade-from-prisma-1/index.mdx | 10 + .../800-more/300-upgrade-guides/index.mdx | 10 + .../400-comparisons/01-prisma-and-typeorm.mdx | 1243 ++++ .../02-prisma-and-sequelize.mdx | 455 ++ .../03-prisma-and-mongoose.mdx | 288 + .../400-comparisons/04-prisma-and-drizzle.mdx | 472 ++ .../800-more/400-comparisons/index.mdx | 17 + .../01-migrate-from-typeorm.mdx | 1122 ++++ .../02-migrate-from-sequelize.mdx | 1261 ++++ .../03-migrate-from-mongoose.mdx | 1069 ++++ .../450-migrating-to-prisma/index.mdx | 9 + .../040-env-files.mdx | 93 + ...naging-env-files-and-setting-variables.mdx | 150 + .../200-using-multiple-env-files.mdx | 83 + .../050-environment-variables/index.mdx | 47 + .../100-editor-setup.mdx | 73 + .../500-development-environment/index.mdx | 16 + .../050-creating-bug-reports.mdx | 159 + ...ompletion-in-graphql-resolvers-with-js.mdx | 262 + ...00-working-with-many-to-many-relations.mdx | 196 + ...400-nextjs-prisma-client-dev-practices.mdx | 73 + .../425-nextjs-prisma-client-monorepo.mdx | 100 + .../100-help-articles/450-pkg-issue.mdx | 27 + ...-comparing-columns-through-raw-queries.mdx | 211 + .../600-vercel-caching-issue.mdx | 99 + .../700-netlify-caching-issue.mdx | 101 + .../800-check-constraints.mdx | 453 ++ .../100-help-articles/index.mdx | 17 + .../netlify-build-command-filled.png | Bin 0 -> 228287 bytes .../netlify-edit-settings.png | Bin 0 -> 222519 bytes .../prisma-autocompletion-in-js.png | Bin 0 -> 99462 bytes ...unwanted-autocomplete-values-in-vscode.png | Bin 0 -> 43209 bytes .../vercel-ui-build-command-filled.png | Bin 0 -> 150026 bytes .../vercel-ui-build-command.png | Bin 0 -> 229747 bytes .../600-help-and-troubleshooting/index.mdx | 9 + docs/200-orm/800-more/700-releases.mdx | 95 + docs/200-orm/800-more/index.mdx | 11 + docs/200-orm/index.mdx | 16 + static/img/baseline-production-from-local.png | Bin 0 -> 25209 bytes static/img/connect-sql-server.png | Bin 0 -> 29835 bytes static/img/cursor-1.png | Bin 0 -> 15452 bytes static/img/cursor-2.png | Bin 0 -> 22136 bytes static/img/cursor-3.png | Bin 0 -> 21199 bytes static/img/offset-skip-take.png | Bin 0 -> 16538 bytes static/img/prisma-db-pull-generate-schema.png | Bin 0 -> 41288 bytes static/img/prisma-evolve-app-workflow.png | Bin 0 -> 54374 bytes .../prisma-migrate-development-workflow.png | Bin 0 -> 43554 bytes 356 files changed, 64209 insertions(+) create mode 100644 docs/200-orm/050-overview/100-introduction/100-what-is-prisma.mdx create mode 100644 docs/200-orm/050-overview/100-introduction/200-why-prisma.mdx create mode 100644 docs/200-orm/050-overview/100-introduction/250-should-you-use-prisma.mdx create mode 100644 docs/200-orm/050-overview/100-introduction/300-data-modeling.mdx create mode 100644 docs/200-orm/050-overview/100-introduction/index.mdx create mode 100644 docs/200-orm/050-overview/100-introduction/node-js-db-tools-tradeoffs.png create mode 100644 docs/200-orm/050-overview/100-introduction/prisma-makes-devs-productive.png create mode 100644 docs/200-orm/050-overview/100-introduction/prisma-rest-apis.png create mode 100644 docs/200-orm/050-overview/100-introduction/user-post-relation-1-n.png create mode 100644 docs/200-orm/050-overview/100-introduction/user-table.png create mode 100644 docs/200-orm/050-overview/100-introduction/user-table.svg create mode 100644 docs/200-orm/050-overview/300-prisma-in-your-stack/01-rest.mdx create mode 100644 docs/200-orm/050-overview/300-prisma-in-your-stack/02-graphql.mdx create mode 100644 docs/200-orm/050-overview/300-prisma-in-your-stack/03-fullstack.mdx create mode 100644 docs/200-orm/050-overview/300-prisma-in-your-stack/04-is-prisma-an-orm.mdx create mode 100644 docs/200-orm/050-overview/300-prisma-in-your-stack/index.mdx create mode 100644 docs/200-orm/050-overview/500-databases/200-database-drivers.mdx create mode 100644 docs/200-orm/050-overview/500-databases/300-postgresql.mdx create mode 100644 docs/200-orm/050-overview/500-databases/400-mysql.mdx create mode 100644 docs/200-orm/050-overview/500-databases/500-sqlite.mdx create mode 100644 docs/200-orm/050-overview/500-databases/600-mongodb.mdx create mode 100644 docs/200-orm/050-overview/500-databases/800-sql-server/020-sql-server-local.mdx create mode 100644 docs/200-orm/050-overview/500-databases/800-sql-server/030-sql-server-docker.mdx create mode 100644 docs/200-orm/050-overview/500-databases/800-sql-server/index.mdx create mode 100644 docs/200-orm/050-overview/500-databases/850-planetscale.mdx create mode 100644 docs/200-orm/050-overview/500-databases/860-cockroachdb.mdx create mode 100644 docs/200-orm/050-overview/500-databases/880-supabase.mdx create mode 100644 docs/200-orm/050-overview/500-databases/890-neon.mdx create mode 100644 docs/200-orm/050-overview/500-databases/900-turso.mdx create mode 100644 docs/200-orm/050-overview/500-databases/images/drivers/qe-query-engine-adapter.png create mode 100644 docs/200-orm/050-overview/500-databases/images/drivers/qe-query-execution-flow.png create mode 100644 docs/200-orm/050-overview/500-databases/images/embedded-replica-create-replica.png create mode 100644 docs/200-orm/050-overview/500-databases/images/embedded-replica-read.png create mode 100644 docs/200-orm/050-overview/500-databases/images/embedded-replica-remote-read.png create mode 100644 docs/200-orm/050-overview/500-databases/images/embedded-replica-write-propagation.png create mode 100644 docs/200-orm/050-overview/500-databases/index.mdx create mode 100644 docs/200-orm/050-overview/500-databases/mongodb.png create mode 100644 docs/200-orm/050-overview/500-databases/mysql-connection-string.png create mode 100644 docs/200-orm/050-overview/500-databases/postgresql-connection-string.png create mode 100644 docs/200-orm/050-overview/index.mdx create mode 100644 docs/200-orm/100-prisma-schema/10-overview/02-data-sources.mdx create mode 100644 docs/200-orm/100-prisma-schema/10-overview/03-generators.mdx create mode 100644 docs/200-orm/100-prisma-schema/10-overview/index.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/10-models.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/20-relations/100-one-to-one-relations.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/20-relations/200-one-to-many-relations.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/20-relations/300-many-to-many-relations.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/20-relations/400-self-relations.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/100-special-rules-for-referential-actions.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/index.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/20-relations/420-relation-mode.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/20-relations/500-troubleshooting-relations.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/20-relations/index.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/20-relations/one-to-many.png create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/20-relations/quick-fix-index.png create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/20-relations/quick-fix-index.snagx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/20-relations/relations-intro.png create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/20-relations/sample-schema.png create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/30-indexes.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/40-views.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/50-database-mapping.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/60-multi-schema.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/70-unsupported-database-features.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/80-table-inheritance.mdx create mode 100644 docs/200-orm/100-prisma-schema/20-data-model/index.mdx create mode 100644 docs/200-orm/100-prisma-schema/50-introspection.mdx create mode 100644 docs/200-orm/100-prisma-schema/80-postgresql-extensions.mdx create mode 100644 docs/200-orm/100-prisma-schema/index.mdx create mode 100644 docs/200-orm/100-prisma-schema/prisma-schema/relations-intro.png create mode 100644 docs/200-orm/100-prisma-schema/prisma-schema/sample-database.png create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/005-introduction.mdx create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/010-generating-prisma-client.mdx create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/015-instantiate-prisma-client.mdx create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/100-connection-management.mdx create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/115-connection-pool.mdx create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/200-pgbouncer.mdx create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/index.mdx create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/serverless-connections-2.png create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/050-databases-connections/serverless-connections.png create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/100-custom-model-and-field-names.mdx create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/150-error-formatting.mdx create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/200-read-replicas.mdx create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/220-database-polyfills.mdx create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/index.mdx create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/prisma-client-generation-workflow.png create mode 100644 docs/200-orm/200-prisma-client/000-setup-and-configuration/prisma-client-node-module.png create mode 100644 docs/200-orm/200-prisma-client/100-queries/030-crud.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/035-select-fields.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/037-relation-queries.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/050-filtering-and-sorting.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/055-pagination.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/056-aggregation-grouping-summarizing.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/058-transactions.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/060-full-text-search.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/061-custom-validation.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/062-computed-fields.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/063-excluding-fields.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/064-custom-models.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/070-case-sensitivity.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/090-raw-database-access/050-raw-queries.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/090-raw-database-access/100-custom-and-type-safe-queries.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/090-raw-database-access/index.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/100-query-optimization-performance.mdx create mode 100644 docs/200-orm/200-prisma-client/100-queries/index.mdx create mode 100644 docs/200-orm/200-prisma-client/200-special-fields-and-types/057-composite-types.mdx create mode 100644 docs/200-orm/200-prisma-client/200-special-fields-and-types/080-null-and-undefined.mdx create mode 100644 docs/200-orm/200-prisma-client/200-special-fields-and-types/100-working-with-json-fields.mdx create mode 100644 docs/200-orm/200-prisma-client/200-special-fields-and-types/200-working-with-scalar-lists-arrays.mdx create mode 100644 docs/200-orm/200-prisma-client/200-special-fields-and-types/300-working-with-composite-ids-and-constraints.mdx create mode 100644 docs/200-orm/200-prisma-client/200-special-fields-and-types/index.mdx create mode 100644 docs/200-orm/200-prisma-client/300-client-extensions/100-model.mdx create mode 100644 docs/200-orm/200-prisma-client/300-client-extensions/110-client.mdx create mode 100644 docs/200-orm/200-prisma-client/300-client-extensions/120-query.mdx create mode 100644 docs/200-orm/200-prisma-client/300-client-extensions/130-result.mdx create mode 100644 docs/200-orm/200-prisma-client/300-client-extensions/140-shared-extensions.mdx create mode 100644 docs/200-orm/200-prisma-client/300-client-extensions/150-type-utilities.mdx create mode 100644 docs/200-orm/200-prisma-client/300-client-extensions/200-extension-examples.mdx create mode 100644 docs/200-orm/200-prisma-client/300-client-extensions/500-middleware/100-soft-delete-middleware.mdx create mode 100644 docs/200-orm/200-prisma-client/300-client-extensions/500-middleware/200-logging-middleware.mdx create mode 100644 docs/200-orm/200-prisma-client/300-client-extensions/500-middleware/300-session-data-middleware.mdx create mode 100644 docs/200-orm/200-prisma-client/300-client-extensions/500-middleware/index.mdx create mode 100644 docs/200-orm/200-prisma-client/300-client-extensions/index.mdx create mode 100644 docs/200-orm/200-prisma-client/400-type-safety/050-prisma-validator.mdx create mode 100644 docs/200-orm/200-prisma-client/400-type-safety/100-operating-against-partial-structures-of-model-types.mdx create mode 100644 docs/200-orm/200-prisma-client/400-type-safety/830-prisma-type-system.mdx create mode 100644 docs/200-orm/200-prisma-client/400-type-safety/index.mdx create mode 100644 docs/200-orm/200-prisma-client/450-testing/100-unit-testing.mdx create mode 100644 docs/200-orm/200-prisma-client/450-testing/150-integration-testing.mdx create mode 100644 docs/200-orm/200-prisma-client/450-testing/Docker_Diagram_V1.png create mode 100644 docs/200-orm/200-prisma-client/450-testing/index.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/001-deploy-prisma.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/101-traditional/200-deploy-to-heroku.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/101-traditional/250-deploy-to-koyeb.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/101-traditional/images/heroku-architecture.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/101-traditional/images/heroku-deployed.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/101-traditional/images/koyeb-app-creation.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/101-traditional/images/koyeb-architecture.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/101-traditional/images/koyeb-deployed.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/101-traditional/index.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/150-deploy-to-azure-functions.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/300-deploy-to-vercel.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/400-deploy-to-aws-lambda.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/500-deploy-to-netlify.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-00-deploy-to-vercel-architecture.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-10-deploy-to-vercel-deploy-button.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-10-deploy-to-vercel-deploy-button.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-20-deploy-to-vercel-select-github.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-20-deploy-to-vercel-select-github.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-30-deploy-to-vercel-create-git-repo.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-30-deploy-to-vercel-create-git-repo.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-40-deploy-to-vercel-configure-project.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-40-deploy-to-vercel-configure-project.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-50-deploy-to-vercel-success.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-50-deploy-to-vercel-success.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-60-deploy-to-vercel-preview-environment-variable.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-60-deploy-to-vercel-preview-environment-variable.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-70-deploy-to-vercel-environment-variables.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/300-70-deploy-to-vercel-environment-variables.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-01-deploy-to-netlify-architecture.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-02-deploy-to-netlify-example-repo-click-fork.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-02-deploy-to-netlify-example-repo-click-fork.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-03-deploy-to-netlify-example-repo-create-fork-page.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-03-deploy-to-netlify-example-repo-create-fork-page.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-04-deploy-to-netlify-copy-supabase-connection-string.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-04-deploy-to-netlify-copy-supabase-connection-string.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-05-deploy-to-netlify-netlify-init-configure-site.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-05-deploy-to-netlify-netlify-init-configure-site.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-06-deploy-to-netlify-site-settings.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-06-deploy-to-netlify-site-settings.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-07-deploy-to-netlify-environment-variables-settings.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-07-deploy-to-netlify-environment-variables-settings.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-08-deploy-to-netlify-application-deployed.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-08-deploy-to-netlify-application-deployed.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-09-deploy-to-netlify-application-deployed-call-result.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/images/500-09-deploy-to-netlify-application-deployed-call-result.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/201-serverless/index.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/210-module-bundlers.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/301-edge/450-deploy-to-cloudflare-workers.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/301-edge/550-deploy-to-deno-deploy.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/301-edge/images/450-03-import-project.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/301-edge/images/450-03-import-project.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/301-edge/images/450-04-connect-db.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/301-edge/images/450-04-connect-db.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/301-edge/images/450-05-data-proxy.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/301-edge/images/450-05-data-proxy.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/301-edge/images/550-01-create-repo.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/301-edge/images/550-02-deploy-to-deno-project-parameters.png create mode 100644 docs/200-orm/200-prisma-client/500-deployment/301-edge/images/550-02-deploy-to-deno-project-parameters.snagx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/301-edge/index.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/550-deploy-database-changes-with-prisma-migrate.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/600-deploy-migrations-from-a-local-environment.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/650-caveats-when-deploying-to-aws-platforms.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/700-deploy-to-a-different-os.mdx create mode 100644 docs/200-orm/200-prisma-client/500-deployment/index.mdx create mode 100644 docs/200-orm/200-prisma-client/600-observability-and-logging/130-logging.mdx create mode 100644 docs/200-orm/200-prisma-client/600-observability-and-logging/240-metrics.mdx create mode 100644 docs/200-orm/200-prisma-client/600-observability-and-logging/250-opentelemetry-tracing.mdx create mode 100644 docs/200-orm/200-prisma-client/600-observability-and-logging/index.mdx create mode 100644 docs/200-orm/200-prisma-client/600-observability-and-logging/jaeger.png create mode 100644 docs/200-orm/200-prisma-client/600-observability-and-logging/trace-diagram.png create mode 100644 docs/200-orm/200-prisma-client/700-debugging-and-troubleshooting/140-debugging.mdx create mode 100644 docs/200-orm/200-prisma-client/700-debugging-and-troubleshooting/230-handling-exceptions-and-errors.mdx create mode 100644 docs/200-orm/200-prisma-client/700-debugging-and-troubleshooting/index.mdx create mode 100644 docs/200-orm/200-prisma-client/index.mdx create mode 100644 docs/200-orm/300-prisma-migrate/050-getting-started.mdx create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/005-overview.mdx create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/010-mental-model.mdx create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/070-migration-histories.mdx create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/200-shadow-database.mdx create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/300-limitations-and-known-issues.mdx create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/600-legacy-migrate.mdx create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/index.mdx create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/mental-model-illustrations/database-first-migration-flow.png create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/mental-model-illustrations/db-push-flow.png create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/mental-model-illustrations/entity-first-migration-flow.png create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/mental-model-illustrations/prisma-migrate-dev-flow.png create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/mental-model-illustrations/prisma-migrate-diff-flow.png create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/mental-model-illustrations/prisma-migrate-lifecycle.png create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/mental-model-illustrations/prisma-migrate-state-mgt.png create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/migrate-mapping.png create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/shadow-database.png create mode 100644 docs/200-orm/300-prisma-migrate/200-understanding-prisma-migrate/shadow-db.png create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/10-seeding.mdx create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/100-team-development.mdx create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/110-native-database-types.mdx create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/120-native-database-functions.mdx create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/20-prototyping-your-schema.mdx create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/200-troubleshooting.mdx create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/30-baselining.mdx create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/40-customizing-migrations.mdx create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/45-data-migration.mdx create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/50-squashing-migrations.mdx create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/60-generating-down-migrations.mdx create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/70-patching-and-hotfixing.mdx create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/80-unsupported-database-features.mdx create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/90-development-and-production.mdx create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/deploy-db.png create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/existing-database.png create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/index.mdx create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/migrate-team-dev.png create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/migration-history.png create mode 100644 docs/200-orm/300-prisma-migrate/300-workflows/new-dev-db.png create mode 100644 docs/200-orm/300-prisma-migrate/index.mdx create mode 100644 docs/200-orm/400-tools/05-prisma-cli.mdx create mode 100644 docs/200-orm/400-tools/06-prisma-studio.mdx create mode 100644 docs/200-orm/400-tools/images/prisma-studio/01-models-view.png create mode 100644 docs/200-orm/400-tools/images/prisma-studio/02-open-close-models.png create mode 100644 docs/200-orm/400-tools/images/prisma-studio/03-model-view-keyboard-shortcuts.png create mode 100644 docs/200-orm/400-tools/images/prisma-studio/04-save-multiple-changes.png create mode 100644 docs/200-orm/400-tools/images/prisma-studio/05-add-remove-filters.png create mode 100644 docs/200-orm/400-tools/images/prisma-studio/06-show-hide-fields.png create mode 100644 docs/200-orm/400-tools/images/prisma-studio/07-show-hide-records.png create mode 100644 docs/200-orm/400-tools/images/prisma-studio/08-model-sort.png create mode 100644 docs/200-orm/400-tools/images/prisma-studio/array.svg create mode 100644 docs/200-orm/400-tools/images/prisma-studio/boolean.svg create mode 100644 docs/200-orm/400-tools/images/prisma-studio/database.svg create mode 100644 docs/200-orm/400-tools/images/prisma-studio/datetime.svg create mode 100644 docs/200-orm/400-tools/images/prisma-studio/enum.svg create mode 100644 docs/200-orm/400-tools/images/prisma-studio/number.svg create mode 100644 docs/200-orm/400-tools/images/prisma-studio/object.svg create mode 100644 docs/200-orm/400-tools/images/prisma-studio/string.svg create mode 100644 docs/200-orm/400-tools/index.mdx create mode 100644 docs/200-orm/500-reference/050-prisma-client-reference.mdx create mode 100644 docs/200-orm/500-reference/100-prisma-schema-reference.mdx create mode 100644 docs/200-orm/500-reference/200-prisma-cli-reference.mdx create mode 100644 docs/200-orm/500-reference/250-error-reference.mdx create mode 100644 docs/200-orm/500-reference/300-environment-variables-reference.mdx create mode 100644 docs/200-orm/500-reference/350-database-features.mdx create mode 100644 docs/200-orm/500-reference/375-supported-databases.mdx create mode 100644 docs/200-orm/500-reference/380-connection-urls.mdx create mode 100644 docs/200-orm/500-reference/400-system-requirements.mdx create mode 100644 docs/200-orm/500-reference/500-preview-features/050-client-preview-features.mdx create mode 100644 docs/200-orm/500-reference/500-preview-features/080-cli-preview-features.mdx create mode 100644 docs/200-orm/500-reference/500-preview-features/index.mdx create mode 100644 docs/200-orm/500-reference/index.mdx create mode 100644 docs/200-orm/800-more/100-under-the-hood/100-engines.mdx create mode 100644 docs/200-orm/800-more/100-under-the-hood/index.mdx create mode 100644 docs/200-orm/800-more/100-under-the-hood/query-engine-node-js-at-runtime.png create mode 100644 docs/200-orm/800-more/100-under-the-hood/typical-flow-query-engine-at-runtime.png create mode 100644 docs/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/600-upgrading-to-prisma-5/001-rejectonnotfound-changes.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/600-upgrading-to-prisma-5/101-jsonprotocol-changes.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/600-upgrading-to-prisma-5/index.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/700-upgrading-to-prisma-4.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/800-upgrading-to-prisma-3/100-named-constraints.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/800-upgrading-to-prisma-3/150-referential-actions.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/800-upgrading-to-prisma-3/index.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/900-codemods.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/200-upgrading-versions/index.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/250-upgrading-to-use-preview-features.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/01-how-to-upgrade.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/02-schema-incompatibilities.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/03-upgrading-the-prisma-layer.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/04-upgrading-nexus-prisma-to-nexus.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/05-upgrading-prisma-binding-to-nexus.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/06-upgrading-prisma-binding-to-sdl-first.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/07-upgrading-a-rest-api.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/08-upgrade-from-mongodb-beta.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/TablePlus-GUI.png create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/add-missing-default-constraints-to-columns.png create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/altering-columns-to-use-enum.png create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/download-graphql-schema.png create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/expose-prisma-model-fields-with-t-model.png create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/fix-columns-with-json-data-types.png create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/fix-incorrect-m-n-relations-sql.png create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/fix-schema-incompatibilities.png create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/prisma-cli-introspection-flow.png create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/regenerate-resolvers-with-t-crud.png create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/run-sql-command-to-alter-column.png create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/images/use-t-crud-to-generate-resolvers.png create mode 100644 docs/200-orm/800-more/300-upgrade-guides/800-upgrade-from-prisma-1/index.mdx create mode 100644 docs/200-orm/800-more/300-upgrade-guides/index.mdx create mode 100644 docs/200-orm/800-more/400-comparisons/01-prisma-and-typeorm.mdx create mode 100644 docs/200-orm/800-more/400-comparisons/02-prisma-and-sequelize.mdx create mode 100644 docs/200-orm/800-more/400-comparisons/03-prisma-and-mongoose.mdx create mode 100644 docs/200-orm/800-more/400-comparisons/04-prisma-and-drizzle.mdx create mode 100644 docs/200-orm/800-more/400-comparisons/index.mdx create mode 100644 docs/200-orm/800-more/450-migrating-to-prisma/01-migrate-from-typeorm.mdx create mode 100644 docs/200-orm/800-more/450-migrating-to-prisma/02-migrate-from-sequelize.mdx create mode 100644 docs/200-orm/800-more/450-migrating-to-prisma/03-migrate-from-mongoose.mdx create mode 100644 docs/200-orm/800-more/450-migrating-to-prisma/index.mdx create mode 100644 docs/200-orm/800-more/500-development-environment/050-environment-variables/040-env-files.mdx create mode 100644 docs/200-orm/800-more/500-development-environment/050-environment-variables/100-managing-env-files-and-setting-variables.mdx create mode 100644 docs/200-orm/800-more/500-development-environment/050-environment-variables/200-using-multiple-env-files.mdx create mode 100644 docs/200-orm/800-more/500-development-environment/050-environment-variables/index.mdx create mode 100644 docs/200-orm/800-more/500-development-environment/100-editor-setup.mdx create mode 100644 docs/200-orm/800-more/500-development-environment/index.mdx create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/050-creating-bug-reports.mdx create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/100-autocompletion-in-graphql-resolvers-with-js.mdx create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/200-working-with-many-to-many-relations.mdx create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/400-nextjs-prisma-client-dev-practices.mdx create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/425-nextjs-prisma-client-monorepo.mdx create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/450-pkg-issue.mdx create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/500-comparing-columns-through-raw-queries.mdx create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/600-vercel-caching-issue.mdx create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/700-netlify-caching-issue.mdx create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/800-check-constraints.mdx create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/index.mdx create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/netlify-build-command-filled.png create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/netlify-edit-settings.png create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/prisma-autocompletion-in-js.png create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/unwanted-autocomplete-values-in-vscode.png create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/vercel-ui-build-command-filled.png create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/100-help-articles/vercel-ui-build-command.png create mode 100644 docs/200-orm/800-more/600-help-and-troubleshooting/index.mdx create mode 100644 docs/200-orm/800-more/700-releases.mdx create mode 100644 docs/200-orm/800-more/index.mdx create mode 100644 docs/200-orm/index.mdx create mode 100644 static/img/baseline-production-from-local.png create mode 100644 static/img/connect-sql-server.png create mode 100644 static/img/cursor-1.png create mode 100644 static/img/cursor-2.png create mode 100644 static/img/cursor-3.png create mode 100644 static/img/offset-skip-take.png create mode 100644 static/img/prisma-db-pull-generate-schema.png create mode 100644 static/img/prisma-evolve-app-workflow.png create mode 100644 static/img/prisma-migrate-development-workflow.png diff --git a/docs/200-orm/050-overview/100-introduction/100-what-is-prisma.mdx b/docs/200-orm/050-overview/100-introduction/100-what-is-prisma.mdx new file mode 100644 index 0000000000..dd091d68c0 --- /dev/null +++ b/docs/200-orm/050-overview/100-introduction/100-what-is-prisma.mdx @@ -0,0 +1,273 @@ +--- +title: 'What is Prisma?' +metaTitle: 'What is Prisma? (Overview)' +metaDescription: "This page gives a high-level overview of what Prisma is and how it works. It's a great starting point for Prisma newcomers!" +--- + +## What is Prisma? + +Prisma is an [open-source](https://github.com/prisma/prisma) next-generation ORM. It consists of the following parts: + +- **Prisma Client**: Auto-generated and type-safe query builder for Node.js & TypeScript +- **Prisma Migrate**: Migration system +- **Prisma Studio**: GUI to view and edit data in your database. + + + + **Prisma Studio** is the only part of Prisma ORM that is not open source. You can only run Prisma Studio locally. + + + +Prisma Client can be used in _any_ Node.js (supported versions) or TypeScript backend application (including serverless applications and microservices). This can be a [REST API](/orm/overview/prisma-in-your-stack/rest), a [GraphQL API](/orm/overview/prisma-in-your-stack/graphql), a gRPC API, or anything else that needs a database. + +
+ +
+ +## How does Prisma work? + +### The Prisma schema + +Every project that uses a tool from the Prisma toolkit starts with a [Prisma schema file](/orm/prisma-schema). The Prisma schema allows developers to define their _application models_ in an intuitive data modeling language. It also contains the connection to a database and defines a _generator_: + + + + +```prisma +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id Int @id @default(autoincrement()) + title String + content String? + published Boolean @default(false) + author User? @relation(fields: [authorId], references: [id]) + authorId Int? +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] +} +``` + + + + +```prisma +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + content String? + published Boolean @default(false) + author User? @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + name String? + posts Post[] +} +``` + + + + +> **Note**: The Prisma schema has powerful data modeling features. For example, it allows you to define "Prisma-level" [relation fields](/orm/prisma-schema/data-model/relations) which will make it easier to work with [relations in the Prisma Client API](/orm/prisma-client/queries/relation-queries). In the case above, the `posts` field on `User` is defined only on "Prisma-level", meaning it does not manifest as a foreign key in the underlying database. + +In this schema, you configure three things: + +- **Data source**: Specifies your database connection (via an environment variable) +- **Generator**: Indicates that you want to generate Prisma Client +- **Data model**: Defines your application models + +### The Prisma data model + +On this page, the focus is on the data model. You can learn more about [Data sources](/orm/prisma-schema/overview/data-sources) and [Generators](/orm/prisma-schema/overview/generators) on the respective docs pages. + +#### Functions of Prisma models + +The data model is a collection of [models](/orm/prisma-schema/data-model/models#defining-models). A model has two major functions: + +- Represent a table in relational databases or a collection in MongoDB +- Provide the foundation for the queries in the Prisma Client API + +#### Getting a data model + +There are two major workflows for "getting" a data model into your Prisma schema: + +- Manually writing the data model and mapping it to the database with [Prisma Migrate](/orm/prisma-migrate) +- Generating the data model by [introspecting](/orm/prisma-schema/introspection) a database + +Once the data model is defined, you can [generate Prisma Client](/orm/prisma-client/setup-and-configuration/generating-prisma-client) which will expose CRUD and more queries for the defined models. If you're using TypeScript, you'll get full type-safety for all queries (even when only retrieving the subsets of a model's fields). + +### Accessing your database with Prisma Client + +#### Generating Prisma Client + +The first step when using Prisma Client is installing the `@prisma/client` npm package: + +```terminal +npm install @prisma/client +``` + +Installing the `@prisma/client` package invokes the `prisma generate` command, which reads your Prisma schema and _generates_ Prisma Client code. The code is [generated into the `node_modules/.prisma/client` folder by default](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package). + +After you change your data model, you'll need to manually re-generate Prisma Client to ensure the code inside `node_modules/.prisma/client` gets updated: + +```terminal +prisma generate +``` + +#### Using Prisma Client to send queries to your database + +Once Prisma Client has been generated, you can import it in your code and send queries to your database. This is what the setup code looks like. + +##### Import and instantiate Prisma Client + + + + +```ts +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() +``` + + + + +```js +const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() +``` + + + + +Now you can start sending queries via the generated Prisma Client API, here are a few sample queries. Note that all Prisma Client queries return _plain old JavaScript objects_. + +Learn more about the available operations in the [Prisma Client API reference](/orm/prisma-client). + +##### Retrieve all `User` records from the database + +```ts +// Run inside `async` function +const allUsers = await prisma.user.findMany() +``` + +##### Include the `posts` relation on each returned `User` object + +```ts +// Run inside `async` function +const allUsers = await prisma.user.findMany({ + include: { posts: true }, +}) +``` + +##### Filter all `Post` records that contain `"prisma"` + +```ts +// Run inside `async` function +const filteredPosts = await prisma.post.findMany({ + where: { + OR: [ + { title: { contains: 'prisma' } }, + { content: { contains: 'prisma' } }, + ], + }, +}) +``` + +##### Create a new `User` and a new `Post` record in the same query + +```ts +// Run inside `async` function +const user = await prisma.user.create({ + data: { + name: 'Alice', + email: 'alice@prisma.io', + posts: { + create: { title: 'Join us for Prisma Day 2020' }, + }, + }, +}) +``` + +##### Update an existing `Post` record + +```ts +// Run inside `async` function +const post = await prisma.post.update({ + where: { id: 42 }, + data: { published: true }, +}) +``` + +#### Usage with TypeScript + +Note that when using TypeScript, the result of this query will be _statically typed_ so that you can't accidentally access a property that doesn't exist (and any typos are caught at compile-time). Learn more about leveraging Prisma Client's generated types on the [Advanced usage of generated types](/orm/prisma-client/type-safety/operating-against-partial-structures-of-model-types) page in the docs. + +## Typical Prisma workflows + +As mentioned above, there are two ways for "getting" your data model into the Prisma schema. Depending on which approach you choose, your main Prisma workflow might look different. + +### Prisma Migrate + +With **Prisma Migrate**, Prisma's integrated database migration tool, the workflow looks as follows: + +1. Manually adjust your [Prisma data model](/orm/prisma-schema/data-model/models) +1. Migrate your development database using the `prisma migrate dev` CLI command +1. Use Prisma Client in your application code to access your database + +![Typical workflow with Prisma Migrate](/img/prisma-migrate-development-workflow.png) + +To learn more about the Prisma Migrate workflow, see: + +- [Deploying database changes with Prisma Migrate](/orm/prisma-client/deployment/deploy-database-changes-with-prisma-migrate) + +* [Developing with Prisma Migrate](/orm/prisma-migrate) + +### SQL migrations and introspection + +If for some reason, you can not or do not want to use Prisma Migrate, you can still use introspection to update your Prisma schema from your database schema. +The typical workflow when using **SQL migrations and introspection** is slightly different: + +1. Manually adjust your database schema using SQL or a third-party migration tool +1. (Re-)introspect your database +1. Optionally [(re-)configure your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names)) +1. (Re-)generate Prisma Client +1. Use Prisma Client in your application code to access your database + +![Introspect workflow](/img/prisma-evolve-app-workflow.png) + +To learn more about the introspection workflow, please refer the [introspection section](/orm/prisma-schema/introspection). diff --git a/docs/200-orm/050-overview/100-introduction/200-why-prisma.mdx b/docs/200-orm/050-overview/100-introduction/200-why-prisma.mdx new file mode 100644 index 0000000000..2a895d874a --- /dev/null +++ b/docs/200-orm/050-overview/100-introduction/200-why-prisma.mdx @@ -0,0 +1,95 @@ +--- +title: 'Why Prisma?' +metaTitle: 'Why Prisma? Comparison with SQL query builders & ORMs' +metaDescription: 'Learn about the motivation for Prisma and how it compares to other Node.js and TypeScript database tools like ORMs and SQL query builders.' +--- + + + +On this page, you'll learn about the motivation for Prisma and how it compares to other database tools like ORMs and SQL query builders. + +Working with relational databases is a major bottleneck in application development. Debugging SQL queries or complex ORM objects often consume hours of development time. + +Prisma makes it easy for developers to reason about their database queries by providing a clean and type-safe API for submitting database queries which returns _plain old JavaScript objects_. + + + +## TLDR + +Prisma's main goal is to make application developers more productive when working with databases. Here are a few examples of how Prisma achieves this: + +- **Thinking in objects** instead of mapping relational data +- **Queries not classes** to avoid complex model objects +- **Single source of truth** for database and application models +- **Healthy constraints** that prevent common pitfalls and anti-patterns +- **An abstraction that makes the right thing easy** ("pit of success") +- **Type-safe database queries** that can be validated at compile time +- **Less boilerplate** so developers can focus on the important parts of their app +- **Auto-completion in code editors** instead of needing to look up documentation + +The remaining parts of this page discuss how Prisma compares to existing database tools. + +## Problems with SQL, ORMs and other database tools + +The main problem with the database tools that currently exist in the Node.js and TypeScript ecosystem is that they require a major tradeoff between _productivity_ and _control_. + +![Productivity vs Control in ORMs, SQL query builders, and SQL](node-js-db-tools-tradeoffs.png) + +### Raw SQL: Full control, low productivity + +With raw SQL (e.g. using the native [`pg`](https://node-postgres.com/) or [`mysql`](https://github.com/mysqljs/mysql#readme) Node.js database drivers) you have full control over your database operations. However, productivity suffers as sending plain SQL strings to the database is cumbersome and comes with a lot of overhead (manual connection handling, repetitive boilerplate, ...). + +Another major issue with this approach is that you don't get any type safety for your query results. Of course, you can type the results manually but this is a huge amount of work and requires major refactorings each time you change your database schema or queries to keep the typings in sync. + +Furthermore, submitting SQL queries as plain strings means you don't get any autocompletion in your editors. + +### SQL query builders: High control, medium productivity + +A common solution that retains a high level of control and provides better productivity is to use a SQL query builder (e.g. [knex.js](https://knexjs.org/)). These sort of tools provide a programmatic abstraction to construct SQL queries. + +The biggest drawback with SQL query builders is that application developers still need to think about their data in terms of SQL. This incurs a cognitive and practical cost of translating relational data into objects. Another issue is that it's too easy to shoot yourself in the foot if you don't know exactly what you're doing in your SQL queries. + +### ORMs: Less control, better productivity + +ORMs abstract away from SQL by letting you _define your application models as classes_, these classes are mapped to tables in the database. + +> "Object relational mappers" (ORMs) exist to bridge the gap between the programmers' friend (the object), and the database's primitive (the relation). The reasons for these differing models are as much cultural as functional: programmers like objects because they encapsulate the state of a single thing in a running program. Databases like relations because they better suit whole-dataset constraints and efficient access patterns for the entire dataset. +> +> [The Troublesome Active Record Pattern, Cal Paterson (2020)](https://calpaterson.com/activerecord.html) + +You can then read and write data by calling methods on the instances of your model classes. + +This is way more convenient and comes closer to the mental model developers have when thinking about their data. So, what's the catch? + +> ORM represents a quagmire which starts well, gets more complicated as time passes, and before long entraps its users in a commitment that has no clear demarcation point, no clear win conditions, and no clear exit strategy. +> +> [The Vietnam of Computer Science, Ted Neward (2006)](http://blogs.tedneward.com/post/the-vietnam-of-computer-science/) + +As an application developer, the mental model you have for your data is that of an _object_. The mental model for data in SQL on the other hand are _tables_. + +The divide between these two different representations of data is often referred to as the [object-relational impedance mismatch](https://en.wikipedia.org/wiki/Object-relational_impedance_mismatch). The object-relational impedance mismatch also is a major reason why many developers don't like working with traditional ORMs. + +As an example, consider how data is organized and relationships are handled with each approach: + +- **Relational databases**: Data is typically normalized (flat) and uses foreign keys to link across entities. The entities then need to be JOINed to manifest the actual relationships. +- **Object-oriented**: Objects can be deeply nested structures where you can traverse relationships simply by using dot notation. + +This alludes to one of the major pitfalls with ORMs: While they make it _seem_ that you can simply traverse relationships using familiar dot notation, under the hood the ORM generates SQL JOINs which are expensive and have the potential to drastically slow down your application (one symptom of this is the [n+1 problem](https://stackoverflow.com/questions/97197/what-is-the-n1-selects-problem-in-orm-object-relational-mapping)). + +To conclude: The appeal of ORMs is the premise of abstracting away the relational model and thinking about your data purely in terms of objects. While the premise is great, it's based on the wrong assumption that relational data can easily be mapped to objects which leads to lots of complications and pitfalls. + +## Application developers should care about data – not SQL + +Despite being developed in the 1970s(!), SQL has stood the test of time in an impressive manner. However, with the advancement and modernization of developers tools, it's worth asking if SQL really is the best abstraction for application developers to work with? + +After all, **developers should only care about the _data_ they need to implement a feature** and not spend time figuring out complicated SQL queries or massaging query results to fit their needs. + +There's another argument to be made against SQL in application development. The power of SQL can be a blessing if you know exactly what you're doing, but its complexity can be a curse. There are a lot of [anti-patterns](https://www.slideshare.net/billkarwin/sql-antipatterns-strike-back) and pitfalls that even experienced SQL users struggle to anticipate, often at the cost of performance and hours of debugging time. + +Developers should be able to ask for the data they need instead of having to worry about "doing the right thing" in their SQL queries. They should be using an abstraction that makes the right decisions for them. This can mean that the abstraction imposes certain "healthy" constraints that prevent developers from making mistakes. + +## Prisma makes developers productive + +Prisma's main goal is to make application developers more productive when working with databases. Considering the tradeoff between productivity and control again, this is how Prisma fits in: + +![Prisma makes developers productive](prisma-makes-devs-productive.png) diff --git a/docs/200-orm/050-overview/100-introduction/250-should-you-use-prisma.mdx b/docs/200-orm/050-overview/100-introduction/250-should-you-use-prisma.mdx new file mode 100644 index 0000000000..060c5fbb2e --- /dev/null +++ b/docs/200-orm/050-overview/100-introduction/250-should-you-use-prisma.mdx @@ -0,0 +1,141 @@ +--- +title: 'Should you use Prisma?' +metaTitle: 'Should you use Prisma as a Node.js/TypeScript ORM?' +metaDescription: 'Prisma is a new kind of ORM. This page explains when Prisma would be a good fit, and provides alternatives for other scenarios.' +tocDepth: 3 +toc: true +--- + + + +Prisma is a new kind of ORM that - like any other tool - comes with its own tradeoffs. This page explains when Prisma would be a good fit, and provides alternatives for other scenarios. + + + + + +## Prisma likely _is_ a good fit for you if ... + +### ... you are building a server-side application that talks to a database + +This is the main use case for Prisma. Server-side applications typically are API servers that expose data operations via technologies like REST, GraphQL or gRPC. They are commonly built as microservices or monolithic apps and deployed via long-running servers or serverless functions. Prisma is a great fit for all of these application and deployment models. + +Refer to the full list of databases (relational, NoSQL, and NewSQL) that Prisma [supports](/orm/reference/supported-databases). + +### ... you care about productivity and developer experience + +Productivity and developer experience are core to how we're building our tools. We're looking to build developer-friendly abstractions for tasks that are complex, error-prone and time-consuming when performed manually. + +No matter if you're a SQL newcomer or veteran, Prisma will give you a significant productivity boost for the most common database workflows. + +Here are a couple of the guiding principles and general practices we apply when designing and building our tools: + +- [make the right thing easy](https://www.jason.af/right-thing-easy-thing/) +- [pit of success](https://blog.codinghorror.com/falling-into-the-pit-of-success/) +- offer intelligent autocompletion where possible +- build powerful editor extensions (e.g. for [VS Code](https://marketplace.visualstudio.com/items?itemName=Prisma.prisma)) +- go the extra mile to achieve full type-safety + +### ... you are working in a team + +Prisma shines especially when used in collaborative environments. + +The declarative [Prisma schema](/orm/prisma-schema) provides an overview of the current state of the database that's easy to understand for everyone. This is a major improvement to traditional workflows where developers have to dig through migration files to understand the current table structure. + +[Prisma Client](/orm/prisma-client)'s minimal API surface enables developers to pick it up quickly without much learning overhead, so onboarding new developers to a team becomes a lot smoother. + +The [Prisma Migrate](/orm/prisma-migrate) workflows are designed in a way to cover database schema changes in collaborative environments. From the initial schema creation up to the point of deploying schema changes to production and resolving conflicts that were introduced by parallel modifications, Prisma Migrate has you covered. + +### ... you want a tool that holistically covers your database workflows + +Prisma is a lot more than "just another ORM". We are building a database toolkit that covers the daily workflows of application developers that interact with databases. A few examples are: + +- querying (with [Prisma Client](/orm/prisma-client)) +- data modeling (in the [Prisma schema](/orm/prisma-schema)) +- migrations (with [Prisma Migrate](/orm/prisma-migrate)) +- prototyping (via [`prisma db push`](/orm/reference/prisma-cli-reference#db-push)) +- seeding (via [`prisma db seed`](/orm/reference/prisma-cli-reference#db-seed)) +- visual viewing and editing (with [Prisma Studio](https://www.prisma.io/studio)) + +### ... you value type-safety + +Prisma is the only _fully_ type-safe ORM in the TypeScript ecosystem. The generated Prisma Client ensures typed query results even for partial queries and relations. You can learn more about this in the [type-safety comparison with TypeORM](/orm/more/comparisons/prisma-and-typeorm#type-safety). + +### ... you want an ORM with a transparent development process, proper maintenance & support + +Development of Prisma's open source tools is happening in the open. Most of it happens directly on GitHub in the main [`prisma/prisma`](https://github.com/prisma/prisma) repo: + +- issues and PRs in our repos are triaged and prioritized (usually within 1-2 days) +- there is a public [roadmap](https://pris.ly/roadmap) that is kept up to date with our plans +- new [releases](https://github.com/prisma/prisma/releases) with new features and improvements are issued every three weeks +- we have a dedicated support team that responds to questions in [GitHub Discussions](https://github.com/prisma/prisma/discussions) +- our product team is always eager to talk to you in the `#product-feedback` channel on Slack to get your feedback about Prisma + +### ... you want to be part of an awesome community + +Prisma has a lively [community](https://www.prisma.io/community), which you can find on [Slack](https://slack.prisma.io) and [Discord](https://discord.gg/KQyTW2H5ca). We also regularly host Meetups, conferences and other developer-focused events. Join us! + +## Prisma likely is _not_ a good fit for you if ... + +### ... you need _full_ control over all database queries + +Prisma is an abstraction. As such, an inherent tradeoff of Prisma is a reduced amount of control in exchange for higher productivity. This means, the [Prisma Client API](/orm/prisma-client) might have less capabilities in some scenarios than you get with plain SQL. + +If your application has requirements for database queries that Prisma does not provide and the workarounds are too costly, you might be better off with a tool that allows you to exercise full control over your database operations using plain SQL. + +> **Note**: If you can work around a certain limitation but still would like to see an improvement in the way how Prisma handles the situation, we encourage you to create a [feature request](https://github.com/prisma/prisma/issues/new?assignees=&labels=&template=feature_request.md&title=) on GitHub so that our Product and Engineering teams can look into it. + +_Alternatives_: SQL drivers (e.g. [`node-postgres`](https://node-postgres.com/), [`mysql`](https://github.com/mysqljs/mysql#readme), [`sqlite3`](https://github.com/mapbox/node-sqlite3#README), ...) + +### ... you do not want to write any code for your backend + +If you don't want to write any code for your backend and just be able to generate your API server and the database out-of-the-box, you might rather choose a Backend-as-a-Service (BaaS) for your project. + +With a BaaS, you can typically configure your data model via a high-level API (e.g. [GraphQL SDL](https://www.prisma.io/blog/graphql-sdl-schema-definition-language-6755bcb9ce51)) or a visual editor. Based on this data model, the BaaS generates a CRUD API and provisions a database for you. With this setup, you typically don't have control over the infrastructure the API server and database are running on. + +With Prisma, you are building the backend yourself using Node.js or TypeScript. This means you'll have to do a lot more coding work compared to using a BaaS. The benefit of this approach is that you have full flexibility for building, deploying, scaling and maintaining your backend and are not dependent on 3rd party software for a crucial part of your stack. + +_Alternatives_: [AWS AppSync](https://aws.amazon.com/appsync/), [8base](https://www.8base.com/), [Nhost](https://nhost.io/), [Supabase](https://supabase.com/), [Firebase](https://firebase.google.com/), [Amplication](https://amplication.com/) + +### ... you want a CRUD GraphQL API without writing any code + +While tools like the [`nexus-plugin-prisma`](https://nexusjs.org/docs/plugins/prisma/overview) and [`typegraphql-prisma`](https://github.com/MichalLytek/typegraphql-prisma#readme) allow you to quickly generate CRUD operations for your Prisma models in a GraphQL API, these approaches still require you to set up your GraphQL server manually and do some work to expose GraphQL queries and mutations for the models defined in your Prisma schema. + +If you want to get a GraphQL endpoint for your database out-of-the box, other tools might be better suited for your use case. + +_Alternatives_: [Hasura](https://hasura.io/), [Postgraphile](https://www.graphile.org/postgraphile/) + +### ... you want to use raw, type-safe SQL for querying your database + +While Prisma does allow you to [send plain SQL queries](/orm/prisma-client/queries/raw-database-access/raw-queries) to your database, it might not be the best fit if you prefer to work with a SQL-based abstraction that you want to be type-safe. Prisma's main benefit is to provide an abstraction layer that makes you more productive compared to writing SQL. + +If you're a solo developer that is very comfortable with SQL, and you just want to be sure that your database layer is type-safe, a lower-level TypeScript database library might be better for you. + +_Alternatives_: [Slonik](https://github.com/gajus/slonik), [pgtyped](https://github.com/adelsz/pgtyped), [Zapatos](https://jawj.github.io/zapatos/), [postgres-schema-builder](https://github.com/yss14/postgres-schema-builder) diff --git a/docs/200-orm/050-overview/100-introduction/300-data-modeling.mdx b/docs/200-orm/050-overview/100-introduction/300-data-modeling.mdx new file mode 100644 index 0000000000..ac5ff0e3a2 --- /dev/null +++ b/docs/200-orm/050-overview/100-introduction/300-data-modeling.mdx @@ -0,0 +1,246 @@ +--- +title: 'Data modeling' +metaTitle: 'Data modeling with Prisma' +metaDescription: 'Learn how data modeling with Prisma differs from data modeling with SQL or ORMs. Prisma uses a declarative data modeling language to describe a database schema.' +--- + +## What is data modeling? + +The term _data modeling_ refers to the **process of defining the shape and structure of the objects in an application**, these objects are often called "application models". In relational databases (like PostgreSQL), they are stored in _tables_ . When using document databases (like MongoDB), they are stored in _collections_. + +Depending on the domain of your application, the models will be different. For example, if you're writing a blogging application, you might have models such as _blog_, _author_, _article_. When writing a car-sharing app, you probably have models like _driver_, _car_, _route_. Application models enable you to represent these different entities in your code by creating respective _data structures_. + +When modeling data, you typically ask questions like: + +- What are the main entities/concepts in my application? +- How do they relate to each other? +- What are their main characteristics/properties? +- How can they be represented with my technology stack? + +## Data modeling without Prisma + +Data modeling typically needs to happen on (at least) two levels: + +- On the **database** level +- On the **application** level (i.e., in your programming language) + +The way that the application models are represented on both levels might differ due to a few reasons: + +- Databases and programming languages use different data types +- Relations are represented differently in a database than in a programming language +- Databases typically have more powerful data modeling capabilities, like indexes, cascading deletes, or a variety of additional constraints (e.g. unique, not null, ...) +- Databases and programming languages have different technical constraints + +### Data modeling on the database level + +#### Relational databases + +In relational databases, models are represented by _tables_. For example, you might define a `users` table to store information about the users of your application. Using PostgreSQL, you'd define it as follows: + +```sql +CREATE TABLE users ( + user_id SERIAL PRIMARY KEY NOT NULL, + name VARCHAR(255), + email VARCHAR(255) UNIQUE NOT NULL, + isAdmin BOOLEAN NOT NULL DEFAULT false +); +``` + +A visual representation of the `users` table with some random data might look as follows: + +| `user_id` | `name` | `email` | `isAdmin` | +| :-------- | :------ | :---------------- | :-------- | +| `1` | `Alice` | `alice@prisma.io` | `false` | +| `2` | `Bob` | `bob@prisma.io` | `false` | +| `3` | `Sarah` | `sarah@prisma.io` | `true` | + +It has the following columns: + +- `user_id`: An integer that increments with every new record in the `users` table. It also represents the [primary key](https://en.wikipedia.org/wiki/Primary_key) for each record. +- `name`: A string with at most 255 characters. +- `email`: A string with at most 255 characters. Additionally, the added constraints express that no two records can have duplicate values for the `email` column, and that _every_ record needs to have a value for it. +- `isAdmin`: A boolean that indicates whether the user has admin rights (default value: `false`) + +#### MongoDB + +In MongoDB databases, models are represented by _collections_ and contain _documents_ that can have any structure: + +```js +{ + _id: '607ee94800bbe41f001fd568', + slug: 'prisma-loves-mongodb', + title: 'Prisma <3 MongoDB', + body: "This is my first post. Isn't MongoDB + Prisma awesome?!" +} +``` + +Prisma Client currently expects a consistent model and [normalized model design](https://docs.mongodb.com/manual/core/data-model-design/#normalized-data-models). This means that: + +- If a model or field is not present in the Prisma schema, it is ignored +- If a field is mandatory but not present in the MongoDB dataset, you will get an error + +### Data modeling on the application level + +In addition to creating the tables that represent the entities from your application domain, you also need to create application models in your programming language. In object-oriented languages, this is often done by creating _classes_ to represent your models. Depending on the programming language, this might also be done with _interfaces_ or _structs_. + +There often is a strong correlation between the tables in your database and the models you define in your code. For example, to represent records from the aforementioned `users` table in your application, you might define a JavaScript (ES6) class looking similar to this: + +```js +class User { + constructor(user_id, name, email, isAdmin) { + this.user_id = user_id + this.name = name + this.email = email + this.isAdmin = isAdmin + } +} +``` + +When using TypeScript, you might define an interface instead: + +```js +interface User { + user_id: number + name: string + email: string + isAdmin: boolean +} +``` + +Notice how the `User` model in both cases has the same properties as the `users` table in the previous example. While it's often the case that there's a 1:1 mapping between database tables and application models, it can also happen that models are represented completely differently in the database and your application. + +With this setup, you can retrieve records from the `users` table and store them as instances of your `User` type. The following example code snippet uses [`pg`](https://node-postgres.com/) as the driver for PostgreSQL and creates a `User` instance based on the above defined JavaScript class: + +```js +const resultRows = await client.query('SELECT * FROM users WHERE user_id = 1') +const userData = resultRows[0] +const user = new User( + userData.user_id, + userData.name, + userData.email, + userData.isAdmin +) +// user = { +// user_id: 1, +// name: "Alice", +// email: "alice@prisma.io", +// isAdmin: false +// } +``` + +Notice that in these examples, the application models are "dumb", meaning they don't implement any logic but their sole purpose is to carry data as _plain old JavaScript objects_. + +### Data modeling with ORMs + +ORMs are commonly used in object-oriented languages to make it easier for developers to work with a database. The key characteristic of an ORM is that it lets you model your application data in terms of _classes_ which are mapped to _tables_ in the underlying database. + +The main difference compared to the approaches explained above is these classes not only carry data but also implement a substantial amount of logic. Mostly for storage, retrieval, serialization, and deserialization, but sometimes they also implement business logic that's specific to your application. + +This means, you don't write SQL statements to read and write data in the database, but instead the instances of your model classes provide an API to store and retrieve data. + +[Sequelize](https://sequelize.org/) is a popular ORM in the Node.js ecosystem, this is how you'd define the same `User` model from the sections before using Sequelize's modeling approach: + +```js +class User extends Model {} +User.init( + { + user_id: { + type: Sequelize.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + name: Sequelize.STRING(255), + email: { + type: Sequelize.STRING(255), + unique: true, + }, + isAdmin: Sequelize.BOOLEAN, + }, + { sequelize, modelName: 'user' } +) +``` + +To get an example with this `User` class to work, you still need to create the corresponding table in the database. With Sequelize, you have two ways of doing this: + +- Run `User.sync()` (typically not recommended for production) +- Use [Sequelize migrations](https://sequelize.org/v5/manual/migrations.html) to change your database schema + +Note that you'll never instantiate the `User` class manually (using `new User(...)`) as was shown in the previous section, but rather call _static_ methods on the `User` class which then return the `User` model instances: + +```js +const user = await User.findByPk(42) +``` + +The call to `findByPk` creates a SQL statement to retrieve the `User` record that's identified by the ID value `42`. + +The resulting `user` object is an instance of Sequelize's `Model` class (because `User` inherits from `Model`). It's not a POJO, but an object that implements additional behavior from Sequelize. + +## Data modeling with Prisma + +Depending on which parts of Prisma you want to use in your application, the data modeling flow looks slightly different. The following two sections explain the workflows for using [**only Prisma Client**](#using-only-prisma-client) and using [**Prisma Client and Prisma Migrate**](#using-prisma-client-and-prisma-migrate). + +No matter which approach though, with Prisma you never create application models in your programming language by manually defining classes, interfaces, or structs. Instead, the application models are defined in your [Prisma schema](/orm/prisma-schema): + +- **Only Prisma Client**: Application models in the Prisma schema are _generated based on the introspection of your database schema_. Data modeling happens primarily on the database-level. +- **Prisma Client and Prisma Migrate**: Data modeling happens in the Prisma schema by _manually adding application models_ to it. Prisma Migrate maps these application models to tables in the underlying database (currently only supported for relational databases). + +As an example, the `User` model from the previous example would be represented as follows in the Prisma schema: + +```prisma +model User { + user_id Int @id @default(autoincrement()) + name String? + email String @unique + isAdmin Boolean @default(false) +} +``` + +Once the application models are in your Prisma schema (whether they were added through introspection or manually by you), the next step typically is to generate Prisma Client which provides a programmatic and type-safe API to read and write data in the shape of your application models. + +Prisma Client uses TypeScript [type aliases](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#type-aliases) to represent your application models in your code. For example, the `User` model would be represented as follows in the generated Prisma Client library: + +```ts +export declare type User = { + id: number + name: string | null + email: string + isAdmin: boolean +} +``` + +In addition to the generated types, Prisma Client also provides a data access API that you can use once you've installed the `@prisma/client` package: + +```js +import { PrismaClient } from '@prisma/client' +// or +// const { PrismaClient } = require('@prisma/client') + +const prisma = new PrismaClient() + +// use inside an `async` function to `await` the result +await prisma.user.findUnique(...) +await prisma.user.findMany(...) +await prisma.user.create(...) +await prisma.user.update(...) +await prisma.user.delete(...) +await prisma.user.upsert(...) +``` + +### Using only Prisma Client + +When using only Prisma Client and _not_ using Prisma Migrate in your application, data modeling needs to happen on the database level via SQL. Once your SQL schema is ready, you use Prisma's introspection feature to add the application models to your Prisma schema. Finally, you generate Prisma Client which creates the types as well as the programmatic API for you to read and write data in your database. + +Here is an overview of the main workflow: + +1. Change your database schema using SQL (e.g. `CREATE TABLE`, `ALTER TABLE`, ...) +1. Run `prisma db pull` to introspect the database and add application models to the Prisma schema +1. Run `prisma generate` to update your Prisma Client API + +### Using Prisma Client and Prisma Migrate + +When using [Prisma Migrate](/orm/prisma-migrate), you define your application in the Prisma schema and with relational databases use the `prisma migrate` subcommand to generate plain SQL migration files, which you can edit before applying. With MongoDB, you use `prisma db push` instead which applies the changes to your database directly. + +Here is an overview of the main workflow: + +1. Manually change your application models in the Prisma schema (e.g. add a new model, remove an existing one, ...) +1. Run `prisma migrate dev` to create and apply a migration or run `prisma db push` to apply the changes directly (in both cases Prisma Client is automatically generated) diff --git a/docs/200-orm/050-overview/100-introduction/index.mdx b/docs/200-orm/050-overview/100-introduction/index.mdx new file mode 100644 index 0000000000..90a1c1af59 --- /dev/null +++ b/docs/200-orm/050-overview/100-introduction/index.mdx @@ -0,0 +1,19 @@ +--- +title: 'Introduction' +metaTitle: 'Introduction (Overview)' +metaDescription: "This section gives a high-level overview of what Prisma is and how it works. It's a great starting point for Prisma newcomers!" +--- + + + +This page gives a high-level overview of what Prisma is and how it works. + +If you want to get started with a _practical introduction_ and learn about the Prisma Client API, head over to the [**Getting Started**](/getting-started) documentation. + +To learn more about the _motivation_ for Prisma, check out the [**Why Prisma?**](/orm/overview/introduction/why-prisma) page. + + + +## In this section + + diff --git a/docs/200-orm/050-overview/100-introduction/node-js-db-tools-tradeoffs.png b/docs/200-orm/050-overview/100-introduction/node-js-db-tools-tradeoffs.png new file mode 100644 index 0000000000000000000000000000000000000000..8037da2e08042ba687aced65082f688f5696171c GIT binary patch literal 17765 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 AE&u=k literal 0 HcmV?d00001 diff --git a/docs/200-orm/050-overview/100-introduction/prisma-makes-devs-productive.png b/docs/200-orm/050-overview/100-introduction/prisma-makes-devs-productive.png new file mode 100644 index 0000000000000000000000000000000000000000..fcd68959c68265cd5daf0aa292ccae01b13f2c79 GIT binary patch literal 23811 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 g)1*+d0#Y<3q*yFV^bjbD60^ zw!dA?CTOlF>3nYr)Ob}Qj(l_{6hXw9iwk=*s#7iapSKk@&kjAsxSdT^9oVv^r9q|B zx!pid>*ACd9N*O_OHZiRX$KQ{{L?pv&QoA->e^{yNh%~w*)0}KrnOHp_a9HPZV zAV2bbhc^mEY>iH6-@4X+&qKqWN`_4TpZ>KL$m-D2Jpx|@RVG(l0XNwYyeUW!7|Zw* Dln%%( literal 0 HcmV?d00001 diff --git a/docs/200-orm/050-overview/100-introduction/prisma-rest-apis.png b/docs/200-orm/050-overview/100-introduction/prisma-rest-apis.png new file mode 100644 index 0000000000000000000000000000000000000000..9e374a2fa0287c15719129db87392134841cbb6f GIT binary patch literal 12866 zcmb7qWmr^Exb85_z|cboNNyVG6p$KVXz6Yw1w}%ng`p&c5d@?}S`?%~I+aqoySoLX zx#KzK-sk){&wcLQzrOXY^}gTxeS597XZBuE+M3El_%!$+5Qs=s1*r=H;UGXDEC>u6 z<56yeJpqBhaoUgd6){a!gQqG6Pxqr9s^~vmbOKgi^Q-DV-HR68i4Yl=jUASb7?p_` zla1Yt5Iu+x--r;Jdj=r2pN}A7FhJv{6VuMXPQ=5#C{Z;7$DK%#`DXyesb=tW<~e`? zj>^WU=|A0llD8N65M%7v<(fK9?njH-1#FBfCydFy-M1^igx-x5!O+?VZU0B;hZx(` ze&U}n{ijB5qkFdbqq4F4wuQS9V)lVM2hk5lrDH~AqHX;*2N0+|+X7X+rx*b$dX5f( z+vBotuWANv&n_{vBT_Mn2KJ`U<}vzboq?IB0EQW(Z8!3vsl%k2f&Jat-(8IONU^=B zhbE3wss@guGO@GIfO#jt*lxnqVQSC500Y5@9G8v8RKx!D_AX|yZGk;%d;dv3M!%Zj zQ@enzUE6&7*IO8!h7RKk&cL(-aC>@rRnw1&dk`(^@On$t@F~V~b8=x~KXG^R_p6CI44l*qoH6!pl;~CU z@2lDYOc^nL3}nU$xH`Qv!8BiQU!L6kJ-NF(Il)N1ySuwQy>kfM!k{q5o?QV(3?@xX ziEbyBF-7=SWXH*l>D%qJwrRuEgYtpXuGzKFDva#Q`R&E$g_CNDH`|8`&kHXXw#({H z_wswjCN4X=|IR)6blf<$;`41|{d!~lCMM%xJFVUK?QZ6m_=dm3E3R*L z|BkF|#Mi&iJ&H*`2ua%adAqw2*D$|uU089F`SsZ6?Ot8m*{{Ki`nI#>bzpR5Of78GKk1p!}Z8PGmx zY01j6cC&^bv}B>Oz%#WJI`oS;4Bh=ml{4#^Hlh02GG!=8!dm(0FP@7bmbIU6d4Ii; z(~IN^6`HOZtuN9Ll+%xfdjCWRdTd+z+w051j?LA>KZm)DpUY7Xew_A=JCE;f7?Ac= z5Qa83M)x@fw)jXS&zVDi8WUZtOw=MviMaE|Y_Rlt4$}5bDobr{7ifF_wscj>r--(@ z$ppcAq|UVZv8?gkuQIqOYXyVm@^8F`EFzf>ymqss-h?r{H*Q7Ryml%%Q)HN5RCf=W zk~$SSOmFh{bzzQf2L%G~?VsOcJW~NK!_K!kFpEfdt^AlhX&!zupSeoRV7MZj>IH=y zv@TKAFtKWNNM!i@^V1(xiu%_t8($`9l8IIe*9pILJr5*MC{9d0>AvvW&wM(FwaWG2 zbg=1O3q@N_)b$7QPdQ*_W_7~Uja)TxJ*O6ms0goFiG*jx^;ialQZxj+oZNj# z?^k$SumMwQyA@je0ahA^?B za_oA)#zjjMTm0Bv8TGz~VI5-@=bXygwEIcOcGj@

GPL5MnIt z;rfGFVEFt)ZNRZE+A}x=}yH?NS3GOeh7L(&qg4hlX(TYCH{YWzdGopHQuS(l44Sz z72%WqM7+KP<%uR|;J?^+@b&8@t)N*jZPi|!x zd)qoqdWaa{2`BCR463U|H`qGu`|hi%yp377dkJj2>Q?Kl_d0@DW{|2Ft)xudMTA5xfeWMPF|3alkjdkHhk z2~u~wHdcZ}KEaN(=Y^2KuTiww;cc&4L1aZxn)bk{E`Du7J{$7RNKlW-o1P*fbO!ak zSEMn1dY)A@Im-P(s93MpHi@}R8F5ANFFh=n2c;2&W^EP4lFrzx!PL;xw+SvYI~wI? zaVs!3E;fJ3y79e=&9q}iAlEF*SYrrY;a-T~EkezyL*HjDDAeB8dtYUj^9&Ek*gX>M+$ z$RyFl*?`6yYTz`%MJ(*a{8WHJ;I|4|ApM$J0MYxJ9BkhHiQK3TYGhcK<&2*~%Qpu4%HCa?Af-;P1~Kr8y(oaZMM zkO469Juxt)`DWeoP3LBXOEz*2Mm*e?$IMXr2Uu!?Tp^Dw}qn3aV=wW2g}ZdVU}lq((#Usve(2A z;&La?R$y>!?A06Z3$Rs76*;Rhs*#UU)=cKJMLW$0z}HDXMWwfSriBX7Rba3ppaksq zBe9jx0^mGm{;Ha0uApkOKSCXfy%^Cm?(bV`?Kn*dQO5 zwf6T$cY=jIV5z&6YqJvW%d9Rc!>svtfi4dkY4@9({b?pNS6-@qQMpwc%{W*fS8mx@ z+4xxba?CkXT`0ESwB#!eX!x1km`ip2+lW!u>dUt-+pQsh7s#m=yE-!pm;RBUXFGwf zQk~+E<`|Q=gy#2R8@K$uGtce|@!0QTN-m!tDzUYVJ{W8)F)FgHwkugBG1wsxu0d=V zZzec5)AjavSTY#))O?h(er%in@$dIJ$|b0)-@5Qt2o~&bTDcVRP-2~hDAh#Ev43)e zQSg1Jvp>#W&GWanA1j&Rs?SLPYFRR;&mGXlk}NhHGb_4o8JW}YfUpSz>^3}On=2S@6!;%vXMq|P~%oS;)Zl0^Ab2-4E^g%WTq)_t5N6xFx9 z7x&2ead6uLA==o>6W2Y&-_|qP>+=%X3Z;)%79aA#boTR2HNgrGDA3F9{q)k0Gvt+1 z35g#M7CaztbW#^*PPLrk~|=Y#~#UWEoS#Bz6M-QaQih+;I^>#6pbCs7=-Q+NlfAl)PY)ZKuq^@-}) zztrt+uhzfm;{gMMY%b!0p|KSF{ig4;jOvGeRHiL4~PTXk* zjpPs^bW>p=O#v}~&+8QEgx$4z%0ov^2qbplIO@TveEkwgtaTSra9#Qk7`Sg77E9C% zMjB&5kX~;(4KAR>`Yx^Mv7*vOW8aLJ5ba?V-0NuyE>D{MyaQz4zFgQ0Rfey|bNG`r z;dI|(twy4B?gJCXZCs%4B)cDb3$+^w01b7?$Uc&?ln_A~M)saACx%Qjza0hO`-(Rhr$j3l=H#D0db~Ar~t}^PI=NMCcpr?krza z2EANR5=2D{hb$bF%Jh{vKE^X{M`ZGTX6^^Dy}SS92aA3~m4|I^CQY?Eyv!HkN<<-OUYw_0Rx+^6=bG7eq+l358f>5V=nKay=M4*inuP6t+(v@beM(lhUuY zx^F%>h6eJNlpce8b9gSfgGND9W~i!9484wpgL$k7%0+nw0LJz0DusJ0c|Uu2;gRdY zgz|R4YxTE#Sm4)sP(T|G)tc&Cw18P_A!dpU-(P5h0X3d>ZIy5wNoeGC2O)yY{-oSr z7X%lg4f;q3c#e^0v!G%4(OAohMY|v{-fsM&oRqRVHlivg4xM@9>FW-5i7QR_;TE!rB${9Y{iulP#+%xJ$bak z@C^%Q&hj`A1O$8q1?Le7{N}^8!9$<0119N6l4=nIYd)Ni0-Tq*?@C;Z1!j3VMjXab zz4i6(4s?8E=8Ka0?b_F@hiylKbxd_}$6|)kuGJw$fWmJj)*G59nUY z+vh`K1}SBW5@KMx)(-+&hMpdvU~-d{9L^s39g5g&!9lr^#9J}cC-Ltja2E&AGaE-D z#OM3UnG&+yzTSRn9~Q)>jPL`nO3v$@^M1u}QrA+}#qj1PyPxszB;m7Cft&FY zAl9=+_j{=CtKQ=v$R|#oGh9)GhG(vm_q@ zeEOr8{J@U2w?(8X4t5tlfFgkw1_x4d=t!=|s$s8MS2nW;Qh--)Lg{yIFwa>Snn7r8 z3`?Hd7zqJ)+qaNt|61)9LyX;f)rYk@xZ0l;tYTtv*uelWq+c4xbYI~uskv{_4X1n& z8Z#DO3YVhfd*b_x5qbH*E0LCj?szBapvy9mvOctkCEyU*VlhX8I~56H2DNocA-a1( zhV$64$x()LTT2l9S6}{6cN+zE=kLcn-Fgn_3TYHXgsFzY3@gm*Q(K!WPB(Q^#D{DO z1SjO^D3iQWKFtmr;nA73JzEz@7xr$8RT4G%2OBhXI`bGUUy4-`57JRZJ0@Wzynd@n zVph9($|(jY^@h=oZf7^#NFn%~`Y0*CS5z!U@FGOl%*ry34)VXB{RIOBx44??nhNQR7&49vekjP-qt*wr8SVEha0|DG0vk~G?PRfXt}hKrCuDP2FY~^N&JdzI3}C+~slPOU5Zb$z4;^X=Od!hor`c&mSy+)v z6IK=O2Q=0Hc{7>|7ydTg2Z+@dU2^S*9?lD>d9S&7(7bF;5Tf?^;uST!-MgDlfs$AM{N@Fap!t%TIP&rC2=5-weJe5EUWGP&JH(PX<2PhNKKUHVtHMZ1WC z$)0;yvI~x1^it_mCgsSV9I^VnCzeL9p#-U&@Ziy;r0E3;@r7Hr+r)3s+Q$lSpnU&s zMJT9Z#EK0G(*2hj^M$qN2neB)`x{i(3*o8d-Mr@6n<;!(Up0XLD18k}=uzSHERW%J znO4rgO`V=$``-;4m$jREftA?xz)ggHe+HcM+r8K-N{#1tU{jBzj^f&vFJ&F8G*FRY z?afyb_V5+Wz;Cb+J@Z;DfORM3ffvY7XqXJJ%g0j4cpI%~7yYgb5-BaaDc4T#+SyK7 zd@0x71W{QbYsjKZ?0dt8*c4@FU2WA;CZF?u&%82f_u~rHnKfrl40+2zFd5v+!A%=D ziJdpDptfI!pi)<3J>b)wCPr}XO74q$fwIL(+~>SNA@EgdL%$RKNH)yeo}|cqPqnG4 zz)|i(-1(6af~NAm=7Cv;p6U{zn;?z5WC~2aUnlq9t$t$I}2a zL*gmF3q`qK*EWVOAeEmR>TEV(GokOr*Hno26Ya@#;-DJkt~n`Y&v%XoQcCG|RZ1H_ z&9@lbeHsk}t#>Hd11dJHrL zRF}0^6e8eDdA;mN8Gly9=2ek_#fe7ogc+l3C&}JVtGOl3Vy!Zi!Cl_oN6=~nhC}vj z-&pZ2XYBHMaPX3*uyCeONjRjcOqI!NW)u7Sl(LF5(S^j}>bq!a4?c)DYQq)ry`$upH2-=M(XoWq%`99=S4A6%bg4GncdGUn`}iQ%GO;Kt4*Iz@3p=rf+fG_Upnf(<1k$)Uw%j7 zN7_sFj}7*pY^>zVj`Tw*@Sq$nMp=A?|K20~GknujPd?<`d)dJEuc+ZToy=0^UW*vX zj~VY}b8y_iT`oGBGYG-@C;z?k*W36vVLrJaUWk!e-V%pJJ4yhcTw1EY_I8U|1%F~^ z+N04O%@t&X{R6T87vrqtwdrJ{qw~1Np>o3hL1D~WDZmr55tsztW z+3Mp{$qoq7@{)m7PwF=7XHxEef_uEr`U`(J0r-o;PTg7RJWPWc*%6aaQnScGW=ei9 zf{K$Wb)BuDP-aWTMi|4%=TBDI5JsP4+O)>J#7_3P;xu>Xg@fVWRf(;d4uQUZ*zt(W zoe_I(#z>X;G2y`Hii%1bjvTfP&nTV`R%a$wa^wyl6mLBI+7+b&u)>o*1*;Q%rYDYp z`SzX({S>#u{Yq|Y5GY(pR1;5(7Y50p5OFKQs_u9~nxA2wIrY6NN69$F$Wc8b5+V=Q z!Ke8?ike<3i-i9QF;@+eqBZrO6U>m9Q!2$_3PvMFLvZ*+KY5As)#!Bl{Nx{$EjoA9%X+cb^K>3*t09^rBFR7h($j4Ef&)2`UNY zjtYKYt@jc4V}#)$*`6-yVmn84Fh{E@guG;rdP(T>A305S2C&>pu%bJd>3=%*bYZiH zy0Wqce^+|sLi zLE;LS7jdp-)m_}gkwxW%gbdp z*^kHx_@m-ibSGUzWRVHrI>x{Aj>Q^b2urpbewFv6LUunA69gXDuYWZMsQBtt7(*(|5-3$83zU~}^6lNzP36N5(-ZDLB866=brlP?^67H1@*kmG$ z3RD0te8|nwA^S5@COEk)zFXr5bqT1k9T;y}Ruxe0OxinC`t_t+4*SEc2Tn&LJQKnS zC#9>(R1HF3ghFz15O(JZu+C85I`M;obKU`n(9vQ$TQD6-I(5?ZyUyPI(v(N}uDC{c zc18R@to$TMT0Hw^@>%L6xz)^P4V-W#t<-QLj&kJoX^Pom#ZqPe$w9`+dIW!XjGB?F z8`&;GXo@n;-pfZ?06VBxQ|eO10b>h^OxfEBqdmxr&xxa~&xXe5w zW8x^vykur*E9@qZh9RS6dsR;mGk6k^EI>tak#3{XoUFV2KZ9T3CJsAv;|Kgiv$|SqI)3Td{;qAZiMINqFQUizRh3mo zX&w;M4V}H*kyH6gx$pCy@k@MdDBKx_Oppyj2`Zov(AxhfRE!M6_H33?eEnHks~Y5UILS7kWRcyG~F`lPU-O07$x?Z<3qbN20(RiP=s|IkI34Q@x1Bma#8rfFk0{Oy@1)IA{v zD3&wxUxIi7w3hsECR#*r-mmb4))6k~^4dKrv*67-MDG()!{v}D{a}HwHbBdfxZ0LD z&J}iSqE49gSuQe*@<|a3I-NueYKITG>bLX0&mZAigpC77BjQ5py;|?dBv_Aqa4T%8f$O+y^TO@YO7L%ElOVcK55A9&4U6DA-+l*@U;T>y;!uia zH3{m0i6(3o$?Xf{y@xWdzn4Dba%B}!Y%5Y%Jz)XOJjs&V7b<#h!PNhI_{%&FxJ^CB zq6)-kUM&54g|12;U5Fj(jF~Tt!dx~X>N1)doG5&`M~*iOWnI|rO#)TVl1U_EwH1Ip z+B{1@<}AVqBfM3e9&XgakJ+n0HKA!Zsh~WrL$#DgBTC@ZP@|XW%Vf_62oh_*n;D(k zSn$Jtl~bLvGAjIfV!#dAGUp~1+^v+F4zQVU;ufOLjzmm9RB1v`P6`j+r|I(vZ>ku@ zvLI%_TZOfHX^#NZ&lm4s)wspO9N$7hNPd3-?Kn+6BS7*jQ!*}API923IGlwx24w*b zr($-qA6_xHm3(v&L3f?+CbMlDOXtckorRJ1V%DEr7~)s>n{;(T^?GV7Tn$V*D%> zUA3IK`AGTM9==_+D}V8?lTdzY!w*6|lS9p?+ADpZTQ?iU_Gv}8Hzk|?Xuh{4+H2}+ zY=gamFn0m+0BF(Qa*@iir(>l86th^BgWZ4k7BMgDce66opv2a>;EbC@=n-9*-*r^= zD<*)acfhjy!uSDP3|<(Jrgb!4uoa`&>R@i|Cv#pej$@UM#gMHAI5Y|i7qyDIH%RSE z+g04(Z{e7A;>%=#ECuGF(x*z1n=}x%N*EGk6Jgs3)cc z!!ceRFiN6F-w^}{+yn=>=*wT{dujIoey~W!?eMFV03L$FT^Dw^d2M>@(a#PzT6@4b z=y3~?(c1jt3h5VSw2R{u4bP6w()*sD&Bs{LKhNDc>TxosZm0Mnz;Gxu1jp$rspi9p zg1NqF@_6U6n7){=q(e(1~IxbylH|fiFN1t`@ zhH4OlK(rLJXYDCkcDcnT_mb%AR&0XwN1|tRUKcb`WJa^*d&zpTw%jfFxZMynE zY*XWJQ-#023EQ@67>*`Nuc!L*RebQg(r$XtSJns(aGO+p6^GuFUi)qs8+4dGOR%R< zkS+TGkEnR@+Gvb`h$CkMXZtr9S==vYUF$c4%J#R9>f73VND z9*UocpBLlIR%~QN+ZGr(!jF~ph^;?!1P`{JCN^C;YOumq#BW;lYHsDc>gYTO7`zfBkDoG;>FRgSjh_| z`e^5DqI=y~P_>O!eD7OQfHB8C3I2++I9%rNW;!kRZ8!?lLr-HQqaCq){3?e9cX;F% zqdaPr;w?AhXNBO4OE+AmG2!1A%IhT`LD}wWw68cT(sIc&6-sswVN6&FS|Z;9J`sm| zoK{PV8gE4e$|3PPC)@jMBXvJRV&7`q*Mut8(8<3ys-|MR zd^2F>V(;vCqtD~7LiGc`+>48=9i zG@D^U2Jx}Baznf<$b~99#}|5ct8TvD{;x-NtvbsjQ72Gtwo<`n{EGL)z(mNhUa>z>5HQQOi5F?;zDJEe5jPh{D!p4}{gkSF7Ptq>s<7Q0lYZ_jfR@^FvJ3w@tU z#fZ8JVs}3hCS$ezONy;h ztVB07-oH4ex$hEqC*ay^k{HZ%&17cn|8D1^LnP$vpTtI<|4J~?HZ}OZ$&3r8A>rrwpzIYHC(G8 zyApRv`GRRW)O(#B!>y7JQ=unipJw8D(<*~bgD+o&5&r&g)5~>;qvnc~9{&PXXCG(I z8#pfy=3r(Oo`_{!^BO(Ib@U?=Jv0l8u;&>0BQUQgo^^cJMnq4dHPv(Jxi^KrBe`V+ z*RIPxq;c#WdZ1kNb8+ZzB=P^pIVRaj$)JU*V9vM&8=U7j1a0!Ge)1u~Sgf638yf^K zAZUQdiF}+2(=Akam%yeou4a((!ld15YGcD+`P;)cw`5h9fp69W8@(NlmAwbNu>M~n zN4N(D&KrV2hq7qe_zC=LgK6&Ex5EyVzKl0F#+h7)SwoD(5&KN;-*#?Sdz+TZ3PIwc zy``o1ptsB$jAFkwoSeAPX14^l_vf1gCbIAqgl#wv5g+0e@YVCT`6+Aod}<0H^upZ{ zk7CDjB-zo*jXiR%v$ zihUzx20VV9$^}2zlLuWp1;d&vg`IDqU(<$YOMUj-w|os-rAA)Gm%6-=(a6U+PEo9h+-%8vOzp3Ojl!y$mU^r7FTBgxZ|(PLpUe%2tmnoZH)MB6n#g(utDXi%-O%3J`vyDiQ7>s zv81j?E?_=DlB;`5_A=w^pmCEC-&JvrUJA)@rF8W_?DmHJSRG$Ge(HkPnQh%ul_>F~ z6R$wBzywM>Bdu?chUmAGcitU)DcG;48egVXK$ZUCB{VLqBu1)w7&<(|4L7k?U1D^W zRjO-Lk_Y(lf_*03w|gv+;As|?ph z1zX4_yxLcbIb^jrt+39b?h7O4R5#Y_)R;orS$}P7Mwj}d1qXt>YEsjB^|6Ex&gob1 z?gwZ#_!P%1BP%>*w(ToLQ0%t5I>d%Pj?J0#aZ^E%c6`iPAG(@Vmc!0g|CkEbPJwIW3LSX^6^fGqzC9>=zYww(|CPn z*BC9C+Wvlqm5$QkDPGZjSYx1%6q2e!1EvRA?n$=JLP+)Rcr0>&O-t=#b63Zwq*-JkQ9*@~4x_)<_GyNOf%MJwQX#1PN1yi{ z--;+z3~*$+$mB_HAaINCp4bfE{qjD>M_pD2XK?M2s$}9mGo^IRxfBsrp&YVb%hs)F zGhd;-P<3WE<LMC z2+JI5)oQ3s$uGs^ub)}_wV(Z5(#4#t!?RU?l{<~AP(n-)_7h7S0Z4S+*YbjOx{t4w zAZTWi#tnrCSQjtrDoZM)#0ite`|z*lNykTiT0?Zh5t{I!aQ&h^n#i)r=m z(~xMQnJBM;JRtur2odZEWhm>A9#8PGt05W%w>3lp3IM^jo9*m-Q*U{oA6dXTke0yQ zeQtukcTe%x%DT!KJs47vLb=1N0Pw5Lauqi;~RV{B@3^jxy4nh2rOz}`mx6lZ2q1Q-o2IcN{50Yj{xaBD+#q(xRssMnF8zZxmeaqNxlqkzQ^YukABrA ziH>`QLbNgjpPT=6P<@<%Bto`xV~Kg~BG%bcq3w|8d3`>(6>eb};3@qrra7MA;$l}W zd7v<6(}vyEs#^v8rP5y#x_s=#^2U+mUZlCstp$6D???Jb%}Ap`*E0X%UH-?fKk zb&y#qeX65~ad)E5l+|!pSVwxfCEwA>{(#|->tCsG(Qw2q)_F|{W8|q2RJTyNRWsPL zF52bA^+gBN=4XR$gepnl!p5=U>Te_rLdTAFSD0zb;1eYW7ez8CF~ccCrNZqwDiLAo zfxLDhT8=k_E@WZUIZbM$-6D@VhX3s82N$2)Bi-y``Er)M`5&O4WY@ml8<=~5uD`%Z z{$O2-@T>6X4lXVW`Nh`ZDAI@Jx1IQvnhK0%0*+t37|; zBS>n|{j)9b-QY@t|4r|oeWzsX5vUMFL$^aggB8&6bnVJ#Ets=-o}RelN>2K|WkA&C zR$Q3wLkQRl#(J6NAF96KeQBvxaj^2enr8o^UyzYTF`CYdD_q|t_ zl2BbV=Dp1CYdOpxm19+88)c+jdQ9Vu2^==b2G3sRWJd?y!a+yX@A=@TNrhPy|KdonUM}8p!vD@8c5>5? z*z1epsqfwUi=X%KD$ivpD%Fqvb%}r?V6o%!@^2=q0)SaZw|}Ix+q)gJAkI0^gl84x zN)%R0<5UI@!6uSNyO~J=xoJG;q5PUeo**g`5l%22GQBz6*!gQ_aeu#I{_gd?=6s*y zlb9birKPvv8-~*Bn2G2_taH2e*q!5c5?s# literal 0 HcmV?d00001 diff --git a/docs/200-orm/050-overview/100-introduction/user-post-relation-1-n.png b/docs/200-orm/050-overview/100-introduction/user-post-relation-1-n.png new file mode 100644 index 0000000000000000000000000000000000000000..bab7611d32da3d19e2fe36eee0490fba14a061d7 GIT binary patch literal 59297 zcmd?RcT`i~_bnO_1W_O;NQWRQMJdud1R|&)5UPMQkzS=mT0jtpNKvU$CA3JDE)a?! zAYE#Z77;`5G4yf|e!k`R?t5?C@&0~{;Sk6Dw)n{lLzi~j`6s`-E41X^-ArG2(;{80Y`Lzgkir6&uX=H$FQ(sKafnDefFJ z=1eqqwmI$=EzATG-npNd$LhSoPDf+kY=n+Li6>%Enhf}zXggcZhggkiRq)PSVls0e zFQ^5Q5PV>j9k>?OH#wj*CE%`Hm{3b!2ygK9m>ODEo-8|VU{BiB;O^_Fqnz^!0#tGIcAD-lGi*I~127&4s z$g_SEo)4Zj`_@)H5*VO8Iu3_}T0k!cHA$OG#b5M0jimHwKp#GMB_`uc&wXeZ1-^;6 z3L?ZrAB;OAb|V=g$Uwt3C^CZz!!~{aJP4!`>w&-~ffoA$k|T~zGK5Dbi9&a@xh#J? za;a%22tfr}QmB)=m@a*YMZ>jlbW%N&aY@dn!nx*8n1w_Xi~{;!PsTkUI7cQ<1RKi> zD;I}p?x+V8Tg;@ma}_C|IM78FIg;zEkr>rW_l*_%;i;VrjTTxZ< zjL#PjB}_YvTi{ ziq)fVQpPZ$jC;R?lM~9=^8BL?4EbnDRL;?gC>?H#pFw)_9UgNVw#vntHD1`I)=g7Mhya4V*=pSKE&m16FH6rs9|^`ldN0Hze>@>Ip-h!zZg8(aAi zRvoRm6TzlV7`+AWtEfjN7*$^KSIQ&aG8Sy3j--HtL_0bpQ8Y;G_O|LIhtZ&d5kkZF z^>3K9@k3fc;ZkGM*Udd<$l?4j2#u9OLK)|3ZKPt{PN(&|&4b*fkJck6pM-~349X

9 zxua;Svz7YeqMPt5RgnWf*L}Fzk4IVoNQ-AIiXu}y`Q_1~tBOtOHRM(0*gaIqCVp^* zt!zL}oDIokiE~pA3g2~U(hw=zm?ttTR~*8E=lXi6)N zve_Tv!%6GR%>7DyfUQ|Fz+cA~=|8$kk8Z_m7a!!Mxw4hm6RXX~L>woJ9DX9k*v^3{ z;ELGOy6)rZ9r>l{vdkib2;^9$gEda>%kvfDFE1s@*KhcQOY!&UvPBLuvsEr2h6Anz zr5rz-TOd3wXG~%ekx_e*QXU;&SK6BQV(U#w9${)w#NWIG+-utD53fh&B&!Gtes`j@ zugz-yR&y~+QE4ks3>BqhwzE={G2h}a!%+S$pcX6KTh74#3}-FNm!-HN-*1N7L|X6P zt-aFHLZ0bNDlkZmu|aD)#aL9q-1U%muHgs=ezACQt(j9astVvH>LGiC`Jn`D(xtyJH6C7>eZI{(wppY-t4d&!fBd{nY;eC-J6ff zyugVHGxLqYYcTyD6ed01FeBEoD@546V)u_+&Mt1plou2NDU935x~d+uTHSE?I&u3u z&G%o>k*=rdLOE#@uTvj^^|Ds69Mg6AJ4$zFDoN#}oV-y|U%d7DAb%36Z{Aa$>QQxQ zL5#}?T8`h309`^`VC1j0PQyu|(%E^dgXRrhB^sGz^A3ulga_$%`2G@ga60q*H2 zxnkq)1)W=>@f+-8C9;p3w(1|O1x#%i7>v2UFhA6aSsSaFO7JKtPj~7GkdD~Xuy>VD ze;-Q)-@@m`&z`vAHJumG`^Pub*KNx|Yxg`41iJMmPyqBua z;|=>6Gp*9ywSgw(?}N9e&%;RvzrDZedYZndK%xfIqnui{V)mFjlX7@>HUq&<} zB=PQ!gl?mS@3(IpMRA_`f3!sVtf7&Pim&wL)un|yi{frKU^y(B6FegcJMk_g+|?2W zkP3KoVOM!~q6aadp+3z%@#aW1KKQ0;Xy+BR0`dOR64G|2Q1X5rV+^N~X7%vbNdaE# z?hGaOu_JZAC(oT>6^05#)AV{{6A?duMJ*>*#;sq)=Qc3J8{e@RD!Hv9~ya`V4U`Vn|)Bf zhmn-*h9P}0v!T7+i!Twn!R4Z_aJ%@gL4cb{{-!5b! zDdbGz(aa^4a-0p~&M%YX+8mw&hw@zTY4`)%b(^y3N%xC6GoO_=SAJg!*NME^`hI7S zrvz%S@QbHxygMcM!{h6392+HW+qk{_niou|RuT&}=*a-FU$NfRE6%e-kL?q8kC0s< z0=(Y$`>Po&vv&Ms#5jamIG~&DDrrBU&HjB?fus;J;FmV>8)iBD1$13P>$};q-R~ww~#`= zUG%m1hKuMB>z6XMwcHPfMbhb5;(+B-yzB>bTZ8CgLXzHmU!NEvOod@I=!x}p zTnckZGX6%0_<6Vx@z%rN_V?cNIXzxZteG==0(-VnUR`VBH)s>&`NuCMK!EUaXaW+7 z>9uj-UQXtJ^FY?|Dt*pSK4`H<9Rz|J6zrB^C6rNccqJRGno;c4s}AD&ych;j=vtZ^ ztw}hLec`C^rl(%q8b6O(=0Q14-c+QJZUel0#*1t5qZiR2=*Xh7Ms2m)cFOyJspYLl z7Jv)lTr*fF5O3VPh3`3;Dv=HnVC&5&T}gaUOM)5XT-RoiI#-Gup$4{>AeXu!1^hU8 z088%30yUUSQx6236id=J=jO(sV?71nqnSN?!y*3 zNn|YsRPeaQXYQ4A{P{dnU)GDWY}i6Ex-5jg`=gg(H$qX_6mUw_s63sTsr~#0GY)&k zwk68>CDf;Hs=CB}7Ov_^VRw>WVi+ zayAI!3!IbjlM*LWomX<+R=V-W8v-%Q2qk<$FmbY>ZF16_h)D92BbgZ-mB=6ST50xx~6`EWRm|&9Yx$)_pMN<{7t-p7xH>%5z$J7~M)l|O5f_<)2DSEuKq!gE*ae#Pxc~n=MLe;L-h9 zF##Seb(Rq%Un&^|yw8@&?{q|-fo`kRPqsGG?Su~hDlYvpurk!>?n$bE_+3`ITfA%x zh8XQ{?AFt9Hhu+jZp25d>hjF8!W~X=N5DxQ5)Lq#E#Dc`3|I16@fBVeQGdUY;X9?E z83O|8GsEtd`K`Hq95!F!3OHUL`y3qWNR38|+uV|ce(6p;?!6!t$q18F_A-SsjU88Q zD)?cagMH56XCW>rYimF4?z6G_8@Mt&)Zp!IT>q1TDItdxsKLmyd$dQ(2=D`8H8AC+ z8>rMze(3H2taR26>zToMa|?m6BZooNkIbMsju4afYBjG!zb9{#)N_6qU-T^fmHBcq zD@;;@-L}#F*#1ZIcc%T`@;612sKOG<^{vLX0Gx6sp#*CS%jtfcO4V|k0pN*8m|5s{q@(T%bCS>4fb#MhbMWc>T59J~!|VBM79w86%0KTsd@@q{rtPu2yK=pF zFT`moj=;kr=!tcfmD-v8{OC{6;r{!%&H;<$!HOB1N4y{vV*v45K5NpVRRiWdRyC~c zVj@yUfWYLZ*540$E}=^~4LbKPH-2&(l%oN}ndN_ee*xX$|7-h`o8QWM8YRds7I=jP zQ3o|(R97sF9{z^uxQFp9Ano*#gTys}s4u!90c@{K5^J=dVc);rA0wNsH?}d@1iY2v z2ZV4|Q`I_pCo_S5hwzCh&C$uMpwppmV_t`Yp8FHC@NQIz(?l+z$pmCIPmKnJJWIa% z^Y=@5=b-H~H4aXu^_gTv?vb41`TDaD-{Ukxh~w^`x4?lhE*93(U78sb%|_nzAbG-{Ou_SOd8Unf)fq{oVU>YH16vgu1v_|#z)q^Y$wsHx3eHLA+M;V-a$ty=@Ao| zSIi5O+37MO^Z=1VBw|yrcZo4HFQI1-O$hHq`(-JO7vm{KY)=Ym_CGkSys5xWPR6ZY zl0!LN2&s3;?qL1qe`dJP7Ubz?5els&%72X@AGXJ#$aGf#I+AfnzZ2Eev~yGltX923 zW^Rm()8p;2ohf_zG0*u}w#P+Oy02xkvIS9kYM_>0aTCAfyKqx5Q&cUv*R8~jHKBqg zBVY&Ycg83DUXQLQjec7tKT2x zlT=<-+w&gzOyNvbIVKspr-L6WtB}<*O$qK?=x}o&fP|U>P+DkTpoLCus+Gj~@c^27aPa;V?LC4 zWh7pCN(Qpw_^H*iaE}5m|4Owa6@I;sFR}muu&1b;i50ZUUD*d^e^G`duPP=53| zHkAWvUZs9NFrtPncZ;>~IP7v>5AHRYsTA zd;Y4e^y4W=AxZefXx08@)vcsTt{+f?l1HnIzsOX)d+$ZakuJ0h-{dNb=v1%C9N-YP z)6znYJX&~l0lhtc@4-ujL)SPyfQB>ZynkWT2@#YMR3tvNQjZyGw+)_uMILgW)+3+b zl}iclg6p}q;~mHKV~%gjqnv1iW5sZJlHVLJylrLeRP|D>ZZe)E{(>5Qk>!Yuy81R| z_D|hiK@hAn8n)!n zK#h*|TrSKgRw)d@`Q6hzPh>+|`x(6gJ*glaPD>;)^Mut}n~WZ(K73yTpQh3r}VfDnhn zXqVfdmx@wla%;Jg>TnCZuw##pQ)fX?=bY!d7asBvsnOV$(+e)#I*Dl@Wh})8=g^?p zk{cxB4qwOIZ+cA$m#x;?e)(t+QYduKpMY2T;Tkg}^~G=Pw2umq8(Cl(MF#VcOe)nc z;bqf7p1>BUAs4xt`*p!F>Qq4l^?>oUJZC88xT>|HNA%V$m?^&ueCZhw39l*^njq?y zyaOCSc5Q3URPsV+XsZ(&M;ID>yuG!fvS_sdjI?z9a~{r$ zs8)0u5gGl;5#LA!@9Oyz30P?aLh3m;ypBaYodAJY!XSeFea;9?HCnVqz z^OfK?+b{CUqj2Od*ieAu8WT0z>Gar12Utaqo%Ukujjg2Hn^9Wl*>0V$T%TX?R17hp zLqE{)>heQdOd%84FbP?Tk8ZKtBh`-15O;QR{?tX4j*bazOBk1ZH;NawlDQ>PzsXg`LcvyA>q+wNJIFx-M0JNB&14`E~5ey`-90pga<#a_ehR!yZAiEA)b4{G|@x9El- zsW>Y8tQTxnE-pkS9%O9MN#)?KQfFz;6xFy1ByT20G*0(}VQaY@8}adh06eSqdGp%J zUi2gBb+Ttx#hxe$H)Csc0lX|SG0nvLSGeOXx&Gx&ascTjtWL5Q2$dZ|3cb8;UJe?*bm$l=q`Mr`8; zqhmbvZ59X9f95sHwaqEvq_+<=GMwUy<IqcIl)y_E6=?!k|)c9OMDGosj_s#3`aE zIVt-Iml4`fOj88>9DS~8i$T`6qfLJCmu$25`0X%C46ui5_P$e8sq&?D+PHe12Vl~f zK=q5P|4E+0GqpDZhJwVc0kBd$UXKDEiV>hi7oMmVG`N9bq)$Pb8eX+P(gz4gX6c>> z{LL{UU#gON$d$*nvLqD8R8;^~*@y>q8TRncStq7)@A3p#8LDw&sf*POdG`;6`wcBD zG^0@yMD{3P)RKwNga+w{LDLYFoW4rcxV87llEN9YCy6cr@lXN%)gkgieh-?s@P(HP z5rc-4R2j*Z+?3UewOr5y$Z~Jik7wNXRv#HZyg&P`I!Wq=#uc(F(>h2Z+E-Y>L zk|kyST1q8&dV5NNVfnnA`wGD1Y0m2%yH@XF8;|eNlFO{0`)z_Tn17eNaQ91p+OBYn z7o_@;*@l<ff~hkl?A^-I`Q{Aa(rLzE)D5^;3hx zJhymJn&p|dZ*^OWuc9pr0}1}bSQl$m7qh$5ppZEw(HHL!Ua5(d>DI`+4)evG4%q~! z;zf8;c2Ivd0t}CTCKQ1K4?7{@^aj&61%d-D}{ZgrK2Q=_0_T929AY`7Y!>t=RpK>{;<~xQt|0Q{=Ufcn5GxK#1 zY-ir0?(5AI_9vEcT8OxFua25l2d@2mG%WG3$2n4CP>DD}l}50i@tUHtGhRG`&BkkI z=Q~bd%uFEd<5arU{rZi(dHNq6Q++#(xROtN~sNf)_eRf0X{_pxY% z$3|a!mWcdLmXp033qJm^_BHYk8b&!>&QIr5A?R{129 zasvCVpP!8<@ls9=J;&~grGs-CloRYKlB?zyS3O>Z)Xa zT$RnZSx4)$rVHiP&kYl)P9B+2EtHyhkw?E5r75(vJf4`&9vIAp7)n!!xN%qczNz8< z$PPLvzJs@LDaB~S9=7~BdQt1+HiJcU)sl-^Oz5y(I^9;F{8-OZ;^iH1__m(x!@z{v z={evC`k%DKd&Q-&(^ws)7hw}VM<1Mg*U09-H%begoVuax>c$_^wBbA{5(WTY{sO&% z>;}r6!b%~=KezzJA!KO^FSi~R>ggme1=8v`F@+You|&o)v=oD3Wcr6x z!YJ~TOQHN7vjM=*y&WfG&$t;A^e4;7ti*P3XY-fwjt1Fx|QW!0UG zk^n=vq$n&HOBYuAPB}PdWS;JIcRX3$M|N7N?&3oEeZpcHmdQRfQ|4P!iT`qTr-bt> zSc_4kSt2)}ozx@{(5#ks=lO6xQP#s1Kpnz#q`5zppnzkjtfYX? z(uW)ig~ZYh>pe$4A$<(*bna1bti}loyZ14fla~o|Y$%ay36E=((4fE7RC(5NQU^ z^3%VsFyq{Fu}!Q0`ztgw0|Y{KU6Ob#kVQ>xn;Vdh7|XIWDZ4#7QyHX~X?ibUt;>cP zcdNX!sEg-#tCe`PoH#6wxi$D>#M2>;c`wi^IOfcZf6cWxE=m@@U~*HKwry2D<6|`a zprvUYHqrd~)l-GD=idIy;J{EXUmVa07tbiKOkp;A-PUV+(;``NLyccbC$qAC%gJK) z{cWu;|4i;5)9M>MS8umodEe`xI>@ItAMD`Q7v9seCCi=Kwi_>0Y#Atn^qs9k{!VNE zmr3mYF-iBu0S_s!k3R4D!k>H&(4P3w7j69~!_;ne$xUY5^6w5Hfp%&O)~A9$F}pW0 zsB}hr6j0EK8c2+hH=(rgL^ZWuIdndBwyU&x>93*~a=hj-%c%v6&6ymwnYpK|gHxAR()!3p)4^JDXQxJ&9z*r1IU^A%DB2$UQ%>qnVVeAC zE>p%8_LJ9w)DZ~DQ<2?6C!*Fh%E9KMAd7du($Qcg$ zFjFcPdtQ1pWA1W9GcQV25mZ^x>@!70Nf_~U0i{GAR|7snl#Y`(#DoV$p1(u?7^qNU zrGQ7b?Lq+Li#aYi^BDy-Hs@NNu9h(Ytvp*~A?u|9@;%kTKSTLLx*(`098FXJ^0}`td!s7UTsfvr}$nD zAbiC8m9tsXMK%xs*ajZj!Sx27P1;w60uJDI$Z_?tq&WU;ew=hr#t$~S*Z--Rp+h|0?6owW`fp>j;<&%YlgatVkHpdfgV1vB zT%5(l1+Q*SpPnqWA>x`h7c)*bd;p6$xi0M|7-@5W=>qaUlra=z5z5b-4Orh)UHt-(Sxx|~0CDP#GnQzI1TqD`T&Kb?q9ReT z1psApJ}h$QI8A}jfPpv+=pS&MYFYB?R2xTY`Pyd>JTVw)I6WRdp23p?DF`r(2X%18 zOAX+0HzvQx2Or)&8x@cfqz1H$Vr(Y)VL5G&yii@_aJb?$j zr$>o%cEe;`T89Itv&}(%rzPA9d&k|oO%pD&_BAp2F_vJai`nR%UpqPPcyIIb1G?i? z08alFcuFQ*f)u)aprwV<)n;ior~$RvgVUdJacThzc;ud0SLbQp+V1J6 z{k@*kZ4tas{Zy6h$rJ&hD&QLc8`81|lXOmNPd&yjz40wQ z8LZ`#MbWsP;*WlQsiJ_FZ73a?QV0ARpzk@^A2?dtRXwy%ZaR_P>U0}HO7%hnf2cxi zUnWVdKn+Z(4QG%BLdwJ$?3sxG$nrwk1~s!n6r1X|mOoR%&GHtQ%aYu3;g*w!C+^b|C-LqPS5E?lfGwn2fP)AgAxsYm!6yrNmk1S;f%_Mctt%Coco&l| zeT`YC{qlUgal%2z?&~vq{ql|jv^~#Pc4ki&GE16vjnpwdNu;jHliT&3WfoOD>$X1#@y7j;tV3bSyX{0e_gWwB1d8s4S(NMzaC z+(G@WV;Sxl+3QU^pX!@?H=_jeF8Tn1n!;fu}@JhPrPh~Qm~X4zLzgGU?l zE6%4UpSUx&tSR8LTmLgrNpsWYOKH zzjgG(qLh)FVfdqh)0I;qQo%*eug`0viG95$nHgs2d+MTmas;J>TVL0vc5gk6>}uq@ zgNlla5Ug;Uy9{fu{RnxGmIrx24Itc0u%n+%(~s8a4LK!*kByMiE%w)a3(ObLtzJn0 zf8|mKGlk}r46UoK?Z2MIYY#LZOs(gi9bq1nTmYC!6=N@abQ0;vV^A5spSK-~5xwAF zb_I<9vgrfCq(A$9$%`@0U=lHFUk6WH7SyEnMyelbFgATC;W`n@&jWz&@OLqdk#2PX zNf=G?Ms@!Up9x{N$I8tI^vpnO69Z#%jT&WuwD+!lvAkp`X1^$pd3^-wI}-S?ag9sS zyxx$G%<$SLQ->y{qHxh3_ZtwDD%kKgDk}0`A7rVAuz@{Jw3Odl);#T$Zr%}RKAEPE z|6<_D+Poc%Bs%wX3W^;4I01@xo_py3zTEii61o*t8V_EZ&rwdzg$SNtk87i*>vV^2 z%Azi-0_bl}0q1#HsA%+%Hk-|L=~p7VA9Q4>yCcJb4<^C}8$A&UXL#86_Mur`TH^O7 z$`=QIIGgXRPZ<3+ed_e|?O{ABA#+btmR`|U{*;WAxJ>kA{6mV*E|5aExgHB&(4RU+;M9!IY z)+eXQ*I75$0DahI9KuP*{SFHi&S-<6MtAl-)R)W2DI}kG$cn4o{PXNUd zgWu2}sdHk1JjZ9kH+ng#bF}CrBVqT9^I9t!COy<;?4#zyC(se(iKj1ONO<51j4YlF z_62}MpuYR%Z{UgKg%}&)q`U>c%QZ(!#{$bI($|x=dH6+>8=GD-^*JJo?7dcK?i&fnhNkV98g! z=v3F;vmuHMI$J170kx7x)y?CCTs%;P^=ncJ8>vaGGND1=yb~>FvauFvHd}%HZR5+qA$^*O7-p~LVVcc@;e1(C>Y}J%^qU6}aG;VXw)KOJ_;*M*3gCf2i*DbEE3T4;Uz0r z!wj$M=Q-0(&cko9BU0neyqc38xVoa8A4LuXT{U5t-!~9hnso{raok5grL*cb54nA5 z&@;%nMJS7`WFbV*kM+mr^YB3oCK%4m#3YpSlRpQ39_|<4>O29|`owdpSI>}b0yUvG zG@g7fU-ANv`s1+egp!f34J4pYrsagq?hfjK5|`=c#~Y*5?x)rcgoT-)-DRDV8Ou&? zor`F}hTs}}VDWZq)>@n(D#}t_Dq0rZYU^vg?d+*4 zIh??F0UcGW1Ef41+^3bMbkZ0thV6jLrV-KQ_O&pfg6G6fml~``;107vtptyZBwXLY^$n!41WN2#-Az{yuS<5SnTPs3`P4++}{^q`2f7_k^4cpJf?4!dzK9?01K z@=_015tMy*Yo^s^mWXfM%0LV$4SWJN{E^X3VVs>Ls+%UqP5IEn-ZWM|B=#W=YQVBp zmB6x<;4(XeeGVDj;VQ4oSA8Q1kiS6LY{0*m_|*&^@CUfcS$c2%UhIg{p3Tvj~?+_RcH&Ntg zFbwc@3b-1zl~a#7%dY(31+*0yI&zCXcJ5*4yg^E_LNAfAnh;Z}caV26IXU1xuhY0H zgsHX6zd>?Cg#64?17o=YyI|!)1%xnX4sz5s^5^Ds^KmHMU!pJneBpTk{?M$GQw2;J zauyTuJl|UnKCSvo^Uc830wD~r7mx>?=Yh|I*1<=k(y_r>1^UAhCDn>Y9a|cdqM`g? z*wQ#qe!ETcrF-THpp$r0NBL6I#Y6#p%R5?U@&D5Vm=c0wBhE3+Z7Kd40(v>+3clVO zi9T28IMHkQZnvOQo}Qa47zP3^5drxSntvGXrB7<$R({?bATA`m)xE36PZqrf(7b=e zB;0Zo))on2h!fw+vFJBL60YZ43!0BrsXw#^`jN9h8PCW*@bp>48ws+y{R2NiCt6LJ z2k49cQvD)9Ehl5XpufuD-+&(SVETg^$ST-b{(lRFc|f0X9mypdSM-U-|V;-_^|ta%_k zU-O{hqFJ8VYf?>v=&CEj*zB@bLz;0`gI|~Xd9C^Xhi1nvOO&`7cyV*9fU6Dtky}oV zhz+Nu`Dgw`ic+~&4n7oaHzmmOtG9TKF67v#+|lQhhJa zc8&{nvOzAjc4#{|da2L~qG*z5G9r|uZvk^4t_@ts$#YvD;j+{=Q&;>nF};G9yPHf^ z8oof{v`-DY)Ky^K3}oE{hESRW;TWnR1K`T_%tUphl;FDzgoUwU{jk zDphGttl+w+#Xo(szFEADU+yqg zp>fMNdr<51KzccfW9e1d8|*pgxB%yZYG`uL$IPbnr!(JjChpYR#KbFn89S`U|2d2T zb@+np>TD|ibdmbbfb2=QF*dQXHF*!K3D>QxD1WXb_j= z(v)57xyOhS5>iMa9q8WfP}Z*vCoC=Jm}e zkNXAm0JBZfFACmv5mM zo&f>b1ITj6W3T>h-OAr(&VltW)EjwFsvsMAKt7qKnbkJ>bcOz%-h!c%z?iVRk0~(B zvd1*m`USfW%>F9H>7QE13=Gf9IL;7U4E2$e? z;ivAd1wHb#Xr*S|Ti4yIbfTLYh981QsZ&ckXXKB9{cbVD+J?h*l6`ynaAOP2G*?PD z+}tEX>xO+A3`>>WavA?U?!}lV+Fc#rW^2ZZ$!bdRQ{DdBK!G|-xIz}LqV*FtUaLGc zcf@g8N9XHWlj&1Vm9x2s50!spf;$WGXqS9&x@t}ue7JI0*EVbeHBk6%az=mskAcgN z(Qh?J&n`91Kh1K@NjCy+dYI!K{8lsu{iSYRh%sIB`l?o_tFR-Ea#FBxEe$}l6PA9o z`EPpKH1*(;qaLT?E}=7(F8KQ*Y90{kqHV8UK*v@lT@i^L9=la@H20_LN7`(t(T^)Zs;gg3B-eiHuF|!P79XHV z`_dcfwoc^WmT|h41YZ|Z;T%nY{C7ET-Vqh6DdCRERn_NJ;BVp;+EN0usvrX28m#Rd%QZddAp6O9#Wl*+2D z*1Tn(%!!4>+FJmMdq<_3m3G(3fWUjC3%4D3)brI$%vT#?K@YOY>i8O}^$Z`qUEY0p z5TsNvx5uILkxa+MKwk{<;5^*1=bpt_lFyFliBdKB`e&E-09GZiq*;;P=n@ z1P*}k8lOuaV`-3YPrmW*0Zc@-4$EdF8R2$yguOJYJT91zr(ROSak< z0A+Y<8Jwc;=}l_opGP?b;TNy#b;>X0m&N^Kd;XnBpEI#LztLt`ZpnV9RlXw z*93lU*lqX}O=&*rb`wGy?-L1!^0;&ha1`AQ&Bj)~onwZLYCIoR z4*tyHjwq>~Hm&LewD~#w*-=`hfS2%fXuC^XZhrlD3qunC>V&C`gs1^Is6h6?lUIqf3$1@W?4i)XiT*)Myp3PmQSHl#`78 zVo(r&KtQ=$aJmSi&owBdZ#hSc9SdS&u=7-38fqrsp!aZ(U&!EORPu#w4lwN5q*gT!p z_ABq|E&}d)QmH%shK``(jH7{jN8M*jKAhpBecwvqEWk*a2-O3(OQ8CA-cGV1M)Wb_ zZ~vyk{>!J)@>1VL2B&>8C#Nr|ZLhr0XOv3>MCJ97V5LmNaoGJIe-m4B6hLaH<{Upi zU(>%6PX8gXj0sop|5Oj0W%KFCLe4Dre@$)uhthvV{F9^mKTvurwv$imfX)Qu1^@ND zlLC;_u*=Po`E~4CcV@fFdd?7m)p1b;vpjY$v%KkWfHt@LPnxr|`#%nHLlBp}q(%1C ztttTiazeI9TF6t}<4FvveUN3j zxz_S~^*=v0FLX=v-BoKaolpd7p4Uh`UnlC3UPYEGyr|Hw>HnnN zsL>nRX$`L0YDiA8*pMn zen3#3Q)Ha%H~Ys(%r$I0BZEduMz|}NA~Z?c>Y8Mg)&J0SATD9aeZQE1rM>!N_9u*6^2Hsn)E6ha7|8$&mT{>F}gGHHNg9z zm~R8uen571Fl(-T0_1z++~x9J|D$Bf)Flp(J)YBXQE7IGo@6Z0!hKMb;X0Y32_MxYu>W4qDwPyV!IBneBl>-16 zhH*^6W%-|)ST`6Nm2SO>a?f%juOEgi&m$4xOEKX`U43R3JLV51f{o}una*cTCUOlz9_FUsCJEUI>UA0I-IP)bTca0n48K}0$nTEQWuK}uSh zp#_m4RcfSVXe5-BRuE~B92ymdZlvq?48HGs&gYzS{jTfle=@W8e)bb<-RoZWS`#9h zc5b=Yg`^LcSL+gnBKxjWz*5+eVNsYHE&E3?mOT9z@7Um2ElynSvEPD1i#*X;7S{s9 zUL+E-^hx@CcCc`$bl$kN2#yk2@bQ~>V~p3Gaq*}r+L$ws>{I3$RpsjvTeW0^`(Da< zME{bwD+!4ARLX*PSh#9eXY8a+WsoK{9@ZC zVzs)z+M%+2yM-nLm>LTc!jqLlMb(?a_Xy4EE!>$y|Pg($dgG>~@B_}eBNJfQ@mrs~aS0&21oy54YBwpLb-pzN* z=Tn&@!c6k01_%k>TkPMunkBmg_cn5ou<59axkhU^;%KB!m#S}W*rb@-KUcsUynXSx z##VIASAq7CrE0%{E-YeOBvn=ZoK{UkfxSmzYZju5WwA`LR(FIeZmus)pA%_QMz_j_ zis6iUr7pSU!!54gy8l4I^l%ttbuWq%mf1#WwpS-84QR} z`NZcDpHTqW1!gg10f70fOgSb&eQxG6RqfGXu*&KF(jZ|}jgNggOFn}vR;uzDg%(dqL}A|? zT{Vwn(*6CWxl$s)2mZm`Kf7*!8*WI0G4B^>V^dx=jT;h++;4}Oz%50 zjeAJtt9h=QwL`s%OyRHQxlOi!Kz?NWn`$o$m#suJYh0u5umeVjLA|-B;G2HOmO3x{ zvKq_w(WdtFW|gORwd<0Xe_(F+Ib%@Wp>aJ)C|?P9IiUyo6c(y&G9V_sB%^5?aQWd4 zeh)pt7yD4hE{_JrzaJjM{lOU@1(ngv_{2SzEW~{mx(N7&H!NIB%TFe&X}LK`Y5I>z zGaF$k@K#NUiy01+_iRCFvYiE;%z%%Y%)kQSN}h{!dG~d!0|MYjHbOXf&*kK3kpB{z z^k~pUB{MF$aNPa}Io>Bl_w^{hMB8Uvp|QEObO`G33$_){!|MucpGbUzBE#sS)LP^f z*~42x$#xmgYmGPl!1v9GGkp><8t5hpGa}lpc({o` zv>}2S*I;&A#()=@?x>*DX3$9t7dbP_HAjom_)FuiLagip}L^8}l>3q+s$$q9;iM6NqK z+-9n?YM(*(j*Ri&USha$?IGXL6RT^0{kqAD6a{Ixe39M-?S(DU9exnbR0MIlD64`% zLJE&|;xYE1Ywx1sxDYvr%>d>N%-FM|`X4YR zbNK>VUi|`KZX6sW7%Jq6%2Iq2i7ZgHrJ+ob`{g4fhU>aPbr=xK_%%P4= zOGR|vf+fkBT&P5wZuR)CwmDryFLqe(`{eO-vRaV808hM!d*WBZKYW={G)hbOvSG!a z?FE*p?nA`22EcP%QBR|qNp^fdbw&SMYfx^Cn^9XT0gy|%=cIUEp8&=*QlEXzD&%&J z!uFi`lnn1>RM-9$z0tRzTMAZ~uWM|=F^x@#t6&;01(69~$}Mg3e5d=itMDO$7>)ce3-ByVCBw6Nx?l)4V%Jo;2-x@ei_dtJA#w=lTbzUs ze+tx4^d(p5Z%yz_5BU@qGsO@4=m1yQ5>8XDup|2b2%^rQ_RLcd4{PJH&i&M|g*7dI zRo_gPH@%&IVO#>4%fDL|QrxR~6X)zDIG!I1{kaO5u?PJiA>Gw{FAYOgTxYa=sg5Tj zTQtS)PY?n@5W>GRe^l8V5~b_<7&`pWp!)^=_DQvSL_SX7dB)I`dnOIx@N9@M0Q|Sh zb6D~f#e63s9|vq7J?V8LaWQni_l*>dV`ij78jS!I{+*F>+x2->zUo|^dZvKLH^6N# zY=mv>UE{ck47&#IqV|#!meRfJ`TqONGHBpZ2jn+|{Jx@-I9P74T?z1Q&IdDs;}XE( z?*ESR?EN}Jn)7PnZ8*vBoV)On$3;8Uq16&`j*v5fD@QqqCzVY4BE*qbVx~d)b@nF7NkswW+YMj`5@dy{MOs`AKQ$T>u7S!#MwCAl1OE(POxF5+OG?7Q7nm$qRBK_19 zrseg^V^iC7G`{dr2rdO}V))M|`axXwE&A{2m zKU2$@MAz+4oh-H(ov!}~Z%kUS>-7+me-3E=Guao#x#VMVpRXRQ6fl|HNm0MOH~z;z zf93=Wl~O4(`5m14?X9!oC`}gS5Kz&H{X_t)!SM9~1>@5%U-&LOwRChH$envd1=1ZL z=YbP9UGCJofK?Ya1y@iAjmc;VOYr_6N@LIJX$V@Ex#pr=x+x_r3V zrRLzM;Ur_%Ulx+ltpCXj%@U?dhHlTws4~y_oXZ*Dcb<>gj$^kJOKEVP2X|Am*&`s8 zC?h6C|0)E0y&-+W_LSj!-)sjX3>=`k<@LVlt?xO!h z#=B)tkpCC%09mA zZ@4vgsEh z#pk z@7-+bE1H&?deR;nO4*!;Z}d>>jV?9z{7U1~!zB06r!q?je~iSn7HP~)na$0G;;CNn zT`a7j)GVLt3I1_w=b&miU?Es+nih6;%IjW;0=}}={$$nB-`*fFmtxU8SfS|>ddPpS z&?AiZaMSVhTa6s}J7hL8bCDh7)eG08j^+zMtEWTnEKe80l$9tMi3sHf21P*Mw_QBA z^D#;om-E~H(zp1{NbqYYKI*{2VQ{wRN#Pazq;bfC#?`G2Y*v}G(Oc?xe?K>0sl#oZ zounm-q3xsQ$fXSmu8hKFf-Kcy-D=OQXoHsim5+V{58n-0P?QgmS(K!1xh@QC&$i~x z9I2ZE^*J`A_hF5->2#-+w3sS_3B1EZXGoc6w|3S1NW4x1m1_lB7L zvz}7Kk)9j^TjMTV9oWi2>hg4G=uU-Gxn22~9A&&U8)|wX`?;sQhK+OHa$>CML^#3d{-vTh?lIY*Zoo6@(MF_ z+pA%?_7T9Cm#&XE`DkiEk)pl@9lfTY8IP>ACVBWT>ZBKgP6~GURSt-A92+$^Q#T48r4Q}BM*ANl$Qb~{#8p*Y}eFbic~uZdXrb8<4V?m z3dMGD{q{D|#;(uuR@z~b<%NNjL%!ohzPhyC+FBq&dQ8HKDyeulbfIWH(VU--9DU-z zYThxHU3VUi^9mXi&7C1;K%?UCeb~#Cq5$5vG%8SZ`08NtBQx&^Tv|9kO-9pYK<(4v zcwcZwFV;ro{ZdjPE3!}FT=~mK+ZHb{!l;h}n|pD`wHQ9b;b9SG-W2^yKZi6(O%2hA zciKhE!c*P|1W&cWDy}nS{5wuRCF5o1>WUv+1;$%c^|PWyurYLUNhI2h^z@PqOmj=% z6U99XDO&vWxv|Dnoaj##KV{Uvvf+g75m#36^j3IY2T$#46Dis&fjM81LhIm_|GN9u z2EXw@ZcwgTz0;LOpAEkH4gIc196Uc5%qeKdQIh*!OYRG0DKY6<;z$ze_zgfMc)r_)E&E={$a6Mk&J31rbL%)r-f$y(t|2_eSv|83`sO*@&qbT6zMWfe z{i<&J7*saaZanVBdX&$_J@J@KQX%y||8bS|0@~<`D@7cm+nq45%XN(eVPPTnvW}%Z zy+KPWpBfs()SedyUro3a?dl7Ug+k$aL`m0_*H)76Rm$z4CQzOZ0r_te{J>n0^*V<3 zc;iCZ_}5lh7DhRp-=UITH@S=VxA?2`EXw-8*$lpqz6NxBPu`>>{%ANJj?n;RpYIOOF4lz|s&)H!bQd5Fzv zfd8Cuw0#DxL*MojfAjDVt;6&KF<#jZPDv%iTZR1jl$~rLkP%Y&N%ir@TEmf% z-71=S#~D)#C~yqRVw;ZY4YgMxQX7;oIoWhSLST4@R}??Y*hb4}Zd&=Tq3VAdg0?0= z!e`l?yC%=yr?RDeS9#*4Vq3?en*&%`M;*+M}0+sbE9^)!?`o@zJJD?pvuM0Jb z!u_gO3J+4*c3bK57H^ep_gd`TU5!I;AqBN^RgOt|n!%E5*URz?$2Py7gZqBE!}mV; zGe>93opu(k2bU&&CQhACF_Rr6&b+5PsHv2fpnsTA-tfc@Xfy=cdasu@G*q2;mwuFsxA`CIs|a`_Ad8 zzRB-(ljpTw^{^=1t5QZ&;I)natCMbKtvj7<#E5QjC>IaJM!eEXRCaM_JM;p&-v7f$ zvC5XL=Vfx~5?+t1v*uXlQ!JlvW&iy9g6~g(7-ovcf1_#7eaRB0v*}`W4xWCTF?GCB z%zi`URk4on)OHecy+0^C022kyDp?+*SH=BK1M=O1f!< z{jDE<62Y72kT#OS5%pYG2%9Gt zya-r=9v!Wj(w0iA$*f@O>!U6H3o29LQj_6MP-MPZK&s%J=C`GtetAP6 zHryWCW%etZ^5_beil==|b_*FcRmJy$-x>vZscn8)ry(%6EB1}DT&0V%z8eYp*Q*eF z+Q15+C|DN*Mhgh)pR?FNK}Her7Uz~moRtipJXxzySyf+!dEhiF1r{%=(l>cSY%eD1 zHI-B#as*Zb=?qs4nTid z5`glL(^jm2^tm^jh^6hB6);wwMnfrwzj*wB@9Ee&po9h6_mb5w#$*EYG17rpN~x_O z2a3Dsv=#sAtzYCdm(VZoNdbfohD!{RNQ19f@+rRprpr+t)y&SZW29_w1y!2t?CDz; z0SpGBNYcY~8zh5AuE_#=zJ}U3Z@XN0HkEgx7Jld<={wTHm-zFez*Z8#eP^!0wg^MA8ZA}rlP|1CH?AXuKem#NDHuW442JK!C zx7@N$_lO+RYFn1#9Or!FJ>SI$E9Wr-)!v5Ndt>L_P4Au+P}9)kzqCZ&SPTEz(B$@qX!WzqmN$QJV#uf{@$R z=)7Qo!AQH0p;>(nNab%xXx|0AsImFiL6e}|t1deFYwne&fWgHsj0#LsM;Y_fJ-flT z9NJK{F?#$spgd-yULl7%QFzM5gYOz6*nT9Fd+Y0@$7JYeJjDyTAQ$bxLCzC}0n@ zD9Ukek|bDrlpu>gN8^o3f1^O(sym%*0R>4`Bqzyr?E|J|RpYDjT3DlcRPwVU*C*Ru zUT=R7$nKFLuImi3VRM!SkD0c?_DSKj^(Ykb6tx~Ks979r%KUIC=ec?>=I*4+^%V&P z0Nc*O%>zKP-58B}bq6?68uF*2hVdxcYwQZozPA$5_a4lx$#xk@KWZ9doue zqAQk2=(w3!x(H6swu5dZ{u-ry_*2-R2I=&=*pUX9fX9WU2C5D1rUp~g`?yo;}<*-&|W}u+(ibW zmRMl=h{Mn5+RAH^N3GoF;Te)fy_~IUpt8D)77uI}T#*LZ4J4OioV!X+ zp@e~r?~ysxPHJE-C#d#qdgU%=9DCQ|y5@?9iDtuLASbA7C)@DUh!p;#o9pzUh!c1< z@Pw{sWxoV!IuKF8d~G#C-~|=zr#Hle_SIPo0OI8;{!lM36(-8Kjq$54R=Oe25>iDn zET6Is;9g@8>v?u#+)!}bfy~SqZ9vZ?G=cgREXEPlu?C8QK*4;edo3mGrJq#J-&%k# zCMTa2yjE5|h~1szD_G+$v|A3QT_u|n4zQ*;r_LdehNgV9cDj63%5!hS=}?0DY*a(I z$mFeT#_I6rJH##*>h^#BRIA(12(pFqZwCdT2*u1M(QETTe6<@*L0#(;b#CILhIT|?d3sRyFK8FY3Chk)3^N_#GHv*->x;h=v-d(a%5Lto2rqGD0A}#N*Ky ze&D-wI5Whu=rG_R6x(fM^mwtA7m1Iz#Oto?b^nyUYZ>LNCJ|0A{-MQYJ%68r`MC}zKKGvEuU2d}+BSS6}L%{>qTdCLwo2LVpRX!NB= zhhMRvT5$AJ*{I|woErEGJPm5tIb0tJA2!?vxrr)S-~<6*k`20hHXgCg8P#|w5Iq7F zi8J;+$&daVa1AC{GeO?00lT~s2y-uDH*0JzOM*uCxZfBMQO3uqNH2Hd`rtz#86Z;+ z3huyyB;LL8bD59POY2Z7SXc)NdVt{`|L6NiT&5GFC= z|I<-{RuSjn&Ou&}$n2R2ie?mVfp!W*#qPgT|b%Bs~v&DK*t1r zP+oa)v7~M(>JHAZ;{EW%dJ2uM{lpczUNvlCiFl#BaBq;WR}e!io$kBvMRp%F%ir9| z7(i^xiwNW!j3m9Pq;y~f2YnguS*>$zB6jV1B6a?;b8SWmXnWu_RXMbi-dlgC%8?2F zL5jD<_g~-KSo;YYK#AEiW!Vyu)-wf^hJwsUQ|?O8n+QJ|zztG?W*GGQyN{SJ#?>>!7zLXz7v3g5G1)BM3BEjh2E6UxrBk^0nU;m{0GKl*8>5 z$Y(_v*oFu{3k1@t>K_hZ7z7gVCJ_0{#Y7qcd7W}XONrZB5Y}^)&2ygvfE5%w=7HjV zUj-sh0uAeVj)w=4c0bUEUB>+>;xg=V8UX=5Bw+b>C8&=8|LAWbIVFkC6G9*(3yzdv zmw{jCP{$3K4D=Q$>7RoB+c4=V0z#{NJ`N$7G?u&R7OQ-m#3~;dObHn$XO~01iu7X9VbjWqhpRD?1SqFfhlf)$$P zMGs&dOqIx)d9&kBU!DU)aa zy$|WsfqW_+iwp%!*;2{(S8EFU>RYh5-?U)mQKU5R)EDi=nub)VYkGPk8K}A?!R7`2 z=QQ_(jcadYN+LPmHDobCDBv0I%E?|mX9hR9lF_T+f*}NR9R;=FJ*`Rzpy+eHjin6_ zam9<(9~R?lL3AwPV>k!46X1*c&IKN+4PT2kN^4h7>v@XxRCe+4ZSx-Q_^+K4$p|=! zcZW#BE?(ke4n?frFQS43T;E`>Tzy+*w-kl_Q0vnffq$Ox^<6Yf)1}SORE0)vaY-QQ z<_AK@kKQ^Gx}zx4)o!}s+s+OjAGsyO(P;U9rT#wEcL|cfauKS`7E{moDvJeJN^DG| zH!`zu@!!0Ck@2_UXN$}RJTt}b1bt_{AExeFv^YH;5 zSIza}v(h)C;2#c>l#r8vchHX>JVtjDzIp1(jb|6g9 zBN0>Wp~ONX6U8>qxetu>q89#n|C?_qX1T$Vova}iV987v50>uh zx7@N>59Mb8qmiY8w%<~49~A@vPKGjPKd(=|T}d$V=CJ{#c6tjR?Fc>oyrVTyKpO$h z%uatdes$n?ZlxzZ`#b?Yy^vBU=a(eBa{33ntE9Q(zuMy^skshnqaKy;Ol`T3kk-Fy zomqgyOipQEa^!peX3!n-c7RA3XNfcG8{}ad~hH2_>)97d%T#IKH;VL1UFK(H8 zerE}HyAnKT7_gcIS0NX*U`l~%N`#9o1|~@s{$ew(_Rqzo8pN@fuK3TF15QK@$uo6{ z{_l-pE77cC!^@X0rwm1-59-{N_%SclID{CvZ!vN%!;L#fIDQl%7Xs12I2pJ_x%|q95g?bi@lM)c}olR zVy-4$duQHa?cjlv=mV2;-CcBR#ChaU5->N*|LfU8sMGNW(ig0&-a3aj->-(W^DL*J zrfaco&uuR+9&~bU`-lvQ^%y_F?CBcq`md!;^G%RmD9Cy;a#}|>6M=uQG$8q3^Fqmv zPE=VX(a+~pH%5&-c+Tz_K2fvS)>m)v%%grqnu(TF3#F?I-&PRE&8zr-U;qDXAGbaK zdlWzapA4dx`2U#N|9>MW5%u3YCl`97vaAH#rD_w*c9hy-EHv%qr|FlIYgR*@L=+rr z-F6MP6lRjI9hi!9zuXYG(#L^LMa<6;%20fT;8O-8@xjLW9-!mGeH>g+dST2t*l=*{KA^)MSR6E z)B4-FxHBVnSE;q95Od^gJAt`08{N)RSkUHH_jT^N*fCxN)tRmRb64pp7PN_hk}M2? zZB_N2omh3(B(@k0R*QRBL2)}P?N%e#@4e<x?V|NfVBFcp6}3Ge|9Sv~s44?w^NIM2X|vsD2nSLi9gU(U?> zWiZp=Jul+m>e&G3NpQgSUBh`CrahZhvU50_``s7^e8C3*9KFQHLF6+R20p;ykNbH4 zX5b5nHVap*g>Vmf@YG)o=e^0+ztm^{yAc-ZxyX79Tt5V2p3xxTy0=$xMc1AP^7ixd zivVXU_(vj@iNHVt?D(B28y0={KnVG)?3$7nH7Pl*AP$ zY^jV5DouHugtqwezz<=ZdW2wNMZ3V+yZo)HbE$ms~Mc@pxs;-+obg|A)avVHu z?*620!~tXSMO*)Vx2vaxcNf7=0uj&?QNS0T{>NPEQo}*Kq5noP&Zu4S6>{@yRDVH{ z69xRRcw!h6EwLz4{!K)SxXE_#^{yxjB~3*3>nAU1Bgm1tu4M#}2R}Za2aT*VaI+j# z5SnY4c2jkZHf)KiW;VQEBJK^8l7_>~^?^luPxe#B%E>pucq62g9QcRS(vy_rKYOhzi)aL>du(I|tJg z9mRuiJToBxsG--G72Su|);=9`iE>c4T3c^|TQ1J_R{yie5>@J%{ zYjlmWacRUso|@+2EjObz#+Cw3dU6W*wD%NVKrFc(05IYQw&3Qi;}N<0zsi_P4h?5M z?*A&G18aWjNk_@va^_BldbD71wHBuK4C;Jwn1aBYg;3?i!cLQX_6-Jd1sFoGC3({b zFY|v4QzqL5#zPy4Zq%=*>tr7c&HA-yaN;5eBDuW@=K&!vn(H!@<#z|)+`Bqf;oN@< zJuvc!C?{qwBIG(c&^`T#-n25-f3iR(KL_B?>;W{j<-^4hMZolK*%lhjwJ9~QTUX*;(8-VOHB3EWpW5d$!bbG6;03#_9l)1=jmNnB*VQX!n77c}UQDz#KOi8wmHyfP{)2B)>fWWGm&tA3ajd#uCXYTG+;Gu>uWIDFgV%I zG*VtA$A@p$KlMrvW)J+;8RS!xw@+jMlMzAm8}qvP`J0C@EbVT*XkgwW@>}=2Rho(r z>2nO0bQcw1a=}^Mv|tH!U-Ugt-|k&vQ(4V4>KaaVtf=dh9LqgiiP1E=1tBB@Vd5E> zJ+p&vKZfR3HOCdYU(0QN^0XVOn~%Cn$=n%})do>!Fe>WyK$*iG5v)d3>zSK{X z4f|O)q);3qXEK;XRUpvZU~*;=f1v)cqm3WBk?KYrxQM9zJ8GR>x4{ntbD^nH`ZxBx zL|tHR@v|dTe!^C)3sg7tVB2Y|HW_+0ylY#HZXvQ~R+`1-A1nRVi3Xm1^hna0241)| zCpPEUeb|szW{z#5gny}UPWf`~PiS=M9|J8IBhK1x>-{%DFvGa688D zl`PEKUVm$h_D?J({*RHjTyAR*4>`iPW5ah}#9goXnWYPBL!4065nzKRyEU0aVt6UF zHlzKCvJ$3+6rkvViixTF`w-nl9IhvO{+lM@7NJ93Z#3x+ffMO46^qDH(xhI#_UAp={`DScs%Ro3M|lgK`cK@qD>V%!QuqeS zF*S?gH(Dx;#_GySZm1qdUxt6NFc0dX9Q-s?9qagN73;zCQA2A{cg%lfHuXc6SJy5L z53niJmB%$wAtvgce-UkegS1s9mUnbYOjcRzkMPd0z)igM9SN?oT#R3>sWN+*8) zq7h6kM2S(Tcwyz8N9!}ya*@)GqzSDhTHCvnSoO3Ys~$zrd;}8}>Wr{}T>G~dfW`i3 z%YFC2hN(fli>JV|)cA^&V{kXpCU#8KOR|vxE*ZwJREX@GJiTss@0?l2B&U`BqV?p6 z!#$|7MEqCmpS^GeC=J;d@@AaYgBqZaR(vF|Mp<&9Z`q&fX-&y#z1f&;tZV-v)MwG$0oA-R2abA&4@;e$N7V(f9RxoN#>cY zxAsLz%JYQ(eB0?Lq`X|B@LMLiUF{1rX|r3Xkz5ZOGB^J9`wcz_q;J%CDdHfU`l*y~ zgysc-zXxMdKyb|Apk#zjPD( zsfa-r>|gqj|20`J{*R?jak{f?xOH>@0C|34a#e6+b;IwXB_Z6Z$@r%X5%m=W0aMa? z9?1!Ub}~DvM%+fzsTdenO1I!%PGK%bhP6vzI|OhS*#6H8L|K))8p<9S0JmV=h%!I^ z#dfPQ4%{@rX|1^bKswRw-$CO;*-v4dN%H_}pH1I;7WB)Ye_9&Zi!J-!6=3n&SvkouS6|+HJ`wI;o)4zcH$gh zrN2G=4EBu4lk<1)QfBd0b@0#(MUZEF3At~Uay)+NBeQ!57n;QF1Rsy3@XxkTrIm}_ zJQur7%7~DEopnrQib#na!R$;pYJ9p=tSNcVo+QC-Ao}i-X^U(7JTmv&npIO2rpGq5 z=61h`hoI(++hXa*Yg)VD-FS>0ss`{_RQ|w|n2|4b_C5Kx7YLGaU(AeFCQJtXD*8t7 z?(4X^lbc8VBaG1$F`Yzn%7n@-?_UFs_n?a|f=nZpr|xtR6U~1O4H|rqs#GAZ5Rrl; zX`+)V@!?&3{1Db0FCJ-IaHz7Xj4jVw#gG@d8x=p0LscSLE#hgUIa)%IxtajrlE+f> ze*mU^vNB;b;)cXb5?o8s&G3Gk5Y6_x5x3*(NX|MYXO&y}>S}8Z;la1|bnqb7^TjpS z2rDac27geu&AK#wAR=5u2}46>CJSDA6>u-?`a9}Prqz^uP^;S=Z4YBb*DkfMdKL0@ z&&+-JjsM(bW|+`@=4ugAFKM&*2I5^AW>jT!$GE1drBEDpSz7NL8I&Y|s6CWn7zS9f z7`RNrfT&;A;+*T#qgonK)_nHo;t8?9C!Ba|P6aWi$-?k}VX;+Q_-y`F_Ss{C!0%Rg zJOkctAVVd|gGeV6Eb_1uEHH${wq|}98J%3aQXDLKqpX9xCv>5mUoJL1V#m(UKf!R? zgJ!n`oD*vreh~L}*qE0yK{%oT;=fncU>b|uk2D1q#fMJ>{W4Pg>F&WbJQjTxG>ZxW z>$XZ3pfbb1huuPp6UQ0n$)jr2g(eQ0Chzl+>BEFNtoeH1SDg4)m9q8J8Gtj4|I!^o zkN1!7lQE}_;Wi{y&XldIJ1V4Ev_tb#V)>Ftxx;(tUM*RiD|V!VFP5`q1vD`B7(3G` z3Yv6>>TdO{R2Is!q6gT$h;FSAVxv?xMX_K{%TM4UQU=1m1LV&U)p$ypC7b+|7Cv>a z%(1+Ji33?D*;tP*rjwoS-5PGSc`aC5k-KvgyXAOCSS4Gr#(5|S3(pw~e*GU@*O>{2 zb@5yt8l&Peu5HPRkjW;UH-wGcj~|mW_BI=f+B>vybEtHVcBs3z*{-51X)0HdoB_Xaal7=(f8uujn05yE7tA>H zN#%qey<8OMcJ-lHXop!(7+CPk99%3e0D{v$vG{WanC6`fC2hZFgH!Cq`=?j20Fv2i ztm5XRukUP5{vi!MKNywM#IYn5chn-;qN77@+W}gzEoM_R*aA@ffBFLGHE6i^jv2V{ zky4&}9goXgw1U|AFLJ>0+jWJ3T&Wn-a84ae_;iESa)e7O5u zxvcL%S{vAM%b6J6K#XsFNx0GApDq8NGe;bjD?3r~l}8<09m+tNWgC!p*xRCHzz+;Yd zTfVNEEnMBNaOw!|i_F!fRH(RMGS}Vf%Eo?6xXr!SaWE3&uYFf!7cE6+ya+u zk}s|Alw2VL;pV*p=#f!dbd5X`xUVdw zW~p3msUB%3ANwAu?(x+{*CEF^r>t6+MCuY)&TQOr{-IP7ae-k?!TGcc1c9dH7e*0r zRIP<RhPiFTrY)11b2aRD~nBrm%H^zWG zLw=J#w*9JLVTzq4b`CyZdRl(+MMDNbzXF$ zl7w(Y6ZOlxMpvWh)hi4qDQ`A6P(cos?))d09>X$O(H!3F?BL|s=AK+(=+f-kX>gLy zP|V#Fb?3`;-z_xYao#6-=Et>P9qhg&lrojn)8HVfq@<-+SN{Tu|L$)*fCn)Lw9^?m zMGVEyXMbT+F#K6Q&Y+q?X^zMzg9v1<3 z^j2(hACaz%jZAemK`1qQgHY+~{4u*6D#0LyaA_lcYukkva_qKq?LSfi3)GGYhE@!Q zPXQPG?C8nIoqkZ!6B~Vwc$1z;wxb>JXEza-QW>~$k z+Z#3h*oLWKE!ZMZ8UX%4V{lX;=76L;TLxb!^rkXnRTw8-I*kqtLB-Xe9?9#Gm7li6 zZcL6KhjWSz3{H2RkKR&#ST&&hv>xs_`&K0OYTFg3q6`)&93D z)3A~g@{=q=(bU!(!tyZfZP8zboW=dy3{@qJ^HdIxhL)<{B8p)j2%9@bU2C^|-&hzY zViF_?Hqbam~ z&x^UO-O%z*=v(!3iS3yu_GWEOaE)1{a=4bMya7xp`tQAP&TeuE>*kp(zilaT>_cw zH6S27#{kDnK9logfW~xoY{e3;VAl`sj>#@IHmC>m{>E7Qo}ptv_Wm`A9M}6e(fBGy zfMPsY_4a#8+(!gegw@7Y$Gpav4{5e;e1yeztoq!xggqQ9wx)#>0XbQtm1TL%TYYmn zut)Fy-#H=MWcGX*sl+^-=`63gE>y`sa6<{US?0_>7|ZVcexjwB7LJ{_tqIM|b#8>k zM!&1GsXrMld%uj|N`>T9Z2F@Mxrzh$e-If9`d9CRqdNEsGU10n-Nt2j3gaUIv3#dG zhSS|I>|r|w+7MmVb5NU1<78>k)T@BxCZo02_DRm&){8oAHl7x-leC$e{w!29F`TpP zDqh#%t?j=oih~XS838CN_(7=#+0IiG+XyIzUKRCCBVx9-q4@d845W>r*|*o!wk<;G zqSCYsAE|bJwq$gMWo@i|O{2+L(-f|U+5n;%;Zo?QB>696kF@Nl08>f$Bvq7bRDePCmY>cbMLbd?iX}bnA3eWo%+G-L62#) zqu{bgO9 zN>MQbe3QrGuv}Im(*H(#lY+?J2mVxO{_#3h^b4lH2coUVf|gC~1zdy^HT=W{%L3E< zT{`|HY;0pyWw|#xUEG}<1Wg*aH7@og1O&Bh$aJ)A6DgX#dIKjUnsmWH(95t_NmA26_k zfmqX1Tg7$<>?(RaSEVE(~r>b64#yPN!XUsz37cm`1etf1{sK z_wPS+M)2OQV@BB~NYa&a7xPkLFsWZ`ybg!EwNB3)6vb(#3|fsC)ITa89I45UP5Hd_ z6F?;|iQ|s$As1_&Zn`ieCyu}j09CJ_vsDgS?}zwr_0a9)2`_R|W~sXETFJRxV+&ha zY)bhL5VJ?_rk*YSAhG^fy}h^@ksE71QBpMd+dc;BXT$rXb?4n1SxT+#m^fk7v^_V` z^p67Wsf-YiFOjJLam^;;R3+{8LwOtLhA6M|@D4#(GY47bQI(JPPSkbnd_ShlqRr-b zu5{TaRclta5ZWK>i{tVaeC3jL#_ZetGyNFmiLa}S&Bkk2RL{I(WPb3`giNDOAKLn< zH)7!WvY_S?cT11uZZB;iCk1-c+MpXs))dP!7@a3zQboaMSc~PQ#++{UH^V?}m<&=APtN2D=ZA zx)Tpx3ydl?$SpHI6@PcfBcsNNqY#>(P$0g3@_@KwDRQ?&nGX*n&|tAIkZ)SOU6Bzs z6YmY(+X@p_r*V{!K`Q0Z%-~DDj`L7-^5|E7TLZQPvtur}xm71-xo^hSnbYa!z55L}`wZ}*8~NO^GGRu_Xr zu&+$IiO~+T&!wmFKY0vo<0y}w*k;*?HQY2RO0@3Dw;pKrw$wGqJHW(SF(ISNX zjX06bN`^!S4^ftx(}ZKgtT#!g_WN!1xgx%MG>93D$a?*iw5r1Hl!mEq-b*fsNlsX- z*Tm3+Ts=)H7uaQ7Y$y%O@-pe~ejh9Cz>c6-$uB6XE^jX*=2$!M6@PTsgJI+?Wp96| z=YEXnT!(*u)mAcB6?)Qmdf4rn9!R_eAO*Vak&FkGk0|7?^AnRz3zUEJHK5U3EV+Y8 z=*gZVtaAvhh=e*hUl*)GkKUn+Hq)4DmGgHzpJ$dTlGU32&81J`{Flmcje4~p#;y8! zGDhm;=b4z1GL4eh^sd2HdhTg*@qQhDNBe#BdqqXb%8Jov(3I#C+SC^vvhD@hm>_c^9S zB4o^vxi8Yvy{O>up91=mQ!B$|PEn+POvP&f3ixaG(VBvL52$tG@rJBLfRLzlHh_f% zO(ytww1sDtCz$vmMqFajxrD;nyw%bA;p_yh6af|7tEwpUgZ-VD)D? z6&aA6tyD!-=h&`iLkqde7y;{M?jlV=A$@%xY9A<c*lyq{hh!h>tN8f1s z+~kfFRVahQEh}$Z-ZJ;ud(J zEA35+n%#l+Y?pDb<1PK8_72~326*+I5_a}ocOStEdE@H*DD_cG*hoD8H%i`&WJ>Ic zD_zMQwO1d&s_^#M+NKyL#Eqx=N&MpOz5mxsIL)tb*bC7QOVh5`Yu$3>u5@=Ead`P) zf6@TO0KdR_CIkBs8e`(XA&hv(!`kmIqpzyIO8-LBKNitF=zJ z-jqs-<^67OA`c!oS4ka<3G8{6(q)d`RJl0^bQZWhii_w#!e8+;fQ1v?81rPzy^FLn zABZDKP)sRUV<*C(hj$kmIrH4#SOnsIvDB@2D%RtM5%<-pHx19dS92UZbdC}mQDWK| zwb1cJ9bsmuix#Fa1j-ZKOyM+9V9Wux=_y=Sw5?j3VrxoDH4>E)U3sbm6(exexTyuQ z_9Hm3?b+|RRb=0NDu0-MO$sIu#O-wCZvMbB4F)hAFc z`II_~AV7o^GfLj@vgH zlSf(EjNR$rEvk&a=w8QMr#gAKxs+KMXIh~Ja#VC~sV19Jbk;ZIe$Y=kmh!~)ptn;i zAC~q+Q^UXLIyg&gJ1P~rwelu6TQW>!2=e44DFcTZ>8?N+Kem%7~#pVUbtdYqID z>1)a+wq((k(T~$>PDKXzZh{<~*}lOxgZZYPP$=z{AS$?_KPq1IeZ!eX6DS@kFFr{W z$d7yHqoDTanpVzik=IX^-ym6j(}XLevcm?jMmYT&F2rg_gAvW~_Ze=1)T{W-vSFUs zqm%(?hi$AWEq`$Jg$w-!G;baYY;hTk0}6(Qm<;fLl`eJv zA8B764|UtVU3c9@C5Dg|H1=JDgoLrLV@a~5EM*NLdr294#@M$EG6>oCQ7X&WvhS2N zBV?>IgL$uUKhN_%@B4fId+)!xKc6x4UC!&g&f_?bfH{q$gc2_`;N+B*!sa z>;V?Fi7YWKU1i$!yaG#Wb@Wv6_iu3obSARyGpF4D)hholk;(s~AD=33yPRHgrRzF! z6v$8d=>fa3dh8g}O)4|8@#`PuppQ$JO{@rp9g9(am#o#ABq z-@l)1VS9N7tfKdTQ=f>6PJs;C-1l}A0Q)-;2JoK5f8pq&yt&ogOK!q^vi_P7xYVKJ%YUvyZy3CcJ9m}-C8Io! z%KIz9y*N)}9@zl$sy7$2l&<>-fIoS$;H z{|B%0uA9p9B}_R9J~CZ89?owkYgLuBX^wQ{(}aMAw}S8g*_S)DOCPZETs8UwowMyy z(kDIf$ZunyMPfYYo3vD#y3rfA;7*|EjW~u{Vecn)ZhM-t><|r)RC7ry>Z87fB`A)i z`woX=voK~ojgeOESJOv31rtdsO%a#}54WnY-b{|D z>ri>JdgKJ1BHqqVUjAqY6luL(7|FN(+3!zNCT1^U(uQSg7%0>L!0hrnHuka zBtl`nF;&FD$U)Zfv$lmu8&0-lg!L!WXcJ%V`PSVAV~eW621Z^aYGnvI6FhgRY0!-E z6REAYS4>}Ep$%6wAIWc)$hy)99-!CK+cRo^ZgoF8peX)W$U}1f>VBlX5bb~K;p3bu ziSdOMsE=kd_6oNaFvJhe9@?StR;SGoAJ9vHv7#>SBmLAdh*a*&XqtGMlt&f>-e%96 zz5KQ}3b-UwhS9h_JJhRC30zv;zShu!e0{4~LI`ZL$f zi3|*sIHbO|E36PMt{5^)P(Qr>GR0c^b@9hrMUrTb>kcrYZ05c^+&!tC2o-XCk|~Bh zkCLfz4)2>%HGUrA6=xa2S&;yj?0$y-J?=2g!|>n(Y!H!zJVE8(fs%4o?8Gt1P$Z%- z#eR15JMvW+@5J!QK5x`u2Pm;rEjyn@wM!(~E?C;JCDP&Beo4Mf$A9R4$T;Q@xDM&S z<>^7|XS?1Qe$_ThkUQOIcIULiR8KS?`hH0M@4Flgh;qw{O25F4Eao9g*5KiIUs-gG z6Nfh8fesloeLTPXoSSeI=e)>n<*G^y$%ly638-{FN%)z{DoNWoi9GarwD{tR^lEx) z@egYS+k^`UpyLE`yB8e+@4DV1`d^2ys8~E@G0A4%`Oad3X~Wm?xv27$!87pFm2W37?QA0YNE3~3tnfa~ zK1(2%|6-Vn09rCLd?X^IY^C)0MTX?Hl~=5A39hjnzuw*l2+Xj8!dtaZ7pfMW9n4DB zGatS)a~%OXwjqqzd`o8D?*(ZqPkvKf9)_Cp@XNTzm&?0aG1^lm?*)7{ihC_=dfm2a zfO4Gk3sf-1;7s82azqy9w8%)<$6Ofdk;mrMiSjQ1s0epzS0MV?PoDpq-S`|m#9bBT z!eXccFTKD=PcGf-S~{6$DmqF zH&r0;@v<*0aL@aU8=!qBusd)Q!N2h9EMBC(I4Fsce|SV9x|ro!&6e(#WOXN3qe2P3Y(BT4oQpk_Kp1I-O3*hQ24-B@c|1N$No8AFYhqsq8&Pm5%# zN(j$b#gwTFs~a|PJCUMb*Wf+s`C>Z8-Fw4n-F0M+XtTNqMb9T&*+&lLpmsbG;SncpSWWtt#%{=Wz@{CX`LS{? zrg#neqI^inn_Qu=d2hVCp}Nu4>D8wtw#^jY_XxqTNPel)wvAIWD7z;sQ>9f7DnqkP zV(Z%1wb^_6BKe!n;~XFK!=gl>tj+)GXTVz_{xBRh-;l3ZdFGqOhOCn?v17s=n%F z@?6Q}OUJu1Y8KMO&+*WOTv-YX&r5=Ad`q@EO%(P#r8%@ME0C3+`R1Acgjv2s?s%Qc z-S{sR;qKBVgCE`pogBfaqN-8u;|sFg!suHedS+--Nk#vEWg@-6?74`32Zz@~V_s~ztM)Tvbl)bdo||`M%{N=o^;Qka>LoV%dgR03_ywGa zPw2%@@Lxu&^?Mv8s6$nhru?s6Q6j;PABub0oWQ0yeo&1B03VAg+8&7UyG-<|xti1L zI=LZcKzVmzu-C`A`TG@ki2!@c$@s&Cxcy+E@M=ZReD<9WeOcmX+CPqAW_EdNw=%-x zN2T;L+iaht%Q`oleWMWj_k7xdLK@6?klOqP9jH4nFU33UD%s^l7Jok5=3UBM`spbN zb#8&htY&iyK!$>nC5D>~=>3~*wp~Z2{yfb=Ztqkg*9bV!7sr+M4!SFUPd`hacf0fkamKub zUA}}|#|bhllls?_6W1H*{_2$;-wa(TdFjYTWg+`~v1fXEyq%gquckUg4l4xklIl1~ zX56!N5AQ&=^m*QfA|fLGnCY%coGZtjAe{Km83C2Hy+AS7Ttnq4s7}&T(%F@p5aQ3| zBn<`q_c^;r8hJ?ePRi`F^!l{v^^YrSx-&I{WB&TlVLMhUJaXSUz8LdK+t04CkI3iO zc!sGODHB7wGaXv=A5UwG(gLkLCwhNh|J(PMg)R=$pXb5(HV;XRw+^f(09TVTW#JAn z9A`Cml{<6<^po)5)WKk~xy6`7cj1}&qRMdL;)7Fspf%dyu=D({!ts<05lXXk#s>re z`z(?HF4MDRu=Y;XxQcwXMlW=gF!J1bbLZ*-IzDkix{}r$9d@+u0J4Dhyw}->VW($^ zRvgEU|0+EWSrAV%OB1>A6k-PvATd@_U02-K(EB4QiQ^;Q<^-PY8$yjvYR1|4Wa#JG z{T`Dys;j9d;wV1gI#nhx`@AGsX> z)02D$GBkc%+@ten)pAhvqf;8%!IopdfBQ;5^te)C;v$bYm!Kfq^Go(HFH3cAhTq^w z&HAA3ud1l>M_D3+c87RmQ)MrrpC?K*9o48-mNZ!;8QPL5;s>#)z7?$p^D1#NA2xN& z7Z+bozrusQzusJkRXGx}h~2qQUV*!n z07+0<=xs$UE9OJP$HUjO58-ol1WR-V@TctMX*SY&^P08 z6vD@tR5(kO=GWwwb?VP=jg$Zou9UOt9N)iZ~S8pxiTCguB`;gu%lFl9gs{64af0_4IUEo1e#c8DLq;iP?;SwuV zRLy3IU6_^0);VR^a>EW#Ry$Sq>XjCyb2vAzZJMu|Ml!;aYP^rJe?TD3x_@?j8ES+{ zoVZ0AcamJSJJ{i|pKwPe7I_E-EY<&v(VMbS~3Ew8RgqIA5LO<}5ST0`S8fe8M{w~~z%R|ro9+G1Rn*$^TjG|bD%t7&6> zU#udXE3faG%TkS>5$3sJ9!q|sUft>ZZO=5ydV<+%PqNGTAz@Zs}rBi*h1KG@u@7>TpR-Nf2pN;l7;&4TM-+Jf4M=O|RrxkiaqN3(M- z67%B&5Z?l<3lbGT55N#rriv0&gW2zO_RsQmXF4sg5}?Xfbw3tdwLUhEuG=6+s=&Fz z3Koj7LE|DdAAP1#D?)VbNZB}*?zdUwUS>&EIBM7yv8s0w{k~<&No$z6wkP>uB4? zXRQNo<`L979t zP_Ij6q7~8ohce-akQ=-I^UqLh@YGNx7@Z~T?^&v;EOp`xcHc=l;r9c+GHK>!*NsjD7dm92ZN^T2yeMmT#PXEf zf$sfaI&sAD&#xW4ZwD=Rg=IB8vtN2YqEDHn0UlZIZ+T1J!(y4!V?IBL8P;l4%`^jC zfNd1>*Ed#<=q#r~%wts%9i1+zr24AZv&>vd#|?o$%Mz%+56}C&ukR9JHuZ`Xu@`NaD??N(FKW)Tz8h2W#TEYSd3S%Z(zy5}Fp3iG)!Q0DOk5_x? zR1K^(4IKwFj9&*uk z5NIfhtfZU*l|%Iup^m#CAPecD8a4!0lRf!WVrUZ#hzX9*uHG%=Wg9~3R3SEns-@dS zSm+Dd&TGL|#jJzdd3{qu^5eA&ji)h*^6vAi^`<@@*N6BYsVPX`djoY=ejN)!u5$*H zgabt2D8}1%M2%;DvfxKu&=gFkVBOzy8j8NObk$;2lxy#hDpB(Dp}J2Dcm}@>a0I@3 zDWJrl*-Fe;l=of>r`Jyp-2W0^70)40oNW&H(-j#T^t3+zary-RoVplgB`j7u#n9VO zGS@EwPID2s2_aH|o{Lhp3^j1IDXqC60;Hd3d%6S$y^c%JK=L9OnnkA>Wp&Gw6X|vY z(TjwvG+K)WI7cw;jD=HphA`WWh0-%AFKvq(G`S0)Ix#awSxrvNu0!>uN6(+lSWAIRLzsmrBo$|kQSCt(+CHDK47A~+Ez=Mp$5vwPZ#`|rjp zo_PSxRq6iTmpRR@DCK`eCL^48<6URk!!H~%1Ef--%wn&O6qO% z$3LJrsNojRV`>8g7}trVVZZNEr8r6RlQAq1=46qDOImCt62gunjev^;4A18~hwuML zpp)VS(0R_Hk6a2_Q|wsbfF7?x&@jUdYldTd4w2u6Wj|YPL1BY8pkTj1@Q)lne&Pvu zf^h~p_abEY*t++qMR^d5Ce|anEkgwP3AXu@H3r>t&(sL-In-3(r{7Is$ z&$)5lJ;fw;u+q#?bo=WH!|R!0={>0e>$5(=i7ppKuZ_w3<4Vb_tn7h`(NKI(bKvSTqEFT|5kEc9 zN-{az&#NHRf6du#+(c-nK;5?_^eOAR9E8sB%Lgc~wh6r7;@4jG#?9bHKeZCb-PZ9T z%8qwlz|IFS)MdYRo7O4VXn%-Mq1YTm*>syc99gn@>$gKN9_fK2@--3`-rWNZS6|a4t$Cc{MAzG* z8(1^3N$EiH!Uk)SdPlu9r(0jL&cqge8QIAs*7@m;t`FTKzgh}j?tUcCj*k+Rk<&kgGInAx&rTY<#@VdMNk%NnYW+_itOiQ6! zU!#Kpl7F#(DB`?-6HTTUwyqO_2qfWW-mg`7f?7v%F&)snKi>?`WHHxQ=$SE+?tw(}2l{Khb1pYVU2#bas5;XxRr=m9wXcPE83!V&c?sD ztHLpNh*ATLO*`Z!Z%_R{yPyfpop?CS0N)xBC+_3p8Wvv#>xVg&NCH9eYji^6$tXHlKYLw~8oaA($~hHgsIYFHLVG z(YE6Jx4*<@{!)cy>sxs+!+j3BiQ0!NGKcP~mLqV);HF%38u4t|agSN?d%Zzg>kOKPoR%u-K;@IC?3RtxODaOat( zyw@gn#A)wc-;5RQz%9S3#B;;c2a!!5!ZmGig7E^}ydL3^1kbqu7d!kzxe{+Vx;A#x zUu$->xHLoFcM!{!mcBW-I~}N@9JIE5(=0Ln%q7Y_MGF{eaHzDQk={H|Cp%MYeacQ9 z`*AlnF)xwH6dWbf0fr$3&Zk>>4|+1gcW3;{@Mm){Jbpm39W;e}Yw(2;&PZ7qmeH$Q zY$D9<4{)$Y#tU08!%LPz!!eI!up6nQ)cNoTBh~^r03R6f32enz@sr<6%f{e_ zPlS-MZvU5R=k9oU3G+5?B^J}dLkTgSYc(b?--Z?`{KItJJQQ$dJ2vf#q#@#OrFw|* z2%yJZ>K>;T4-@4p&CKv*@v1bL$igaT!@#K>*)2&f9HWFk=3(l$3(%bNe}9V)tf~7W z(E=N7jZ(EWQ#Cfedf@a+60OWVtmm+EcQcSEnNNL;yyvF^1JuE6h3gdm`rR0nrgjW4 zMnPE0x%F({h)HiT*f8?i84GYLwq<56n>No_OnmDP{+OVo>}Ksa`AtZ`}SKUTeFtQ$o>ve{;m@IgS_2 z4O32;?>nf$dP~G082c`mWR*%y$Lqohwnys^7x3?3s7#9nQuDOjZ9S-#y?d3Xhzs^` zJ~tAR#6kJ90Umywp0(S)a5EFzP-G|}aY^CurzULh4$N5B<&}9!ox$uH-KS5y*Qq8! zAo6dHy7aAIK28amBN$Aae3GKDIk?k6uj%a4XmQZeLLcPF#C{NgiQjG7{@Bh|btTS< zASX3wrpxQg-OTioYkOqnscb_Bm-TLOhWPoCD~2PkbU?F+IZLzkP>yAjA< z4+gLuZ3Zv#^`7rEMcswu;nMLZ)~|B#K}-Z>6vJ*x*3Hg`X(_`x2y)iSngP4jHCD^2 z%5`g*VTcIw;ml-yjnYEo5|NP^OuYe22$i%z!k=h^I_5Z&5~>n`=kY;`J`xOefA6H3 z+|KItKB-<_uUC`#?iPraK9|*r$GWN%1dN|yz@;R4MQnb2$qBbUM~D; z8JKyIh(ONeSpgw+w!e(1{6bdRU~@_keohc=yEtYIqGz+#x7cbwi9T}~EbbUSqfunS z%yZq3-3`>_t+vMFFcjjPiC-@8 zxbM-*trg)2QcbRff65ZFwK){r>qXJ%ulj@JC`N1d*vs=JzJ&;acP5!o$2z|Y)#ypz z8+(<*0EcIfm|5O^+|Wwhs@`;PD`@&FZud=Ck9X5+>WR+kOcfj0tA4v5aoOk)0~Op- z*aumd7h-p2%&wG!?KMJ6OSwY_BT8%HAWfB%fr1PWS`z#@Y9i>tsnz|f6aB(yi%rF4 zFC(6W;&ZfK_6eD8n#{`Zh1y2_3E`5PtFmVxJj$)sXrF__rJ0Mb5%oV~ot75TKi)j- zmeJpVqW4M3%DugV`hi=wUVpP*^<8|$b$V{8@=`SdnQlPvQ*2nc2F6wBTgxl1(qh2U z^ATy=M55v^pZU*=O+mrIeU_`FaUV$Yj1P0UfEfi-kqE=Tk%QgdR3Yl4In*5C_7`OO z1Wq#&%+L6Bb*%P}@wg|fPP99I&iExax?2^t9nXbh@{9I1P&tX3t}cTab7*hQE+Pz> z;%5%?Os5SKg|HdJdA=#pPF4}9{=s8#pTzCGZR&M+~Hq?DN}9JniZg^%>sa8_1?Br($q2-5@6)9 zRT+u-2r@o1ynIq*t;Z8CH%upCR!2z%4l!+wmUWx;RK7S^KVke4$36`t;rU<+?cblM z<761%Od@F59ZT=6KX|^FNt53C=cM_*hCh9e#M=!l}iY)X2$GI zG%*c7>5O2}b5Z~LNqn8U^i)!PG?+U!L8?G=n;K7+TLhb@J4NiRw@fsV>sF-HFVXyf5Yev;rF>Vl8F|_;F<7Wyu^g+i|HU+eL z2S?Db7~S(cAaLwn%q4Q+s$soJl24d`TY0PT?vo4fpxG^}PQ~4?VSH*l=q(;UL+|u@ zjVTB`Fg!n%FRR42$wFZ0{d4?@G)!RY;DT1uZj*hj`p zZ85Uo2Kf8mwTo7l@(_j-ZB+^fHz`|TZE6D43);2XC9RY!XiaI}1#Sc?I00(`!W>SM z_>t`nb?mFz)OFWcN-LNITcrs$H4Ojq#@5Cz`yf;DN?X9DlbC!SR&)urkPRwd>FX#I z0!bLUigy(k?u~zhK6$?%s^z9{l*vDU)H0e{xH+(NT^JaRxy&0#Gt+utyv4l+Qk~Ci zI|d%f@6|eXl`=OZS(dnT@F&M82NVafE(h~@wc1-21QmcFsOXEDML@qmHv3%X#%6jHy2 z=8g&8?2gAiyZ8oCPZ^FhAqJa=Cj4BgB9sc1ci6Ec=)$%QIandgi5I4MtcV+8;80YU zX1fmNruG*2-!KqkfJ>lS6{*wh6mUs$k~J!^MWG-kNNCb4fTX<`C1|d*kUWpLB(eGH z5a+~~lZXt|P07v+yCumFB;4!3qqYT!i9yEbLHXzP8dy^RdXcq|SBcg>S|B0F7k0v+y-1)c8+7+VJkZY^Pyq zIRnJUV6_201`smCs;JwS@zZjh8kncFQqGWt-p7V^5rT49qD;5#7~Z4o`$yp_fp~poi?nXt=00>-uOWC^QWMyTyds`A}5;h%IM_o zx?A9WJ2~mL|JH$w+bz;z9v2ww7RnPuS|s&lSxxSK>Uj-@W=1DkD}ZBVo|xX`Hm(i5 z^coa0VeRbUwX@1u-E&EgIyWy!8Fh+%;eClbe^B2vtk_|om~?YHZWHz~#X|?O=8k{q z!@=@-E=+?rCHw~M`s!o>J%?^XDDqaTuReG>fQFF$_~ab=_RdxPJJ&yQ(}euufz49B zygtiunH3`SBw%*BVfdAcUu{Texi$tK!5_j|&di#1@GVd*WB*t94Y7`f?-;J5XRX2r zhi1n#`fOZ2$4%RE#ix0fR5mf=yA8_=TAQbH!|u<2ma+1)-;7SuV_H5-baoBc{2l9B zkQHcgyP_eOKq|B8ee00`O1iJ>!4t=6J=Zf#Z5Nx|rer4~LzTe*#p_*13%oyBObgHL z6-f>Ph~otU|LDON9sUsUHkn|L!#!QMCJWU+Q9g)dP?sc2f{gfODPDcOuyA!5YQw7z zn<|@(48_|$c(&Z7E_3~zecjiZf6oQrrFm#*i|Xpft14T{H!=Ck+&y|#w<@xO*nZw& z_*^?Tb(a3{Ak85QHmh^D-Qkw-H69|Ei|mxF7K%BJG{R+NWQ|OFp-I?xa%r$0Nd&-(I~#%G#g6O21>Yd$xD| z>vS%4JOqN@8Wwjsf-}|kT@ZMxX*0KWPojC{DsoPxDB|16tZr%`*R;L_*O!#ctjYju zQFgo--epbtsh)qdq{+plTQ9%h-N2|iBiJ=gnwEG2;cqHxJXgWh4CY2)&MJ-*ljqfK zj_ESM`iVJ5h4@iD*t{bEo3bB-y%YXOlefZ~$iT~SaP zsP?r$t5QZmW~k%WIb#sGcK2Z-lYX0Hv6POiHI4m4%bDBJQ61iInIhi)Lr6hEMfH1fe}aE-WfBnJT3&yftf3J5gKyTBc`o!7 zSG6Yz`Z}zHY2(^V~l)hO_Z90=kNa1rFk>CE3#N+JcRbYKD zaARLmBIG5}TL&+eBYqT`^RY8oZ@hXS1$E7iUxLz27}S`RM?C-_jer zZ#S~bbuBAA_=6Mn=t5pX{wcSqY;a6b?DQt8J+BkHmA4B4i!j$-1r+*HJDJaaZC4`r z59+HuPKls*0@e?;K^LBu*AjMs*A1q`x$v4;KzObNGf{8u1Q*rBK-~<|XJxR5Re*W` zjA|_ryw5Ety2KYB=5SC;DhunS>`cuBnKE;e7;l=;9Q2&nZ7RqteG_B_08~%>CS`NA z=0I5MLJB^o$GG3xT)`+1VD4o`ybt?LQX=YSv#4D`KflheWvG_&?Idp1!S3w}09X@oI=sn8{{xvEPu1G%I>2Q-bQegM$(G|-K`ZwNR>I72H!?K`S z1b;!1wT~}HHK=hFtfw0~V*+f}HAS>V)MMgj4yG#fujt1k>WM>393*_jkUDpX|3=C^ zFQeXr#k8fEZSDk=ghfm z1!@IDK{PDNB5-RhUzE~Hx{RIdQ~7F;jDqLA-M`{}6{2?N?jd4wr@$`sTep~(ElL!9 zxHg90_(-Bmuhuj%@Z{QR{wPItD#~O~E?ZMb6V|fZuMA}SYu9+ZSdtn!nnWFYgecEx z&FjEMN7f5iFVLUd+EtVhDZ>S>?8spMjD|bj8}o1Wr?3swc@&#l1%BS!CA9JBrxOz0 zuF8=@_9-(>dtL5zF@D%cnudc6Q++`G9{w4mx7x5~Jucx0$0>>3dFXa9knK|<@3%W9bUv88KUw4E78x!Sn_QZQH(D1>60n+TL;y~> z7;&s-%~o~9K!GJDndv_-J3kbfWPLQK%E1!%(bCTKV{wY8yqlMpvlR@gT`)j6@)eanR=8z=m8V%SRXWSkV=`4+h6PD z7`rWS1k}kI;52eO3}6lP3)bPdc!R$){Tc;F-iV-WY10+kWkkZ5*tjdQU4s^gVJ#Ui0_7!ZU+btyGPX4NG~Ju&d*@tl%dg z-#$^Ng^AZ4xGenf27@{w$1XZS7Ruu@#1Kfpm<9aI26vVBqND@IbK8H<+@T)!O*@~% z(7~^ub8ai$*v9VHY`d}B_V(SW;7dHoFz;^(2AV*=L$iS0)_40_@T$v$u<)sBs4YrT z-x=B2Tq0JkgYM)xkKO2(Yyt>@JrGO!B`alCr+KOFcdEm!Qd7wGgt^b*SMK0JHkha( zKP@B=+g2<2dCT(|B(L`!G8eCj;3rPBMfClP z43=T>Vu(aIzxiPS2GKC6%M7=<*4B(KErDdfotvY<#ncJoD5{kdK%HqggKVdrvZCgbF&c zy=yjJlc6ksr=(nfVKo+n9H8eD3U_PNB8i;&X{NS)mrzr2L+*_@J>r&1D&K9(QP_tq8Dv%{aQ0e3BfNF7XPF=*+nhs5c>s&`f4&mSzGZ79P%r> zLG7VEd;o?JgKVG70LkO~eb?^o*I*LKbmqSidsS`2kLdfbs)@rgCKD44VtA{r_RcsI z-+KA>+pHWY7$c-n8Z@rVXvi1$VISYde%o!L&LtUIxIY=|Si*>_Y?$GMp;Ak63r$5X zLrs<97BJ0y2i2C26_BVd&jc*1A8qN>QB|N^GUP{N_n(VX;%J~9;WzYT(Lj%1ZDzvQ zys=%{lyM4p|9nC>Y zLB*7C9b#g1TJ3c6^USGJ$B!|tJ6Wgn!HhHR9tTK>{wH#ayq+02`){g;_2j3sR&K^4RjCjKKzA~$q+pgCfE?4`2XhP~2W|^4*ELqdMi4O;i zh;X0L-w08kH$3QlyQlEBqK2ih#3i768@3|XECp;ZCvXS$?yfc4`uBo4kil-0q;g^L z9*02xgCT0MVEi67D8*Vc^tn%D#Dah021tgLRMwUO9*s@<=VG(9P~zdaYoZQdJZV~c zux{c;-MpFBD}-U`uFwLZmq)Xq^TYLt65m%WaK|7Xlk=}%3m0#mCRhhnlQcf$ZbuUi zJcrWZhk%b*d=8TD)WP&h8KgMkY9?|TbDkGWTj;W=h*i4};Uo~ZhL6zrPlEKQQYI)$K&EsRLc|E92a83F9ekI~e!!SQVCHfU2wN~t5tMNZs?;>ft zb6Y^cjrIihu@~GtgK6Zgpz0Qh$Hz2`VbObO-8K>YmJA)gdE>YlO*xv#0t2FcmJ)Y5 zukkFk*BupJv~eiQv#8hxb4p0yu+|+va1f#Bp648rtAlK}r7EB>IV?a~y zKA+jn#a&6V8y}X8QoNb8;Ql^z78)5q%Pf6aD~L}M_r?A$Gj{jWvUvD{7z8y+o+9^N zV=^&mG;`1lw2gFqlS&&xeBSD^y z?!L1exs(u=E^+PoZp$mgwTBE9*`QX(lwB6L z^voWtdX~#pWlq_OR_J>B*RiL+v=z!Ii?_e%4BTbEeNqt=y+Hy6$CEVTO4I$eAmP}P z9g@Jl&{?+N8-dH2PqK->qZt-7WwpXF)C0xNUkV>2c6+wLE)uhQ?|6{9tO7_jlmOxw z55(`@)%krZ{C9nTu8U%!56iFCG#%h_UhPd#_qA4iwI|`7v>}{`d30Z!M?N)GhCm}Y zTcy?lDgA*m!@UYG-*(uyBOCo^nx6ys4*44!MX*;JV!Hv(b>e36vR6J%B^Xs1Ue=PE zMq=Z{1k)I`Zj+S`EUAsrM?yK+=Ru@lCo9FTKjJuP&@*NRtTi39RICng)bH*z2FS^m zQMmh)d&6~nrv$QNus%<&f*mgP7zfwO5vHQ{9OJxLXl(iC{UUP4ia}8SgEkG0w+xFp-)IB|9ePjv+ za@OCfgD2!zZ|`JeS>0EcXMjCF!~_Q{4KdXW_9{#>8ufBMH@w{2-jxq_GEHLFsnpZB zTJH6J(g{}4fOAJ|=P?bY1nOZ5k0HlkgBq$Rv7BT!aD#m_I{c=zuR#cd(jS;n&Hy#v z(`(ynudNfg8`M*-fsg!TaGU1-ON+2d*U)^5O6yV~LaP<5<3V9v{B)Yk^-qApLfnto zU94{>pY}$_$8&)fz$<7zQQ`PU^RJ_i&mNvAEx0ZU#dR`m-`3s)M2Mq*U{6OR@0su6H|MOV;t07x3+S5 zN|DXOW8-+&TheJ{0vEt8;A?g-11$WSN=`kEbUU2i-$*8+yUOT4rYRo3zF0r>c&+c8dmXvCz!Nt>P%+wmi@Q~Myq7?hS% zu1e_j_k8AJBzO)_ z{Gb*SHwgl@SLkUIW?_qN8U7C~5|^n_f9@Or<77Ipgc;!KEUrz&-))q6eIM>1N{L%m z&%?{@;uvQa{mmzU97o<*6Ol|s z6b=Z2s8@!`eq&|7`+{b;Y zu+RvUNv57V&-MgG15+~-N4yrHvpo^l_W)W(vn7nabMNFuyV}vaRbkIKU42-w+%BQn z;}_>XzjIZ0KW8uQGKqcoySgr!&0v0cWG}h5%}dtniH~Kbx}WM?p=ass{GQV0b-6sR ztnG0JuFUVlI-G=+N9#@GPgohnz2(btF{;FR!RiT>5tKMqR9l+$oU|3^z(&HBw{`SF{=<2+(5DCSa~ zbka_0{^6yG)Y3Gy!<9|)duv5QCzAi6KVeVN{s(No>W_YReoI~-`gT50CFfYv7G@%6xJs!^@0H(Pa52Y)vF1n_ zH!%nl(L7A0d))8$U?%fRRbuc!JE?bISM7V{cW@jxeJL4gxv1~$syODzFw|8)QgqWk zgdb}%{WLJhT6F4$pA-Gm6${hxd&Ib7XI?mYOtBSx7^J&G{Y}?^EmLrU_bUiYfv~ex za!-x#6{gC;ewT$-aV^d7K!XJhySWM8621D$J51Pl9gg~ys#QKN3~3>|`AV0*Ke<}O zq5rOukk!}@d-TGCev-qFMjp z1p3g0w9Q3)TWIy`Zs~B()l5bh-JVpbg;lxp=BQ4ocPCi!O2%>`TDRrpA^JAvO@R*u z@k^y9JM!3Izw*8tPSe2-{>J;0crx1D>e6@H_3lCq2IiI2Vt;4#rtN~e%Uflus+sMk zPHFwVd7Dq95jZ!aK2E`5zV}ZS!u^U*!h16^GZ0S&@QTwjGfz`$T-X#RJ2)Np=i-@E zzr^0qapb+D*)X6=!<=o>U^x#R6(|>7Jq52psVnw`)HHx6ZI-M3BVomNyFQOxc6X%= zDs{NrL8~~i)O(e;hfBtf4N<}L_&{m$=oLW8Vk$Eo_|4* zYMwNDg1ImeZ=Lk4s|c-R9IChBSM_M)M+q+T!{tZCoPy@17{8SnEe7UN5zEaj){RZ3 z_4Ta%&zoEv3k^=+DzBe14jMO+vmRp|7+%2-;g+7yPxfULpHv#UufV+A!zvPbpU$dW z)T1WKZEt?0?Qm(zIlXYgdeYDDS_o#e^@eza9n13F5q^Z$(geoKr0G(MT)h#4l*UgZ z-;Q#^n}khrk%!4K=Bg*pFf-M%_4*$;X3C(M&*zzr-TC6A=G#_isOjVOuJjc~g-J$! z>w8jk$U7Rx!m5%dGGNYmQvxSGCeDF=_)J`RJ+Xr#Z~m`I>RnpI=K2 zg8r$rX!d~O^87y1){%*a`E|MtCuevW*(t1wm7@2G?QgPHSLk$3eJ_Yc|&E|Ql$ z9&8e-Pb^moSxtI~Pj623*Ke|(C?@Wi)_jPA*%yW15+Hw-7R+Z_@Smj0; zwy|LJx%<-4sS-Udvr{{}NgOBPjCNIj4%Rpz)M&#!9U$Ne=Fm1c~t9xUe zOh(HA(0dWV+CnZv#v<|&!I6o|WrxJ=k|9C<>V_%bTqWbmOs$&hi>wK!o=1mZ0+JKh zlQ51G(->9bOS4`QhzL@f!$_97|9n%?B1J5%P0U9&($&ApYTbCG5k043mu*O@Y^1Tc zR22o1jXB3N=(CRc_PnXt{x#n!<@eqp80QCDH=g~k+O9k-scnm+rkR%7Ewwa_Ea$*1 z4K*in$TTw&q%gJHs5nrmrD%=~q-m38)^!Nuf*^X$5gfZ(R!XJ;ris=oC!BIj9Pn+d z_kHiZKi~Jg^B?TB&syuZrnC1s-(Ic_l{g=1O<5EO{mb;h`hlAHX=^0cyudbS4Nu6q zqiKuiNlpCv*}_6eJ*Sb5*|;`!@!(071e%V=^JZ!C;ngVS?W{EA(_>qr#PygLjZd$X zQ(-mjV;4oH`FPIut%GI?(QxL1i1@-IZ?t-uVt1H26}2nCJsq>^D9|by#^|R8@4bfC zBPDsc^Y+t%T4<$x-2EVmV#54m_k3v*5JoJr$A8--<;lFOAB^D&BV0uAOGAOjcX=6q z!<&=nWi6%Gu}pY;fQo8!w50BkC56Y`FFB5p2~QOzoz^F54AQ5k9vzuj4MRkSRBQb- z9?nu}xXG_(h5$iwp>nA8XP!MhP$7$2zsM!}g}q^vg#>)|BxsA?>u(+TmPm7!$RD&Z z+I*q*dIa8A&Az*w6+@a{x;LZVko2e*2+Wjo=!|g3-X>slj}1Ahq`%vqZH*25JdPJk z;ntDc>-`4>HG6oks_8u4UCU>x@w^cE^mHix0)D7JB~-nE>YnG2xXU1NFTV*CL0vI> z^hRq+#R~AL4tc>TfzCS#F&Z$??$~@25*;@JgiZ^kO>p zVvIy^m_GNDwTZ%L)Q zg@CEj?H(FE*i*w%fLNNp_wfd;R2QRQsEWbPzB-t*cH)bjVi?E`E}5?x&! zW<;X@=$S6l@t_9kfyO=-Y$%=hGOi=bKl8!X*Ve<&`D30_NnxRG#&#AFK)RCV7J?`9 z#oG@rc>CIngqa_1ig$oLG{`CxsMJf7OvdV(RMUIJfZMdgt57pIjFVt)u;?A!S%u<+ zo>)l>XhgAD+(GZfGq8Akc#d(q6I`r`JY43w`beuXv?oX77s`tx&q}k+kw@_E1H` zvbPzDUQx*5zXq8<0jz(3XMkF(LFOvlYo|726vy~y z*f6v~I3_8fT^m+u%KB$1ktY{Qx-3wpmC<=in}@Z>8JDfuhNO8=615cD_}P}$yh8|< zv&;>w;svtq`yX(dr9u>DSO@!UO$_gqpKBtGsQLxPZqYeyL19wc;qgw=rMPWgcDI#v ze|m%#;2?!64N3a0BOHT$U7*`IjnkhjcW*js>VBw-xX_43U)v#yL@OUwa{o5)fU~_n zqudd=vTArM-yM6+)>I8$KDKN%zZkzbJK*gA10xID*a!b?P6=3K&%;p45O?t`Kwzj=2^m?>W!11bnKAPw3!_nYu4|Gqz zVLij{qhNynnm(66GqY!(Z)G$+-kfVQdJemTyWOdi|9 z5OeDn=X>j}ehSNjU&@jvleK&8%C-kHF@aZwqpfC+#?O5_tbm24M;hDDXV33`(qVTe z*g{({O}@_U${P4k?SfTaKZWwI11~t?L%h6up^|XFfDl<1(9ay|yqyl%7hu zxr5MXK%)6%!*!nRe|-gu2K-+mrB%n6BF9`$7&qzej)e3G54A$B0$FF1TSH!$kD3uU z+Td;h-`1sL87GUHNp&mm;O}MtV5v<0{lMZxT5|lSh1kvs$+LmT%Vu;HO4HVI;{IJK zg8s?dVGY>K2gzP~6)NES#CPtP4~iqFF5+8vMhjD>&~+64ms>&FGy8K7V`Es%!dQJ{ z8#t%HcF{i#XYMJ9iZZ;`H93^uB*DwRH*ogVxvBHiv5i&+n5rk)rg`ks zhiJY-saIIj2`~Y;~-O_|k|FUl4OoC&*Ef?rfbI z0ZFQZ!>J87eAH!Pk7vyuXr{Jzk7R$O+L$Y$dGJW8cGN`UErR?C)ab-ruFVFNG<=aR zx=m$8zO`X0;g)yjfgq>v3Sc-FLkc?Hszy(mwuvx~%P9g2bD}Ltx?ZFKdgrCAi<>eB z(rRi#{*a6y_ChTDz=EQ(Sn5LU9IigcNha2 z<=T&}z3?r-n|ZBe}=kWCNsd?W#z$h@~si%$kdZbXj(8l?O_fhkf{5gpq?|T@86K^VrnOJb>}M z9!a5Xw@^6Yl6KS;<~3vlB$^IZQ9ZSI@9dMkN>x&5*LANcq5Cw#T#L1ej*#6g#Z4$GK z=T6x@cxWSSpW$01iKEZSHjqkR08{Npna>hq%$-t(6k`8-pieRcNaBW7e-24V;!I{C zD|2KfUdHGxo$>=7_0bp-_COT)VTJ|8zXSJ;(>Al-dz__1(qME47D3*-_ZPVv7s-?R zi+pB*0jB#i7M_k2HBW@*pI`y{Tt*?L@9q8eh_e=fFNg2wfqtx2eq%+(!3B#h5LtVV z6BVzFjKjCD{x^WwC&FTn+0~wQvMzqz13CGk$g)q1;i@ZmDFr#Xi=eRAcgvR9{VyH| z1RnQO{-ft8r?-A5VW6Lybyhh;-)%G~N<4I(0B{Q}xl}*o!4X|mZOV}KAI_y}u|75~H0fD{{ A@&Et; literal 0 HcmV?d00001 diff --git a/docs/200-orm/050-overview/100-introduction/user-table.png b/docs/200-orm/050-overview/100-introduction/user-table.png new file mode 100644 index 0000000000000000000000000000000000000000..a44df94e251d2806d4bd8dbcc7417026ac1f5e3b GIT binary patch literal 4330 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: stringlast_name: stringemail: stringemail_confirmed: boolbirthDate: date \ No newline at end of file diff --git a/docs/200-orm/050-overview/300-prisma-in-your-stack/01-rest.mdx b/docs/200-orm/050-overview/300-prisma-in-your-stack/01-rest.mdx new file mode 100644 index 0000000000..cb65d49966 --- /dev/null +++ b/docs/200-orm/050-overview/300-prisma-in-your-stack/01-rest.mdx @@ -0,0 +1,166 @@ +--- +title: 'REST' +metaTitle: 'Building REST APIs with Prisma' +metaDescription: 'This page gives an overview of the most important things when building REST APIs with Prisma. It shows practical examples and the supported libraries.' +--- + + + +When building REST APIs, Prisma Client can be used inside your _route controllers_ to send databases queries. + +![REST APIs with Prisma Client](../100-introduction/prisma-rest-apis.png) + + + +## Supported libraries + +As Prisma Client is "only" responsible for sending queries to your database, it can be combined with any HTTP server library or web framework of your choice. + +Here's a non-exhaustive list of libraries and frameworks you can use with Prisma: + +- [Express](https://expressjs.com/) +- [koa](https://koajs.com/) +- [hapi](https://hapi.dev/) +- [Fastify](https://www.fastify.io/) +- [Sails](https://sailsjs.com/) +- [AdonisJs](https://adonisjs.com/) +- [NestJS](https://nestjs.com/) +- [Next.js](https://nextjs.org/) +- [Foal TS](https://foalts.org/) +- [Polka](https://github.com/lukeed/polka) +- [Micro](https://github.com/zeit/micro) +- [Feathers](https://feathersjs.com/) +- [Remix](https://remix.run/) + +## REST API server example + +Assume you have a Prisma schema that looks similar to this: + +```prisma +datasource db { + provider = "sqlite" + url = "file:./dev.db" +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id Int @id @default(autoincrement()) + title String + content String? + published Boolean @default(false) + author User? @relation(fields: [authorId], references: [id]) + authorId Int? +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] +} +``` + +You can now implement route controller (e.g. using Express) that use the generated [Prisma Client API](/orm/prisma-client) to perform a database operation when an incoming HTTP request arrives. This page only shows few sample code snippets; if you want to run these code snippets, you can use a [REST API example](https://github.com/prisma/prisma-examples/tree/latest/typescript/rest-express). + +#### `GET` + +```ts +app.get('/feed', async (req, res) => { + const posts = await prisma.post.findMany({ + where: { published: true }, + include: { author: true }, + }) + res.json(posts) +}) +``` + +Note that the `feed` endpoint in this case returns a nested JSON response of `Post` objects that _include_ an `author` object. Here's a sample response: + +```json +[ + { + "id": "21", + "title": "Hello World", + "content": "null", + "published": "true", + "authorId": 42, + "author": { + "id": "42", + "name": "Alice", + "email": "alice@prisma.io" + } + } +] +``` + +#### `POST` + +```ts +app.post(`/post`, async (req, res) => { + const { title, content, authorEmail } = req.body + const result = await prisma.post.create({ + data: { + title, + content, + published: false, + author: { connect: { email: authorEmail } }, + }, + }) + res.json(result) +}) +``` + +#### `PUT` + +```ts +app.put('/publish/:id', async (req, res) => { + const { id } = req.params + const post = await prisma.post.update({ + where: { id: Number(id) }, + data: { published: true }, + }) + res.json(post) +}) +``` + +#### `DELETE` + +```ts +app.delete(`/post/:id`, async (req, res) => { + const { id } = req.params + const post = await prisma.post.delete({ + where: { + id: Number(id), + }, + }) + res.json(post) +}) +``` + +## Ready-to-run example projects + +You can find several ready-to-run examples that show how to implement a REST API with Prisma Client, as well as build full applications, in the [`prisma-examples`](https://github.com/prisma/prisma-examples/) repository. + +### TypeScript + +| **Example** | **Stack** | **Description** | +| ----------------------------------------------------------------------------------------------------------------------------- | ------------ | ---------------------------------------------- | +| [`rest-express`](https://github.com/prisma/prisma-examples/tree/latest/typescript/rest-express) | Backend only | REST API with Express for TypeScript | +| [`rest-fastify`](https://github.com/prisma/prisma-examples/tree/latest/typescript/rest-fastify) | Backend only | REST API using Fastify and Prisma Client. | +| [`rest-hapi`](https://github.com/prisma/prisma-examples/tree/latest/typescript/rest-hapi) | Backend only | REST API using hapi and Prisma Client | +| [`rest-nestjs`](https://github.com/prisma/prisma-examples/tree/latest/typescript/rest-nestjs) | Backend only | Nest.js app (Express) with a REST API | +| [`rest-nextjs-express`](https://github.com/prisma/prisma-examples/tree/latest/typescript/rest-nextjs-express) | Fullstack | Next.js app (React, Express) and Prisma Client | +| [`rest-nextjs-api-routes`](https://github.com/prisma/prisma-examples/tree/latest/typescript/rest-nextjs-api-routes) | Fullstack | Next.js app (React) with a REST API | +| [`rest-nextjs-api-routes-auth`](https://github.com/prisma/prisma-examples/tree/latest/typescript/rest-nextjs-api-routes-auth) | Fullstack | Implement authentication using NextAuth.js | + +### JavaScript + +| **Example** | **Stack** | **Description** | +| ----------------------------------------------------------------------------------------------- | ------------ | ---------------------------------------------------------------- | +| [`rest-express`](https://github.com/prisma/prisma-examples/tree/latest/javascript/rest-express) | Backend only | REST API using Express and Prisma Client | +| [`rest-fastify`](https://github.com/prisma/prisma-examples/tree/latest/javascript/rest-fastify) | Backend only | REST API using Fastify and Prisma Client | +| [`rest-nextjs`](https://github.com/prisma/prisma-examples/tree/latest/javascript/rest-nextjs) | Fullstack | Next.js app (React) with a REST API | +| [`rest-nuxtjs`](https://github.com/prisma/prisma-examples/tree/latest/javascript/rest-nuxtjs) | Fullstack | App with NuxtJs using Vue (frontend), Express, and Prisma Client | diff --git a/docs/200-orm/050-overview/300-prisma-in-your-stack/02-graphql.mdx b/docs/200-orm/050-overview/300-prisma-in-your-stack/02-graphql.mdx new file mode 100644 index 0000000000..9482816f77 --- /dev/null +++ b/docs/200-orm/050-overview/300-prisma-in-your-stack/02-graphql.mdx @@ -0,0 +1,85 @@ +--- +title: 'GraphQL' +metaTitle: 'Building GraphQL servers with Prisma' +metaDescription: 'This page gives explains how to build GraphQL servers with Prisma. It shows how Prisma fits into the GraphQL ecosystem and provides practical examples.' +--- + + + +[GraphQL](https://graphql.org/) is a query language for APIs. It is often used as an alternative to RESTful APIs, but can also be used as an additional "gateway" layer on top of existing RESTful services. + +With Prisma, you can build GraphQL servers that connect to a database. Prisma is completely agnostic to the GraphQL tools you use. When building a GraphQL server, you can combine Prisma with tools like Apollo Server, GraphQL Yoga, TypeGraphQL, GraphQL.js, or pretty much any tool or library that you're using in your GraphQL server setup. + + + +## GraphQL servers under the hood + +A GraphQL server consists of two major components: + +- GraphQL schema (type definitions + resolvers) +- HTTP server + +Note that a GraphQL schema can be written code-first or SDL-first. Check out this [article](https://www.prisma.io/blog/the-problems-of-schema-first-graphql-development-x1mn4cb0tyl3) to learn more about these two approaches. If you like the SDL-first approach but still want to make your code type-safe, check out [GraphQL Code Generator](https://graphql-code-generator.com/) to generate various type definitions based on SDL. + +The GraphQL schema and HTTP server are typically handled by separate libraries. Here is an overview of current GraphQL server tools and their purpose: + +| Library (npm package) | Purpose | Compatible with Prisma | Prisma integration | +| :-------------------- | :-------------------------- | :--------------------- | :----------------------------------------------------------------------------- | +| `graphql` | GraphQL schema (code-first) | Yes | No | +| `graphql-tools` | GraphQL schema (SDL-first) | Yes | No | +| `type-graphql` | GraphQL schema (code-first) | Yes | [`typegraphql-prisma`](https://www.npmjs.com/package/typegraphql-prisma) | +| `nexus` | GraphQL schema (code-first) | Yes | [`nexus-prisma`](https://graphql-nexus.github.io/nexus-prisma) _Early Preview_ | +| `apollo-server` | HTTP server | Yes | n/a | +| `express-graphql` | HTTP server | Yes | n/a | +| `fastify-gql` | HTTP server | Yes | n/a | +| `graphql-yoga` | HTTP server | Yes | n/a | + +In addition to these standalone and single-purpose libraries, there are several projects building integrated _application frameworks_: + +| Framework | Stack | Built by | Prisma | Description | +| :---------------------------------- | :-------- | :------------------------------------------------ | :--------------------- | :------------------------------------- | +| [Redwood.js](https://redwoodjs.com) | Fullstack | [Tom Preston-Werner](https://github.com/mojombo/) | Built on top of Prisma | _Bringing full-stack to the JAMstack._ | + +> **Note**: If you notice any GraphQL libraries/frameworks missing from the list, please let us know. + +## Prisma & GraphQL examples + +In the following section will find several ready-to-run examples that showcase how to use Prisma with different combinations of the tools mentioned in the table above. + +### TypeScript + +| Example | HTTP Server | GraphQL schema | Description | +| :------------------------------------------------------------------------------------------------------------------------------- | :---------------------- | :-------------- | :--------------------------------------------------------------------------------------------- | +| [GraphQL API (Pothos)](https://github.com/prisma/prisma-examples/tree/latest/typescript/graphql) | `graphql-yoga` | `pothos` | GraphQL server based on [`graphql-yoga`](https://the-guild.dev/graphql/yoga-server) | +| [GraphQL API (SDL-first)](https://github.com/prisma/prisma-examples/tree/latest/typescript/graphql-sdl-first) | `graphql-yoga` | n/a | GraphQL server based on the SDL-first approach | +| [GraphQL API -- NestJs](https://github.com/prisma/prisma-examples/tree/latest/typescript/graphql-nestjs) | `@nestjs/apollo` | n/a | GraphQL server based on [NestJS](https://nestjs.com/) | +| [GraphQL API -- NestJs (SDL-first)](https://github.com/prisma/prisma-examples/tree/latest/typescript/graphql-nestjs-sdl-first) | `@nestjs/apollo` | n/a | GraphQL server based on [NestJS](https://nestjs.com/) | +| [GraphQL API (Nexus)](https://github.com/prisma/prisma-examples/tree/latest/typescript/graphql-nexus) | `@apollo/server` | `nexus` | GraphQL server based on [`@apollo/server`](https://www.apollographql.com/docs/apollo-server) | +| [GraphQL API (TypeGraphQL)](https://github.com/prisma/prisma-examples/tree/latest/typescript/graphql-typegraphql) | `apollo-server` | `type-graphql` | GraphQL server based on the code-first approach of [TypeGraphQL](https://typegraphql.com/) | +| [GraphQL API (Auth)](https://github.com/prisma/prisma-examples/tree/latest/typescript/graphql-auth) | `apollo-server` | `nexus` | GraphQL server with email-password authentication & permissions | +| [Fullstack app](https://github.com/prisma/prisma-examples/tree/latest/typescript/graphql-nextjs) | `graphql-yoga` | `pothos` | Fullstack app with Next.js (React), Apollo Client, GraphQL Yoga and Pothos | +| [GraphQL subscriptions](https://github.com/prisma/prisma-examples/tree/latest/typescript/subscriptions-pubsub) | `apollo-server` | `nexus` | GraphQL server implementing realtime GraphQL subscriptions | +| [GraphQL API -- Hapi](https://github.com/prisma/prisma-examples/tree/latest/typescript/graphql-hapi) | `apollo-server-hapi` | `nexus` | GraphQL server based on [Hapi](https://hapi.dev/) | +| [GraphQL API -- Hapi (SDL-first)](https://github.com/prisma/prisma-examples/tree/latest/typescript/graphql-hapi-sdl-first) | `apollo-server-hapi` | `graphql-tools` | GraphQL server based on [Hapi](https://hapi.dev/) | +| [GraphQL API -- Fastify](https://github.com/prisma/prisma-examples/tree/latest/typescript/graphql-fastify) | `fastify` & `mercurius` | n/a | GraphQL server based on [Fastify](https://fastify.io/) and [Mercurius](https://mercurius.dev/) | +| [GraphQL API -- Fastify (SDL-first)](https://github.com/prisma/prisma-examples/tree/latest/typescript/graphql-fastify-sdl-first) | `fastify` | `Nexus` | GraphQL server based on [Fastify](https://fastify.io/) and [Mercurius](https://mercurius.dev/) | + +### JavaScript (Node.js) + +| Demo | HTTP Server | GraphQL schema | Description | +| :------------------------------------------------------------------------------------------------------------ | :-------------- | :-------------- | :------------------------------------------------------------------------------------------------------------------------------ | +| [GraphQL API (Apollo Server)](https://github.com/prisma/prisma-examples/tree/latest/javascript/graphql) | `apollo-server` | `nexus` | GraphQL server based on [`apollo-server`](https://www.apollographql.com/docs/apollo-server/) | +| [GraphQL API (Auth)](https://github.com/prisma/prisma-examples/tree/latest/javascript/graphql-auth) | `apollo-server` | `nexus` | GraphQL server with email-password authentication & permissions | +| [GraphQL API (SDL-first)](https://github.com/prisma/prisma-examples/tree/latest/javascript/graphql-sdl-first) | `apollo-server` | `graphql-tools` | GraphQL server based on the SDL-first approach of [`graphql-tools`](https://www.apollographql.com/docs/graphql-tools/) (Apollo) | + +## FAQ + +### What is Prisma's role in a GraphQL server? + +No matter which of the above GraphQL tools/libraries you use, Prisma is used inside your GraphQL resolvers to connect to your database. It has the same role that any other ORM or SQL query builder would have inside your resolvers. + +In the resolver of a GraphQL query, Prisma typically reads data from the database to return it in the GraphQL response. In the resolver of a GraphQL mutation, Prisma typically also writes data to the database (e.g. creating new or updating existing records). + +## Other GraphQL Resources + +Prisma curates [GraphQL Weekly](https://www.graphqlweekly.com/), a newsletter highlighting resources and updates from the GraphQL community. Subscribe to keep up-to-date with GraphQL articles, videos, tutorials, libraries, and more. diff --git a/docs/200-orm/050-overview/300-prisma-in-your-stack/03-fullstack.mdx b/docs/200-orm/050-overview/300-prisma-in-your-stack/03-fullstack.mdx new file mode 100644 index 0000000000..637f008e44 --- /dev/null +++ b/docs/200-orm/050-overview/300-prisma-in-your-stack/03-fullstack.mdx @@ -0,0 +1,122 @@ +--- +title: 'Fullstack' +metaTitle: 'Building fullstack applications with Prisma' +metaDescription: 'This page gives explains how to build fullstack applications with Prisma. It shows how Prisma fits in with fullstack frameworks and provides practical examples' +--- + + + +Fullstack frameworks, such as Next.js, Remix or SvelteKit, blur the lines between the server and the client. These frameworks also provide different patterns for fetching and mutating data on the server. + +You can query your database using Prisma Client, using your framework of choice, from the server-side part of your application. + + + +## Supported frameworks + +Here's a non-exhaustive list of frameworks and libraries you can use with Prisma: + +- [Next.js](https://nextjs.org/) +- [Remix](https://remix.run) +- [SvelteKit](https://kit.svelte.dev/) +- [Nuxt](https://nuxt.com/) +- [Redwood](https://redwoodjs.com/) +- [t3 stack — using tRPC](https://create.t3.gg/) +- [Wasp](https://wasp-lang.dev/) + +## Fullstack app example (e.g. Next.js) + +Assume you have a Prisma schema that looks similar to this: + +```prisma +datasource db { + provider = "sqlite" + url = "file:./dev.db" +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id Int @id @default(autoincrement()) + title String + content String? + published Boolean @default(false) + author User? @relation(fields: [authorId], references: [id]) + authorId Int? +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] +} +``` + +You can now implement the logic for querying your database using [Prisma Client API](/orm/prisma-client) inside `getServerSideProps`, `getStaticProps`, API routes, or using API libraries such as [tRPC](https://trpc.io/) and [GraphQL](https://graphql.org/). + +### ` getServerSideProps` + +```ts +// (in /pages/index.tsx) + +// Alternatively, you can use `getStaticProps` +// in place of `getServerSideProps`. +export const getServerSideProps = async () => { + const feed = await prisma.post.findMany({ + where: { + published: true, + }, + }) + return { props: { feed } } +} +``` + +Next.js will pass the props to your React component where you can display the data from your database. + +### API Routes + +```ts +// Fetch all posts (in /pages/api/posts.ts) +const prisma = new PrismaClient() + +export default async function handle(req, res) { + const posts = await prisma.post.findMany({ + where: { + published: true, + }, + }) + res.json(posts) +} +``` + +Note that you can use Prisma inside of Next.js API routes to send queries to your database – with REST, GraphQL, and tRPC. + +You can then fetch data and display it in your frontend. + +## Ready-to-run fullstack example projects + +You can find several ready-to-run examples that show how to fullstack apps with Prisma Client in the [`prisma-examples`](https://github.com/prisma/prisma-examples/) repository. + +### TypeScript + +| **Example** | **Description** | +| :----------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------- | +| [Next.js (API Routes)](https://github.com/prisma/prisma-examples/tree/latest/typescript/rest-nextjs-api-routes) | Fullstack Next.js app using `getServerSideProps` & API Routes | +| [Next.js (GraphQL)](https://github.com/prisma/prisma-examples/tree/latest/typescript/graphql-nextjs) | Fullstack Next.js app using GraphQL Yoga, Pothos, & Apollo Client | +| [Next.js (tRPC)](https://github.com/prisma/prisma-examples/tree/latest/typescript/trpc-nextjs) | Fullstack Next.js app using tRPC | +| [Next.js (API Routes with auth)](https://github.com/prisma/prisma-examples/tree/latest/typescript/rest-nextjs-api-routes-auth) | Fullstack Next.js app using `getServerSideProps`, API Routes, & [NextAuth](https://next-auth.js.org/) | +| [Remix](https://github.com/prisma/prisma-examples/tree/latest/typescript/remix) | Fullstack Remix app using actions and loaders | +| [SvelteKit](https://github.com/prisma/prisma-examples/tree/latest/typescript/sveltekit) | Fullstack Sveltekit app using actions and loaders | +| [SvelteKit (REST API)](https://github.com/prisma/prisma-examples/tree/latest/typescript/rest-sveltekit) | Fullstack Sveltekit app using API routes | +| [Nuxt (REST API)](https://github.com/prisma/prisma-examples/tree/latest/typescript/rest-nuxtjs) | Fullstack Nuxt app using API routes | + +### JavaScript + +| **Example** | **Description** | +| :------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------ | +| [Next.js (API Routes)](https://github.com/prisma/prisma-examples/tree/latest/javascript/rest-nextjs) | Fullstack Next.js app using `getServerSideProps` & API Routes | +| [SvelteKit (REST API)](https://github.com/prisma/prisma-examples/tree/latest/javascript/rest-sveltekit) | Fullstack Sveltekit app using API routes | +| [Nuxt (REST API)](https://github.com/prisma/prisma-examples/tree/latest/javascript/rest-nuxtjs) | Fullstack Nuxt app using API routes | diff --git a/docs/200-orm/050-overview/300-prisma-in-your-stack/04-is-prisma-an-orm.mdx b/docs/200-orm/050-overview/300-prisma-in-your-stack/04-is-prisma-an-orm.mdx new file mode 100644 index 0000000000..274decd080 --- /dev/null +++ b/docs/200-orm/050-overview/300-prisma-in-your-stack/04-is-prisma-an-orm.mdx @@ -0,0 +1,445 @@ +--- +title: 'Is Prisma an ORM?' +metaTitle: 'Is Prisma an ORM? | What is an ORM?' +metaDescription: 'Learn about how Prisma implements the Data Mapper ORM pattern and how it achieves the same goal as traditional ORMs without requiring you to map classes to tables as traditional ORMs do.' +--- + + + +To answer the question briefly: _Yes, Prisma is a new kind of ORM that fundamentally differs from traditional ORMs and doesn't suffer from many of the problems commonly associated with these_. + +Traditional ORMs provide an object-oriented way for working with relational databases by mapping tables to _model classes_ in your programming language. This approach leads to many problems that are caused by the [object-relational impedance mismatch](https://en.wikipedia.org/wiki/Object%E2%80%93relational_impedance_mismatch). + +Prisma works fundamentally different compared to that. With Prisma, you define your models in the declarative [Prisma schema](/orm/prisma-schema) which serves as the single source of truth for your database schema and the models in your programming language. In your application code, you can then use Prisma Client to read and write data in your database in a type-safe manner without the overhead of managing complex model instances. This makes the process of querying data a lot more natural as well as more predictable since Prisma Client always returns plain JavaScript objects. + +In this article, you will learn in more detail about ORM patterns and workflows, how Prisma implements the Data Mapper pattern, and the benefits of Prisma's approach. + + + +## What are ORMs? + +If you're already familiar with ORMs, feel free to jump to the [next section](#prisma) on Prisma. + +### ORM Patterns - Active Record and Data Mapper + +ORMs provide a high-level database abstraction. They expose a programmatic interface through objects to create, read, delete, and manipulate data while hiding some of the complexity of the database. + +The idea with ORMs is that you define your models as **classes** that map to tables in a database. The classes and their instances provide you with a programmatic API to read and write data in the database. + +There are two common ORM patterns: [_Active Record_](https://en.wikipedia.org/wiki/Active_record_pattern) and [_Data Mapper_](https://en.wikipedia.org/wiki/Data_mapper_pattern) which differ in how they transfer data between objects and the database. While both patterns require you to define classes as the main building block, the most notable difference between the two is that the Data Mapper pattern decouples in-memory objects in the application code from the database and uses the data mapper layer to transfer data between the two. In practice, this means that with Data Mapper the in-memory objects (representing data in the database) don't even know that there’s a database present. + +#### Active Record + +_Active Record_ ORMs map model classes to database tables where the structure of the two representations is closely related, e.g. each field in the model class will have a matching column in the database table. Instances of the model classes wrap database rows and carry both the data and the access logic to handle persisting changes in the database. Additionally, model classes can carry business logic specific to the data in the model. + +The model class typically has methods that do the following: + +- Construct an instance of the model from an SQL query. +- Construct a new instance for later insertion into the table. +- Wrap commonly used SQL queries and return Active Record objects. +- Update the database and insert into it the data in the Active Record. +- Get and set the fields. +- Implement business logic. + +#### Data Mapper + +_Data Mapper_ ORMs, in contrast to Active Record, decouple the application's in-memory representation of data from the database's representation. The decoupling is achieved by requiring you to separate the mapping responsibility into two types of classes: + +- **Entity classes**: The application's in-memory representation of entities which have no knowledge of the database +- **Mapper classes**: These have two responsibilities: + - Transforming the data between the two representations. + - Generating the SQL necessary to fetch data from the database and persist changes in the database. + +Data Mapper ORMs allow for greater flexibility between the problem domain as implemented in code and the database. This is because the data mapper pattern allows you to hide the ways in which your database is implemented which isn’t an ideal way to think about your domain behind the whole data-mapping layer. + +One of the reasons that traditional data mapper ORMs do this is due to the structure of organizations where the two responsibilities would be handled by separate teams, e.g., [DBAs](https://en.wikipedia.org/wiki/Database_administrator) and backend developers. + +In reality, not all Data Mapper ORMs adhere to this pattern strictly. For example, [TypeORM](https://github.com/typeorm/typeorm/blob/master/docs/active-record-data-mapper.md#what-is-the-data-mapper-pattern), a popular ORM in the TypeScript ecosystem which supports both Active Record and Data Mapper, takes the following approach to Data Mapper: + +- Entity classes use decorators (`@Column`) to map class properties to table columns and are aware of the database. +- Instead of mapper classes, _repository_ classes are used for querying the database and may contain custom queries. Repositories use the decorators to determine the mapping between entity properties and database columns. + +Given the following `User` table in the database: + +![user-table](../100-introduction/user-table.png) + +This is what the corresponding entity class would look like: + +```ts +import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm' + +@Entity() +export class User { + @PrimaryGeneratedColumn() + id: number + + @Column({ name: 'first_name' }) + firstName: string + + @Column({ name: 'last_name' }) + lastName: string + + @Column({ unique: true }) + email: string +} +``` + +### Schema migration workflows + +A central part of developing applications that make use of a database is changing the database schema to accommodate new features and to better fit the problem you're solving. In this section, we'll discuss what [schema migrations](https://www.prisma.io/dataguide/types/relational/what-are-database-migrations) are and how they affect the workflow. + +Because the ORM sits between the developer and the database, most ORMs provide a **migration tool** to assist with the creation and modification of the database schema. + +A migration is a set of steps to take the database schema from one state to another. The first migration usually creates tables and indices. Subsequent migrations may add or remove columns, introduce new indices, or create new tables. Depending on the migration tool, the migration may be in the form of SQL statements or programmatic code which will get converted to SQL statements (as with [ActiveRecord](https://guides.rubyonrails.org/active_record_migrations.html) and [SQLAlchemy](https://alembic.sqlalchemy.org/en/latest/tutorial.html#create-a-migration-script)). + +Because databases usually contain data, migrations assist you with breaking down schema changes into smaller units which helps avoid inadvertent data loss. + +Assuming you were starting a project from scratch, this is what a full workflow would look like: you create a migration that will create the `User` table in the database schema and define the `User` entity class as in the example above. + +Then, as the project progresses and you decide you want to add a new `salutation` column to the `User` table, you would create another migration which would alter the table and add the `salutation` column. + +Let's take a look at how that would look like with a TypeORM migration: + +```ts +import { MigrationInterface, QueryRunner } from 'typeorm' + +export class UserRefactoring1604448000 implements MigrationInterface { + async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "User" ADD COLUMN "salutation" TEXT`) + } + + async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "User" DROP COLUMN "salutation"`) + } +} +``` + +Once a migration is carried out and the database schema has been altered, the entity and mapper classes must also be updated to account for the new `salutation` column. + +With TypeORM that means adding a `salutation` property to the `User` entity class: + +```ts highlight=17,18;normal +import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm' + +@Entity() +export class User { + @PrimaryGeneratedColumn() + id: number + + @Column({ name: 'first_name' }) + firstName: string + + @Column({ name: 'last_name' }) + lastName: string + + @Column({ unique: true }) + email: string + + @Column() + salutation: string +} +``` + +Synchronizing such changes can be a challenge with ORMs because the changes are applied manually and are not easily verifiable programmatically. Renaming an existing column can be even more cumbersome and involve searching and replacing references to the column. + +> **Note:** Django's [makemigrations](https://docs.djangoproject.com/en/3.1/ref/django-admin/#django-admin-makemigrations) CLI generates migrations by inspecting changes in models which, similar to Prisma, does away with the synchronization problem. + +In summary, evolving the schema is a key part of building applications. With ORMs, the workflow for updating the schema involves using a migration tool to create a migration followed by updating the corresponding entity and mapper classes (depending on the implementation). As you'll see, Prisma takes a different approach to this. + +Now that you've seen what migrations are and how they fit into the development workflows, you will learn more about the benefits and drawbacks of ORMs. + +### Benefits of ORMs + +There are different reasons why developers choose to use ORMs: + +- ORMs facilitate implementing the domain model. The domain model is an object model that incorporates the behavior and data of your business logic. In other words, it allows you to focus on real business concepts rather than the database structure or SQL semantics. +- ORMs help reduce the amount of code. They save you from writing repetitive SQL statements for common CRUD (Create Read Update Delete) operations and escaping user input to prevent vulnerabilities such as SQL injections. +- ORMs require you to write little to no SQL (depending on your complexity you may still need to write the odd raw query). This is beneficial for developers who are not familiar with SQL but still want to work with a database. +- Many ORMs abstract database-specific details. In theory, this means that an ORM can make changing from one database to another easier. It should be noted that in practice applications rarely change the database they use. + +As with all abstractions that aim to improve productivity, there are also drawbacks to using ORMs. + +### Drawbacks of ORMs + +The drawbacks of ORMs are not always apparent when you start using them. This section covers some of the commonly accepted ones: + +- With ORMs, you form an object graph representation of database tables which may lead to the [object-relational impedance mismatch](https://en.wikipedia.org/wiki/Object-relational_impedance_mismatch). This happens when the problem you are solving forms a complex object graph which doesn't trivially map to a relational database. Synchronizing between two different representations of data, one in the relational database, and the other in-memory (with objects) is quite difficult. This is because objects are more flexible and varied in the way they can relate to each other compared to relational database records. +- While ORMs handle the complexity associated with the problem, the synchronization problem doesn't go away. Any changes to the database schema or the data model require the changes to be mapped back to the other side. This burden is often on the developer. In the context of a team working on a project, database schema changes require coordination. +- ORMs tend to have a large API surface due to the complexity they encapsulate. The flip side of not having to write SQL is that you spend a lot of time learning how to use the ORM. This applies to most abstractions, however without understanding how the database works, improving slow queries can be difficult. +- Some _complex queries_ aren't supported by ORMs due to the flexibility that SQL offers. This problem is alleviated by raw SQL querying functionality in which you pass the ORM a SQL statement string and the query is run for you. + +Now that the costs and benefits of ORMs have been covered, you can better understand what Prisma is and how it fits in. + +## Prisma + +Prisma is a **next-generation ORM** that makes working with databases easy for application developers and features the following tools: + +- [**Prisma Client**](/orm/prisma-client): Auto-generated and type-safe database client for use in your application. +- [**Prisma Migrate**](/orm/prisma-migrate): A declarative data modeling and migration tool. +- [**Prisma Studio**](/orm/tools/prisma-studio): A modern GUI for browsing and managing data in your database. + +> **Note:** Since Prisma Client is the most prominent tool, we often refer to it as simply Prisma. + +The three tools use the [Prisma schema](/orm/prisma-schema) as a single source of truth for the database schema, your application's object schema, and the mapping between the two. It's defined by you and is your main configuration file for Prisma. + +Prisma makes you productive and confident in the software you're building with features such as _type safety_, rich auto-completion, and a natural API for fetching relations. + +In the next section, you will learn about how Prisma implements the Data Mapper ORM pattern. + +### How Prisma implements the Data Mapper pattern + +As mentioned earlier in the article, the Data Mapper pattern aligns well with organizations where the database and application are owned by different teams. + +With the rise of modern cloud environments with managed database services and DevOps practices, more teams embrace a cross-functional approach, whereby teams own both the full development cycle including the database and operational concerns. + +Prisma enables the evolution of the DB schema and object schema in tandem, thereby reducing the need for deviation in the first place, while still allowing you to keep your application and database somewhat decoupled using `@map` attributes. While this may seem like a limitation, it prevents the domain model's evolution (through the object schema) from getting imposed on the database as an afterthought. + +To understand how Prisma's implementation of the Data Mapper pattern differs conceptually to traditional Data Mapper ORMs, here's a brief comparison of their concepts and building blocks: + +| Concept | Description | Building block in traditional ORMs | Building block in Prisma | Source of truth in Prisma | +| --------------- | -------------------------------------------------------------------- | ---------------------------------------------- | ------------------------------------ | ------------------------------------ | +| Object schema | The in-memory data structures in your applications | Model classes | Generated TypeScript types | Models in the Prisma schema | +| Data Mapper | The code which transforms between the object schema and the database | Mapper classes | Generated functions in Prisma Client | @map attributes in the Prisma schema | +| Database schema | The structure of data in the database, e.g., tables and columns | SQL written by hand or with a programmatic API | SQL generated by Prisma Migrate | Prisma schema | + +Prisma aligns with the Data Mapper pattern with the following added benefits: + +- Reducing the boilerplate of defining classes and mapping logic by generating a Prisma Client based on the Prisma schema. +- Eliminating the synchronization challenges between application objects and the database schema. +- Database migrations are a first-class citizen as they're derived from the Prisma schema. + +Now that we've talked about the concepts behind Prisma's approach to Data Mapper, we can go through how the Prisma schema works in practice. + +### Prisma schema + +At the heart of Prisma's implementation of the Data Mapper pattern is the _Prisma schema_ – a single source of truth for the following responsibilities: + +- Configuring how Prisma connects to your database. +- Generating Prisma Client – the type-safe ORM for use in your application code. +- Creating and evolving the database schema with Prisma Migrate. +- Defining the mapping between application objects and database columns. + +Models in Prisma mean something slightly different to Active Record ORMs. With Prisma, models are defined in the Prisma schema as abstract entities which describe tables, relations, and the mappings between columns to properties in Prisma Client. + +As an example, here's a Prisma schema for a blog: + +```prisma +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id Int @id @default(autoincrement()) + title String + content String? @map("post_content") + published Boolean @default(false) + author User? @relation(fields: [authorId], references: [id]) + authorId Int? +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] +} +``` + +Here's a break down of the example above: + +- The `datasource` block defines the connection to the database. +- The `generator` block tells Prisma to generate Prisma Client for TypeScript and Node.js. +- The `Post` and `User` models map to database tables. +- The two models have a _1-n_ relation where each `User` can have many related `Post`s. +- Each field in the models has a type, e.g. the `id` has the type `Int`. +- Fields may contain field attributes to define: + - Primary keys with the `@id` attribute. + - Unique keys with the `@unique` attribute. + - Default values with the `@default` attribute. + - Mapping between table columns and Prisma Client fields with the `@map` attribute, e.g., the `content` field (which will be accessible in Prisma Client) maps to the `post_content` database column. + +The `User` / `Post` relation can be visualized with the following diagram: + +![1-n relation between User and Post](../100-introduction/user-post-relation-1-n.png) + +At a Prisma level, the `User` / `Post` relation is made up of: + +- The scalar `authorId` field, which is referenced by the `@relation` attribute. This field exists in the database table – it is the foreign key that connects Post and User. +- The two relation fields: `author` and `posts` **do not exist** in the database table. Relation fields define connections between models at the Prisma level and exist only in the Prisma schema and generated Prisma Client, where they are used to access the relations. + +The declarative nature of Prisma schema is concise and allows defining the database schema and corresponding representation in Prisma Client. + +In the next section, you will learn about Prisma's supported workflows. + +### Prisma workflow + +The workflow with Prisma is slightly different to traditional ORMs. You can use Prisma when building new applications from scratch or adopt it incrementally: + +- _New application_ (greenfield): Projects that have no database schema yet can use Prisma Migrate to create the database schema. +- _Existing application_ (brownfield): Projects that already have a database schema can be [introspected](/orm/prisma-schema/introspection) by Prisma to generate the Prisma schema and Prisma Client. This use-case works with any existing migration tool and is useful for incremental adoption. It's possible to switch to Prisma Migrate as the migration tool. However, this is optional. + +With both workflows, the Prisma schema is the main configuration file. + +#### Workflow for incremental adoption in projects with an existing database + +Brownfield projects typically already have some database abstraction and schema. Prisma can integrate with such projects by introspecting the existing database to obtain a Prisma schema that reflects the existing database schema and to generate Prisma Client. This workflow is compatible with any migration tool and ORM which you may already be using. If you prefer to incrementally evaluate and adopt, this approach can be used as part of a [parallel adoption strategy](https://en.wikipedia.org/wiki/Parallel_adoption). + +A non-exhaustive list of setups compatible with this workflow: + +- Projects using plain SQL files with `CREATE TABLE` and `ALTER TABLE` to create and alter the database schema. +- Projects using a third party migration library like [db-migrate](https://github.com/db-migrate/node-db-migrate) or [Umzug](https://github.com/sequelize/umzug). +- Projects already using an ORM. In this case, database access through the ORM remains unchanged while the generated Prisma Client can be incrementally adopted. + +In practice, these are the steps necessary to introspect an existing DB and generate Prisma Client: + +1. Create a `schema.prisma` defining the `datasource` (in this case, your existing DB) and `generator`: + +```prisma +datasource db { + provider = "postgresql" + url = "postgresql://janedoe:janedoe@localhost:5432/hello-prisma" +} + +generator client { + provider = "prisma-client-js" +} +``` + +2. Run `prisma db pull` to populate the Prisma schema with models derived from your database schema. +3. (Optional) Customize [field and model mappings](/orm/prisma-schema/data-model/models#mapping-model-names-to-tables-or-collections) between Prisma Client and the database. +4. Run `prisma generate`. + +Prisma will generate Prisma Client inside the `node_modules` folder, from which it can be imported in your application. For more extensive usage documentation, see the [Prisma Client API](/orm/prisma-client) docs. + +To summarize, Prisma Client can be integrated into projects with an existing database and tooling as part of a parallel adoption strategy. New projects will use a different workflow detailed next. + +#### Workflow for new projects + +Prisma is different from ORMs in terms of the workflows it supports. A closer look at the steps necessary to create and change a new database schema is useful for understanding Prisma Migrate. + +Prisma Migrate is a CLI for declarative data modeling & migrations. Unlike most migration tools that come as part of an ORM, you only need to describe the current schema, instead of the operations to move from one state to another. Prisma Migrate infers the operations, generates the SQL and carries out the migration for you. + +This example demonstrates using Prisma in a new project with a new database schema similar to the blog example above: + +1. Create the Prisma schema: + +```prisma +// schema.prisma +datasource db { + provider = "postgresql" + url = "postgresql://janedoe:janedoe@localhost:5432/hello-prisma" +} + +generator client { + provider = "prisma-client-js" +} + +model Post { + id Int @id @default(autoincrement()) + title String + content String? @map("post_content") + published Boolean @default(false) + author User? @relation(fields: [authorId], references: [id]) + authorId Int? +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] +} +``` + +2. Run `prisma migrate` to generate the SQL for the migration, apply it to the database, and generate Prisma Client. + +For any further changes to the database schema: + +1. Apply changes to the Prisma schema, e.g., add a `registrationDate` field to the `User` model +1. Run `prisma migrate` again. + +The last step demonstrates how declarative migrations work by adding a field to the Prisma schema and using Prisma Migrate to transform the database schema to the desired state. After the migration is run, Prisma Client is automatically regenerated so that it reflects the updated schema. + +If you don't want to use Prisma Migrate but still want to use the type-safe generated Prisma Client in a new project, see the next section. + +##### Alternative for new projects without Prisma Migrate + +It is possible to use Prisma Client in a new project with a third-party migration tool instead of Prisma Migrate. For example, a new project could choose to use the Node.js migration framework [db-migrate](https://github.com/db-migrate/node-db-migrate) to create the database schema and migrations and Prisma Client for querying. In essence, this is covered by the [workflow for existing databases](#workflow-for-incremental-adoption-in-projects-with-an-existing-database). + +## Accessing data with Prisma Client + +So far, the article covered the concepts behind Prisma, its implementation of the Data Mapper pattern, and the workflows it supports. In this last section, you will see how to access data in your application using Prisma Client. + +Accessing the database with Prisma Client happens through the query methods it exposes. All queries return plain old JavaScript objects. Given the blog schema from above, fetching a user looks as follows: + +```ts +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +const user = await prisma.user.findUnique({ + where: { + email: 'alice@prisma.io', + }, +}) +``` + +In this query, the `findUnique` method is used to fetch a single row from the `User` table. By default, Prisma will return all the scalar fields in the `User` table. + +> **Note:** The example uses TypeScript to make full use of the type safety features offered by Prisma Client. However, Prisma also works with [JavaScript in Node.js](https://dev.to/prisma/productive-development-with-prisma-s-zero-cost-type-safety-4od2). + +Prisma Client maps queries and results to [structural types](https://en.wikipedia.org/wiki/Structural_type_system) by generating code from the Prisma schema. This means that `user` has an associated type in the generated Prisma Client: + +``` +export type User = { + id: number + email: string + name: string | null +} +``` + +This ensures that accessing a non-existent field will raise a type error. More broadly, it means that the result's type for every query is known ahead of running the query, which helps catch errors. For example, the following code snippet will raise a type error: + +```ts +console.log(user.lastName) // Property 'lastName' does not exist on type 'User'. +``` + +### Fetching relations + +Fetch relations with Prisma Client is done with the `include` option. For example, to fetch a user and their posts would be done as follows: + +```ts +const user = await prisma.user.findUnique({ + where: { + email: 'alice@prisma.io', + }, + include: { + posts: true, + }, +}) +``` + +With this query, `user`'s type will also include `Post`s which can be accessed with the `posts` array field: + +```ts +console.log(user.posts[0].title) +``` + +The example only scratches the surface of Prisma Client's API for [CRUD operations](/orm/prisma-client/queries/crud) which you can learn more about in the docs. The main idea is that all queries and results are backed by types and you have full control over how relations are fetched. + +## Conclusion + +In summary, Prisma is a new kind of Data Mapper ORM that differs from traditional ORMs and doesn't suffer from the problems commonly associated with them. + +Unlike traditional ORMs, with Prisma, you define the Prisma schema – a declarative single source of truth for the database schema and application models. All queries in Prisma Client return plain JavaScript objects which makes the process of interacting with the database a lot more natural as well as more predictable. + +Prisma supports two main workflows for starting new projects and adopting in an existing project. For both workflows, the Prisma schema is the main configuration file. + +Like all abstractions, both Prisma and other ORMs hide away some of the underlying details of the database with different assumptions. + +These differences and your use case all affect the workflow and cost of adoption. Hopefully understanding how they differ can help you make an informed decision. diff --git a/docs/200-orm/050-overview/300-prisma-in-your-stack/index.mdx b/docs/200-orm/050-overview/300-prisma-in-your-stack/index.mdx new file mode 100644 index 0000000000..3ba9ab5661 --- /dev/null +++ b/docs/200-orm/050-overview/300-prisma-in-your-stack/index.mdx @@ -0,0 +1,16 @@ +--- +title: 'Prisma in your stack' +metaTitle: 'How Prisma fits into your stack' +metaDescription: 'How Prisma fits into your stack' +toc: false +--- + + + +Prisma is an ORM that provides a fully type-safe API and simplified database access. You can use Prisma tools to build a GraphQL or REST API, or as part of a fullstack application - the extent to which you incorporate Prisma is up to you. + + + +## In this section + + diff --git a/docs/200-orm/050-overview/500-databases/200-database-drivers.mdx b/docs/200-orm/050-overview/500-databases/200-database-drivers.mdx new file mode 100644 index 0000000000..d9297fb4cc --- /dev/null +++ b/docs/200-orm/050-overview/500-databases/200-database-drivers.mdx @@ -0,0 +1,132 @@ +--- +title: 'Database drivers' +metaTitle: 'Database drivers' +metaDescription: 'Learn how Prisma connects to your database using the built-in drivers and how you can use Prisma along with other JavaScript database drivers using driver adapters (Preview)' +tocDepth: 4 +--- + +## Default built-in drivers + +One of Prisma Client's components is the [Query Engine](/orm/more/under-the-hood/engines) . The Query Engine is responsible for transforming Prisma Client queries to SQL statements. The Query Engine connects to your database using the included drivers that don't require additional setup. The built-in drivers use TCP connections to connect to the database. + +![Query flow from the user application to the database with Prisma Client](./images/drivers/qe-query-execution-flow.png) + +## Driver adapters + +Prisma Client can connect and run queries against your database using JavaScript database drivers using **driver adapters**. Adapters act as _translators_ between Prisma Client and the JavaScript database driver. + +Prisma will use the Query Engine to transform the Prisma Client query to SQL and run the generated SQL queries via the JavaScript database driver. + +![Query flow from the user application to the database using Prisma Client and driver adapters](./images/drivers/qe-query-engine-adapter.png) + +There are 2 different types of driver adapters: + +- [Database driver adapters](#database-driver-adapters) +- [Serverless driver adapters](#serverless-driver-adapters) + +### Database driver adapters + +You can connect to your database using a Node.js-based driver from Prisma Client using a database driver adapter. Prisma maintains the following database driver adapters: + +- [PostgreSQL](/orm/overview/databases/postgresql#using-the-node-postgres-driver) +- [Turso](/orm/overview/databases/turso#how-to-connect-and-query-a-turso-database) + +### Serverless driver adapters + +Database providers, such as Neon and PlanetScale, allow you to connect to your database using other protocols besides TCP, such as HTTP and WebSockets. These database drivers are optimized for connecting to your database in serverless and edge environments. + +Prisma maintains the following serverless driver adapters: + +- [Neon](/orm/overview/databases/neon#how-to-use-neons-serverless-driver-with-prisma-preview) +- [PlanetScale](/orm/overview/databases/planetscale#how-to-use-the-planetscale-serverless-driver-with-prisma-preview) + +## Community maintained database driver adapters + +You can also build your own driver adapter for the database you're using. The following is a list of community maintained driver adapters: + +- [TiDB](https://github.com/tidbcloud/prisma-adapter) + +### How to use driver adapters + +To use this feature: + +1. Update the `previewFeatures` block in your schema to include the the `driverAdapters` Preview feature: + + ```prisma + generator client { + provider = "prisma-client-js" + previewFeatures = ["driverAdapters"] + } + ``` + +2. Generate Prisma Client: + + ```sh + npx prisma generate + ``` + +3. Refer to the following pages to learn more how to use the specific driver adapters with the specific database providers: + + - [Neon](/orm/overview/databases/neon#how-to-use-neons-serverless-driver-with-prisma-preview) + - [PlanetScale](/orm/overview/databases/planetscale#how-to-use-the-planetscale-serverless-driver-with-prisma-preview) + - [Turso](/orm/overview/databases/turso#how-to-connect-and-query-a-turso-database) + +### Driver adapters and custom output paths + +Since Prisma 5.9.0, when using the driver adapters Preview feature along with a [custom output path for Prisma Client](/orm/prisma-client/setup-and-configuration/generating-prisma-client#using-a-custom-output-path), you cannot reference Prisma Client using a relative path. + +Let's assume you had `output` in your Prisma schema set to `../src/generated/client`: + +```prisma +generator client { + provider = "prisma-client-js" + output = "../src/generated/client" +} +``` + +What you should **not** do is reference that path relatively: + +```ts no-copy +// what not to do! +import { PrismaClient } from './src/generated/client' + +const client = new PrismaClient() +``` + +Instead, you will need to use a linked dependency. + + + + + +```terminal +npm add db@./src/generated/client +``` + + + + + +```terminal +pnpm add db@link:./src/generated/client +``` + + + + + +```terminal +yarn add db@link:./src/generated/client +``` + + + + + +Now you should be able to reference your generated client using `db`! + +```ts +import { PrismaClient } from 'db' + +const client = new PrismaClient() +``` diff --git a/docs/200-orm/050-overview/500-databases/300-postgresql.mdx b/docs/200-orm/050-overview/500-databases/300-postgresql.mdx new file mode 100644 index 0000000000..a1a48a64cd --- /dev/null +++ b/docs/200-orm/050-overview/500-databases/300-postgresql.mdx @@ -0,0 +1,302 @@ +--- +title: 'PostgreSQL' +metaTitle: 'PostgreSQL database connector' +metaDescription: 'This page explains how Prisma can connect to a PostgreSQL database using the PostgreSQL database connector.' +tocDepth: 3 +--- + + + +The PostgreSQL data source connector connects Prisma to a [PostgreSQL](https://www.postgresql.org/) database server. + +By default, the PostgreSQL connector contains a database driver responsible for connecting to your database. You can use a [driver adapter](/orm/overview/databases/database-drivers#driver-adapters) (Preview) to connect to your database using a JavaScript database driver from Prisma Client. + + + +## Example + +To connect to a PostgreSQL database server, you need to configure a [`datasource`](/orm/prisma-schema/overview/data-sources) block in your [Prisma schema file](/orm/prisma-schema): + +```prisma file=schema.prisma +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +The fields passed to the `datasource` block are: + +- `provider`: Specifies the `postgresql` data source connector. +- `url`: Specifies the [connection URL](#connection-url) for the PostgreSQL database server. In this case, an [environment variable is used](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) to provide the connection URL. + +## Using the `node-postgres` driver + +As of [`v5.4.0`](https://github.com/prisma/prisma/releases/tag/5.4.0), you can use Prisma ORM with database drivers from the JavaScript ecosystem (instead of using Prisma ORM's built-in drivers). You can do this by using a [driver adapter](/orm/overview/databases/database-drivers). + +For PostgreSQL, [`node-postgres`](https://node-postgres.com) (`pg`) is one of the most popular drivers in the JavaScript ecosystem. It can be used with any PostgreSQL database that's accessed via TCP. + +This section explains how you can use it with Prisma ORM and the `@prisma/adapter-pg` driver adapter. + +### 1. Enable the `driverAdapters` Preview feature flag + +Since driver adapters are currently in [Preview](/orm/more/releases#preview), you need to enable its feature flag on the `datasource` block in your Prisma schema: + +```prisma +// schema.prisma +generator client { + provider = "prisma-client-js" + previewFeatures = ["driverAdapters"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Once you have added the feature flag to your schema, re-generate Prisma Client: + +```terminal copy +npx prisma generate +``` + +### 2. Install the dependencies + +Next, install the `pg` package and Prisma ORM's driver adapter: + +```terminal copy +npm install pg +npm install @prisma/adapter-pg +``` + +### 3. Instantiate Prisma Client using the driver adapter + +Finally, when you instantiate Prisma Client, you need to pass an instance of Prisma ORM's driver adapter to the `PrismaClient` constructor: + +```ts copy +import { Pool } from 'pg' +import { PrismaPg } from '@prisma/adapter-pg' +import { PrismaClient } from '@prisma/client' + +const connectionString = `${process.env.DATABASE_URL}` + +const pool = new Pool({ connectionString }) +const adapter = new PrismaPg(pool) +const prisma = new PrismaClient({ adapter }) +``` + +Notice that this code requires the `DATABASE_URL` environment variable to be set to your PostgreSQL connection string. You can learn more about the connection string below. + +## Connection details + +### Connection URL + +Prisma is based on the [official PostgreSQL format](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING) for connection URLs, but does not support all arguments and includes additional arguments such as `schema`. Here's an overview of the components needed for a PostgreSQL connection URL: + +![Structure of the PostgreSQL connection URL](postgresql-connection-string.png) + +#### Base URL and path + +Here is an example of the structure of the _base URL_ and the _path_ using placeholder values in uppercase letters: + +``` +postgresql://USER:PASSWORD@HOST:PORT/DATABASE +``` + +The following components make up the _base URL_ of your database, they are always required: + +| Name | Placeholder | Description | +| :------- | :---------- | :-------------------------------------------------------------------------------------------------------------- | +| Host | `HOST` | IP address/domain of your database server, e.g. `localhost` | +| Port | `PORT` | Port on which your database server is running, e.g. `5432` | +| User | `USER` | Name of your database user, e.g. `janedoe` | +| Password | `PASSWORD` | Password for your database user | +| Database | `DATABASE` | Name of the [database](https://www.postgresql.org/docs/12/manage-ag-overview.html) you want to use, e.g. `mydb` | + + + +You must [percentage-encode special characters](/orm/reference/connection-urls#special-characters). + + + +#### Arguments + +A connection URL can also take arguments. Here is the same example from above with placeholder values in uppercase letters for three _arguments_: + +``` +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?KEY1=VALUE&KEY2=VALUE&KEY3=VALUE +``` + +The following arguments can be used: + +| Argument name | Required | Default | Description | +| :--------------------- | :------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `schema` | **Yes** | `public` | Name of the [schema](https://www.postgresql.org/docs/12/ddl-schemas.html) you want to use, e.g. `myschema` | +| `connection_limit` | No | `num_cpus * 2 + 1` | Maximum size of the [connection pool](/orm/prisma-client/setup-and-configuration/databases-connections/connection-pool) | +| `connect_timeout` | No | `5` | Maximum number of seconds to wait for a new connection to be opened, `0` means no timeout | +| `pool_timeout` | No | `10` | Maximum number of seconds to wait for a new connection from the pool, `0` means no timeout | +| `sslmode` | No | `prefer` | Configures whether to use TLS. Possible values: `prefer`, `disable`, `require` | +| `sslcert` | No | | Path of the server certificate. Certificate paths are [resolved relative to the `./prisma folder`](/orm/prisma-schema/overview/data-sources#securing-database-connections) | +| `sslidentity` | No | | Path to the PKCS12 certificate | +| `sslpassword` | No | | Password that was used to secure the PKCS12 file | +| `sslaccept` | No | `accept_invalid_certs` | Configures whether to check for missing values in the certificate. Possible values: `accept_invalid_certs`, `strict` | +| `host` | No | | Points to a directory that contains a socket to be used for the connection | +| `socket_timeout` | No | | Maximum number of seconds to wait until a single query terminates | +| `pgbouncer` | No | `false` | Configure the Engine to [enable PgBouncer compatibility mode](/orm/prisma-client/setup-and-configuration/databases-connections/pgbouncer) | +| `statement_cache_size` | No | `500` | Since 2.1.0: Specifies the number of [prepared statements](#prepared-statement-caching) cached per connection | +| `application_name` | No | | Since 3.3.0: Specifies a value for the application_name configuration parameter | +| `channel_binding` | No | `prefer` | Since 4.8.0: Specifies a value for the channel_binding configuration parameter | +| `options` | No | | Since 3.8.0: Specifies command line options to send to the server at connection start | + +As an example, if you want to connect to a schema called `myschema`, set the connection pool size to `5` and configure a timeout for queries of `3` seconds. You can use the following arguments: + +``` +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?schema=myschema&connection_limit=5&socket_timeout=3 +``` + +### Configuring an SSL connection + +You can add various parameters to the connection URL if your database server uses SSL. Here's an overview of the possible parameters: + +- `sslmode=(disable|prefer|require)`: + - `prefer` (default): Prefer TLS if possible, accept plain text connections. + - `disable`: Do not use TLS. + - `require`: Require TLS or fail if not possible. +- `sslcert=`: Path to the server certificate. This is the root certificate used by the database server to sign the client certificate. You need to provide this if the certificate doesn't exist in the trusted certificate store of your system. For Google Cloud this likely is `server-ca.pem`. Certificate paths are [resolved relative to the `./prisma folder`](/orm/prisma-schema/overview/data-sources#securing-database-connections) +- `sslidentity=`: Path to the PKCS12 certificate database created from client cert and key. This is the SSL identity file in PKCS12 format which you will generate using the client key and client certificate. It combines these two files in a single file and secures them via a password (see next parameter). You can create this file using your client key and client certificate by using the following command (using `openssl`): + ``` + openssl pkcs12 -export -out client-identity.p12 -inkey client-key.pem -in client-cert.pem + ``` +- `sslpassword=`: Password that was used to secure the PKCS12 file. The `openssl` command listed in the previous step will ask for a password while creating the PKCS12 file, you will need to provide that same exact password here. +- `sslaccept=(strict|accept_invalid_certs)`: + - `strict`: Any missing value in the certificate will lead to an error. For Google Cloud, especially if the database doesn't have a domain name, the certificate might miss the domain/IP address, causing an error when connecting. + - `accept_invalid_certs` (default): Bypass this check. Be aware of the security consequences of this setting. + +Your database connection URL will look similar to this: + +``` +postgresql://USER:PASSWORD@HOST:PORT/DATABASE?sslidentity=client-identity.p12&sslpassword=mypassword&sslcert=rootca.cert +``` + +### Connecting via sockets + +To connect to your PostgreSQL database via sockets, you must add a `host` field as a _query parameter_ to the connection URL (instead of setting it as the `host` part of the URI). +The value of this parameter then must point to the directory that contains the socket, e.g.: `postgresql://USER:PASSWORD@localhost/database?host=/var/run/postgresql/` + +Note that `localhost` is required, the value itself is ignored and can be anything. + +> **Note**: You can find additional context in this [GitHub issue](https://github.com/prisma/prisma-client-js/issues/437#issuecomment-592436707). + +## Type mapping between PostgreSQL and Prisma schema + +These two tables show the type mapping between PostgreSQL and Prisma schema. First [how Prisma scalar types are translated into PostgreSQL database column types](#mapping-between-prisma-scalar-types-and-postgresql-database-column-types), and then [how PostgreSQL database column types relate to Prisma scalar and native types](#mapping-between-postgresql-database-column-types-to-prisma-scalar-and-native-types). + +> Alternatively, see [Prisma schema reference](/orm/reference/prisma-schema-reference#model-field-scalar-types) for type mappings organized by Prisma type. + +### Mapping between Prisma scalar types and PostgreSQL database column types + +The PostgreSQL connector maps the [scalar types](/orm/prisma-schema/data-model/models#scalar-fields) from the Prisma [data model](/orm/prisma-schema/data-model/models) as follows to database column types: + +| Prisma | PostgreSQL | +| ---------- | ------------------ | +| `String` | `text` | +| `Boolean` | `boolean` | +| `Int` | `integer` | +| `BigInt` | `bigint` | +| `Float` | `double precision` | +| `Decimal` | `decimal(65,30)` | +| `DateTime` | `timestamp(3)` | +| `Json` | `jsonb` | +| `Bytes` | `bytea` | + +### Mapping between PostgreSQL database column types to Prisma scalar and native types + +- When [introspecting](/orm/prisma-schema/introspection) a PostgreSQL database, the database types are mapped to Prisma types according to the following table. +- When [creating a migration](/orm/prisma-migrate) or [prototyping your schema](/orm/prisma-migrate/workflows/prototyping-your-schema) the table is also used - in the other direction. + +| PostgreSQL (Type \| Aliases) | Supported | Prisma | Native database type attribute | Notes | +| ------------------------------------------- | :-------: | ------------- | :--------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `bigint` \| `int8` | ✔️ | `BigInt` | `@db.BigInt`\* | \*Default mapping for `BigInt` - no type attribute added to schema. | +| `boolean` \| `bool` | ✔️ | `Bool` | `@db.Boolean`\* | \*Default mapping for `Bool` - no type attribute added to schema. | +| `timestamp with time zone` \| `timestamptz` | ✔️ | `DateTime` | `@db.Timestamptz(x)` | +| `time without time zone` \| `time` | ✔️ | `DateTime` | `@db.Time(x)` | +| `time with time zone` \| `timetz` | ✔️ | `DateTime` | `@db.Timetz(x)` | +| `numeric(p,s)` \| `decimal(p,s)` | ✔️ | `Decimal` | `@db.Decimal(x, y)` | +| `real` \| `float`, `float4` | ✔️ | `Float` | `@db.Real` | +| `double precision` \| `float8` | ✔️ | `Float` | `@db.DoublePrecision`\* | \*Default mapping for `Float` - no type attribute added to schema. | +| `smallint` \| `int2` | ✔️ | `Int` | `@db.SmallInt` | | +| `integer` \| `int`, `int4` | ✔️ | `Int` | `@db.Int`\* | \*Default mapping for `Int` - no type attribute added to schema. | +| `smallserial` \| `serial2` | ✔️ | `Int` | `@db.SmallInt @default(autoincrement())` | +| `serial` \| `serial4` | ✔️ | `Int` | `@db.Int @default(autoincrement())` | +| `bigserial` \| `serial8` | ✔️ | `Int` | `@db.BigInt @default(autoincrement()` | +| `character(n)` \| `char(n)` | ✔️ | `String` | `@db.Char(x)` | +| `character varying(n)` \| `varchar(n)` | ✔️ | `String` | `@db.VarChar(x)` | +| `money` | ✔️ | `Decimal` | `@db.Money` | +| `text` | ✔️ | `String` | `@db.Text`\* | \*Default mapping for `String` - no type attribute added to schema. | +| `timestamp` | ✔️ | `DateTime` | `@db.TimeStamp`\* | \*Default mapping for `DateTime` - no type attribute added to schema. | +| `date` | ✔️ | `DateTime` | `@db.Date` | +| `enum` | ✔️ | `Enum` | N/A | +| `inet` | ✔️ | `String` | `@db.Inet` | +| `bit(n)` | ✔️ | `String` | `@Bit(x)` | +| `bit varying(n)` | ✔️ | `String` | `@VarBit` | +| `oid` | ✔️ | `Int` | `@db.Oid` | +| `uuid` | ✔️ | `String` | `@db.Uuid` | +| `json` | ✔️ | `Json` | `@db.Json` | +| `jsonb` | ✔️ | `Json` | `@db.JsonB`\* | \*Default mapping for `Json` - no type attribute added to schema. | +| `bytea` | ✔️ | `Bytes` | `@db.ByteA`\* | \*Default mapping for `Bytes` - no type attribute added to schema. | +| `xml` | ✔️ | `String` | `@db.Xml` | +| Array types | ✔️ | `[]` | +| `citext` | ✔️\* | `String` | `@db.Citext` | \* Only available if [Citext extension is enabled](/orm/prisma-schema/data-model/unsupported-database-features#enable-postgresql-extensions-for-native-database-functions). | +| `interval` | Not yet | `Unsupported` | | | +| `cidr` | Not yet | `Unsupported` | | | +| `macaddr` | Not yet | `Unsupported` | | | +| `tsvector` | Not yet | `Unsupported` | | | +| `tsquery` | Not yet | `Unsupported` | | | +| `int4range` | Not yet | `Unsupported` | | | +| `int8range` | Not yet | `Unsupported` | | | +| `numrange` | Not yet | `Unsupported` | | | +| `tsrange` | Not yet | `Unsupported` | | | +| `tstzrange` | Not yet | `Unsupported` | | | +| `daterange` | Not yet | `Unsupported` | | | +| `point` | Not yet | `Unsupported` | | | +| `line` | Not yet | `Unsupported` | | | +| `lseg` | Not yet | `Unsupported` | | | +| `box` | Not yet | `Unsupported` | | | +| `path` | Not yet | `Unsupported` | | | +| `polygon` | Not yet | `Unsupported` | | | +| `circle` | Not yet | `Unsupported` | | | +| Composite types | Not yet | n/a | | | +| Domain types | Not yet | n/a | | | + +[Introspection](/orm/prisma-schema/introspection) adds native database types that are **not yet supported** as [`Unsupported`](/orm/reference/prisma-schema-reference#unsupported) fields: + +```prisma file=schema.prisma +model Device { + id Int @id @default(autoincrement()) + name String + data Unsupported("circle") +} +``` + +## Prepared statement caching + +A [prepared statement](https://www.postgresql.org/docs/current/sql-prepare.html) is a feature that can be used to optimize performance. A prepared statement is parsed, compiled, and optimized only once and then can be executed directly multiple times without the overhead of parsing the query again. + +By caching prepared statements, Prisma Client's [query engine](/orm/more/under-the-hood/engines) does not repeatedly compile the same query which reduces database CPU usage and query latency. + +For example, here is the generated SQL for two different queries made by Prisma Client: + +```sql +SELECT * FROM user WHERE name = "John"; +SELECT * FROM user WHERE name = "Brenda"; +``` + +The two queries after parameterization will be the same, and the second query can skip the preparing step, saving database CPU and one extra roundtrip to the database. Query after parameterization: + +```sql +SELECT * FROM user WHERE name = $1 +``` + +Every database connection maintained by Prisma has a separate cache for storing prepared statements. The size of this cache can be tweaked with the `statement_cache_size` parameter in the connection string. By default, Prisma Client caches 500 statements per connection. + +Due to the nature of pgBouncer, if the `pgbouncer` parameter is set to `true`, the prepared statement cache is automatically disabled for that connection. diff --git a/docs/200-orm/050-overview/500-databases/400-mysql.mdx b/docs/200-orm/050-overview/500-databases/400-mysql.mdx new file mode 100644 index 0000000000..cabbaee1e0 --- /dev/null +++ b/docs/200-orm/050-overview/500-databases/400-mysql.mdx @@ -0,0 +1,206 @@ +--- +title: 'MySQL' +metaTitle: 'MySQL database connector' +metaDescription: 'This page explains how Prisma can connect to a MySQL database using the MySQL database connector.' +tocDepth: 3 +--- + + + +The MySQL data source connector connects Prisma to a [MySQL](https://www.mysql.com/) database server. + +By default, the MySQL connector contains a database driver responsible for connecting to your database. You can use a [driver adapter](/orm/overview/databases/database-drivers#driver-adapters) (Preview) to connect to your database using a JavaScript database driver from Prisma Client. + + + +## Example + +To connect to a MySQL database server, you need to configure a [`datasource`](/orm/prisma-schema/overview/data-sources) block in your [Prisma schema file](/orm/prisma-schema): + +```prisma file=schema.prisma +datasource db { + provider = "mysql" + url = env("DATABASE_URL") +} +``` + +The fields passed to the `datasource` block are: + +- `provider`: Specifies the `mysql` data source connector. +- `url`: Specifies the [connection URL](#connection-url) for the MySQL database server. In this case, an [environment variable is used](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) to provide the connection URL. + +## Connection details + +### Connection URL + +Here's an overview of the components needed for a MySQL connection URL: + +![Structure of the MySQL connection URL](mysql-connection-string.png) + +#### Base URL and path + +Here is an example of the structure of the _base URL_ and the _path_ using placeholder values in uppercase letters: + +``` +mysql://USER:PASSWORD@HOST:PORT/DATABASE +``` + +The following components make up the _base URL_ of your database, they are always required: + +| Name | Placeholder | Description | +| :------- | :---------- | :------------------------------------------------------------------------------------------------------------------ | +| Host | `HOST` | IP address/domain of your database server, e.g. `localhost` | +| Port | `PORT` | Port on which your database server is running, e.g. `5432` | +| User | `USER` | Name of your database user, e.g. `janedoe` | +| Password | `PASSWORD` | Password for your database user | +| Database | `DATABASE` | Name of the [database](https://dev.mysql.com/doc/refman/8.0/en/creating-database.html) you want to use, e.g. `mydb` | + + + +You must [percentage-encode special characters](/orm/reference/connection-urls#special-characters). + + + +#### Arguments + +A connection URL can also take arguments. Here is the same example from above with placeholder values in uppercase letters for three _arguments_: + +``` +mysql://USER:PASSWORD@HOST:PORT/DATABASE?KEY1=VALUE&KEY2=VALUE&KEY3=VALUE +``` + +The following arguments can be used: + +| Argument name | Required | Default | Description | +| :----------------- | :------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `connection_limit` | No | `num_cpus * 2 + 1` | Maximum size of the [connection pool](/orm/prisma-client/setup-and-configuration/databases-connections/connection-pool) | +| `connect_timeout` | No | `5` | Maximum number of seconds to wait for a new connection to be opened, `0` means no timeout | +| `pool_timeout` | No | `10` | Maximum number of seconds to wait for a new connection from the pool, `0` means no timeout | +| `sslcert` | No | | Path to the server certificate. Certificate paths are [resolved relative to the `./prisma folder`](/orm/prisma-schema/overview/data-sources#securing-database-connections) | +| `sslidentity` | No | | Path to the PKCS12 certificate | +| `sslpassword` | No | | Password that was used to secure the PKCS12 file | +| `sslaccept` | No | `accept_invalid_certs` | Configures whether to check for missing values in the certificate. Possible values: `accept_invalid_certs`, `strict` | +| `socket` | No | | Points to a directory that contains a socket to be used for the connection | +| `socket_timeout` | No | | Number of seconds to wait until a single query terminates | + +As an example, if you want to set the connection pool size to `5` and configure a timeout for queries of `3` seconds, you can use the following arguments: + +``` +mysql://USER:PASSWORD@HOST:PORT/DATABASE?connection_limit=5&socket_timeout=3 +``` + +### Configuring an SSL connection + +You can add various parameters to the connection URL if your database server uses SSL. Here's an overview of the possible parameters: + +- `sslcert=`: Path to the server certificate. This is the root certificate used by the database server to sign the client certificate. You need to provide this if the certificate doesn't exist in the trusted certificate store of your system. For Google Cloud this likely is `server-ca.pem`. Certificate paths are [resolved relative to the `./prisma folder`](/orm/prisma-schema/overview/data-sources#securing-database-connections) + +- `sslidentity=`: Path to the PKCS12 certificate database created from client cert and key. This is the SSL identity file in PKCS12 format which you will generate using the client key and client certificate. It combines these two files in a single file and secures them via a password (see next parameter). You can create this file using your client key and client certificate by using the following command (using `openssl`): + ``` + openssl pkcs12 -export -out client-identity.p12 -inkey client-key.pem -in client-cert.pem + ``` +- `sslpassword=`: Password that was used to secure the PKCS12 file. The `openssl` command listed in the previous step will ask for a password while creating the PKCS12 file, you will need to provide that same exact password here. +- `sslaccept=(strict|accept_invalid_certs)`: + - `strict`: Any missing value in the certificate will lead to an error. For Google Cloud, especially if the database doesn't have a domain name, the certificate might miss the domain/IP address, causing an error when connecting. + - `accept_invalid_certs` (default): Bypass this check. Be aware of the security consequences of this setting. + +Your database connection URL will look similar to this: + +``` +mysql://USER:PASSWORD@HOST:PORT/DATABASE?sslidentity=client-identity.p12&sslpassword=mypassword&sslcert=rootca.cert +``` + +### Connecting via sockets + +To connect to your MySQL database via sockets, you must add a `socket` field as a _query parameter_ to the connection URL (instead of setting it as the `host` part of the URI). +The value of this parameter then must point to the directory that contains the socket, e.g.: `mysql://USER:POST@localhost/database?socket=/var/run/mysql/` + +Note that `localhost` is required, the value itself is ignored and can be anything. + +> **Note**: You can find additional context in this [GitHub issue](https://github.com/prisma/prisma-client-js/issues/437#issuecomment-592436707). + +## Type mapping between MySQL to Prisma schema + +The MySQL connector maps the [scalar types](/orm/prisma-schema/data-model/models#scalar-fields) from the Prisma [data model](/orm/prisma-schema/data-model/models) as follows to native column types: + +> Alternatively, see [Prisma schema reference](/orm/reference/prisma-schema-reference#model-field-scalar-types) for type mappings organized by Prisma type. + +### Native type mapping from Prisma to MySQL + +| Prisma | MySQL | Notes | +| ---------- | ---------------- | ------------------------------------------------ | +| `String` | `VARCHAR(191)` | | +| `Boolean` | `BOOLEAN` | In MySQL `BOOLEAN` is a synonym for `TINYINT(1)` | +| `Int` | `INT` | | +| `BigInt` | `BIGINT` | +| `Float` | `DOUBLE` | | +| `Decimal` | `DECIMAL(65,30)` | +| `DateTime` | `DATETIME(3)` | | +| `Json` | `JSON` | Supported in MySQL 5.7+ only | +| `Bytes` | `LONGBLOB` | + +### Native type mappings + +When introspecting a MySQL database, the database types are mapped to Prisma according to the following table: + +| MySQL | Prisma | Supported | Native database type attribute | Notes | +| ------------------------- | ------------- | --------- | ---------------------------------------------- | ------------------------------------------------------------------ | +| `serial` | `BigInt` | ✔️ | `@db.UnsignedBigInt @default(autoincrement())` | +| `bigint` | `BigInt` | ✔️ | `@db.BigInt` | +| `bigint unsigned` | `BigInt` | ✔️ | `@db.UnsignedBigInt` | +| `bit` | `Bytes` | ✔️ | `@db.Bit(x)` | `bit(1)` maps to `Boolean` - all other `bit(x)` map to `Bytes` | +| `boolean` \| `tinyint(1)` | `Boolean` | ✔️ | `@db.TinyInt(1)` | +| `varbinary` | `Bytes` | ✔️ | `@db.VarBinary` | +| `longblob` | `Bytes` | ✔️ | `@db.LongBlob` | +| `tinyblob` | `Bytes` | ✔️ | `@db.TinyBlob` | +| `mediumblob` | `Bytes` | ✔️ | `@db.MediumBlob` | +| `blob` | `Bytes` | ✔️ | `@db.Blob` | +| `binary` | `Bytes` | ✔️ | `@db.Binary` | +| `date` | `DateTime` | ✔️ | `@db.Date` | +| `datetime` | `DateTime` | ✔️ | `@db.DateTime` | +| `timestamp` | `DateTime` | ✔️ | `@db.TimeStamp` | +| `time` | `DateTime` | ✔️ | `@db.Time` | +| `decimal(a,b)` | `Decimal` | ✔️ | `@db.Decimal(x,y)` | +| `numeric(a,b)` | `Decimal` | ✔️ | `@db.Decimal(x,y)` | +| `enum` | `Enum` | ✔️ | N/A | +| `float` | `Float` | ✔️ | `@db.Float` | +| `double` | `Float` | ✔️ | `@db.Double` | +| `smallint` | `Int` | ✔️ | `@db.SmallInt` | +| `smallint unsigned` | `Int` | ✔️ | `@db.UnsignedSmallInt` | +| `mediumint` | `Int` | ✔️ | `@db.MediumInt` | +| `mediumint unsigned` | `Int` | ✔️ | `@db.UnsignedMediumInt` | +| `int` | `Int` | ✔️ | `@db.Int` | +| `int unsigned` | `Int` | ✔️ | `@db.UnsignedInt` | +| `tinyint` | `Int` | ✔️ | `@db.TinyInt(x)` | `tinyint(1)` maps to `Boolean` all other `tinyint(x)` map to `Int` | +| `tinyint unsigned` | `Int` | ✔️ | `@db.UnsignedTinyInt(x)` | `tinyint(1) unsigned` **does not** map to `Boolean` | +| `year` | `Int` | ✔️ | `@db.Year` | +| `json` | `Json` | ✔️ | `@db.Json` | Supported in MySQL 5.7+ only | +| `char` | `String` | ✔️ | `@db.Char(x)` | +| `varchar` | `String` | ✔️ | `@db.VarChar(x)` | +| `tinytext` | `String` | ✔️ | `@db.TinyText` | +| `text` | `String` | ✔️ | `@db.Text` | +| `mediumtext` | `String` | ✔️ | `@db.MediumText` | +| `longtext` | `String` | ✔️ | `@db.LongText` | +| `set` | `Unsupported` | Not yet | | +| `geometry` | `Unsupported` | Not yet | | +| `point` | `Unsupported` | Not yet | | +| `linestring` | `Unsupported` | Not yet | | +| `polygon` | `Unsupported` | Not yet | | +| `multipoint` | `Unsupported` | Not yet | | +| `multilinestring` | `Unsupported` | Not yet | | +| `multipolygon` | `Unsupported` | Not yet | | +| `geometrycollection` | `Unsupported` | Not yet | | + +[Introspection](/orm/prisma-schema/introspection) adds native database types that are **not yet supported** as [`Unsupported`](/orm/reference/prisma-schema-reference#unsupported) fields: + +```prisma file=schema.prisma +model Device { + id Int @id @default(autoincrement()) + name String + data Unsupported("circle") +} +``` + +## Engine + +If you are using a version of MySQL where MyISAM is the default engine, you must specify `ENGINE = InnoDB;` when you create a table. If you introspect a database that uses a different engine, relations in the Prisma Schema are not created (or lost, if the relation already existed). diff --git a/docs/200-orm/050-overview/500-databases/500-sqlite.mdx b/docs/200-orm/050-overview/500-databases/500-sqlite.mdx new file mode 100644 index 0000000000..fc31ca5d47 --- /dev/null +++ b/docs/200-orm/050-overview/500-databases/500-sqlite.mdx @@ -0,0 +1,93 @@ +--- +title: 'SQLite' +metaTitle: 'SQLite database connector' +metaDescription: 'This page explains how Prisma can connect to a SQLite database using the SQLite database connector.' +tocDepth: 3 +--- + + + +The SQLite data source connector connects Prisma to a [SQLite](https://www.sqlite.org/) database file. These files always have the file ending `.db` (e.g.: `dev.db`). + +By default, the SQLite connector contains a database driver responsible for connecting to your database. You can use a [driver adapter](/orm/overview/databases/database-drivers#driver-adapters) (Preview) to connect to your database using a JavaScript database driver from Prisma Client. + + + +## Example + +To connect to a SQLite database file, you need to configure a [`datasource`](/orm/prisma-schema/overview/data-sources) block in your [schema file](/orm/prisma-schema): + +```prisma file=schema.prisma +datasource db { + provider = "sqlite" + url = "file:./dev.db" +} +``` + +The fields passed to the `datasource` block are: + +- `provider`: Specifies the `sqlite` data source connector. +- `url`: Specifies the [connection URL](/orm/reference/connection-urls) for the SQLite database. The connection URL always starts with the prefix `file:` and then contains a file path pointing to the SQLite database file. In this case, the file is located in the same directory and called `dev.db`. + +## Type mapping between SQLite to Prisma schema + +The SQLite connector maps the [scalar types](/orm/prisma-schema/data-model/models#scalar-fields) from the [data model](/orm/prisma-schema/data-model/models) to native column types as follows: + +> Alternatively, see [Prisma schema reference](/orm/reference/prisma-schema-reference#model-field-scalar-types) for type mappings organized by Prisma type. + +### Native type mapping from Prisma to SQLite + +| Prisma | SQLite | +| ---------- | ------------- | +| `String` | `TEXT` | +| `Boolean` | `BOOLEAN` | +| `Int` | `INTEGER` | +| `BigInt` | `INTEGER` | +| `Float` | `REAL` | +| `Decimal` | `DECIMAL` | +| `DateTime` | `NUMERIC` | +| `Json` | Not supported | +| `Bytes` | `BLOB` | + +## Rounding errors on big numbers + +SQLite is a loosely-typed database. If your Schema has a field of type `Int`, then Prisma prevents you from inserting a value larger than an integer. However, nothing prevents the database from directly accepting a bigger number. These manually-inserted big numbers cause rounding errors when queried. + +To avoid this problem, Prisma 4.0.0 and later checks numbers on the way out of the database to verify that they fit within the boundaries of an integer. If a number does not fit, then Prisma throws a P2023 error, such as: + +``` +Inconsistent column data: Conversion failed: +Value 9223372036854775807 does not fit in an INT column, +try migrating the 'int' column type to BIGINT +``` + +## Connection details + +### Connection URL + +The connection URL of a SQLite connector points to a file on your file system. For example, the following two paths are equivalent because the `.db` is in the same directory: + +```prisma file=schema.prisma +datasource db { + provider = "sqlite" + url = "file:./dev.db" +} +``` + +is the same as: + +```prisma file=schema.prisma +datasource db { + provider = "sqlite" + url = "file:dev.db" +} +``` + +You can also target files from the root or any other place in your file system: + +```prisma file=schema.prisma +datasource db { + provider = "sqlite" + url = "file:/Users/janedoe/dev.db" +} +``` diff --git a/docs/200-orm/050-overview/500-databases/600-mongodb.mdx b/docs/200-orm/050-overview/500-databases/600-mongodb.mdx new file mode 100644 index 0000000000..e3abdba63e --- /dev/null +++ b/docs/200-orm/050-overview/500-databases/600-mongodb.mdx @@ -0,0 +1,575 @@ +--- +title: 'MongoDB' +metaTitle: 'MongoDB database connector' +metaDescription: 'How Prisma can connect to a MongoDB database using the MongoDB database connector.' +hidePage: false +tocDepth: 3 +codeStyle: false +--- + + + +This guide discusses the concepts behind using Prisma and MongoDB, explains the commonalities and differences between MongoDB and other database providers, and leads you through the process for configuring your application to integrate with MongoDB using Prisma. + + + +To connect Prisma with MongoDB, refer to our [Getting Started documentation](/getting-started/setup-prisma/start-from-scratch/mongodb-typescript-mongodb). + + + + + +## What is MongoDB? + +[MongoDB](https://www.mongodb.com/) is a NoSQL database that stores data in [BSON](https://bsonspec.org/) format, a JSON-like document format designed for storing data in key-value pairs. It is commonly used in JavaScript application development because the document model maps easily to objects in application code, and there is built in support for high availability and horizontal scaling. + +MongoDB stores data in collections that do not need a schema to be defined in advance, as you would need to do with tables in a relational database. The structure of each collection can also be changed over time. This flexibility can allow rapid iteration of your data model, but it does mean that there are a number of differences when using Prisma to work with your MongoDB database. + +## Commonalities with other database providers + +Some aspects of using Prisma with MongoDB are the same as when using Prisma with a relational database. You can still: + +- model your database with the [Prisma Schema Language](/orm/prisma-schema) +- connect to your database, using the [`mongodb` database connector](/orm/overview/databases) +- use [Introspection](/orm/prisma-schema/introspection) for existing projects if you already have a MongoDB database +- use [`db push`](/orm/prisma-migrate/workflows/prototyping-your-schema) to push changes in your schema to the database +- use [Prisma Client](/orm/prisma-client) in your application to query your database in a type safe way based on your Prisma Schema + +## Differences to consider + +MongoDB's document-based structure and flexible schemas means that using Prisma with MongoDB differs from using it with a relational database in a number of ways. These are some areas where there are differences that you need to be aware of: + +- **Defining IDs**: MongoDB documents have an `_id` field (that often contains an [ObjectID](https://www.mongodb.com/docs/manual/reference/bson-types/#std-label-objectid)). Prisma does not support fields starting with `_`, so this needs to be mapped to a Prisma field using the `@map` attribute. For more information, see [Defining IDs in MongoDB](/orm/prisma-schema/data-model/models#defining-ids-in-mongodb). + +- **Migrating existing data to match your Prisma schema**: In relational databases, all your data must match your schema. If you change the type of a particular field in your schema when you migrate, all the data must also be updated to match. In contrast, MongoDB does not enforce any particular schema, so you need to take care when migrating. For more information, see [How to migrate old data to new schemas](#how-to-migrate-existing-data-to-match-your-prisma-schema). + +- **Introspection and Prisma relations**: When you introspect an existing MongoDB database, you will get a schema with no relations and will need to add the missing relations in manually. For more information, see [How to add in missing relations after Introspection](#how-to-add-in-missing-relations-after-introspection). + +- **Filtering for `null` and missing fields**: MongoDB makes a distinction between setting a field to `null` and not setting it at all, which is not present in relational databases. Prisma currently does not express this distinction, which means that you need to be careful when filtering for `null` and missing fields. For more information, see [How to filter for `null` and missing fields](#how-to-filter-for-null-and-missing-fields) + +- **Enabling replication**: Prisma uses [MongoDB transactions](https://www.mongodb.com/docs/manual/core/transactions/) internally to avoid partial writes on nested queries. When using transactions, MongoDB requires replication of your data set to be enabled. To do this, you will need to configure a [replica set](https://www.mongodb.com/docs/manual/replication/) — this is a group of MongoDB processes that maintain the same data set. Note that it is still possible to use a single database, by creating a replica set with only one node in it. If you use MongoDB's [Atlas](https://www.mongodb.com/atlas/database) hosting service, the replica set is configured for you, but if you are running MongoDB locally you will need to set up a replica set yourself. For more information, see MongoDB's [guide to deploying a replica set](https://www.mongodb.com/docs/manual/tutorial/deploy-replica-set/). + +## How to use Prisma with MongoDB + +This section provides instructions for how to carry out tasks that require steps specific to MongoDB. + +### How to migrate existing data to match your Prisma schema + +Migrating your database over time is an important part of the development cycle. During development, you will need to update your Prisma schema file (for example, to add new fields), then update the data in your development environment’s database, and eventually push both the updated schema and the new data to the production database. + + + +When using MongoDB, be aware that the “coupling” between your schema and the database is purposefully designed to be less rigid than with with SQL databases; MongoDB will not enforce the schema, so you have to verify data integrity. + + + +These iterative tasks of updating the schema and the database can result in inconsistencies between your schema and the actual data in the database. Let’s look at one scenario where this can happen, and then examine several strategies for you and your team to consider for handling these inconsistencies. + +**Scenario**: you need to include a phone number for users, as well as an email. You currently have the following `User` model in your `schema.prisma` file: + +```prisma file=prisma/schema.prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String +} +``` + +There are a number of strategies you could use for migrating this schema: + +- **"On-demand" updates**: with this strategy, you and your team have agreed that updates can be made to the schema as needed. However, in order to avoid migration failures due to inconsistencies between the data and schema, there is agreement in the team that any new fields added are explicitly defined as optional. + + In our scenario above, you can add an optional `phoneNumber` field to the `User` model in your Prisma schema: + + ```prisma file=prisma/schema.prisma highlight=4;add + model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String + phoneNumber String? + } + ``` + + Then regenerate your Prisma Client using the `npx prisma generate` command. Next, update your application to reflect the new field, and redeploy your app. + + As the `phoneNumber` field is optional, you can still query the old users where the phone number has not been defined. The records in the database will be updated "on demand" as the application's users begin to enter their phone number in the new field. + + Another option is to add a default value on a required field, for example: + + ```prisma file=prisma/schema.prisma highlight=4;add + model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String + phoneNumber String @default("000-000-0000") + } + ``` + + Then when you encounter a missing `phoneNumber`, the value will be coerced into `000-000-0000`. + +- **"No breaking changes" updates**: this strategy builds on the first one, with further consensus amongst your team that you don't rename or delete fields, only add new fields, and always define the new fields as optional. This policy can be reenforced by adding checks in the CI/CD process to verify that there are no backwards-incompatible changes to the schema. + +- **"All-at-once" updates**: this strategy is similar to traditional migrations in relational databases, where all data is updated to reflect the new schema. In the scenario above, you would create a script to add a value for the phone number field to all existing users in your database. You can then make the field a required field in the application because the schema and the data are consistent. + +### How to add in missing relations after Introspection + +After introspecting an existing MongoDB database, you will need to manually add in relations between models. MongoDB does not have the concept of defining relations via foreign keys, as you would in a relational database. However, if you have a collection in MongoDB with a "foreign-key-like" field that matches the ID field of another collection, Prisma will allow you to emulate relations between the collections. + +As an example, take a MongoDB database with two collections, `User` and `Post`. The data in these collections has the following format, with a `userId` field linking users to posts: + +`User` collection: + +- `_id` field with a type of `objectId` +- `email` field with a type of `string` + +`Post` collection: + +- `_id` field with a type of `objectId` +- `title` field with a type of `string` +- `userId` with a type of `objectID` + +On introspection with `db pull`, this is pulled in to the Prisma schema file as follows: + +```prisma file=prisma/schema.prisma +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + userId String @db.ObjectId +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String +} +``` + +This is missing the relation between the `User` and `Post` models. To fix this, manually add a `user` field to the `Post` model with a `@relation` attribute using `userId` as the `fields` value, linking it to the `User` model, and a `posts` field to the `User` model as the back relation: + +```prisma file=prisma/schema.prisma highlight=5;add|11;add +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + userId String @db.ObjectId + user User @relation(fields: [userId], references: [id]) +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String + posts Post[] +} +``` + +For more information on how to use relations in Prisma, see [our documentation](/orm/prisma-schema/data-model/relations). + +### How to filter for `null` and missing fields + +To understand how MongoDB distinguishes between `null` and missing fields, consider the example of a `User` model with an optional `name` field: + +```ts +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String + name String? +} +``` + +First, try creating a record with the `name` field explicitly set to `null`. Prisma will return `name: null` as expected: + + + + + +```ts +const createNull = await prisma.user.create({ + data: { + email: 'user1@prisma.io', + name: null, + }, +}) +console.log(createNull) +``` + + + + + +```code no-copy +{ + id: '6242c4ae032bc76da250b207', + email: 'user1@prisma.io', + name: null +} +``` + + + + + +If you check your MongoDB database directly, you will also see a new record with `name` set to `null`: + +```json +{ + "_id": "6242c4af032bc76da250b207", + "email": "user1@prisma.io", + "name": null +} +``` + +Next, try creating a record without explicitly setting the `name` field: + + + + + +```ts +const createMissing = await prisma.user.create({ + data: { + email: 'user2@prisma.io', + }, +}) +console.log(createMissing) +``` + + + + + +```code no-copy +{ + id: '6242c4ae032bc76da250b208', + email: 'user2@prisma.io', + name: null +} +``` + + + + + +Prisma still returns `name: null`, but if you look in the database directly you will see that the record has no `name` field defined at all: + +```json +{ + "_id": "6242c4af032bc76da250b208", + "email": "user2@prisma.io" +} +``` + +Prisma returns the same result in both cases, because we currently don't have a way to specify this difference in MongoDB between fields that are `null` in the underlying database, and fields that are not defined at all — see [this Github issue](https://github.com/prisma/prisma/issues/12555) for more information. + +This means that you currently have to be careful when filtering for `null` and missing fields. Filtering for records with `name: null` will only return the first record, with the `name` explicitly set to `null`: + + + + + +```ts +const findNulls = await prisma.user.findMany({ + where: { + name: null, + }, +}) +console.log(findNulls) +``` + + + + + +```terminal no-copy +[ + { + id: '6242c4ae032bc76da250b207', + email: 'user1@prisma.io', + name: null + } +] +``` + + + + + +This is because `name: null` is checking for equality, and a non-existing field isn't equal to `null`. + +To include missing fields as well, use the [`isSet` filter](/orm/reference/prisma-client-reference#isset) to explicitly search for fields which are either `null` or not set. This will return both records: + + + + + +```ts +const findNullOrMissing = await prisma.user.findMany({ + where: { + OR: [ + { + name: null, + }, + { + name: { + isSet: false, + }, + }, + ], + }, +}) +console.log(findNullOrMissing) +``` + + + + + +```terminal no-copy +[ + { + id: '6242c4ae032bc76da250b207', + email: 'user1@prisma.io', + name: null + }, + { + id: '6242c4ae032bc76da250b208', + email: 'user2@prisma.io', + name: null + } +] +``` + + + + + +## More on using MongoDB with Prisma + +The fastest way to start using MongoDB with Prisma is to refer to our Getting Started documentation: + +- [Start from scratch](/getting-started/setup-prisma/start-from-scratch/mongodb-typescript-mongodb) +- [Add to existing project](/getting-started/setup-prisma/add-to-existing-project/mongodb-typescript-mongodb) + +These tutorials will take you through the process of connecting to MongoDB, pushing schema changes, and using Prisma Client. + +Further reference information is available in the [MongoDB connector documentation](/orm/overview/databases/mongodb). + +For more information on how to set up and manage a MongoDB database, see the [Prisma Data Guide](https://www.prisma.io/dataguide#mongodb). + +## Example + +To connect to a MongoDB server, configure the [`datasource`](/orm/prisma-schema/overview/data-sources) block in your [Prisma schema file](/orm/prisma-schema): + +```prisma file=schema.prisma +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} +``` + +The fields passed to the `datasource` block are: + +- `provider`: Specifies the `mongodb` data source connector. +- `url`: Specifies the [connection URL](#connection-url) for the MongoDB server. In this case, an [environment variable is used](/orm/more/development-environment/environment-variables) to provide the connection URL. + + + +The MongoDB database connector uses transactions to support nested writes. Transactions **require** a [replica set](https://docs.mongodb.com/manual/tutorial/deploy-replica-set/) deployment. The easiest way to deploy a replica set is with [Atlas](https://docs.atlas.mongodb.com/getting-started/). It's free to get started. + + + +## Connection details + +### Connection URL + +The MongoDB connection URL can be configured in different ways depending on how you are hosting your database. The standard configuration is made up of the following components: + +![Structure of the MongoDB connection URL](./mongodb.png) + +#### Base URL and path + +The base URL and path sections of the connection URL are made up of your authentication credentials followed by the host (and optionally, a port number) and database. + +``` +mongodb://USERNAME:PASSWORD@HOST/DATABASE +``` + +The following components make up the _base URL_ of your database: + +| Name | Placeholder | Description | +| :------- | :---------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| User | `USERNAME` | Name of your database user, e.g. `janedoe` | +| Password | `PASSWORD` | Password for your database user | +| Host | `HOST` | The host where a [`mongod`](https://docs.mongodb.com/manual/reference/program/mongod/#mongodb-binary-bin.mongod) instance is running. If you are running a sharded cluster this will a [`mongos`](https://docs.mongodb.com/manual/reference/program/mongos/#mongodb-binary-bin.mongos) instance. This can be a hostname, IP address or UNIX domain socket. | +| Port | `PORT` | Port on which your database server is running, e.g. `1234`. If none is provided the default `27017` is used. | +| Database | `DATABASE` | Name of the database to use. If none is specified but the `authSource` option is set then the `authSource` database name is used. If neither the database in the connection string nor the `authSource` option is specified then it defaults to `admin` | + + + +You must [percentage-encode special characters](/orm/reference/connection-urls#special-characters). + + + +#### Arguments + +A connection URL can also take arguments. The following example sets three arguments: + +- An `ssl` connection +- A `connectTimeoutMS` +- And the `maxPoolSize` + +``` +mongodb://USERNAME:PASSWORD@HOST/DATABASE?ssl=true&connectTimeoutMS=5000&maxPoolSize=50 +``` + +Refer to the [MongoDB connection string documentation](https://docs.mongodb.com/manual/reference/connection-string/#connection-string-options) for a complete list of connection string arguments. There are no Prisma-specific arguments. + +## Using `ObjectId` + +It is common practice for the `_id` field of a MongoDB document to contain an [ObjectId](https://docs.mongodb.com/manual/reference/bson-types/#std-label-objectid): + +```json +{ + "_id": { "$oid": "60d599cb001ef98000f2cad2" }, + "createdAt": { "$date": { "$numberLong": "1624611275577" } }, + "email": "ella@prisma.io", + "name": "Ella", + "role": "ADMIN" +} +``` + +Any field (most commonly IDs and relation scalar fields) that maps to an `ObjectId` in the underlying database: + +- Must be of type `String` or `Bytes` +- Must include the `@db.ObjectId` attribute +- Can optionally use `@default(auto())` to auto-generate a valid `ObjectId` on document creation + +Here is an example that uses `String`: + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + // Other fields +} +``` + +And here is another example that uses `Bytes`: + +```prisma +model User { + id Bytes @id @default(auto()) @map("_id") @db.ObjectId + // Other fields +} +``` + +See also: [Defining ID fields in MongoDB](/orm/prisma-schema/data-model/models#defining-ids-in-mongodb) + +### Generating `ObjectId` + +To generate a valid `ObjectId` (for testing purposes or to manually set an ID field value) in your application, use the [`bson`](https://www.npmjs.com/package/bson) package. + +``` +npm install --save bson +``` + +```ts +import { ObjectId } from 'bson' + +const id = new ObjectId() +``` + +## Differences to connectors for relational databases + +This section covers ways in which the MongoDB connector differs from Prisma connectors for relational databases. + +### No support for Prisma Migrate + +Currently, there are no plans to add support for [Prisma Migrate](/orm/prisma-migrate) as MongoDB projects do not rely on internal schemas where changes need to be managed with an extra tool. Management of `@unique` indexes is realized through `db push`. + +### No support for `@@id` and `autoincrement()` + +The [`@@id`](/orm/reference/prisma-schema-reference#id-1) attribute (an ID for multiple fields) is not supported because primary keys in MongoDB are always on the `_id` field of a model. + +The [`autoincrement()`](/orm/reference/prisma-schema-reference#generate-autoincrementing-integers-as-ids) function (which creates incrementing `@id` values) is not supported because `autoincrement()` does not work with the `ObjectID` type that the `_id` field has in MongoDB. + + + +### Cyclic references and referential actions + +If you have cyclic references in your models, either from self-relations or a cycle of relations between models, and you use [referential actions](/orm/prisma-schema/data-model/relations/referential-actions), you must set a referential action of `NoAction` to prevent an infinite loop of actions. + +See [Special rules for referential actions](/orm/prisma-schema/data-model/relations/referential-actions/special-rules-for-referential-actions) for more details. + +### Replica set configuration + +MongoDB only allows you to start a transaction on a replica set. Prisma uses transactions internally to avoid partial writes on nested queries. This means we inherit the requirement of needing a replica set configured. + +When you try to use Prisma's MongoDB connector on a deployment that has no replica set configured, Prisma shows the message `Error: Transactions are not supported by this deployment`. The full text of the error message is the following: + +``` +PrismaClientUnknownRequestError2 [PrismaClientUnknownRequestError]: +Invalid `prisma.post.create()` invocation in +/index.ts:9:21 + + 6 await prisma.$connect() + 7 + 8 // Create the first post +→ 9 await prisma.post.create( + Error in connector: Database error. error code: unknown, error message: Transactions are not supported by this deployment + at cb (/node_modules/@prisma/client/runtime/index.js:34804:17) + at processTicksAndRejections (internal/process/task_queues.js:97:5) { + clientVersion: '3.xx.0' +} +``` + +To resolve this, we suggest you change your deployment to one with a replica set configured. + +One simple way for this is to use [MongoDB Atlas](https://www.mongodb.com/cloud/atlas) to launch a free instance that has replica set support out of the box. + +There's also an option to run the replica set locally with this guide: https://docs.mongodb.com/manual/tutorial/convert-standalone-to-replica-set + +## Type mapping between MongoDB and the Prisma schema + +The MongoDB connector maps the [scalar types](/orm/prisma-schema/data-model/models#scalar-fields) from the Prisma [data model](/orm/prisma-schema/data-model/models) to MongoDB's native column types as follows: + +> Alternatively, see [Prisma schema reference](/orm/reference/prisma-schema-reference#model-field-scalar-types) for type mappings organized by Prisma type. + +### Native type mapping from Prisma to MongoDB + +| Prisma | MongoDB | +| ---------- | ---------------------------------------------------------------------- | +| `String` | `string` | +| `Boolean` | `bool` | +| `Int` | `int` | +| `BigInt` | `long` | +| `Float` | `double` | +| `Decimal` | [Currently unsupported](https://github.com/prisma/prisma/issues/12637) | +| `DateTime` | `timestamp` | +| `Bytes` | `binData` | +| `Json` | | + +MongoDB types that are currently unsupported: + +- `Decimal128` +- `Undefined` +- `DBPointer` +- `Null` +- `Symbol` +- `MinKey` +- `MaxKey` +- `Object` +- `Javascript` +- `JavascriptWithScope` +- `Regex` + +### Mapping from MongoDB to Prisma types on Introspection + +When introspecting a MongoDB database, Prisma uses the relevant [scalar types](/orm/prisma-schema/data-model/models#scalar-fields). Some special types also get additional native type annotations: + +| MongoDB (Type \| Aliases) | Prisma | Supported | Native database type attribute | Notes | +| ------------------------- | -------- | :-------: | :----------------------------- | :---- | +| `objectId` | `String` | ✔️ | `@db.ObjectId` | | + +[Introspection](/orm/prisma-schema/introspection) adds native database types that are **not yet supported** as [`Unsupported`](/orm/reference/prisma-schema-reference#unsupported) fields: + +```prisma file=schema.prisma +model Example { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String + regex Unsupported("RegularExpression") +} +``` diff --git a/docs/200-orm/050-overview/500-databases/800-sql-server/020-sql-server-local.mdx b/docs/200-orm/050-overview/500-databases/800-sql-server/020-sql-server-local.mdx new file mode 100644 index 0000000000..f52fd1c524 --- /dev/null +++ b/docs/200-orm/050-overview/500-databases/800-sql-server/020-sql-server-local.mdx @@ -0,0 +1,53 @@ +--- +title: 'SQL Server on Windows (local)' +metaTitle: 'SQL Server on Windows' +metaDescription: 'Set up and configure SQL Server on Windows.' +--- + + + +To run a Microsoft SQL Server locally on a Windows machine: + +1. If you do not have access to an instance of Microsoft SQL Server, download and set up [SQL Server 2019 Developer](https://www.microsoft.com/en-us/sql-server/sql-server-downloads). + +1. Download and install [SQL Server Management Studio](https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15). + +1. Use Windows Authentication to log in to Microsoft SQL Server Management Studio (expand the **Server Name** dropdown and click **<Browse for more...>** to find your database engine): + +![The New Query button in SQL Server Management Studio](/img/connect-sql-server.png) + + + +## Enable TCP/IP + +Prisma Client requires TCP/IP to be enabled. To enable TCP/IP: + +1. Open SQL Server Configuration Manager. (Search for "SQL Server Configuration Manager" in the Start Menu, or open the Start Menu and type "SQL Server Configuration Manager".) + +1. In the left-hand panel, click **SQL Server Network Configuration** > **Protocols for MSSQLSERVER** + +1. Right-click **TCP/IP** and choose **Enable**. + +## Enable authentication with SQL logins (Optional) + +If you want to use a username and password in your connection URL rather than integrated security, [enable mixed authentication mode](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/change-server-authentication-mode?view=sql-server-ver15) as follows: + +1. Right-click on your database engine in the Object Explorer and click **Properties**. + +1. In the Server Properties window, click **Security** in the left-hand list and tick the **SQL Server and Windows Authentication Mode** option, then click **OK**. + +1. Right-click on your database engine in the Object Explorer and click **Restart**. + +### Enable the `sa` login + +To enable the default `sa` (administrator) SQL Server login: + +1. In SQL Server Management Studio, in the Object Explorer, expand **Security** > **Logins** and double-click **sa**. + +1. On the **General** page, choose a password for the `sa` account (untick **Enforce password policy** if you do not want to enforce a policy). + +1. On the **Status** page, under **Settings** > **Login**, tick **Enabled**, then click **OK**. + +You can now use the `sa` account in a connection URL and when you log in to SQL Server Management Studio. + +> **Note**: The `sa` user has extensive permissions. You can also [create your own login with fewer permissions](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/create-a-login?view=sql-server-ver15). diff --git a/docs/200-orm/050-overview/500-databases/800-sql-server/030-sql-server-docker.mdx b/docs/200-orm/050-overview/500-databases/800-sql-server/030-sql-server-docker.mdx new file mode 100644 index 0000000000..a4179f25f2 --- /dev/null +++ b/docs/200-orm/050-overview/500-databases/800-sql-server/030-sql-server-docker.mdx @@ -0,0 +1,49 @@ +--- +title: 'SQL Server on Docker' +metaTitle: 'SQL Server on Docker' +metaDescription: 'Download and use the Microsoft SQL Server Docker image.' +--- + + + +To run a Microsoft SQL Server container image with Docker: + +1. Install and set up [Docker](https://docs.docker.com/get-docker/) +1. Run the following command in your terminal to download the Microsoft SQL Server 2019 image: + + ```terminal + docker pull mcr.microsoft.com/mssql/server:2019-latest + ``` + +1. Create an instance of the container image, replacing the value of `SA_PASSWORD` with a password of your choice: + + ```terminal wrap + docker run --name sql_container -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=myPassword' -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest + ``` + +1. [Follow Microsoft's instructions to connect to SQL Server and use the `sqlcmd` tool](https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15&pivots=cs1-cmd#connect-to-sql-server), replacing the image name and password with your own. + +1. From the `sqlcmd` command prompt, create a new database: + + ```terminal + CREATE DATABASE quickstart + GO + ``` + +1. Run the following command to check that your database was created successfully: + + ```terminal + sp_databases + GO + ``` + + + +## Connection URL credentials + +Based on this example, your credentials are: + +- **Username**: sa +- **Password**: myPassword +- **Database**: quickstart +- **Port**: 1433 diff --git a/docs/200-orm/050-overview/500-databases/800-sql-server/index.mdx b/docs/200-orm/050-overview/500-databases/800-sql-server/index.mdx new file mode 100644 index 0000000000..79dcac9272 --- /dev/null +++ b/docs/200-orm/050-overview/500-databases/800-sql-server/index.mdx @@ -0,0 +1,185 @@ +--- +title: 'Microsoft SQL Server' +metaTitle: 'Microsoft SQL Server' +metaDescription: 'This page explains how Prisma can connect to a Microsoft SQL Server database using the Microsoft SQL Server database connector.' +tocDepth: 4 +--- + + + +The Microsoft SQL Server data source connector connects Prisma to a [Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/sql-server/?view=sql-server-ver15) database server. + + + +## Example + +To connect to a Microsoft SQL Server database, you need to configure a [`datasource`](/orm/prisma-schema/overview/data-sources) block in your [Prisma schema file](/orm/prisma-schema): + +```prisma file=schema.prisma +datasource db { + provider = "sqlserver" + url = env("DATABASE_URL") +} +``` + +The fields passed to the `datasource` block are: + +- `provider`: Specifies the `sqlserver` data source connector. +- `url`: Specifies the [connection URL](#connection-details) for the Microsoft SQL Server database. In this case, an [environment variable is used](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) to provide the connection URL. + +## Connection details + +The connection URL used to connect to an Microsoft SQL Server database follows the [JDBC standard](https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15). + +The following example uses SQL authentication (username and password) with an enabled TLS encrypted connection: + +``` +sqlserver://HOST:PORT;database=DATABASE;user=USER;password=PASSWORD;encrypt=true +``` + + + +Note: If you are using any of the following characters in your connection string, [you will need to escape them](https://learn.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver16#escaping-values-in-the-connection-url). + +```terminal +:\=;/[]{} # these are characters that will need to be escaped +``` + +To escape these characters, use curly braces `{}` around values that contain special characters. As an example: + +```terminal +sqlserver://HOST:PORT;database=DATABASE;user={MyServer/MyUser};password={ThisIsA:SecurePassword;};encrypt=true +``` + + + +### Using [integrated security](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/authentication-in-sql-server) (Windows only) + +The following example uses the currently logged in Windows user to log in to Microsoft SQL Server: + +``` +sqlserver://localhost:1433;database=sample;integratedSecurity=true;trustServerCertificate=true; +``` + +The following example uses a specific Active Directory user to log in to Microsoft SQL Server: + +``` +sqlserver://localhost:1433;database=sample;integratedSecurity=true;username=prisma;password=aBcD1234;trustServerCertificate=true; +``` + +### Using SQL Browser to connect to a named instance + +The following example connects to a named instance of Microsoft SQL Server (`mycomputer\sql2019`) using integrated security: + +``` +sqlserver://mycomputer\sql2019;database=sample;integratedSecurity=true;trustServerCertificate=true; +``` + +### Arguments + +| Argument name | Required | Default | Comments | +| :------------------------------------------------------------------------------------ | :---------------- | :----------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +|

  • `database`
  • `initial catalog`
| No | `master` | The database to connect to. | +|
  • `username`
  • `user`
  • `uid`
  • `userid`
| No - see Comments | | SQL Server login (such as `sa`) _or_ a valid Windows (Active Directory) username if `integratedSecurity` is set to `true` (Windows only). | +|
  • `password`
  • `pwd`
| No - see Comments | | Password for SQL Server login _or_ Windows (Active Directory) username if `integratedSecurity` is set to `true` (Windows only). | +| `encrypt` | No | `true` | Configures whether to use TLS all the time, or only for the login procedure, possible values: `true` (use always), `false` (only for login credentials). | +| `integratedSecurity` | No | | Enables [Windows authentication (integrated security)](https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/authentication-in-sql-server), possible values: `true`, `false`, `yes`, `no`. If set to `true` or `yes` and `username` and `password` are present, login is performed through Windows Active Directory. If login details are not given via separate arguments, the current logged in Windows user is used to login to the server. | +| `connectionLimit` | No | `num_cpus * 2 + 1` | Maximum size of the [connection pool](/orm/prisma-client/setup-and-configuration/databases-connections/connection-pool) | +| `connectTimeout` | No | `5` | Maximum number of seconds to wait for a new connection | +| `schema` | No | `dbo` | Added as a prefix to all the queries if schema name is not the default. | +|
  • `loginTimeout`
  • `connectTimeout`
  • `connectionTimeout`
| No | | Number of seconds to wait for login to succeed. | +| `socketTimeout` | No | | Number of seconds to wait for each query to succeed. | +| `isolationLevel` | No | | Sets [transaction isolation level](https://docs.microsoft.com/en-us/sql/t-sql/statements/set-transaction-isolation-level-transact-sql?view=sql-server-ver15). | +| `poolTimeout` | No | `10` | Maximum number of seconds to wait for a new connection from the pool. If all connections are in use, the database will return a `PoolTimeout` error after waiting for the given time. | +|
  • `ApplicationName`
  • `Application Name`
(case insensitive) | No | | Sets the application name for the connection. Since version 2.28.0. | +| `trustServerCertificate` | No | `false` | Configures whether to trust the server certificate. | +| `trustServerCertificateCA` | No | | A path to a certificate authority file to be used instead of the system certificates to authorize the server certificate. Must be either in `pem`, `crt` or `der` format. Cannot be used together with `trustServerCertificate` parameter. | + +## Type mapping between Microsoft SQL Server to Prisma schema + +For type mappings organized by Prisma type, refer to the [Prisma schema reference](/orm/reference/prisma-schema-reference#model-field-scalar-types) documentation. + +## Supported versions + +See [Supported databases](/orm/reference/supported-databases). + +## Limitations and known issues + +### Prisma Migrate caveats + +Prisma Migrate is supported in [2.13.0](https://github.com/prisma/prisma/releases/tag/2.13.0) and later with the following caveats: + +#### Database schema names + +SQL Server does not have an equivalent to the PostgreSQL `SET search_path` command familiar from PostgreSQL. This means that when you create migrations, you must define the same schema name in the connection URL that is used by the production database. For most of the users this is `dbo` (the default value). However, if the production database uses another schema name, all the migration SQL must be either edited by hand to reflect the production _or_ the connection URL must be changed before creating migrations (for example: `schema=name`). + +#### Cyclic references + +Circular references can occur between models when each model references another, creating a closed loop. When using a Microsoft SQL Server database, Prisma will show a validation error if the [referential action](/orm/prisma-schema/data-model/relations/referential-actions) on a relation is set to something other than [`NoAction`](/orm/prisma-schema/data-model/relations/referential-actions#noaction). + +See [Special rules for referential actions in SQL Server](/orm/prisma-schema/data-model/relations/referential-actions/special-rules-for-referential-actions) for more information. + +#### Destructive changes + +Certain migrations will cause more changes than you might expect. For example: + +- Adding or removing `autoincrement()`. This cannot be achieved by modifying the column, but requires recreating the table (including all constraints, indices, and foreign keys) and moving all data between the tables. +- Additionally, it is not possible to delete all the columns from a table (possible with PostgreSQL or MySQL). If a migration needs to recreate all table columns, it will also re-create the table. + +#### Shared default values are not supported + +In some cases, user might want to define default values as shared objects: + +```sql file=default_objects.sql +CREATE DEFAULT catcat AS 'musti'; + +CREATE TABLE cats ( + id INT IDENTITY PRIMARY KEY, + name NVARCHAR(1000) +); + +sp_bindefault 'catcat', 'dbo.cats.name'; +``` + +Using the stored procedure `sp_bindefault`, the default value `catcat` can be used in more than one table. The way Prisma manages default values is per table: + +```sql file=default_per_table.sql +CREATE TABLE cats ( + id INT IDENTITY PRIMARY KEY, + name NVARCHAR(1000) CONSTRAINT DF_cat_name DEFAULT 'musti' +); +``` + +The last example, when introspected, leads to the following model: + +```prisma file=schema.prisma +model cats { + id Int @id @default(autoincrement()) + name String? @default("musti") +} +``` + +And the first doesn't get the default value introspected: + +```prisma file=schema.prisma +model cats { + id Int @id @default(autoincrement()) + name String? +} +``` + +If using Prisma Migrate together with shared default objects, changes to them must be done manually to the SQL. + +### Data model limitations + +#### Cannot use column with `UNIQUE` constraint and filtered index as foreign key + +Microsoft SQL Server [only allows one `NULL` value in a column that has a `UNIQUE` constraint](https://docs.microsoft.com/en-us/sql/relational-databases/tables/unique-constraints-and-check-constraints?view=sql-server-ver15#Unique). For example: + +- A table of users has a column named `license_number` +- The `license_number` field has a `UNIQUE` constraint +- The `license_number` field only allows **one** `NULL` value + +The standard way to get around this issue is to create a filtered unique index that excludes `NULL` values. This allows you to insert multiple `NULL` values. If you do not create an index in the database, you will get an error if you try to insert more than one `null` value into a column with Prisma Client. + +_However_, creating an index makes it impossible to use `license_number` as a foreign key in the database (or a relation scalar field in corresponding Prisma Schema) diff --git a/docs/200-orm/050-overview/500-databases/850-planetscale.mdx b/docs/200-orm/050-overview/500-databases/850-planetscale.mdx new file mode 100644 index 0000000000..a018c3d3df --- /dev/null +++ b/docs/200-orm/050-overview/500-databases/850-planetscale.mdx @@ -0,0 +1,316 @@ +--- +title: 'PlanetScale' +metaTitle: 'PlanetScale' +metaDescription: 'Guide to PlanetScale' +tocDepth: 3 +toc: true +--- + + + +Prisma and [PlanetScale](https://planetscale.com/) together provide a development arena that optimizes rapid, type-safe development of data access applications, using Prisma's ORM and PlanetScale's highly scalable MySQL-based platform. + +This document discusses the concepts behind using Prisma and PlanetScale, explains the commonalities and differences between PlanetScale and other database providers, and leads you through the process for configuring your application to integrate with PlanetScale. + + + +## What is PlanetScale? + +PlanetScale uses the [Vitess](https://vitess.io/) database clustering system to provide a MySQL-compatible database platform. Features include: + +- **Enterprise scalability.** PlanetScale provides a highly available production database cluster that supports scaling across multiple database servers. This is particularly useful in a serverless context, as it avoids the problem of having to [manage connection limits](/orm/prisma-client/setup-and-configuration/databases-connections#serverless-environments-faas). +- **Database branches.** PlanetScale allows you to create [branches of your database schema](https://planetscale.com/docs/concepts/branching), so that you can test changes on a development branch before applying them to your production database. +- **Support for [non-blocking schema changes](https://planetscale.com/docs/concepts/nonblocking-schema-changes).** PlanetScale provides a workflow that allows users to update database schemas without locking the database or causing downtime. + +## Commonalities with other database providers + +Many aspects of using Prisma with PlanetScale are just like using Prisma with any other relational database. You can still: + +- model your database with the [Prisma Schema Language](/orm/prisma-schema) +- use Prisma's existing [`mysql` database connector](/orm/overview/databases/mysql) in your schema, along with the [connection string PlanetScale provides you](https://planetscale.com/docs/concepts/connection-strings) +- use [Introspection](/orm/prisma-schema/introspection) for existing projects if you already have a database schema in PlanetScale +- use [`db push`](/orm/prisma-migrate/workflows/prototyping-your-schema) to push changes in your schema to the database +- use [Prisma Client](/orm/prisma-client) in your application to talk to the database server at PlanetScale + +## Differences to consider + +PlanetScale's branching model and design for scalability means that there are also a number of differences to consider. You should be aware of the following points when deciding to use PlanetScale with Prisma: + +- **Branching and deploy requests.** PlanetScale provides two types of database branches: _development branches_, which allow you to test out schema changes, and _production branches_, which are protected from direct schema changes. Instead, changes must be first created on a development branch and then deployed to production using a deploy request. Production branches are highly available and include automated daily backups. To learn more, see [How to use branches and deploy requests](#how-to-use-branches-and-deploy-requests). + +- **Referential actions and integrity.** To support scaling across multiple database servers, PlanetScale [does not allow the use of foreign key constraints](https://planetscale.com/docs/learn/operating-without-foreign-key-constraints), which are normally used in relational databases to enforce relationships between data in different tables, and asks users to handle this manually in their applications. + With Prisma you can maintain these relationships in your data and allow the use of [referential actions](/orm/prisma-schema/data-model/relations/referential-actions) by using Prisma's ability to [emulate relations in Prisma Client](/orm/prisma-schema/data-model/relations/relation-mode#emulate-relations-in-prisma-with-the-prisma-relation-mode) with the `prisma` relation mode. For more information, see [How to emulate relations in Prisma Client](#how-to-emulate-relations-in-prisma-client). + +- **Creating indexes on foreign keys.** When emulating relations in Prisma, you will need to create indexes on foreign keys. In a standard MySQL database, if a table has a column with a foreign key constraint, an index is automatically created on that column. Because PlanetScale does not support foreign keys, these indexes are [currently](https://github.com/prisma/prisma/issues/10611) not created when Prisma Client emulates relations, which can lead to issues with queries not being well optimised. To avoid this, you can create indexes in Prisma. For more information, see [How to create indexes on foreign keys](#how-to-create-indexes-on-foreign-keys). + +- **Making schema changes with `db push`.** When you merge a development branch into your production branch, PlanetScale will automatically compare the two schemas and generate its own schema diff. This means that Prisma's [`prisma migrate`](/orm/prisma-migrate) workflow, which generates its own history of migration files, is not a natural fit when working with PlanetScale. These migration files may not reflect the actual schema changes run by PlanetScale when the branch is merged. + + + + Prisma recommends not using `prisma migrate` when making schema changes with PlanetScale. Instead, we recommend that you use the `prisma db push` command. + + + + For an example of how this works, see [How to make schema changes with `db push`](#how-to-make-schema-changes-with-db-push) + +- **Introspection**. When you introspect on an existing database, you will get a schema with no relations, as they are usually defined based on foreign keys that connect tables. Because PlanetScale does not support foreign keys, and you use Prisma to emulate relations, you will need to add the missing relations in manually. For more information, see [How to add in missing relations after Introspection](#how-to-add-in-missing-relations-after-introspection). + +## How to use branches and deploy requests + +When connecting to PlanetScale with Prisma, you will need to use the correct connection string for your branch. The connection URL for a given database branch can be found from your PlanetScale account by going to the overview page for the branch and selecting the 'Connect' dropdown. In the 'Passwords' section, generate a new password and select 'Prisma' from the dropdown to get the Prisma format for the connection URL. See Prisma's [Getting Started guide](/getting-started/setup-prisma/start-from-scratch/relational-databases/connect-your-database-typescript-planetscale) for more details of how to connect to a PlanetScale database. + +Every PlanetScale database is created with a branch called `main`, which is initially a development branch that you can use to test schema changes on. Once you are happy with the changes you make there, you can [promote it](https://planetscale.com/docs/concepts/branching#promote-a-branch-to-production) to become a production branch. Note that you can only push new changes to a development branch, so further changes will need to be created on a separate development branch and then later deployed to production using a [deploy request](https://planetscale.com/docs/concepts/branching#2.-create-a-deploy-request). + +If you try to push to a production branch, you will get the [error message](/orm/reference/error-reference#p3022) `Direct execution of DDL (Data Definition Language) SQL statements is disabled on this database.` + +## How to emulate relations in Prisma Client + +PlanetScale does not allow foreign keys in its database schema. By default, Prisma uses foreign keys in the underlying database to enforce relations between fields in your Prisma schema. In Prisma versions 3.1.1 and later, you can [emulate relations in Prisma Client with the `prisma` relation mode](/orm/prisma-schema/data-model/relations/relation-mode#emulate-relations-in-prisma-with-the-prisma-relation-mode), which avoids the need for foreign keys in the database. + +To enable emulation of relations in Prisma Client, set the `relationMode` field to `"prisma"` in the `datasource` block: + +```prisma file=schema.prisma +datasource db { + provider = "mysql" + url = env("DATABASE_URL") + relationMode = "prisma" +} +``` + + + +The ability to set the relation mode was introduced as part of the `referentialIntegrity` preview feature in Prisma version 3.1.1, and is generally available in Prisma versions 4.8.0 and later.

The `relationMode` field was renamed in Prisma version 4.5.0, and was previously named `referentialIntegrity`. + +
+ +If you use relations in your Prisma schema with the default `"foreignKeys"` option for the `referentialIntegrity` field, PlanetScale will error when Prisma tries to create foreign keys. In versions 2.27.0 and later, Prisma will output the [P3021 error message](/orm/reference/error-reference#p3021). + +## How to create indexes on foreign keys + +When [you emulate relations in Prisma Client](#how-to-emulate-relations-in-prisma-client), you need to create your own indexes. As an example of a situation where you would want to add an index, take this schema for a blog with posts and comments: + +```prisma file=schema.prisma +model Post { + id Int @id @default(autoincrement()) + title String + content String + likes Int @default(0) + comments Comment[] +} + +model Comment { + id Int @id @default(autoincrement()) + comment String + postId Int + post Post @relation(fields: [postId], references: [id], onDelete: Cascade) +} +``` + +The `postId` field in the `Comment` model refers to the corresponding `id` field in the `Post` model. However this is not implemented as a foreign key in PlanetScale, so the column doesn't have an automatic index. This means that some queries may not be well optimised. For example, if you query for all comments with a certain post `id`, PlanetScale may have to do a full table lookup. This could be slow, and also expensive because PlanetScale's billing model charges for the number of rows read. + +To avoid this, you can define an index on the `postId` field using [Prisma's `@@index` argument](/orm/reference/prisma-schema-reference#index): + +```prisma file=schema.prisma highlight=15;add +model Post { + id Int @id @default(autoincrement()) + title String + content String + likes Int @default(0) + comments Comment[] +} + +model Comment { + id Int @id @default(autoincrement()) + comment String + postId Int + post Post @relation(fields: [postId], references: [id], onDelete: Cascade) + + @@index([postId]) +} +``` + +You can then add this change to your schema [using `db push`](#how-to-make-schema-changes-with-db-push). + +In Prisma versions 4.7.0 and later, Prisma warns you if you have a relation with no index on the relation scalar field. For more information, see [Index validation](/orm/prisma-schema/data-model/relations/relation-mode#index-validation). + + + +One issue to be aware of is that [implicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations) cannot have an index added in this way. If query speed or cost is an issue, you may instead want to use an [explicit many-to-many relation](/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations) in this case. + + + +## How to make schema changes with `db push` + +To use `db push` with PlanetScale, you will first need to [enable emulation of relations in Prisma Client](#how-to-emulate-relations-in-prisma-client). Pushing to your branch without referential emulation enabled will give the [error message](/orm/reference/error-reference#p3021) `Foreign keys cannot be created on this database.` + +As an example, let's say you decide to decide to add a new `excerpt` field to the blog post schema above. You will first need to [create a new development branch and connect to it](#how-to-use-branches-and-deploy-requests). + +Next, add the following to your `schema.prisma` file: + +```prisma file=schema.prisma highlight=5;edit +model Post { + id Int @id @default(autoincrement()) + title String + content String + excerpt String? + likes Int @default(0) + comments Comment[] +} + +model Comment { + id Int @id @default(autoincrement()) + comment String + postId Int + post Post @relation(fields: [postId], references: [id], onDelete: Cascade) + + @@index([postId]) +} +``` + +To push these changes, navigate to your project directory in your terminal and run + +```terminal +npx prisma db push +``` + +Once you are happy with your changes on your development branch, you can open a deploy request to deploy these to your production branch. + +For more examples, see PlanetScale's tutorial on [automatic migrations with Prisma](https://planetscale.com/docs/prisma/automatic-prisma-migrations) using `db push`. + +## How to add in missing relations after Introspection + +After introspecting with `npx prisma db pull`, the schema you get may be missing some relations. For example, the following schema is missing a relation between the `User` and `Post` models: + +```prisma file=schema.prisma +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + title String @db.VarChar(255) + content String? + authorId Int + + @@index([authorId]) +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? +} +``` + +In this case you need to add the relation in manually: + +```prisma file=schema.prisma highlight=6,16;add +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + title String @db.VarChar(255) + content String? + author User @relation(fields: [authorId], references: [id]) + authorId Int + + @@index([authorId]) +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] +} +``` + +For a more detailed example, see the [Getting Started guide for PlanetScale](/getting-started/setup-prisma/add-to-existing-project/relational-databases/introspection-typescript-planetscale). + +## How to use the PlanetScale serverless driver with Prisma (Preview) + +The [PlanetScale serverless driver](https://planetscale.com/docs/tutorials/planetscale-serverless-driver) provides a way of communicating with your database and executing queries over HTTP. + +You can use Prisma along with the PlanetScale serverless driver using the [`@prisma/adapter-planetscale`](https://www.npmjs.com/package/@prisma/adapter-planetscale) driver adapter. The driver adapter allows you to communicate with your database over HTTP. + + + +This feature is available in Preview from Prisma versions 5.4.2 and later. + + + +To get started, enable the `driverAdapters` Preview feature flag: + +```prisma +generator client { + provider = "prisma-client-js" + previewFeatures = ["driverAdapters"] +} +``` + +Generate Prisma Client: + +```sh +npx prisma generate +``` + + + +Ensure you update the host value in your connection string to `aws.connect.psdb.cloud`. You can learn more about this [here](https://planetscale.com/docs/tutorials/planetscale-serverless-driver#add-and-use-the-planetscale-serverless-driver-for-javascript-to-your-project). + +```bash +DATABASE_URL='mysql://johndoe:strongpassword@aws.connect.psdb.cloud/clear_nightsky?sslaccept=strict' +``` + + + +Install the Prisma adapter for PlanetScale, PlanetScale serverless driver and `undici` packages: + +```sh +npm install @prisma/adapter-planetscale @planetscale/database undici +``` + + + +When using a Node.js version below 18, you must provide a custom fetch function implementation. We recommend the `undici` package on which Node's built-in fetch is based. Node.js versions 18 and later include a built-in global `fetch` function, so you don't have to install an extra package. + + + +Update your Prisma Client instance to use the PlanetScale serverless driver: + +```ts +import { Client } from '@planetscale/database' +import { PrismaPlanetScale } from '@prisma/adapter-planetscale' +import { PrismaClient } from '@prisma/client' +import dotenv from 'dotenv' +import { fetch as undiciFetch } from 'undici' + +dotenv.config() +const connectionString = `${process.env.DATABASE_URL}` + +const client = new Client({ url: connectionString, fetch: undiciFetch }) +const adapter = new PrismaPlanetScale(client) +const prisma = new PrismaClient({ adapter }) +``` + +You can then use Prisma Client as you normally would with full type-safety. Prisma Migrate, introspection, and Prisma Studio will continue working as before using the connection string defined in the Prisma schema. + +## More on using PlanetScale with Prisma + +The fastest way to start using PlanetScale with Prisma is to refer to our Getting Started documentation: + +- [Start from scratch](/getting-started/setup-prisma/start-from-scratch/relational-databases-typescript-planetscale) +- [Add to existing project](/getting-started/setup-prisma/add-to-existing-project/relational-databases-typescript-planetscale) + +These tutorials will take you through the process of connecting to PlanetScale, pushing schema changes, and using Prisma Client. + +For further tips on best practices when using Prisma and PlanetScale together, watch our video: + +
+ + + +
diff --git a/docs/200-orm/050-overview/500-databases/860-cockroachdb.mdx b/docs/200-orm/050-overview/500-databases/860-cockroachdb.mdx new file mode 100644 index 0000000000..eda18fc474 --- /dev/null +++ b/docs/200-orm/050-overview/500-databases/860-cockroachdb.mdx @@ -0,0 +1,224 @@ +--- +title: 'CockroachDB' +metaTitle: 'CockroachDB' +metaDescription: 'Guide to CockroachDB' +tocDepth: 3 +toc: true +--- + + + +This guide discusses the concepts behind using Prisma and CockroachDB, explains the commonalities and differences between CockroachDB and other database providers, and leads you through the process for configuring your application to integrate with CockroachDB. + + + + + +The CockroachDB connector is generally available in versions `3.14.0` and later. It was first added as a [Preview feature](/orm/reference/preview-features) in version [`3.9.0`](https://github.com/prisma/prisma/releases/tag/3.9.0) with support for Introspection, and Prisma Migrate support was added in [`3.11.0`](https://github.com/prisma/prisma/releases/tag/3.11.0). + + + +## What is CockroachDB? + +CockroachDB is a distributed database that is designed for scalability and high availability. Features include: + +- **Built-in scaling:** CockroachDB comes with automated replication, failover and repair capabilities to allow easy horizontal scaling of your application +- **Consistent transactions:** CockroachDB is a relational database that supports consistent transactions that maintain data integrity +- **Compatibility with PostgreSQL:** CockroachDB is compatible with PostgreSQL, allowing interoperability with a large ecosystem of existing products + +## Commonalities with other database providers + +CockroachDB is largely compatible with PostgreSQL, and can mostly be used with Prisma in the same way. You can still: + +- model your database with the [Prisma Schema Language](/orm/prisma-schema) +- connect to your database, using Prisma's [`cockroachdb` database connector](/orm/overview/databases/cockroachdb) +- use [Introspection](/orm/prisma-schema/introspection) for existing projects if you already have a CockroachDB database +- use [Prisma Migrate](/orm/prisma-migrate) to migrate your database schema to a new version +- use [Prisma Client](/orm/prisma-client) in your application to query your database in a type safe way based on your Prisma Schema + +## Differences to consider + +There are some CockroachDB-specific differences to be aware of when working with Prisma's `cockroachdb` connector: + +- **Cockroach-specific native types:** Prisma's `cockroachdb` database connector provides support for CockroachDB's native data types. To learn more, see [How to use CockroachDB's native types](#how-to-use-cockroachdbs-native-types). + +- **Creating database keys:** Prisma allows you to generate a unique identifier for each record using the [`autoincrement()`](/orm/reference/prisma-schema-reference#autoincrement) function. For more information, see [How to use database keys with CockroachDB](#how-to-use-database-keys-with-cockroachdb). + +## How to use Prisma with CockroachDB + +This section provides more details on how to use CockroachDB-specific features. + +### How to use CockroachDB's native types + +CockroachDB has its own set of native [data types](https://www.cockroachlabs.com/docs/stable/data-types.html) which are supported in Prisma. For example, CockroachDB uses the `STRING` data type instead of PostgreSQL's `VARCHAR`. + +As a demonstration of this, say you create a `User` table in your CockroachDB database using the following SQL command: + +```sql +CREATE TABLE public."Post" ( + "id" INT8 NOT NULL, + "title" VARCHAR(200) NOT NULL, + CONSTRAINT "Post_pkey" PRIMARY KEY ("id" ASC), + FAMILY "primary" ("id", "title") +); +``` + +After introspecting your database with `npx prisma db pull`, you will have a new `Post` model in your `schema.prisma` file: + +```prisma file=schema.prisma +model Post { + id BigInt @id + title String @db.String(200) +} +``` + +Notice that the `title` field has been annotated with `@db.String(200)` — this differs from PostgreSQL where the annotation would be `@db.VarChar(200)`. + +For a full list of type mappings, see our [connector documentation](/orm/overview/databases/cockroachdb#type-mapping-between-cockroachdb-and-the-prisma-schema). + +### How to use database keys with CockroachDB + +When generating unique identifiers for records in a distributed database like CockroachDB, it is best to avoid using sequential IDs – for more information on this, see CockroachDB's [blog post on choosing index keys](https://cockroachlabs.com/blog/how-to-choose-db-index-keys). + +Instead, Prisma provides the [`autoincrement()`](/orm/reference/prisma-schema-reference#autoincrement) attribute function, which uses CockroachDB's [`unique_rowid()` function](https://www.cockroachlabs.com/docs/stable/serial.html) for generating unique identifiers. For example, the following `User` model has an `id` primary key, generated using the `autoincrement()` function: + +```prisma file=schema.prisma +model User { + id BigInt @id @default(autoincrement()) + name String +} +``` + +For compatibility with existing databases, you may sometimes still need to generate a fixed sequence of integer key values. In these cases, you can use Prisma's inbuilt [`sequence()`](/orm/reference/prisma-schema-reference#sequence) function for CockroachDB. For a list of available options for the `sequence()` function, see our [reference documentation](/orm/reference/prisma-schema-reference#sequence). + +For more information on generating database keys, see CockroachDB's [Primary key best practices](https://www.cockroachlabs.com/docs/v21.2/schema-design-table#primary-key-best-practices) guide. + +## Example + +To connect to a CockroachDB database server, you need to configure a [`datasource`](/orm/prisma-schema/overview/data-sources) block in your [Prisma schema file](/orm/prisma-schema): + +```prisma file=schema.prisma +datasource db { + provider = "cockroachdb" + url = env("DATABASE_URL") +} +``` + +The fields passed to the `datasource` block are: + +- `provider`: Specifies the `cockroachdb` data source connector. +- `url`: Specifies the [connection URL](#connection-details) for the CockroachDB database server. In this case, an [environment variable is used](/orm/prisma-schema/overview#accessing-environment-variables-from-the-schema) to provide the connection URL. + + + +While `cockroachdb` and `postgresql` connectors are similar, it is mandatory to use the `cockroachdb` connector instead of `postgresql` when connecting to a CockroachDB database from version 5.0.0. + + + +## Connection details + +CockroachDB uses the PostgreSQL format for its connection URL. See the [PostgreSQL connector documentation](/orm/overview/databases/postgresql#connection-details) for details of this format, and the optional arguments it takes. + +## Differences between CockroachDB and PostgreSQL + +The following table lists differences between CockroachDB and PostgreSQL: + +| Issue | Area | Notes | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| By default, the `INT` type is an alias for `INT8` in CockroachDB, whereas in PostgreSQL it is an alias for `INT4`. This means that Prisma will introspect an `INT` column in CockroachDB as `BigInt`, whereas in PostgreSQL Prisma will introspect it as `Int`. | Schema | For more information on the `INT` type, see the [CockroachDB documentation](https://www.cockroachlabs.com/docs/stable/int.html#considerations-for-64-bit-signed-integers) | +| When using `@default(autoincrement())` on a field, CockroachDB will automatically generate 64-bit integers for the row IDs. These integers will be increasing but not consecutive. This is in contrast to PostgreSQL, where generated row IDs are consecutive and start from 1. | Schema | For more information on generated values, see the [CockroachDB documentation](https://www.cockroachlabs.com/docs/stable/serial.html#generated-values-for-modes-rowid-and-virtual_sequence) | +| The `@default(autoincrement())` attribute can only be used together with the `BigInt` field type. | Schema | For more information on generated values, see the [CockroachDB documentation](https://www.cockroachlabs.com/docs/stable/serial.html#generated-values-for-modes-rowid-and-virtual_sequence) | + +## Type mapping limitations in CockroachDB + +The CockroachDB connector maps the [scalar types](/orm/prisma-schema/data-model/models#scalar-fields) from the Prisma [data model](/orm/prisma-schema/data-model/models) to native column types. These native types are mostly the same as for PostgreSQL — see the [Native type mapping from Prisma to CockroachDB](#native-type-mapping-from-prisma-to-cockroachdb) for details. However, there are some limitations: + +| CockroachDB (Type \| Aliases) | Prisma | Supported | Native database type attribute | Notes | +| ----------------------------- | --------- | :-------: | :----------------------------- | :------------------------------------------------------------------------------------------------------------------------- | +| `money` | `Decimal` | Not yet | `@db.Money` | Supported in PostgreSQL but [not currently in CockroachDB](https://github.com/cockroachdb/cockroach/issues/41578) | +| `xml` | `String` | Not yet | `@db.Xml` | Supported in PostgreSQL but [not currently in CockroachDB](https://github.com/cockroachdb/cockroach/issues/43355) | +| `jsonb` arrays | `Json[]` | Not yet | N/A | `Json[]` supported in PostgreSQL but [not currently in CockroachDB](https://github.com/cockroachdb/cockroach/issues/23468) | + +## Other limitations + +The following table lists any other current known limitations of CockroachDB compared to PostgreSQL: + +| Issue | Area | Notes | +| ------------------------------------------------------------------------------------------------ | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Primary keys are named `primary` instead of `TABLE_pkey`, the Prisma default. | Introspection | This means that they are introspected as `@id(map: "primary")`. This will be [fixed in CockroachDB 22.1](https://github.com/cockroachdb/cockroach/pull/70604). | +| Foreign keys are named `fk_COLUMN_ref_TABLE` instead of `TABLE_COLUMN_fkey`, the Prisma default. | Introspection | This means that they are introspected as `@relation([...], map: "fk_COLUMN_ref_TABLE")`. This will be [fixed in CockroachDB 22.1](https://github.com/cockroachdb/cockroach/pull/70658) | +| Index types `Hash`, `Gist`, `SpGist` or `Brin` are not supported. | Schema | In PostgreSQL, Prisma allows [configuration of indexes](/orm/prisma-schema/data-model/indexes#configuring-the-access-type-of-indexes-with-type-postgresql) to use the different index access method. CockroachDB only currently supports `BTree` and `Gin`. | +| Pushing to `Enum` types not supported | Client | Pushing to `Enum` types (e.g. `data: { enum { push: "A" }, }`) is currently [not supported in CockroachDB](https://github.com/cockroachdb/cockroach/issues/71388) | +| Searching on `String` fields without a full text index not supported | Client | Searching on `String` fields without a full text index (e.g. `where: { text: { search: "cat & dog", }, },`) is currently [not supported in CockroachDB](https://github.com/cockroachdb/cockroach/issues/7821) | +| Integer division not supported | Client | Integer division (e.g. `data: { int: { divide: 10, }, }`) is currently [not supported in CockroachDB](https://github.com/cockroachdb/cockroach/issues/41448) | +| Limited filtering on `Json` fields | Client | Currently CockroachDB [only supports](https://github.com/cockroachdb/cockroach/issues/49144) `equals` and `not` filtering on `Json` fields | + +## Type mapping between CockroachDB and the Prisma schema + +The CockroachDB connector maps the [scalar types](/orm/prisma-schema/data-model/models#scalar-fields) from the Prisma [data model](/orm/prisma-schema/data-model/models) as follows to native column types: + +> Alternatively, see the [Prisma schema reference](/orm/reference/prisma-schema-reference#model-field-scalar-types) for type mappings organized by Prisma type. + +### Native type mapping from Prisma to CockroachDB + +| Prisma | CockroachDB | +| ---------- | ---------------- | +| `String` | `STRING` | +| `Boolean` | `BOOL` | +| `Int` | `INT4` | +| `BigInt` | `INT8` | +| `Float` | `FLOAT8` | +| `Decimal` | `DECIMAL(65,30)` | +| `DateTime` | `TIMESTAMP(3)` | +| `Json` | `JSONB` | +| `Bytes` | `BYTES` | + +### Mapping from CockroachDB to Prisma types on Introspection + +When introspecting a CockroachDB database, the database types are mapped to Prisma according to the following table: + +| CockroachDB (Type \| Aliases) | Prisma | Supported | Native database type attribute | Notes | +| -------------------------------------------- | ---------- | :-------: | :----------------------------- | :--------------------------------------------------------------------- | +| `INT` \| `BIGINT`, `INTEGER` | `BigInt` | ✔️ | `@db.Int8` | | +| `BOOL` \| `BOOLEAN` | `Bool` | ✔️ | `@db.Bool`\* | | +| `TIMESTAMP` \| `TIMESTAMP WITHOUT TIME ZONE` | `DateTime` | ✔️ | `@db.Timestamp(x)` | | +| `TIMESTAMPTZ` \| `TIMESTAMP WITH TIME ZONE` | `DateTime` | ✔️ | `@db.Timestamptz(x)` | | +| `TIME` \| `TIME WITHOUT TIME ZONE` | `DateTime` | ✔️ | `@db.Time(x)` | | +| `TIMETZ` \| `TIME WITH TIME ZONE` | `DateTime` | ✔️ | `@db.Timetz(x)` | | +| `DECIMAL(p,s)` \| `NUMERIC(p,s)`, `DEC(p,s)` | `Decimal` | ✔️ | `@db.Decimal(x, y)` | | +| `REAL` \| `FLOAT4`, `FLOAT` | `Float` | ✔️ | `@db.Float4` | | +| `DOUBLE PRECISION` \| `FLOAT8` | `Float` | ✔️ | `@db.Float8` | | +| `INT2` \| `SMALLINT` | `Int` | ✔️ | `@db.Int2` | | +| `INT4` | `Int` | ✔️ | `@db.Int4` | | +| `CHAR(n)` \| `CHARACTER(n)` | `String` | ✔️ | `@db.Char(x)` | | +| `"char"` | `String` | ✔️ | `@db.CatalogSingleChar` | Internal type for CockroachDB catalog tables, not meant for end users. | +| `STRING` \| `TEXT`, `VARCHAR` | `String` | ✔️ | `@db.String` | | +| `DATE` | `DateTime` | ✔️ | `@db.Date` | | +| `ENUM` | `enum` | ✔️ | N/A | | +| `INET` | `String` | ✔️ | `@db.Inet` | | +| `BIT(n)` | `String` | ✔️ | `@Bit(x)` | | +| `VARBIT(n)` \| `BIT VARYING(n)` | `String` | ✔️ | `@VarBit` | | +| `OID` | `Int` | ✔️ | `@db.Oid` | | +| `UUID` | `String` | ✔️ | `@db.Uuid` | | +| `JSONB` \| `JSON` | `Json` | ✔️ | `@db.JsonB` | | +| Array types | `[]` | ✔️ | | | + +[Introspection](/orm/prisma-schema/introspection) adds native database types that are **not yet supported** as [`Unsupported`](/orm/reference/prisma-schema-reference#unsupported) fields: + +```prisma file=schema.prisma +model Device { + id BigInt @id @default(autoincrement()) + interval Unsupported("INTERVAL") +} +``` + +## More on using CockroachDB with Prisma + +The fastest way to start using CockroachDB with Prisma is to refer to our Getting Started documentation: + +- [Start from scratch](/getting-started/setup-prisma/start-from-scratch/relational-databases-typescript-cockroachdb) +- [Add to existing project](/getting-started/setup-prisma/add-to-existing-project/relational-databases-typescript-cockroachdb) + +These tutorials will take you through the process of connecting to CockroachDB, migrating your schema, and using Prisma Client. + +Further reference information is available in the [CockroachDB connector documentation](/orm/overview/databases/cockroachdb). diff --git a/docs/200-orm/050-overview/500-databases/880-supabase.mdx b/docs/200-orm/050-overview/500-databases/880-supabase.mdx new file mode 100644 index 0000000000..c00f56e344 --- /dev/null +++ b/docs/200-orm/050-overview/500-databases/880-supabase.mdx @@ -0,0 +1,72 @@ +--- +title: 'Supabase' +metaTitle: 'Supabase' +metaDescription: 'Guide to Supabase' +tocDepth: 2 +toc: true +--- + + + +This guide discusses the concepts behind using Prisma and Supabase, explains the commonalities and differences between Supabase and other database providers, and leads you through the process for configuring your application to integrate with Supabase. + + + +## What is Supabase? + +[Supabase](https://supabase.com/) is a PostgreSQL hosting service and open source Firebase alternative providing all the backend features you need to build a product. Unlike Firebase, Supabase is backed by PostgreSQL which can be accessed directly using Prisma. + +To learn more about Supabase, you can check out their architecture [here](https://supabase.com/docs/guides/getting-started/architecture) and features [here](https://supabase.com/docs/guides/getting-started/features) + +## Commonalities with other database providers + +Many aspects of using Prisma with Supabase are just like using Prisma with any other relational database. You can still: + +- model your database with the [Prisma Schema Language](/orm/prisma-schema) +- use Prisma's existing [`postgresql` database connector](/orm/overview/databases/postgresql) in your schema, along with the [connection string Supabase provides you](https://supabase.com/docs/guides/database/connecting-to-postgres#finding-your-connection-string) +- use [Introspection](/orm/prisma-schema/introspection) for existing projects if you already have a database schema in Supabase +- use [`db push`](/orm/prisma-migrate/workflows/prototyping-your-schema) to push changes in your schema to Supabase +- use [Prisma Client](/orm/prisma-client) in your application to talk to the database server at Supabase + +## Specific considerations + +If you'd like to use the [connection pooling feature](https://supabase.com/docs/guides/database/connecting-to-postgres#connection-pooler) available with Supabase, you will need to use the connection pooling connection string available via your [Supabase database settings](https://supabase.com/dashboard/project/_/settings/database) with `?pgbouncer=true` appended to the end of your `DATABASE_URL` environment variable: + +```env file=.env +# Connect to Supabase via connection pooling with Supavisor. +DATABASE_URL="postgres://postgres.[your-supabase-project]:[password]@aws-0-eu-central-1.pooler.supabase.com:6543/postgres?pgbouncer=true" +``` + +If you would like to use the Prisma CLI in order to perform other actions on your database (e.g. migrations) you will need to add a `DIRECT_URL` environment variable to use in the `datasource.directUrl` property so that the CLI can bypass Supavisor: + +```env file=.env highlight=4-5;add +# Connect to Supabase via connection pooling with Supavisor. +DATABASE_URL="postgres://postgres.[your-supabase-project]:[password]@aws-0-eu-central-1.pooler.supabase.com:6543/postgres?pgbouncer=true" + +# Direct connection to the database. Used for migrations. +DIRECT_URL="postgres://postgres:[password]@db.[your-supabase-project].supabase.co:5432/postgres" +``` + +You can then update your `schema.prisma` to use the new direct URL: + +```prisma file=schema.prisma highlight=4;add +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + directUrl = env("DIRECT_URL") +} +``` + +More information about the `directUrl` field can be found [here](/orm/reference/prisma-schema-reference#fields). + + + +We strongly recommend using connection pooling with Supavisor in addition to `DIRECT_URL`. You will gain the great developer experience of the Prisma CLI while also allowing for connections to be pooled regardless of your deployment strategy. While this is not strictly necessary for every app, serverless solutions will inevitably require connection pooling. + + + +## Getting started with Supabase + +If you're interested in learning more, Supabase has a great guide for connecting a database provided by Supabase to your Prisma project available [here](https://supabase.com/docs/guides/integrations/prisma). + +If you're running into issues integrating with Supabase, check out these [specific troubleshooting tips](https://supabase.com/docs/guides/integrations/prisma#troubleshooting) or [Prisma's GitHub Discussions](https://github.com/prisma/prisma/discussions) for more help. diff --git a/docs/200-orm/050-overview/500-databases/890-neon.mdx b/docs/200-orm/050-overview/500-databases/890-neon.mdx new file mode 100644 index 0000000000..64e29e934e --- /dev/null +++ b/docs/200-orm/050-overview/500-databases/890-neon.mdx @@ -0,0 +1,183 @@ +--- +title: 'Neon' +metaTitle: 'Neon' +metaDescription: 'Guide to Neon' +tocDepth: 2 +toc: true +--- + + + +This guide explains how to: + +- [Connect Prisma using Neon's connection pooling feature](#how-to-use-neons-connection-pooling) +- [Resolve connection timeout issues](#resolving-connection-timeouts) +- [Use Neon's serverless driver with Prisma](#how-to-use-neons-serverless-driver-with-prisma-preview) + + + +## What is Neon? + +Neon's logo + +[Neon](https://neon.tech/) is a fully managed serverless PostgreSQL with a generous free tier. Neon separates storage and compute, and offers modern developer features such as serverless, branching, bottomless storage, and more. Neon is open source and written in Rust. + +Learn more about Neon [here](https://neon.tech/docs). + +## Commonalities with other database providers + +Many aspects of using Prisma with Neon are just like using Prisma with any other PostgreSQL database. You can: + +- model your database with the [Prisma Schema Language](/orm/prisma-schema) +- use Prisma's [`postgresql` database connector](/orm/overview/databases/postgresql) in your schema, along with the [connection string Neon provides you](https://neon.tech/docs/connect/connect-from-any-app) +- use [Introspection](/orm/prisma-schema/introspection) for existing projects if you already have a database schema on Neon +- use [`prisma migrate dev`](/orm/prisma-migrate/workflows/development-and-production) to track schema migrations in your Neon database +- use [`prisma db push`](/orm/prisma-migrate/workflows/prototyping-your-schema) to push changes in your schema to Neon +- use [Prisma Client](/orm/prisma-client) in your application to communicate with the database hosted by Neon + +## Differences to consider + +There are a few differences between Neon and PostgreSQL you should be aware of the following when deciding to use Neon with Prisma: + +- **Neon's serverless model** — By default, Neon scales a [compute](https://neon.tech/docs/introduction/compute-lifecycle) to zero after 5 minutes of inactivity. During this state, a compute instance is in _idle_ state. A characteristic of this feature is the concept of a "cold start". Activating a compute from an idle state takes from 500ms to a few seconds. Depending on how long it takes to connect to your database, your application may timeout. To learn more, see: [Connection latency and timeouts](https://neon.tech/docs/guides/prisma#connection-timeouts). +- **Neon's connection pooler** — Neon offers connection pooling using PgBouncer, enabling up to 10,000 concurrent connections. To learn more, see: [Connection pooling](https://neon.tech/docs/connect/connection-pooling). + +## How to use Neon's connection pooling + +If you'd like to use the [connection pooling](https://neon.tech/blog/prisma-dx-improvements#providing-pooled-and-direct-connections-to-the-database) available in Neon, you will +need to add `pgbouncer=true` to the end of the `DATABASE_URL` environment variable used in the `url` property of the `datasource` block of your Prisma schema: + +```env file=.env +# Connect to Neon with PgBouncer. +DATABASE_URL=postgres://daniel:@ep-mute-rain-952417-pooler.us-east-2.aws.neon.tech:5432/neondb?pgbouncer=true +``` + +If you would like to use Prisma CLI in order to perform other actions on your database (e.g. for migrations) you will need to add a `DIRECT_URL` environment variable to use in the `directUrl` property of the `datasource` block of your Prisma schema so that the CLI will use a direct connection string (without PgBouncer): + +```env file=.env highlight=4-5;add +# Connect to Neon with PgBouncer. +DATABASE_URL=postgres://daniel:@ep-mute-rain-952417-pooler.us-east-2.aws.neon.tech/neondb?pgbouncer=true + +# Direct connection to the database used by Prisma CLI for e.g. migrations. +DIRECT_URL="postgres://daniel:@ep-mute-rain-952417.us-east-2.aws.neon.tech/neondb" +``` + +You can then update your `schema.prisma` to use the new direct URL: + +```prisma file=schema.prisma highlight=4;add +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + directUrl = env("DIRECT_URL") +} +``` + +More information about the `directUrl` field can be found [here](/orm/reference/prisma-schema-reference#fields). + + + +We strongly recommend using the pooled connection string in your `DATABASE_URL` environment variable. You will gain the great developer experience of the Prisma CLI while also allowing for connections to be pooled regardless of deployment strategy. While this is not strictly necessary for every app, serverless solutions will inevitably require connection pooling. + + + +## Resolving connection timeouts + +A connection timeout that occurs when connecting from Prisma to Neon causes an error similar to the following: + +```text no-copy +Error: P1001: Can't reach database server at `ep-white-thunder-826300.us-east-2.aws.neon.tech`:`5432` +Please make sure your database server is running at `ep-white-thunder-826300.us-east-2.aws.neon.tech`:`5432`. +``` + +This error most likely means that the connection created by Prisma Client timed out before the Neon compute was activated. + +A Neon compute has two main states: _Active_ and _Idle_. Active means that the compute is currently running. If there is no query activity for 5 minutes, Neon places a compute into an idle state by default. Refer to Neon's docs to [learn more](https://neon.tech/docs/introduction/compute-lifecycle). + +When you connect to an idle compute from Prisma, Neon automatically activates it. Activation typically happens within a few seconds but added latency can result in a connection timeout. To address this issue, your can adjust your Neon connection string by adding a `connect_timeout` parameter. This parameter defines the maximum number of seconds to wait for a new connection to be opened. The default value is 5 seconds. A higher setting should provide the time required to avoid connection timeout issues. For example: + +```text wrap +DATABASE_URL=postgres://daniel:@ep-mute-rain-952417.us-east-2.aws.neon.tech/neondb?connect_timeout=10 +``` + + + +A `connect_timeout` setting of 0 means no timeout. + + + +Another possible cause of connection timeouts is Prisma's [connection pool](/orm/prisma-client/setup-and-configuration/databases-connections/connection-pool), which has a default timeout of 10 seconds. This is typically enough time for Neon, but if you are still experiencing connection timeouts, you can try increasing this limit (in addition to the `connect_timeout` setting described above) by setting the `pool_timeout` parameter to a higher value. For example: + +```text wrap +DATABASE_URL=postgres://daniel:@ep-mute-rain-952417.us-east-2.aws.neon.tech/neondb?connect_timeout=15&pool_timeout=15 +``` + +## How to use Neon's serverless driver with Prisma (Preview) + +The [Neon serverless driver](https://github.com/neondatabase/serverless) is a low-latency Postgres driver for JavaScript and TypeScript that allows you to query data from serverless and edge environments over HTTP or WebSockets in place of TCP. + +You can use Prisma along with the Neon serverless driver using a [driver adapter](/orm/overview/databases/database-drivers#driver-adapters) . A driver adapter allows you to use a different database driver from the default Prisma provides to communicate with your database. + + + +This feature is available in Preview from Prisma versions 5.4.2 and later. + + + +To get started, enable the `driverAdapters` Preview feature flag: + +```prisma +generator client { + provider = "prisma-client-js" + previewFeatures = ["driverAdapters"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +Generate Prisma Client: + +```sh +npx prisma generate +``` + +Install the Prisma adapter for Neon, Neon serverless driver and `ws` packages: + +```sh +npm install @prisma/adapter-neon @neondatabase/serverless ws +npm install --save-dev @types/ws +``` + +Update your Prisma Client instance: + +```ts +import { Pool, neonConfig } from '@neondatabase/serverless' +import { PrismaNeon } from '@prisma/adapter-neon' +import { PrismaClient } from '@prisma/client' +import dotenv from 'dotenv' +import ws from 'ws' + +dotenv.config() +neonConfig.webSocketConstructor = ws +const connectionString = `${process.env.DATABASE_URL}` + +const pool = new Pool({ connectionString }) +const adapter = new PrismaNeon(pool) +const prisma = new PrismaClient({ adapter }) +``` + +You can then use Prisma Client as you normally would with full type-safety. Prisma Migrate, introspection, and Prisma Studio will continue working as before, using the connection string defined in the Prisma schema. diff --git a/docs/200-orm/050-overview/500-databases/900-turso.mdx b/docs/200-orm/050-overview/500-databases/900-turso.mdx new file mode 100644 index 0000000000..51c0aafe23 --- /dev/null +++ b/docs/200-orm/050-overview/500-databases/900-turso.mdx @@ -0,0 +1,221 @@ +--- +title: 'Turso' +metaTitle: 'Turso (Early Access)' +metaDescription: 'Guide to Turso' +tocDepth: 3 +--- + + + +This guide discusses the concepts behind using Prisma and Turso, explains the commonalities and differences between Turso and other database providers, and leads you through the process for configuring your application to integrate with Turso. + +Prisma support for Turso is currently in [Early Access](/orm/more/releases#early-access). We would appreciate your feedback in this [GitHub discussion](https://github.com/prisma/prisma/discussions/21345). + + + +## What is Turso? + +Turso's logo + +[Turso](https://turso.tech/) is an edge-hosted, distributed database that's based on [libSQL](https://turso.tech/libsql), an open-source and open-contribution fork of [SQLite](https://sqlite.org/), enabling you to bring data closer to your application and minimize query latency. Turso can also be hosted on a remote server. + + + +Support for Turso is available in [Early Access](/orm/more/releases#early-access) from Prisma versions 5.4.2 and later. + + + +## Commonalities with other database providers + +libSQL is 100% compatible with SQLite. libSQL extends SQLite and adds the following features and capabilities: + +- Support for replication +- Support for automated backups +- Ability to embed Turso as part of other programs such as the Linux kernel +- Supports user-defined functions +- Support for asynchronous I/O + +> To learn more about the differences between libSQL and how it is different from SQLite, see [libSQL Manifesto](https://turso.tech/libsql-manifesto). + +Many aspects of using Prisma with Turso are just like using Prisma with any other relational database. You can still: + +- model your database with the [Prisma Schema Language](/orm/prisma-schema) +- use Prisma's existing [`sqlite` database connector](/orm/overview/databases/sqlite) in your schema +- use [Prisma Client](/orm/prisma-client) in your application to talk to the database server at Turso + +## Differences to consider + +There are a number of differences between Turso and SQLite to consider. You should be aware of the following when deciding to use Turso and Prisma: + +- **Remote and embedded SQLite databases**. libSQL uses HTTP to connect to the remote SQLite database. libSQL also supports remote database replicas and embedded replicas. Embedded replicas enable you to replicate your primary database inside your application. +- **Making schema changes**. Since libSQL uses HTTP to connect to the remote database, this makes it incompatible with Prisma Migrate. However, you can use [`prisma migrate diff`](/orm/reference/prisma-cli-reference#migrate-diff) to create a schema migration and then apply the changes to your database using [Turso's CLI](https://docs.turso.tech/reference/turso-cli). + +## How to connect and query a Turso database + +The subsequent section covers how you can create a Turso database, retrieve your database credentials and connect to your database. + +### How to provision a database and retrieve database credentials + + + +Ensure that you have the [Turso CLI](https://docs.turso.tech/reference/turso-cli) installed to manage your databases. + + + +If you don't have an existing database, you can provision a database by running the following command: + +```terminal +turso db create turso-prisma-db +``` + +The above command will create a database in the closest region to your location. + +Run the following command to retrieve your database's connection string: + +```terminal +turso db show turso-prisma-db +``` + +Next, create an authentication token that will allow you to connect to the database: + +```terminal +turso db tokens create turso-prisma-db +``` + +Update your `.env` file with the authentication token and connection string: + +```text file=.env +TURSO_AUTH_TOKEN="eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9..." +TURSO_DATABASE_URL="libsql://turso-prisma-db-user.turso.io" +``` + +### How to connect to a Turso database + +To get started, enable the `driverAdapters` Preview feature flag: + +```prisma highlight=3;add +generator client { + provider = "prisma-client-js" + previewFeatures = ["driverAdapters"] +} + +datasource db { + provider = "sqlite" + url = "file:./dev.db" +} +``` + +Generate Prisma Client: + +```terminal +npx prisma generate +``` + +Install the libSQL database client and Prisma driver adapter for libSQL packages: + +```terminal +npm install @libsql/client @prisma/adapter-libsql +``` + +Update your Prisma Client instance: + +```ts +import { PrismaClient } from '@prisma/client' +import { PrismaLibSQL } from '@prisma/adapter-libsql' +import { createClient } from '@libsql/client' + +const libsql = createClient({ + url: `${process.env.TURSO_DATABASE_URL}`, + authToken: `${process.env.TURSO_AUTH_TOKEN}`, +}) + +const adapter = new PrismaLibSQL(libsql) +const prisma = new PrismaClient({ adapter }) +``` + +You can use Prisma Client as you normally would with full type-safety in your project. + +## How to manage schema changes + +Prisma Migrate and Introspection workflows are currently not supported when working with Turso. This is because Turso uses HTTP to connect to your database, which Prisma Migrate doesn't support. + +To update your database schema: + +1. Generate a migration file using `prisma migrate dev` against a local SQLite database: + + ```terminal + npx prisma migrate dev --name init + ``` + +2. Apply the migration using Turso's CLI: + + ```terminal + turso db shell turso-prisma-db < ./prisma/migrations/20230922132717_init/migration.sql + ``` + + + + Replace `20230922132717_init` with the name of your migration. + + + +For subsequent migrations, repeat the above steps to apply changes to your database. This workflow does not support track the history of applied migrations to your remote database. + +## Embedded Turso database replicas + +Turso supports [embedded replicas](https://blog.turso.tech/introducing-embedded-replicas-deploy-turso-anywhere-2085aa0dc242). Turso's embedded replicas enable you to have a copy of your primary, remote database _inside_ your application. Embedded replicas behave similarly to a local SQLite database. Database queries are faster because your database is inside your application. + +### How embedded database replicas work + +When your app initially establishes a connection to your database, the primary database will fulfill the query: + +![Embedded Replica: First remote read](./images/embedded-replica-remote-read.png) + +Turso will (1) create an embedded replica inside your application and (2) copy data from your primary database to the replica so it is locally available: + +![Embedded Replica: Remote DB Copy](./images/embedded-replica-create-replica.png) + +The embedded replica will fulfill subsequent read queries. The libSQL client provides a [`sync()`]() method which you can invoke to ensure the embedded replica's data remains fresh. + +![Embedded Replica: Local DB reads](./images/embedded-replica-read.png) + +With embedded replicas, this setup guarantees a responsive application, because the data will be readily available locally and faster to access. + +Like a read replica setup you may be familiar with, write operations are forwarded to the primary remote database and executed before being propagated to all embedded replicas. + +![Embedded Replica: Write operation propagation](./images/embedded-replica-write-propagation.png) + +1. Write operations propagation are forwarded to the database. +1. Database responds to the server with the updates from 1. +1. Write operations are propagated to the database replica. + +Your application's data needs will determine how often you should synchronize data between your remote database and embedded database replica. For example, you can use either middleware functions (e.g. Express and Fastify) or a cron job to synchronize the data. + +### How to synchronize data between your remote database and embedded replica + +To get started using embedded replicas with Prisma, add the `sync()` method from libSQL in your application. The example below shows how you can synchronize data using Express middleware. + +```ts highlight=5-8;add; +import express from 'express' +const app = express() + +// ... the rest of your application code +app.use(async (req, res, next) => { + await libsql.sync() + next() +}) + +app.listen(3000, () => console.log(`Server ready at http://localhost:3000`)) +``` diff --git a/docs/200-orm/050-overview/500-databases/images/drivers/qe-query-engine-adapter.png b/docs/200-orm/050-overview/500-databases/images/drivers/qe-query-engine-adapter.png new file mode 100644 index 0000000000000000000000000000000000000000..068f9c76c55f50e87bfd1d6da2b1b735072ff162 GIT binary patch literal 117668 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 literal 0 HcmV?d00001 diff --git a/docs/200-orm/050-overview/500-databases/images/embedded-replica-write-propagation.png b/docs/200-orm/050-overview/500-databases/images/embedded-replica-write-propagation.png new file mode 100644 index 0000000000000000000000000000000000000000..fa36c873351b01bdc1582ba28cfbefe38e7a060b GIT binary patch literal 89371 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

7$H4~QS-YH5)AOP0yN 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ÌzlT}I50@z87Tm7^~~O! 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 + +Learn about the different databases Prisma supports. + + + +## In this section + + diff --git a/docs/200-orm/050-overview/500-databases/mongodb.png b/docs/200-orm/050-overview/500-databases/mongodb.png new file mode 100644 index 0000000000000000000000000000000000000000..192f87b08d76e0c0c2e7dac9f5065387c49a4302 GIT binary patch literal 26812 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 XI5E!CL3eoR)oE+!sh6lee(`?*OU^*~ literal 0 HcmV?d00001 diff --git a/docs/200-orm/050-overview/500-databases/mysql-connection-string.png b/docs/200-orm/050-overview/500-databases/mysql-connection-string.png new file mode 100644 index 0000000000000000000000000000000000000000..5ded2e0d6fe04979d2d527ca23444f34e942c9a2 GIT binary patch literal 14409 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 literal 0 HcmV?d00001 diff --git a/docs/200-orm/050-overview/index.mdx b/docs/200-orm/050-overview/index.mdx new file mode 100644 index 0000000000..89077e1d99 --- /dev/null +++ b/docs/200-orm/050-overview/index.mdx @@ -0,0 +1,12 @@ +--- +title: 'Overview' +metaTitle: 'Overview' +metaDescription: 'Overview' +staticLink: true +toc: false +--- + + +## In this section + + diff --git a/docs/200-orm/100-prisma-schema/10-overview/02-data-sources.mdx b/docs/200-orm/100-prisma-schema/10-overview/02-data-sources.mdx new file mode 100644 index 0000000000..7ff9a664d8 --- /dev/null +++ b/docs/200-orm/100-prisma-schema/10-overview/02-data-sources.mdx @@ -0,0 +1,42 @@ +--- +title: 'Data sources' +metaTitle: 'Data sources (Reference)' +metaDescription: 'Data sources enable Prisma to connect to your database. This page explains how to configure data sources in your Prisma schema.' +--- + + + +A data source determines how Prisma connects your database, and is represented by the [`datasource`](/orm/reference/prisma-schema-reference#datasource) block in the Prisma schema. The following data source uses the `postgresql` provider and includes a connection URL: + +```prisma +datasource db { + provider = "postgresql" + url = "postgresql://johndoe:mypassword@localhost:5432/mydb?schema=public" +} +``` + +A Prisma schema can only have _one_ data source. However, you can: + +- [Programmatically override a data source `url` when creating your `PrismaClient`](/orm/reference/prisma-client-reference#programmatically-override-a-datasource-url) +- [Specify a different URL for Prisma Migrate's shadow database if you are working with cloud-hosted development databases](/orm/prisma-migrate/understanding-prisma-migrate/shadow-database#cloud-hosted-shadow-databases-must-be-created-manually) + +> **Note**: Multiple provider support was removed in 2.22.0. Please see [Deprecation of provider array notation](https://github.com/prisma/prisma/issues/3834) for more information. + + + +## Securing database connections + +Some data source `provider`s allow you to configure your connection with SSL/TLS, and provide parameters for the `url` to specify the location of certificates. + +- [Configuring an SSL connection with PostgreSQL](/orm/overview/databases/postgresql#configuring-an-ssl-connection) +- [Configuring an SSL connection with MySQL](/orm/overview/databases/mysql#configuring-an-ssl-connection) +- [Configure a TLS connection with Microsoft SQL Server](/orm/overview/databases/sql-server#connection-details) + +Prisma resolves SSL certificates relative to the `./prisma` directory. If your certificate files are located outside that directory, e.g. your project root directory, use relative paths for certificates: + +```prisma +datasource db { + provider = "postgresql" + url = "postgresql://johndoe:mypassword@localhost:5432/mydb?schema=public&sslmode=require&sslcert=../server-ca.pem&sslidentity=../client-identity.p12&sslpassword=" +} +``` diff --git a/docs/200-orm/100-prisma-schema/10-overview/03-generators.mdx b/docs/200-orm/100-prisma-schema/10-overview/03-generators.mdx new file mode 100644 index 0000000000..c7190aef04 --- /dev/null +++ b/docs/200-orm/100-prisma-schema/10-overview/03-generators.mdx @@ -0,0 +1,98 @@ +--- +title: 'Generators' +metaTitle: 'Generators (Reference)' +metaDescription: 'Generators in your Prisma schema specify what assets are generated when the `prisma generate` command is invoked. This page explains how to configure generators.' +--- + + + +A Prisma schema can have one or more generators, represented by the [`generator`](/orm/reference/prisma-schema-reference#generator) block: + +```prisma +generator client { + provider = "prisma-client-js" + output = "./generated/prisma-client-js" +} +``` + +A generator determines which assets are created when you run the `prisma generate` command. The main property `provider` defines which **Prisma Client (language specific)** is created - currently, only `prisma-client-js` is available. Alternatively you can define any npm package that follows our generator specification. Additionally and optionally you can define a custom output folder for the generated assets with `output`. + + + +## Prisma Client: `prisma-client-js` + +The generator for Prisma's JavaScript Client accepts multiple additional properties: + +- `previewFeatures`: [Preview features](/orm/reference/preview-features) to include +- `binaryTargets`: Engine binary targets for `prisma-client-js` (for example, `debian-openssl-1.1.x` if you are deploying to Ubuntu 18+, or `native` if you are working locally) + +```prisma +generator client { + provider = "prisma-client-js" + previewFeatures = ["sample-preview-feature"] + binaryTargets = ["linux-musl"] +} +``` + +### Binary targets + +Prisma Client JS (`prisma-client-js`) uses several [engines](https://github.com/prisma/prisma-engines). Engines are implemented in Rust and are used by Prisma in the form of executable, platform dependent engine files. Depending on which platform you are executing your code on, you need the correct file. "Binary targets" are used to define which files should be present for the target platform(s). + +The correct file is particularly important when [deploying](/orm/prisma-client/deployment/deploy-prisma) your application to production, which often differs from your local development environment. + +#### The `native` binary target + +The `native` binary target is special. It doesn't map to a concrete operating system. Instead, when `native` is specified in `binaryTargets`, Prisma detects the _current_ operating system and automatically specifies the correct binary target for it. + +As an example, assume you're running **macOS** and you specify the following generator: + +```prisma +generator client { + provider = "prisma-client-js" + binaryTargets = ["native"] +} +``` + +In that case, Prisma detects your operating system and finds the right binary file for it based on the [list of supported operating systems](/orm/reference/prisma-schema-reference#binarytargets-options) . +If you use macOS Intel x86 (`darwin`), then the binary file that was compiled for `darwin` will be selected. +If you use macOS ARM64 (`darwin-arm64`), then the binary file that was compiled for `darwin-arm64` will be selected. + +> **Note**: The `native` binary target is the default. You can set it explicitly if you wish to include additional [binary targets](/orm/reference/prisma-schema-reference#binarytargets-options) for deployment to different environments. + +## Community generators + +The following is a list of community created generators. If you want to create your own generator, you can use the [`create-prisma-generator`](https://github.com/YassinEldeeb/create-prisma-generator) CLI built by our community member [Yassin Eldeep](https://github.com/YassinEldeeb). + +> **Note**: Community projects are not maintained or officially supported by Prisma and some features may be out of sync. Use at your own discretion. If you create a community generator, please use this naming convention: `prisma-generator-`. + +- [`prisma-dbml-generator`](https://notiz.dev/blog/prisma-dbml-generator): Transforms the Prisma schema into [Database Markup Language](https://www.dbml.org/home/) (DBML) which allows for an easy visual representation +- [`prisma-docs-generator`](https://github.com/pantharshit00/prisma-docs-generator): Generates an individual API reference for Prisma Client +- [`prisma-json-schema-generator`](https://github.com/valentinpalkovic/prisma-json-schema-generator): Transforms the Prisma schema in [JSON schema](https://json-schema.org/) +- [`prisma-json-types-generator`](https://github.com/arthurfiorette/prisma-json-types-generator): Adds support for [Strongly Typed `Json`](https://github.com/arthurfiorette/prisma-json-types-generator#readme) fields for all databases. It goes on `prisma-client-js` output and changes the json fields to match the type you provide. Helping with code generators, intellisense and much more. All of that without affecting any runtime code. +- [`typegraphql-prisma`](https://github.com/MichalLytek/typegraphql-prisma#readme): Generates [TypeGraphQL](https://typegraphql.com/) CRUD resolvers for Prisma models +- [`typegraphql-prisma-nestjs`](https://github.com/EndyKaufman/typegraphql-prisma-nestjs#readme): Fork of [`typegraphql-prisma`](https://github.com/MichalLytek/typegraphql-prisma), which also generates CRUD resolvers for Prisma models but for NestJS +- [`prisma-typegraphql-types-gen`](https://github.com/YassinEldeeb/prisma-tgql-types-gen): Generates [TypeGraphQL](https://typegraphql.com/) class types and enums from your prisma type definitions, the generated output can be edited without being overwritten by the next gen and has the ability to correct you when you mess up the types with your edits. +- [`nexus-prisma`](https://github.com/prisma/nexus-prisma/): Allows to project Prisma models to GraphQL via [GraphQL Nexus](https://nexusjs.org/docs/) +- [`prisma-nestjs-graphql`](https://github.com/unlight/prisma-nestjs-graphql): Generates object types, inputs, args, etc. from the Prisma schema file for usage with `@nestjs/graphql` module +- [`prisma-appsync`](https://github.com/maoosi/prisma-appsync): Generates a full-blown GraphQL API for [AWS AppSync](https://aws.amazon.com/appsync/) +- [`prisma-kysely`](https://github.com/valtyr/prisma-kysely): Generates type definitions for Kysely, a TypeScript SQL query builder. This can be useful to perform queries against your database from an edge runtime, or to write more complex SQL queries not possible in Prisma without dropping type safety. +- [`prisma-generator-nestjs-dto`](https://github.com/vegardit/prisma-generator-nestjs-dto): Generates DTO and Entity classes with relation `connect` and `create` options for use with [NestJS Resources](https://docs.nestjs.com/recipes/crud-generator) and [@nestjs/swagger](https://www.npmjs.com/package/@nestjs/swagger) +- [`prisma-erd-generator`](https://github.com/keonik/prisma-erd-generator): Generates an entity relationship diagram +- [`prisma-class-generator`](https://github.com/kimjbstar/prisma-class-generator): Generates classes from your Prisma Schema that can be used as DTO, Swagger Response, TypeGraphQL and so on. +- [`zod-prisma`](https://github.com/CarterGrimmeisen/zod-prisma): Creates Zod schemas from your Prisma models. +- [`prisma-pothos-types`](https://github.com/hayes/pothos/tree/main/packages/plugin-prisma): Makes it easier to define Prisma-based object types, and helps solve n+1 queries for relations. It also has integrations for the Relay plugin to make defining nodes and connections easy and efficient. +- [`prisma-generator-pothos-codegen`](https://github.com/Cauen/prisma-generator-pothos-codegen): Auto generate input types (for use as args) and auto generate decoupled type-safe base files makes it easy to create customizable objects, queries and mutations for [Pothos](https://pothos-graphql.dev/) from Prisma schema. Optionally generate all crud at once from the base files. +- [`prisma-joi-generator`](https://github.com/omar-dulaimi/prisma-joi-generator): Generate full Joi schemas from your Prisma schema. +- [`prisma-yup-generator`](https://github.com/omar-dulaimi/prisma-yup-generator): Generate full Yup schemas from your Prisma schema. +- [`prisma-class-validator-generator`](https://github.com/omar-dulaimi/prisma-class-validator-generator): Emit TypeScript models from your Prisma schema with class validator validations ready. +- [`prisma-zod-generator`](https://github.com/omar-dulaimi/prisma-zod-generator): Emit Zod schemas from your Prisma schema. +- [`prisma-trpc-generator`](https://github.com/omar-dulaimi/prisma-trpc-generator): Emit fully implemented tRPC routers. +- [`prisma-json-server-generator`](https://github.com/omar-dulaimi/prisma-json-server-generator): Emit a JSON file that can be run with json-server. +- [`prisma-trpc-shield-generator`](https://github.com/omar-dulaimi/prisma-trpc-shield-generator): Emit a tRPC shield from your Prisma schema. +- [`prisma-custom-models-generator`](https://github.com/omar-dulaimi/prisma-custom-models-generator): Emit custom models from your Prisma schema, based on Prisma recommendations. +- [`nestjs-prisma-graphql-crud-gen`](https://github.com/mk668a/nestjs-prisma-graphql-crud-gen): Generate CRUD resolvers from GraphQL schema with NestJS and Prisma. +- [`prisma-generator-dart`](https://github.com/FredrikBorgstrom/abcx3/tree/master/libs/prisma-generator-dart): Generates Dart/Flutter class files with to- and fromJson methods. +- [`prisma-generator-graphql-typedef`](https://github.com/mavvy22/prisma-generator-graphql-typedef): Generates graphql schema. +- [`prisma-markdown`](https://github.com/samchon/prisma-markdown): Generates markdown document composed with ERD diagrams and their descriptions. Supports pagination of ERD diagrams through `@namespace` comment tag. +- [`prisma-models-graph`](https://github.com/dangchinh25/prisma-models-graph): Generates a bi-directional models graph for schema without strict relationship defined in the schema, works via a custom schema annotation. +- [`prisma-generator-fake-data`](https://github.com/luisrudge/prisma-generator-fake-data): Generates realistic-looking fake data for your Prisma models that can be used in unit/integration tests, demos, and more. diff --git a/docs/200-orm/100-prisma-schema/10-overview/index.mdx b/docs/200-orm/100-prisma-schema/10-overview/index.mdx new file mode 100644 index 0000000000..3671e65e6d --- /dev/null +++ b/docs/200-orm/100-prisma-schema/10-overview/index.mdx @@ -0,0 +1,324 @@ +--- +title: 'Overview' +metaTitle: 'Prisma Schema Overview' +metaDescription: 'The Prisma schema is the main configuration file when using Prisma. It is typically called schema.prisma and contains your database connection and data model.' +--- + + + +The Prisma schema file (short: _schema file_, _Prisma schema_ or _schema_) is the main configuration file for your Prisma setup. It is typically called `schema.prisma` and consists of the following parts: + +- [**Data sources**](data-sources): Specify the details of the data sources Prisma should connect to (e.g. a PostgreSQL database) +- [**Generators**](generators): Specifies what clients should be generated based on the data model (e.g. Prisma Client) +- [**Data model definition**](/orm/prisma-schema/data-model): Specifies your application [models](/orm/prisma-schema/data-model/models#defining-models) (the shape of the data per data source) and their [relations](/orm/prisma-schema/data-model/relations) + +See the [Prisma schema API reference](/orm/reference/prisma-schema-reference) for detailed information about each section of the schema. + +Whenever a `prisma` command is invoked, the CLI typically reads some information from the schema file, e.g.: + +- `prisma generate`: Reads _all_ above mentioned information from the Prisma schema to generate the correct data source client code (e.g. Prisma Client). +- `prisma migrate dev`: Reads the data sources and data model definition to create a new migration. + +You can also [use environment variables](#accessing-environment-variables-from-the-schema) inside the schema file to provide configuration options when a CLI command is invoked. + + + +## Example + +The following is an example of a Prisma schema file that specifies: + +- A data source (PostgreSQL or MongoDB) +- A generator (Prisma Client) +- A data model definition with two models (with one relation) and one `enum` +- Several [native data type attributes](/orm/prisma-schema/data-model/models#native-types-mapping) (`@db.VarChar(255)`, `@db.ObjectId`) + + + + +```prisma +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model User { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + email String @unique + name String? + role Role @default(USER) + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + published Boolean @default(false) + title String @db.VarChar(255) + author User? @relation(fields: [authorId], references: [id]) + authorId Int? +} + +enum Role { + USER + ADMIN +} +``` + + + + +```prisma +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime @default(now()) + email String @unique + name String? + role Role @default(USER) + posts Post[] +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + published Boolean @default(false) + title String + author User? @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId +} + +enum Role { + USER + ADMIN +} +``` + + + + +## Naming + +The default name for the schema file is `schema.prisma`. When your schema file is named like this, the Prisma CLI will detect it automatically in the directory where you invoke the CLI command (or any of its subdirectories). + +If the file is named differently, you can provide the `--schema` argument to the Prisma CLI with the path to the schema file, e.g.: + +``` +prisma generate --schema ./database/myschema.prisma +``` + +## Syntax + +The schema file is written in Prisma Schema Language (PSL). + +### VS Code + +Syntax highlighting for PSL is available via a [VS Code extension](https://marketplace.visualstudio.com/items?itemName=Prisma.prisma) (which also lets you auto-format the contents of your Prisma schema and indicates syntax errors with red squiggly lines). Learn more about [setting up Prisma in your editor](/orm/more/development-environment/editor-setup). + +### GitHub + +PSL code snippets on GitHub can be rendered with syntax highlighting as well by using the `.prisma` file extension or annotating fenced code blocks in Markdown with `prisma`: + +```` +```prisma +model User { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + email String @unique + name String? +} +``` +```` + +## Prisma schema file location + +The Prisma CLI looks for the Prisma schema file in the following locations, in the following order: + +1. The location specified by the [`--schema` flag](/orm/reference/prisma-cli-reference), which is available when you `introspect`, `generate`, `migrate`, and `studio`: + + ```terminal + prisma generate --schema=./alternative/schema.prisma + ``` + +2. The location specified in the `package.json` file (version 2.7.0 and later): + + ```json + "prisma": { + "schema": "db/schema.prisma" + } + ``` + +3. Default locations: + + - `./prisma/schema.prisma` + - `./schema.prisma` + +The Prisma CLI outputs the path of the schema file that will be used. The following example shows the terminal output for `prisma db pull`: + +```no-lines +Environment variables loaded from .env +|Prisma Schema loaded from prisma/schema.prisma + +Introspecting based on datasource defined in prisma/schema.prisma … + +✔ Introspected 4 models and wrote them into prisma/schema.prisma in 239ms + +Run prisma generate to generate Prisma Client. +``` + +## Accessing environment variables from the schema + +You can use environment variables to provide configuration options when a CLI command is invoked, or a Prisma Client query is run. + +Hardcoding URLs directly in your schema is possible but is discouraged because it poses a security risk. Using environment variables in the schema allows you to **keep secrets out of the schema file** which in turn **improves the portability of the schema** by allowing you to use it in different environments. + +Environment variables can be accessed using the `env()` function: + +```prisma +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +You can use the `env()` function in the following places: + +- A datasource url +- Generator binary targets + +See [Environment variables](/orm/more/development-environment/environment-variables) for more information about how to use an `.env` file during development. + +## Comments + +There are two types of comments that are supported in the schema file: + +- `// comment`: This comment is for the reader's clarity and is not present in the abstract syntax tree (AST) of the schema file. +- `/// comment`: These comments will show up in the abstract syntax tree (AST) of the schema file as descriptions to AST nodes. Tools can then use these comments to provide additional information. All comments are attached to the next available node - [free-floating comments](https://github.com/prisma/prisma/issues/3544) are not supported and are not included in the AST. + +Here are some different examples: + +```prisma +/// This comment will get attached to the `User` node in the AST +model User { + /// This comment will get attached to the `id` node in the AST + id Int @default(autoincrement()) + // This comment is just for you + weight Float /// This comment gets attached to the `weight` node +} + +// This comment is just for you. It will not +// show up in the AST. + +/// This comment will get attached to the +/// Customer node. +model Customer {} +``` + +## Auto formatting + +Prisma supports formatting `.prisma` files automatically. There are two ways to format `.prisma` files: + +- Run the [`prisma format`](/orm/reference/prisma-cli-reference#format) command. +- Install the [Prisma VS Code extension](https://marketplace.visualstudio.com/items?itemName=Prisma.prisma) and invoke the [VS Code format action](https://code.visualstudio.com/docs/editor/codebasics#_formatting) - manually or on save. + +There are no configuration options - [formatting rules](#formatting-rules) are fixed (similar to Golang's `gofmt` but unlike Javascript's `prettier`): + +### Formatting rules + +#### Configuration blocks are aligned by their `=` sign. + +``` +block _ { + key = "value" + key2 = 1 + long_key = true +} +``` + +A newline resets block alignment: + +``` +block _ { + key = "value" + key2 = 1 + key10 = true + + long_key = true + long_key_2 = true +} +``` + + + +#### Field definitions are aligned into columns separated by 2 or more spaces + +``` +block _ { + id String @id + first_name LongNumeric @default +} +``` + +#### Multiline field attributes are properly aligned with the rest of the field attributes + +``` +block _ { + id String @id + @default + first_name LongNumeric @default +} +``` + +A newline resets formatting rules: + +``` +block _ { + id String @id + @default + + first_name LongNumeric @default +} + +``` + +#### Block attributes are sorted to the end of the block + +``` +block _ { + key = "value" + + @@attribute +} +``` diff --git a/docs/200-orm/100-prisma-schema/20-data-model/10-models.mdx b/docs/200-orm/100-prisma-schema/20-data-model/10-models.mdx new file mode 100644 index 0000000000..22b8aa92e9 --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/10-models.mdx @@ -0,0 +1,1186 @@ +--- +title: 'Models' +metaTitle: 'Models' +metaDescription: 'Learn about the concepts for building your data model with Prisma: Models, scalar types, enums, attributes, functions, IDs, default values and more.' +tocDepth: 3 +--- + + + +The data model definition part of the [Prisma schema](/orm/prisma-schema) defines your application models (also called **Prisma models**). Models: + +- Represent the **entities** of your application domain +- Map to the **tables** (relational databases like PostgreSQL) or **collections** (MongoDB) in your database +- Form the foundation of the **queries** available in the generated [Prisma Client API](/orm/prisma-client) +- When used with TypeScript, Prisma Client provides generated **type definitions** for your models and any [variations](/orm/prisma-client/type-safety/operating-against-partial-structures-of-model-types) of them to make database access entirely type safe. + +The following schema describes a blogging platform - the data model definition is highlighted: + + + + +```prisma highlight=10-46;normal +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + role Role @default(USER) + posts Post[] + profile Profile? +} + +model Profile { + id Int @id @default(autoincrement()) + bio String + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} + +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + title String + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int + categories Category[] +} + +model Category { + id Int @id @default(autoincrement()) + name String + posts Post[] +} + +enum Role { + USER + ADMIN +} +``` + + + + +```prisma highlight=10-45;normal +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +generator client { + provider = "prisma-client-js" +} + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + name String? + role Role @default(USER) + posts Post[] + profile Profile? +} + +model Profile { + id String @id @default(auto()) @map("_id") @db.ObjectId + bio String + user User @relation(fields: [userId], references: [id]) + userId String @unique @db.ObjectId +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime @default(now()) + title String + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId + categoryIDs String[] @db.ObjectId + categories Category[] @relation(fields: [categoryIDs], references: [id]) +} + +model Category { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String + postIDs String[] @db.ObjectId + posts Post[] @relation(fields: [postIDs], references: [id]) +} + +enum Role { + USER + ADMIN +} +``` + + + + +The data model definition is made up of: + +- [Models](#defining-models) ([`model`](/orm/reference/prisma-schema-reference#model) primitives) that define a number of fields, including [relations between models](#relation-fields) +- [Enums](#defining-enums) ([`enum`](/orm/reference/prisma-schema-reference#enum) primitives) (if your connector supports Enums) +- [Attributes](#defining-attributes) and [functions](#using-functions) that change the behavior of fields and models + +The corresponding database looks like this: + +![](../prisma-schema/sample-database.png) + +

+ +A model maps to the underlying structures of the data source. + +- In relational databases like PostgreSQL and MySQL, a `model` maps to a **table** +- In MongoDB, a `model` maps to a **collection** + +> **Note**: In the future there might be connectors for non-relational databases and other data sources. For example, for a REST API it would map to a _resource_. + +
+ +The following query uses Prisma Client that's generated from this data model to create: + +- A `User` record +- Two nested `Post` records +- Three nested `Category` records + + + + + +```ts +const user = await prisma.user.create({ + data: { + email: 'ariadne@prisma.io', + name: 'Ariadne', + posts: { + create: [ + { + title: 'My first day at Prisma', + categories: { + create: { + name: 'Office', + }, + }, + }, + { + title: 'How to connect to a SQLite database', + categories: { + create: [{ name: 'Databases' }, { name: 'Tutorials' }], + }, + }, + ], + }, + }, +}) +``` + + + + + +```ts +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient({}) + +// A `main` function so that you can use async/await +async function main() { + // Create user, posts, and categories + const user = await prisma.user.create({ + data: { + email: 'ariadne@prisma.io', + name: 'Ariadne', + posts: { + create: [ + { + title: 'My first day at Prisma', + categories: { + create: { + name: 'Office', + }, + }, + }, + { + title: 'How to connect to a SQLite database', + categories: { + create: [{ name: 'Databases' }, { name: 'Tutorials' }], + }, + }, + ], + }, + }, + }) + + // Return user, and posts, and categories + const returnUser = await prisma.user.findUnique({ + where: { + id: user.id, + }, + include: { + posts: { + include: { + categories: true, + }, + }, + }, + }) + + console.log(returnUser) +} + +main() +``` + + + + + +Your data model reflects _your_ application domain. For example: + +- In an **ecommerce** application you probably have models like `Customer`, `Order`, `Item` and `Invoice`. +- In a **social media** application you probably have models like `User`, `Post`, `Photo` and `Message`. + + + +## Introspection and migration + +There are two ways to define a data model: + +- **Write the data model manually and use Prisma Migrate**: You can write your data model manually and map it to your database using [Prisma Migrate](/orm/prisma-migrate). In this case, the data model is the single source of truth for the models of your application. +- **Generate the data model via introspection**: When you have an existing database or prefer migrating your database schema with SQL, you generate the data model by [introspecting](/orm/prisma-schema/introspection) your database. In this case, the database schema is the single source of truth for the models of your application. + +## Defining models + +Models represent the entities of your application domain. Models are represented by [`model`](/orm/reference/prisma-schema-reference#model) blocks and define a number of [fields](/orm/reference/prisma-schema-reference#model-fields). In the example data model above, `User`, `Profile`, `Post` and `Category` are models. + +A blogging platform can be extended with the following models: + +```prisma +model Comment { + // Fields +} + +model Tag { + // Fields +} +``` + +### Mapping model names to tables or collections + +Prisma model [naming conventions (singular form, PascalCase)](/orm/reference/prisma-schema-reference#naming-conventions) do not always match table names in the database. A common approach for naming tables/collections in databases is to use plural form and [snake_case](https://en.wikipedia.org/wiki/Snake_case) notation - for example: `comments`. When you introspect a database with a table named `comments`, the result Prisma model will look like this: + +```prisma +model comments { + // Fields +} +``` + +However, you can still adhere to the naming convention without renaming the underlying `comments` table in the database by using the [`@@map`](/orm/reference/prisma-schema-reference#map-1) attribute: + +```prisma +model Comment { + // Fields + + @@map("comments") +} +``` + +With this model definition, Prisma automatically maps the `Comment` model to the `comments` table in the underlying database. + +> **Note**: You can also [`@map`](/orm/reference/prisma-schema-reference#map) a column name or enum value, and `@@map` an enum name. + +`@map` and `@@map` allow you to [tune the shape of your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names#using-map-and-map-to-rename-fields-and-models-in-the-prisma-client-api) by decoupling model and field names from table and column names in the underlying database. + +
+ + + +
+ +## Defining fields + +The properties of a model are called _fields_, which consist of: + +- A **[field name](/orm/reference/prisma-schema-reference#model-fields)** +- A **[field type](/orm/reference/prisma-schema-reference#model-fields)** +- Optional **[type modifiers](#type-modifiers)** +- Optional **[attributes](#defining-attributes)**, including [native database type attributes](#native-types-mapping) + +A field's type determines its _structure_, and fits into one of two categories: + +- [Scalar types](#scalar-fields) (includes [enums](#defining-enums)) that map to columns (relational databases) or document fields (MongoDB) in the database - for example, [`String`](/orm/reference/prisma-schema-reference#string) or [`Int`](/orm/reference/prisma-schema-reference#int) +- Model types (the field is then called [relation field](relations#relation-fields)) - for example `Post` or `Comment[]`. + +The following table describes `User` model's fields from the sample schema: + +
+ +Expand to see table + +| Name | Type | Scalar vs Relation | Type modifier | Attributes | +| :-------- | :-------- | :---------------------------- | :------------ | :------------------------------------ | +| `id` | `Int` | Scalar | - | `@id` and `@default(autoincrement())` | +| `email` | `String` | Scalar | - | `@unique` | +| `name` | `String` | Scalar | `?` | - | +| `role` | `Role` | Scalar (`enum`) | - | `@default(USER)` | +| `posts` | `Post` | Relation (Prisma-level field) | `[]` | - | +| `profile` | `Profile` | Relation (Prisma-level field) | `?` | - | + +
+ +### Scalar fields + +The following example extends the `Comment` and `Tag` models with several scalar types. Some fields include [attributes](#defining-attributes): + + + + +```prisma highlight=2-4,8;normal +model Comment { + id Int @id @default(autoincrement()) + title String + content String +} + +model Tag { + name String @id +} +``` + + + + +```prisma highlight=2-4,8;normal +model Comment { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + content String +} + +model Tag { + name String @id @map("_id") +} +``` + + + + +See [complete list of scalar field types](/orm/reference/prisma-schema-reference#model-field-scalar-types) . + +### Relation fields + +A relation field's type is another model - for example, a post (`Post`) can have multiple comments (`Comment[]`): + + + + +```prisma highlight=4,10;normal +model Post { + id Int @id @default(autoincrement()) + // Other fields + comments Comment[] // A post can have many comments +} + +model Comment { + id Int + // Other fields + Post Post? @relation(fields: [postId], references: [id]) // A comment can have one post + postId Int? +} +``` + + + + +```prisma highlight=4,10;normal +model Post { + id String @id @default(auto()) @map("_id") @db.Objectid + // Other fields + comments Comment[] // A post can have many comments +} + +model Comment { + id String @id @default(auto()) @map("_id") @db.Objectid + // Other fields + Post Post? @relation(fields: [postId], references: [id]) // A comment can have one post + postId String? @db.ObjectId +} +``` + + + + +Refer to the [relations documentation](relations) for more examples and information about relationships between models. + +### Native types mapping + +Version [2.17.0](https://github.com/prisma/prisma/releases/tag/2.17.0) and later support **native database type attributes** (type attributes) that describe the underlying database type: + +```prisma highlight=3;normal +model Post { + id Int @id + title String @db.VarChar(200) + content String +} +``` + +Type attributes are: + +- Specific to the underlying provider - for example, PostgreSQL uses `@db.Boolean` for `Boolean` whereas MySQL uses `@db.TinyInt(1)` +- Written in PascalCase (for example, `VarChar` or `Text`) +- Prefixed by `@db`, where `db` is the name of the `datasource` block in your schema + +Furthermore, during [Introspection](/orm/prisma-schema/introspection) type attributes are _only_ added to the schema if the underlying native type is **not the default type**. For example, if you are using the PostgreSQL provider, `String` fields where the underlying native type is `text` will not have a type attribute. + +See [complete list of native database type attributes per scalar type and provider](/orm/reference/prisma-schema-reference#model-field-scalar-types) . + +#### Benefits and workflows + +- Control **the exact native type** that [Prisma Migrate](/orm/prisma-migrate) creates in the database - for example, a `String` can be `@db.VarChar(200)` or `@db.Char(50)` +- See an **enriched schema** when you introspect + +### Type modifiers + +The type of a field can be modified by appending either of two modifiers: + +- [`[]`](/orm/reference/prisma-schema-reference#-modifier) Make a field a list +- [`?`](/orm/reference/prisma-schema-reference#-modifier-1) Make a field optional + +> **Note**: You **cannot** combine type modifiers - optional lists are not supported. + +#### Lists + +The following example includes a scalar list and a list of related models: + + + + +```prisma highlight=4,5;normal +model Post { + id Int @id @default(autoincrement()) + // Other fields + comments Comment[] // A list of comments + keywords String[] // A scalar list +} +``` + + + + +```prisma highlight=4,5;normal +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + // Other fields + comments Comment[] // A list of comments + keywords String[] // A scalar list +} +``` + + + + +> **Note**: Scalar lists are **only** supported if the database connector supports scalar lists, either natively or at a Prisma level. + +#### Optional and mandatory fields + + + + +```prisma highlight=4;normal +model Comment { + id Int @id @default(autoincrement()) + title String + content String? +} + +model Tag { + name String @id +} +``` + + + + +```prisma highlight=4;normal +model Comment { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + content String? +} + +model Tag { + name String @id @map("_id") +} +``` + + + + +When **not** annotating a field with the `?` type modifier, the field will be _required_ on every record of the model. This has effects on two levels: + +- **Databases** + - **Relational databases**: Required fields are represented via `NOT NULL` constraints in the underlying database. + - **MongoDB**: Required fields are not a concept on a MongoDB database level. +- **Prisma Client**: Prisma Client's generated [TypeScript types](#type-definitions) that represent the models in your application code will also define these fields as required to ensure they always carry values at runtime. + +> **Note**: The default value of an optional field is `null`. + +### Unsupported types + +When you introspect a relational database, unsupported data types are added as [`Unsupported`](/orm/reference/prisma-schema-reference#unsupported) : + +```prisma +location Unsupported("POLYGON")? +``` + +The `Unsupported` type allows you to define fields in the Prisma schema for database types that are not yet supported by Prisma. For example, MySQL's `POLYGON` type is not currently supported by Prisma, but can now be added to the Prisma schema using the `Unsupported("POLYGON")` type. + +Fields of type `Unsupported` are not available in the generated Prisma Client API, but you can still use Prisma's [raw database access](/orm/prisma-client/queries/raw-database-access/raw-queries) feature to query these fields. + +> **Note**: If a model has **mandatory `Unsupported` fields**, the generated client will not include `create` or `update` methods for that model. + +> **Note**: The MongoDB connector does not support nor require the `Unsupported` type because it supports all scalar types. + +## Defining attributes + +Attributes modify the behavior of fields or model blocks. The following example includes three field attributes ([`@id`](/orm/reference/prisma-schema-reference#id) , [`@default`](/orm/reference/prisma-schema-reference#default) , and [`@unique`](/orm/reference/prisma-schema-reference#unique) ) and one block attribute ([`@@unique`](/orm/reference/prisma-schema-reference#unique-1) ): + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + firstName String + lastName String + email String @unique + isAdmin Boolean @default(false) + + @@unique([firstName, lastName]) +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + firstName String + lastName String + email String @unique + isAdmin Boolean @default(false) + + @@unique([firstName, lastName]) +} +``` + + + + +Some attributes accept [arguments](/orm/reference/prisma-schema-reference#attribute-argument-types) - for example, `@default` accepts `true` or `false`: + +```prisma +isAdmin Boolean @default(false) // short form of @default(value: false) +``` + +See [complete list of field and block attributes](/orm/reference/prisma-schema-reference#attributes) + +### Defining an ID field + +An ID uniquely identifies individual records of a model. A model can only have _one_ ID: + +- In **relational databases**, the ID can be a single field or based on multiple fields. If a model does not have an `@id` or an `@@id`, you must define a mandatory `@unique` field or `@@unique` block instead. +- In **MongoDB**, an ID must be a single field that defines an `@id` attribute and a `@map("_id")` attribute. + +#### Defining IDs in relational databases + +In relational databases, an ID can be defined by a single field using the [`@id`](/orm/reference/prisma-schema-reference#id) attribute, or multiple fields using the [`@@id`](/orm/reference/prisma-schema-reference#id-1) attribute. + +##### Single field IDs + +In the following example, the `User` ID is represented by the `id` integer field: + +```prisma highlight=2;normal +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + role Role @default(USER) + posts Post[] + profile Profile? +} +``` + +##### Composite IDs + +In the following example, the `User` ID is represented by a combination of the `firstName` and `lastName` fields: + +```prisma highlight=7;normal +model User { + firstName String + lastName String + email String @unique + isAdmin Boolean @default(false) + + @@id([firstName, lastName]) +} +``` + +By default, the name of this field in Prisma Client queries will be `firstName_lastName`. + +You can also provide your own name for the composite ID using the [`@@id`](/orm/reference/prisma-schema-reference#id-1) attribute's `name` field: + +```prisma highlight=7;normal +model User { + firstName String + lastName String + email String @unique + isAdmin Boolean @default(false) + + @@id(name: "fullName", fields: [firstName, lastName]) +} +``` + +The `firstName_lastName` field will now be named `fullName` instead. + + + +Refer to the documentation on [working with composite IDs](/orm/prisma-client/special-fields-and-types/working-with-composite-ids-and-constraints) to learn how to interact with a composite ID in Prisma Client. + + + +##### `@unique` fields as unique identifiers + +In the following example, users are uniquely identified by a `@unique` field. Because the `email` field functions as a unique identifier for the model (which is required by Prisma), it must be mandatory: + +```prisma highlight=2;normal +model User { + email String @unique + name String? + role Role @default(USER) + posts Post[] + profile Profile? +} +``` + + + +**Constraint names in relational databases**
+You can optionally define a [custom primary key constraint name](/orm/prisma-schema/data-model/database-mapping#constraint-and-index-names) in the underlying database. + +
+ +#### Defining IDs in MongoDB + +The MongoDB connector has [specific rules for defining an ID field](/orm/reference/prisma-schema-reference#mongodb) that differs from relational databases. An ID must be defined by a single field using the [`@id`](/orm/reference/prisma-schema-reference#id) attribute and must include `@map("_id")`. + +In the following example, the `User` ID is represented by the `id` string field that accepts an auto-generated `ObjectId`: + +```prisma highlight=2;normal +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + name String? + role Role @default(USER) + posts Post[] + profile Profile? +} +``` + +In the following example, the `User` ID is represented by the `id` string field that accepts something other than an `ObjectId` - for example, a unique username: + +```prisma highlight=2;normal +model User { + id String @id @map("_id") + email String @unique + name String? + role Role @default(USER) + posts Post[] + profile Profile? +} +``` + + + +**MongoDB does not support `@@id`**
+MongoDB does not support composite IDs, which means you cannot identify a model with a `@@id` block. + +
+ +### Defining a default value + +You can define default values for scalar fields of your models using the [`@default`](/orm/reference/prisma-schema-reference#default) attribute: + + + + +```prisma highlight=3,5;normal +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + title String + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int + categories Category[] @relation(references: [id]) +} +``` + + + + +```prisma highlight=3,5;normal +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime @default(now()) + title String + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId + categories Category[] @relation(references: [id]) +} +``` + + + + +`@default` attributes either: + +- Represent `DEFAULT` values in the underlying database (relational databases only) _or_ +- Use a Prisma-level function. For example, `cuid()` and `uuid()` are provided by Prisma's [query engine](/orm/more/under-the-hood/engines) for all connectors. + +Default values can be: + +- Static values that correspond to the field type, such as `5` (`Int`), `Hello` (`String`), or `false` (`Boolean`) +- [Lists](/orm/reference/prisma-schema-reference#-modifier) of static values, such as `[5, 6, 8]` (`Int[]`) or `["Hello", "Goodbye"]` (`String`[]). These are available in versions `4.0.0` and later, when using databases where Prisma supports them (PostgreSQL, CockroachDB and MongoDB) +- [Functions](#using-functions), such as [`now()`](/orm/reference/prisma-schema-reference#now) or [`uuid()`](/orm/reference/prisma-schema-reference#uuid) + + + +Refer to the [attribute function reference documentation](/orm/reference/prisma-schema-reference#attribute-functions) for information about connector support for functions. + + + +### Defining a unique field + +You can add unique attributes to your models to be able to uniquely identify individual records of that model. Unique attributes can be defined on a single field using [`@unique`](/orm/reference/prisma-schema-reference#unique) attribute, or on multiple fields (also called composite or compound unique constraints) using the [`@@unique`](/orm/reference/prisma-schema-reference#unique-1) attribute. + +In the following example, the value of the `email` field must be unique: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + name String? +} +``` + + + + +In the following example, a combination of `authorId` and `title` must be unique: + + + + +```prisma highlight=10;normal +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + title String + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId Int + categories Category[] @relation(references: [id]) + + @@unique([authorId, title]) +} +``` + + + + +```prisma highlight=10;normal +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime @default(now()) + title String + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId + categories Category[] @relation(references: [id]) + + @@unique([authorId, title]) +} +``` + + + + + + +**Constraint names in relational databases**
+You can optionally define a [custom unique constraint name](/orm/prisma-schema/data-model/database-mapping#constraint-and-index-names) in the underlying database. + +
+ +By default, the name of this field in Prisma Client queries will be `authorId_title`. + +You can also provide your own name for the composite unique constraint using the [`@@unique`](/orm/prisma-schema/data-model/database-mapping#constraint-and-index-names) attribute's `name` field: + +```prisma highlight=10;normal +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime @default(now()) + title String + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId + categories Category[] @relation(references: [id]) + + @@unique(name: "authorTitle", [authorId, title]) +} +``` + +The `authorId_title` field will now be named `authorTitle` instead. + + + +Refer to the documentation on [working with composite unique identifiers](/orm/prisma-client/special-fields-and-types/working-with-composite-ids-and-constraints) to learn how to interact with a composite unique constraints in Prisma Client. + + + +#### Composite type unique constraints + +When using the MongoDB provider in version `3.12.0` and later, you can define a unique constraint on a field of a [composite type](#defining-composite-types) using the syntax `@@unique([compositeType.field])`. As with other fields, composite type fields can be used as part of a multi-column unique constraint. + +The following example defines a multi-column unique constraint based on the `email` field of the `User` model and the `number` field of the `Address` composite type which is used in `User.address`: + +```prisma file=schema.prisma +type Address { + street String + number Int +} + +model User { + id Int @id + email String + address Address + + @@unique([email, address.number]) +} +``` + +This notation can be chained if there is more than one nested composite type: + +```prisma file=schema.prisma +type City { + name String +} + +type Address { + number Int + city City +} + +model User { + id Int @id + address Address[] + + @@unique([address.city.name]) +} +``` + +### Defining an index + +You can define indexes on one or multiple fields of your models via the [`@@index`](/orm/reference/prisma-schema-reference#index) on a model. The following example defines a multi-column index based on the `title` and `content` field: + +```prisma +model Post { + id Int @id @default(autoincrement()) + title String + content String? + + @@index([title, content]) +} +``` + + + +**Index names in relational databases**
+You can optionally define a [custom index name](/orm/prisma-schema/data-model/database-mapping#constraint-and-index-names) in the underlying database. + +
+ +#### Defining composite type indexes + +When using the MongoDB provider in version `3.12.0` and later, you can define an index on a field of a [composite type](#defining-composite-types) using the syntax `@@index([compositeType.field])`. As with other fields, composite type fields can be used as part of a multi-column index. + +The following example defines a multi-column index based on the `email` field of the `User` model and the `number` field of the `Address` composite type: + +```prisma file=schema.prisma +type Address { + street String + number Int +} + +model User { + id Int @id + email String + address Address + + @@index([email, address.number]) +} +``` + +This notation can be chained if there is more than one nested composite type: + +```prisma file=schema.prisma +type City { + name String +} + +type Address { + number Int + city City +} + +model User { + id Int @id + address Address[] + + @@index([address.city.name]) +} +``` + +## Defining enums + +You can define enums in your data model [if enums are supported for your database connector](/orm/reference/database-features#misc), either natively or at Prisma level. + +Enums are considered [scalar](#scalar-fields) types in the Prisma data model. They're therefore [by default](/orm/prisma-client/queries/select-fields#return-the-default-selection-set) included as return values in [Prisma Client queries](/orm/prisma-client/queries/crud). + +Enums are defined via the [`enum`](/orm/reference/prisma-schema-reference#enum) block. For example, a `User` has a `Role`: + + + + +```prisma highlight=5,8-11;normal +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + role Role @default(USER) +} + +enum Role { + USER + ADMIN +} +``` + + + + +```prisma highlight=5,8-11;normal +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + name String? + role Role @default(USER) +} + +enum Role { + USER + ADMIN +} +``` + + + + +## Defining composite types + + + +Composite types were added in version `3.10.0` under the `mongodb` Preview feature flag and are in General Availability since version `3.12.0`. + + + + + +Composite types are currently only available on MongoDB. + + + +Composite types (known as [embedded documents](https://docs.mongodb.com/manual/core/data-model-design/#std-label-data-modeling-embedding) in MongoDB) provide support for embedding records inside other records, by allowing you to define new object types. Composite types are structured and typed in a similar way to [models](#defining-models). + +To define a composite type, use the `type` block. As an example, take the following schema: + +```prisma file=schema.prisma +model Product { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String + photos Photo[] +} + +type Photo { + height Int + width Int + url String +} +``` + +In this case, the `Product` model has a list of `Photo` composite types stored in `photos`. + +### Considerations when using composite types + +Composite types only support a limited set of [attributes](/orm/reference/prisma-schema-reference#attributes). The following attributes are supported: + +- `@default` +- `@map` +- [Native types](/orm/reference/prisma-schema-reference#model-field-scalar-types), such as `@db.ObjectId` + +The following attributes are not supported inside composite types: + +- `@unique` +- `@id` +- `@relation` +- `@ignore` +- `@updatedAt` + +However, unique constraints can still be defined by using the `@@unique` attribute on the level of the model that uses the composite type. For more details, see [Composite type unique constraints](#composite-type-unique-constraints). + +Indexes can be defined by using the `@@index` attribute on the level of the model that uses the composite type. For more details, see [Composite type indexes](#defining-composite-type-indexes). + +## Using functions + +The Prisma schema supports a number of [functions](/orm/reference/prisma-schema-reference#attribute-functions) . These can be used to specify [default values](/orm/reference/prisma-schema-reference#default) on fields of a model. + +For example, the default value of `createdAt` is [`now()`](/orm/reference/prisma-schema-reference#now) : + + + + +```prisma +model Post { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) +} +``` + + + + +```prisma +model Post { + id String @default(auto()) @map("_id") @db.ObjectId + createdAt DateTime @default(now()) +} +``` + + + + +[`cuid()`](/orm/reference/prisma-schema-reference#cuid) and [`uuid()`](/orm/reference/prisma-schema-reference#uuid) are implemented by Prisma and therefore are not "visible" in the underlying database schema. You can still use them when using [introspection](/orm/prisma-schema/introspection) by [manually changing your Prisma schema](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names) and [generating Prisma Client](/orm/prisma-client/setup-and-configuration/generating-prisma-client), in that case the values will be generated by Prisma's [query engine](/orm/more/under-the-hood/engines) + +Support for [`autoincrement()`](/orm/reference/prisma-schema-reference#autoincrement) , [`now()`](/orm/reference/prisma-schema-reference#now) and [`dbgenerated()`](/orm/reference/prisma-schema-reference#dbgenerated) differ between databases. + +**Relational database connectors** implement `autoincrement()`, `dbgenerated()`, and `now()` at database level. The **MongoDB connector** does not support `autoincrement()` or `dbgenerated()`, and `now()` is implemented at Prisma level. The [`auto()`](/orm/reference/prisma-schema-reference#auto) function is used to generate an `ObjectId`. + +## Relations + +Refer to the [relations documentation](relations) for more examples and information about relationships between models. + +## Models in Prisma Client + +### Queries (CRUD) + +Every model in the data model definition will result in a number of CRUD queries in the generated [Prisma Client API](/orm/prisma-client): + +- [`findMany`](/orm/reference/prisma-client-reference#findmany) +- [`findFirst`](/orm/reference/prisma-client-reference#findfirst) +- [`findFirstOrThrow`](/orm/reference/prisma-client-reference#findfirstorthrow) +- [`findUnique`](/orm/reference/prisma-client-reference#findunique) +- [`findUniqueOrThrow`](/orm/reference/prisma-client-reference#finduniqueorthrow) +- [`create`](/orm/reference/prisma-client-reference#create) +- [`update`](/orm/reference/prisma-client-reference#update) +- [`upsert`](/orm/reference/prisma-client-reference#upsert) +- [`delete`](/orm/reference/prisma-client-reference#delete) +- [`createMany`](/orm/reference/prisma-client-reference#createmany) +- [`updateMany`](/orm/reference/prisma-client-reference#updatemany) +- [`deleteMany`](/orm/reference/prisma-client-reference#deletemany) + +The operations are accessible via a generated property on the Prisma Client instance. By default the name of the property is the lowercase form of the model name, e.g. `user` for a `User` model or `post` for a `Post` model. + +Here is an example illustrating the use of a `user` property from the Prisma Client API: + +```js +const newUser = await prisma.user.create({ + data: { + name: 'Alice', + }, +}) +const allUsers = await prisma.user.findMany() +``` + +### Type definitions + +Prisma Client also generates **type definitions** that reflect your model structures. These are part of the generated [`@prisma/client`](/orm/prisma-client/setup-and-configuration/generating-prisma-client#the-prismaclient-npm-package) node module. + +When using TypeScript, these type definitions ensure that all your database queries are entirely type safe and validated at compile-time (even partial queries using [`select`](/orm/reference/prisma-client-reference#select) or [`include`](/orm/reference/prisma-client-reference#include) ). + +Even when using plain JavaScript, the type definitions are still included in the `@prisma/client` node module, enabling features like [IntelliSense](https://code.visualstudio.com/docs/editor/intellisense)/autocompletion in your editor. + +> **Note**: The actual types are stored in the `.prisma/client` folder. `@prisma/client/index.d.ts` exports the contents of this folder. + +For example, the type definition for the `User` model from above would look as follows: + +```ts +export type User = { + id: number + email: string + name: string | null + role: string +} +``` + +Note that the relation fields `posts` and `profile` are not included in the type definition by default. However, if you need variations of the `User` type you can still define them using some of [Prisma Client's generated helper types](/orm/prisma-client/setup-and-configuration/generating-prisma-client) (in this case, these helper types would be called `UserGetIncludePayload` and `UserGetSelectPayload`). + +## Limitations + +### Records must be uniquely identifiable + +Prisma currently only supports models that have at least one unique field or combination of fields. In practice, this means that every Prisma model must have either at least one of the following attributes: + +- `@id` or `@@id` for a single- or multi-field primary key constraint (max one per model) +- `@unique` or `@@unique` for a single- or multi-field unique constraint diff --git a/docs/200-orm/100-prisma-schema/20-data-model/20-relations/100-one-to-one-relations.mdx b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/100-one-to-one-relations.mdx new file mode 100644 index 0000000000..4d1fe55b19 --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/100-one-to-one-relations.mdx @@ -0,0 +1,306 @@ +--- +title: One-to-one relations +metaDescription: How to define and work with one-to-one relations in Prisma. +tocDepth: 3 +--- + + + +This page introduces one-to-one relations and explains how to use them in your Prisma schema. + + + +## Overview + +One-to-one (1-1) relations refer to relations where at most **one** record can be connected on both sides of the relation. In the example below, there is a one-to-one relation between `User` and `Profile`: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + profile Profile? +} + +model Profile { + id Int @id @default(autoincrement()) + user User @relation(fields: [userId], references: [id]) + userId Int @unique // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + profile Profile? +} + +model Profile { + id String @id @default(auto()) @map("_id") @db.ObjectId + user User @relation(fields: [userId], references: [id]) + userId String @unique @db.ObjectId // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + +The `userId` relation scalar is a direct representation of the foreign key in the underlying database. This one-to-one relation expresses the following: + +- "a user can have zero profiles or one profile" (because the `profile` field is [optional](/orm/prisma-schema/data-model/models#type-modifiers) on `User`) +- "a profile must always be connected to one user" + +In the previous example, the `user` relation field of the `Profile` model references the `id` field of the `User` model. You can also reference a different field. In this case, you need to mark the field with the `@unique` attribute, to guarantee that there is only a single `User` connected to each `Profile`. In the following example, the `user` field references an `email` field in the `User` model, which is marked with the `@unique` attribute: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique // <-- add unique attribute + profile Profile? +} + +model Profile { + id Int @id @default(autoincrement()) + user User @relation(fields: [userEmail], references: [email]) + userEmail String @unique // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique // <-- add unique attribute + profile Profile? +} + +model Profile { + id String @id @default(auto()) @map("_id") @db.ObjectId + user User @relation(fields: [userEmail], references: [email]) + userEmail String @unique @db.ObjectId // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + + + +In MySQL, you can create a foreign key with only an index on the referenced side, and not a unique constraint. In Prisma versions 4.0.0 and later, if you introspect a relation of this type it will trigger a validation error. To fix this, you will need to add a `@unique` constraint to the referenced field. + + + +## Multi-field relations in relational databases + +In **relational databases only**, you can also use [multi-field IDs](/orm/reference/prisma-schema-reference#id-1) to define a 1-1 relation: + +```prisma +model User { + firstName String + lastName String + profile Profile? + + @@id([firstName, lastName]) +} + +model Profile { + id Int @id @default(autoincrement()) + user User @relation(fields: [userFirstName, userLastName], references: [firstName, lastName]) + userFirstName String // relation scalar field (used in the `@relation` attribute above) + userLastName String // relation scalar field (used in the `@relation` attribute above) + + @@unique([userFirstName, userLastName]) +} +``` + +## 1-1 relations in the database + +### Relational databases + +The following example demonstrates how to create a 1-1 relation in SQL: + +```sql +CREATE TABLE "User" ( + id SERIAL PRIMARY KEY +); +CREATE TABLE "Profile" ( + id SERIAL PRIMARY KEY, + "userId" INTEGER NOT NULL UNIQUE, + FOREIGN KEY ("userId") REFERENCES "User"(id) +); +``` + +Notice that there is a `UNIQUE` constraint on the foreign key `userId`. If this `UNIQUE` constraint was missing, the relation would be considered a [1-n relation](one-to-many-relations). + +The following example demonstrates how to create a 1-1 relation in SQL using a composite key (`firstName` and `lastName`): + +```sql +CREATE TABLE "User" ( + firstName TEXT, + lastName TEXT, + PRIMARY KEY ("firstName","lastName") +); +CREATE TABLE "Profile" ( + id SERIAL PRIMARY KEY, + "userFirstName" TEXT NOT NULL, + "userLastName" TEXT NOT NULL, + UNIQUE ("userFirstName", "userLastName") + FOREIGN KEY ("userFirstName", "userLastName") REFERENCES "User"("firstName", "lastName") +); +``` + +### MongoDB + +For MongoDB, Prisma currently uses a [normalized data model design](https://docs.mongodb.com/manual/core/data-model-design/), which means that documents reference each other by ID in a similar way to relational databases. + +The following MongoDB document represents a `User`: + +```json +{ "_id": { "$oid": "60d58e130011041800d209e1" }, "name": "Bob" } +``` + +The following MongoDB document represents a `Profile` - notice the `userId` field, which references the `User` document's `$oid`: + +```json +{ + "_id": { "$oid": "60d58e140011041800d209e2" }, + "bio": "I'm Bob, and I like drawing.", + "userId": { "$oid": "60d58e130011041800d209e1" } +} +``` + +## Required and optional 1-1 relation fields + +In a one-to-one relation, the side of the relation _without_ a relation scalar (the field representing the foreign key in the database) _must_ be optional: + +```prisma highlight=3;normal +model User { + id Int @id @default(autoincrement()) + profile Profile? // No relation scalar - must be optional +} +``` + +This restriction was introduced in 2.12.0. + +However, you can choose if the side of the relation _with_ a relation scalar should be optional or mandatory. + +### Mandatory 1-1 relation + +In the following example, `profile` and `profileId` are mandatory. This means that you cannot create a `User` without connecting or creating a `Profile`: + +```prisma +model User { + id Int @id @default(autoincrement()) + profile Profile @relation(fields: [profileId], references: [id]) // references `id` of `Profile` + profileId Int @unique // relation scalar field (used in the `@relation` attribute above) +} + +model Profile { + id Int @id @default(autoincrement()) + user User? +} +``` + +### Optional 1-1 relation + +In the following example, `profile` and `profileId` are optional. This means that you can create a user without connecting or creating a `Profile`: + +```prisma +model User { + id Int @id @default(autoincrement()) + profile Profile? @relation(fields: [profileId], references: [id]) // references `id` of `Profile` + profileId Int? @unique // relation scalar field (used in the `@relation` attribute above) +} + +model Profile { + id Int @id @default(autoincrement()) + user User? +} +``` + +## Choosing which side should store the foreign key in a 1-1 relation + +In **1-1 relations**, you can decide yourself which side of the relation you want to annotate with the `@relation` attribute (and therefore holds the foreign key). + +In the following example, the relation field on the `Profile` model is annotated with the `@relation` attribute. `userId` is a direct representation of the foreign key in the underlying database: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + profile Profile? +} + +model Profile { + id Int @id @default(autoincrement()) + user User @relation(fields: [userId], references: [id]) + userId Int @unique // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + profile Profile? +} + +model Profile { + id String @id @default(auto()) @map("_id") @db.ObjectId + user User @relation(fields: [userId], references: [id]) + userId String @unique @db.ObjectId +} +``` + + + + +You can also annotate the other side of the relation with the `@relation` attribute. The following example annotates the relation field on the `User` model. `profileId` is a direct representation of the foreign key in the underlying database: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + profile Profile? @relation(fields: [profileId], references: [id]) + profileId Int? @unique // relation scalar field (used in the `@relation` attribute above) +} + +model Profile { + id Int @id @default(autoincrement()) + user User? +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + profile Profile? @relation(fields: [profileId], references: [id]) + profileId String? @unique @db.ObjectId // relation scalar field (used in the `@relation` attribute above) +} + +model Profile { + id String @id @default(auto()) @map("_id") @db.ObjectId + user User? +} +``` + + + diff --git a/docs/200-orm/100-prisma-schema/20-data-model/20-relations/200-one-to-many-relations.mdx b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/200-one-to-many-relations.mdx new file mode 100644 index 0000000000..7c5fea1548 --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/200-one-to-many-relations.mdx @@ -0,0 +1,280 @@ +--- +title: One-to-many relations +metaDescription: How to define and work with one-to-many relations in Prisma. +tocDepth: 3 +--- + + + +This page introduces one-to-many relations and explains how to use them in your Prisma schema. + + + +## Overview + +One-to-many (1-n) relations refer to relations where one record on one side of the relation can be connected to zero or more records on the other side. In the following example, there is one one-to-many relation between the `User` and `Post` models: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + author User @relation(fields: [authorId], references: [id]) + authorId Int +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + posts Post[] +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId +} +``` + + + + +> **Note** The `posts` field does not "manifest" in the underlying database schema. On the other side of the relation, the [annotated relation field](/orm/prisma-schema/data-model/relations#relation-fields) `author` and its relation scalar `authorId` represent the side of the relation that stores the foreign key in the underlying database. + +This one-to-many relation expresses the following: + +- "a user can have zero or more posts" +- "a post must always have an author" + +In the previous example, the `author` relation field of the `Post` model references the `id` field of the `User` model. You can also reference a different field. In this case, you need to mark the field with the `@unique` attribute, to guarantee that there is only a single `User` connected to each `Post`. In the following example, the `author` field references an `email` field in the `User` model, which is marked with the `@unique` attribute: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique // <-- add unique attribute + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + authorEmail String + author User @relation(fields: [authorEmail], references: [email]) +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique // <-- add unique attribute + posts Post[] +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + authorEmail String + author User @relation(fields: [authorEmail], references: [email]) +} +``` + + + + + + +In MySQL, you can create a foreign key with only an index on the referenced side, and not a unique constraint. In Prisma versions 4.0.0 and later, if you introspect a relation of this type it will trigger a validation error. To fix this, you will need to add a `@unique` constraint to the referenced field. + + + +## Multi-field relations in relational databases + +In **relational databases only**, you can also define this relation using [multi-field IDs](/orm/reference/prisma-schema-reference#id-1)/composite key: + +```prisma +model User { + firstName String + lastName String + post Post[] + + @@id([firstName, lastName]) +} + +model Post { + id Int @id @default(autoincrement()) + author User @relation(fields: [authorFirstName, authorLastName], references: [firstName, lastName]) + authorFirstName String // relation scalar field (used in the `@relation` attribute above) + authorLastName String // relation scalar field (used in the `@relation` attribute above) +} +``` + +## 1-n relations in the database + +### Relational databases + +The following example demonstrates how to create a 1-n relation in SQL: + +```sql +CREATE TABLE "User" ( + id SERIAL PRIMARY KEY +); +CREATE TABLE "Post" ( + id SERIAL PRIMARY KEY, + "authorId" integer NOT NULL, + FOREIGN KEY ("authorId") REFERENCES "User"(id) +); +``` + +Since there's no `UNIQUE` constraint on the `authorId` column (the foreign key), you can create **multiple `Post` records that point to the same `User` record**. This makes the relation a one-to-many rather than a one-to-one. + +The following example demonstrates how to create a 1-n relation in SQL using a composite key (`firstName` and `lastName`): + +```sql +CREATE TABLE "User" ( + firstName TEXT, + lastName TEXT, + PRIMARY KEY ("firstName","lastName") +); +CREATE TABLE "Post" ( + id SERIAL PRIMARY KEY, + "authorFirstName" TEXT NOT NULL, + "authorLastName" TEXT NOT NULL, + FOREIGN KEY ("authorFirstName", "authorLastName") REFERENCES "User"("firstName", "lastName") +); +``` + +#### Comparing one-to-one and one-to-many relations + +In relational databases, the main difference between a 1-1 and a 1-n-relation is that in a 1-1-relation the foreign key must have a `UNIQUE` constraint defined on it. + +### MongoDB + +For MongoDB, Prisma currently uses a [normalized data model design](https://docs.mongodb.com/manual/core/data-model-design/), which means that documents reference each other by ID in a similar way to relational databases. + +The following MongoDB document represents a `User`: + +```json +{ "_id": { "$oid": "60d5922d00581b8f0062e3a8" }, "name": "Ella" } +``` + +Each of the following `Post` MongoDB documents has an `authorId` field which references the same user: + +```json +[ + { + "_id": { "$oid": "60d5922e00581b8f0062e3a9" }, + "title": "How to make sushi", + "authorId": { "$oid": "60d5922d00581b8f0062e3a8" } + }, + { + "_id": { "$oid": "60d5922e00581b8f0062e3aa" }, + "title": "How to re-install Windows", + "authorId": { "$oid": "60d5922d00581b8f0062e3a8" } + } +] +``` + +#### Comparing one-to-one and one-to-many relations + +In MongoDB, the only difference between a 1-1 and a 1-n is the number of documents referencing another document in the database - there are no constraints. + +## Required and optional relation fields in one-to-many relations + +A 1-n-relation always has two relation fields: + +- a [list](/orm/prisma-schema/data-model/models#type-modifiers) relation field which is _not_ annotated with `@relation` +- the [annotated relation field](/orm/prisma-schema/data-model/relations#annotated-relation-fields) (including its relation scalar) + +The annotated relation field and relation scalar of a 1-n relation can either _both_ be optional, or _both_ be mandatory. On the other side of the relation, the list is **always mandatory**. + +### Optional one-to-many relation + +In the following example, you can create a `Post` without assigning a `User`: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + author User? @relation(fields: [authorId], references: [id]) + authorId Int? +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + posts Post[] +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + author User? @relation(fields: [authorId], references: [id]) + authorId String? @db.ObjectId +} +``` + + + + +### Mandatory one-to-many relation + +In the following example, you must assign a `User` when you create a `Post`: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + author User @relation(fields: [authorId], references: [id]) + authorId Int +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + posts Post[] +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId +} +``` + + + diff --git a/docs/200-orm/100-prisma-schema/20-data-model/20-relations/300-many-to-many-relations.mdx b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/300-many-to-many-relations.mdx new file mode 100644 index 0000000000..5c8761f826 --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/300-many-to-many-relations.mdx @@ -0,0 +1,549 @@ +--- +title: Many-to-many relations +metaDescription: How to define and work with many-to-many relations in Prisma. +tocDepth: 3 +--- + + + +Many-to-many (m-n) relations refer to relations where zero or more records on one side of the relation can be connected to zero or more records on the other side. + +Prisma schema syntax and the implementation in the underlying database differs between [relational databases](#relational-databases) and [MongoDB](#mongodb). + + + +## Relational databases + +In relational databases, m-n-relations are typically modelled via [relation tables](/orm/prisma-schema/data-model/relations/many-to-many-relations#relation-tables). m-n-relations can be either [explicit](#explicit-many-to-many-relations) or [implicit](#implicit-many-to-many-relations) in the Prisma schema. We recommend using [implicit](#implicit-many-to-many-relations) m-n-relations if you do not need to store any additional meta-data in the relation table itself. You can always migrate to an [explicit](#explicit-many-to-many-relations) m-n-relation later if needed. + +### Explicit many-to-many relations + +In an explicit m-n relation, the **relation table is represented as a model in the Prisma schema** and can be used in queries. Explicit m-n relations define three models: + +- Two models with m-n relation, such as `Category` and `Post`. +- One model that represents the [relation table](#relation-tables), such as `CategoriesOnPosts` (also sometimes called _JOIN_, _link_ or _pivot_ table) in the underlying database. The fields of a relation table model are both annotated relation fields (`post` and `category`) with a corresponding relation scalar field (`postId` and `categoryId`). + +The relation table `CategoriesOnPosts` connects related `Post` and `Category` records. In this example, the model representing the relation table also **defines additional fields** that describe the `Post`/`Category` relationship - who assigned the category (`assignedBy`), and when the category was assigned (`assignedAt`): + +```prisma +model Post { + id Int @id @default(autoincrement()) + title String + categories CategoriesOnPosts[] +} + +model Category { + id Int @id @default(autoincrement()) + name String + posts CategoriesOnPosts[] +} + +model CategoriesOnPosts { + post Post @relation(fields: [postId], references: [id]) + postId Int // relation scalar field (used in the `@relation` attribute above) + category Category @relation(fields: [categoryId], references: [id]) + categoryId Int // relation scalar field (used in the `@relation` attribute above) + assignedAt DateTime @default(now()) + assignedBy String + + @@id([postId, categoryId]) +} +``` + +The underlying SQL looks like this: + +```sql +CREATE TABLE "Post" ( + "id" SERIAL NOT NULL, + "title" TEXT NOT NULL, + + CONSTRAINT "Post_pkey" PRIMARY KEY ("id") +); + +CREATE TABLE "Category" ( + "id" SERIAL NOT NULL, + "name" TEXT NOT NULL, + + CONSTRAINT "Category_pkey" PRIMARY KEY ("id") +); + + +-- Relation table + indexes -- + +CREATE TABLE "CategoriesOnPosts" ( + "postId" INTEGER NOT NULL, + "categoryId" INTEGER NOT NULL, + "assignedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "CategoriesOnPosts_pkey" PRIMARY KEY ("postId","categoryId") +); + +ALTER TABLE "CategoriesOnPosts" ADD CONSTRAINT "CategoriesOnPosts_postId_fkey" FOREIGN KEY ("postId") REFERENCES "Post"("id") ON DELETE RESTRICT ON UPDATE CASCADE; +ALTER TABLE "CategoriesOnPosts" ADD CONSTRAINT "CategoriesOnPosts_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "Category"("id") ON DELETE RESTRICT ON UPDATE CASCADE; +``` + +Note that the same rules as for [1-n relations](one-to-many-relations) apply (because `Post`↔ `CategoriesOnPosts` and `Category` ↔ `CategoriesOnPosts` are both in fact 1-n relations), which means one side of the relation needs to be annotated with the `@relation` attribute. + +When you don't need to attach additional information to the relation, you can model m-n-relations as [implicit m-n-relations](#implicit-many-to-many-relations). If you're not using Prisma Migrate but obtain your data model from [introspection](/orm/prisma-schema/introspection), you can still make use of implicit m-n-relations by following Prisma's [conventions for relation tables](#conventions-for-relation-tables-in-implicit-m-n-relations). + +#### Querying an explicit many-to-many + +The following section demonstrates how to query an explicit m-n-relation. You can query the relation model directly (`prisma.categoriesOnPosts(...)`), or use nested queries to go from `Post` -> `CategoriesOnPosts` -> `Category` or the other way. + +The following query does three things: + +1. Creates a `Post` +2. Creates a new record in the relation table `CategoriesOnPosts` +3. Creates a new `Category` that is associated with the newly created `Post` record + +```ts +const createCategory = await prisma.post.create({ + data: { + title: 'How to be Bob', + categories: { + create: [ + { + assignedBy: 'Bob', + assignedAt: new Date(), + category: { + create: { + name: 'New category', + }, + }, + }, + ], + }, + }, +}) +``` + +The following query: + +- Creates a new `Post` +- Creates a new record in the relation table `CategoriesOnPosts` +- Connects the category assignment to existing categories (with IDs `9` and `22`) + +```ts +const assignCategories = await prisma.post.create({ + data: { + title: 'How to be Bob', + categories: { + create: [ + { + assignedBy: 'Bob', + assignedAt: new Date(), + category: { + connect: { + id: 9, + }, + }, + }, + { + assignedBy: 'Bob', + assignedAt: new Date(), + category: { + connect: { + id: 22, + }, + }, + }, + ], + }, + }, +}) +``` + +Sometimes you might not know if a `Category` record exists. If the `Category` record exists, you want to connect a new `Post` record to that category. If the `Category` record does not exist, you want to create the record first and then connect it to the new `Post` record. The following query: + +1. Creates a new `Post` +2. Creates a new record in the relation table `CategoriesOnPosts` +3. Connects the category assignment to an existing category (with ID `9`), or creates a new category first if it does not exist + +```ts +const assignCategories = await prisma.post.create({ + data: { + title: 'How to be Bob', + categories: { + create: [ + { + assignedBy: 'Bob', + assignedAt: new Date(), + category: { + connectOrCreate: { + where: { + id: 9, + }, + create: { + name: 'New Category', + id: 9, + }, + }, + }, + }, + ], + }, + }, +}) +``` + +The following query returns all `Post` records where at least one (`some`) category assignment (`categories`) refers to a category named `"New category"`: + +```ts +const getPosts = await prisma.post.findMany({ + where: { + categories: { + some: { + category: { + name: 'New Category', + }, + }, + }, + }, +}) +``` + +The following query returns all categories where at least one (`some`) related `Post` record titles contain the words `"Cool stuff"` _and_ the category was assigned by Bob. + +```ts +const getAssignments = await prisma.category.findMany({ + where: { + posts: { + some: { + assignedBy: 'Bob', + post: { + title: { + contains: 'Cool stuff', + }, + }, + }, + }, + }, +}) +``` + +The following query gets all category assignments (`CategoriesOnPosts`) records that were assigned by `"Bob"` to one of 5 posts: + +```ts +const getAssignments = await prisma.categoriesOnPosts.findMany({ + where: { + assignedBy: 'Bob', + post: { + id: { + in: [9, 4, 10, 12, 22], + }, + }, + }, +}) +``` + +### Implicit many-to-many relations + +Implicit m-n relations define relation fields as lists on both sides of the relation. Although the relation table exists in the underlying database, **it is managed by Prisma and does not manifest in the Prisma schema**. Implicit relation tables follow a [specific convention](#conventions-for-relation-tables-in-implicit-m-n-relations). + +Implicit m-n-relations makes the [Prisma Client API](/orm/prisma-client) for m-n-relations a bit simpler (since you have one fewer level of nesting inside of [nested writes](/orm/prisma-client/queries/relation-queries#nested-writes)). + +In the example below, there's one _implicit_ m-n-relation between `Post` and `Category`: + + + + +```prisma +model Post { + id Int @id @default(autoincrement()) + title String + categories Category[] +} + +model Category { + id Int @id @default(autoincrement()) + name String + posts Post[] +} +``` + + + + +```sql +CREATE TABLE "Category" ( + id SERIAL PRIMARY KEY, + name TEXT NOT NULL +); +CREATE TABLE "Post" ( + id SERIAL PRIMARY KEY, + title TEXT NOT NULL +); +-- Relation table + indexes ------------------------------------------------------- +CREATE TABLE "_CategoryToPost" ( + "A" integer NOT NULL REFERENCES "Category"(id), + "B" integer NOT NULL REFERENCES "Post"(id) +); +CREATE UNIQUE INDEX "_CategoryToPost_AB_unique" ON "_CategoryToPost"("A" int4_ops,"B" int4_ops); +CREATE INDEX "_CategoryToPost_B_index" ON "_CategoryToPost"("B" int4_ops); +``` + + + + +#### Querying an implicit many-to-many + +The following section demonstrates how to query an [implicit m-n](#implicit-many-to-many-relations) relation. The queries require less nesting than [explicit m-n queries](#querying-an-explicit-many-to-many). + +The following query creates a single `Post` and multiple `Category` records: + +```ts +const createPostAndCategory = await prisma.post.create({ + data: { + title: 'How to become a butterfly', + categories: { + create: [{ name: 'Magic' }, { name: 'Butterflies' }], + }, + }, +}) +``` + +The following query creates a single `Category` and multiple `Post` records: + +```ts +const createCategoryAndPosts = await prisma.category.create({ + data: { + name: 'Stories', + posts: { + create: [ + { title: 'That one time with the stuff' }, + { title: 'The story of planet Earth' }, + ], + }, + }, +}) +``` + +The following query returns all `Post` records with a list of that post's assigned categories: + +```ts +const getPostsAndCategories = await prisma.post.findMany({ + include: { + categories: true, + }, +}) +``` + +#### Rules for defining an implicit m-n relation + +Implicit m-n relations: + +- Use a specific [convention for relation tables](#conventions-for-relation-tables-in-implicit-m-n-relations) +- Do **not** require the `@relation` attribute unless you need to [disambiguate relations](/orm/prisma-schema/data-model/relations#disambiguating-relations) with a name, e.g. `@relation("MyRelation")` or `@relation(name: "MyRelation")`. +- If you do use the `@relation` attribute, you cannot use the `references`, `fields`, `onUpdate` or `onDelete` arguments. This is because these take a fixed value for implicit m-n-relations and cannot be changed. +- Require both models to have a single `@id`. Be aware that: + + - You cannot use a [multi-field ID](/orm/reference/prisma-schema-reference#id-1) + - You cannot use a `@unique` in place of an `@id` + + + + To use either of these features, you must use an [explicit m-n instead](#explicit-many-to-many-relations). + + + +#### Conventions for relation tables in implicit m-n relations + +If you obtain your data model from [introspection](/orm/prisma-schema/introspection), you can still use implicit m-n-relations by following Prisma's [conventions for relation tables](#conventions-for-relation-tables-in-implicit-m-n-relations). The following example assumes you want to create a relation table to get an implicit m-n-relation for two models called `Post` and `Category`. + +##### Relation table + +If you want a relation table to be picked up by introspection as an implicit m-n-relation, the name must follow this exact structure: + +- It must start with an underscore `_` +- Then the name of the first model in alphabetical order (in this case `Category`) +- Then the relationship (in this case `To`) +- Then the name of the second model in alphabetical order (in this case `Post`) + +In the example, the correct table name is `_CategoryToPost`. + +When creating an implicit m-n-relation yourself in the Prisma schema file, you can [configure the relation](#configuring-the-name-of-the-relation-table-in-implicit-many-to-many-relations) to have a different name. This will change the name given to the relation table in the database. For example, for a relation named `"MyRelation"` the corresponding table will be called `_MyRelation`. + +###### Multi-schema + +If your implicit many-to-many relationship spans multiple database schemas (using the [`multiSchema` preview feature](/orm/prisma-schema/data-model/multi-schema)), the relation table (with the name defined directly above, in the example `_CategoryToPost`) must be present in the same database schema as the first model in alphabetical order (in this case `Category`). + +##### Columns + +A relation table for an implicit m-n-relation must have exactly two columns: + +- A foreign key column that points to `Category` called `A` +- A foreign key column that points to `Post` called `B` + +The columns must be called `A` and `B` where `A` points to the model that comes first in the alphabet and `B` points to the model which comes last in the alphabet. + +##### Indexes + +There further must be: + +- A unique index defined on both foreign key columns: + + ```sql + CREATE UNIQUE INDEX "_CategoryToPost_AB_unique" ON "_CategoryToPost"("A" int4_ops,"B" int4_ops); + ``` + +- A non-unique index defined on B: + + ```sql + CREATE INDEX "_CategoryToPost_B_index" ON "_CategoryToPost"("B" int4_ops); + ``` + +##### Example + +This is a sample SQL statement that would create the three tables including indexes (in PostgreSQL dialect) that are picked up as a implicit m-n-relation by Prisma Introspection: + +```sql +CREATE TABLE "_CategoryToPost" ( + "A" integer NOT NULL REFERENCES "Category"(id) , + "B" integer NOT NULL REFERENCES "Post"(id) +); +CREATE UNIQUE INDEX "_CategoryToPost_AB_unique" ON "_CategoryToPost"("A" int4_ops,"B" int4_ops); +CREATE INDEX "_CategoryToPost_B_index" ON "_CategoryToPost"("B" int4_ops); + +CREATE TABLE "Category" ( + id integer SERIAL PRIMARY KEY +); + +CREATE TABLE "Post" ( + id integer SERIAL PRIMARY KEY +); +``` + +And you can define multiple many-to-many relations between two tables by using the different relationship name. This example shows how the Prisma introspection works under such case: + +```sql +CREATE TABLE IF NOT EXISTS "User" ( + "id" SERIAL PRIMARY KEY +); +CREATE TABLE IF NOT EXISTS "Video" ( + "id" SERIAL PRIMARY KEY +); +CREATE TABLE IF NOT EXISTS "_UserLikedVideos" ( + "A" SERIAL NOT NULL, + "B" SERIAL NOT NULL, + CONSTRAINT "_UserLikedVideos_A_fkey" FOREIGN KEY ("A") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "_UserLikedVideos_B_fkey" FOREIGN KEY ("B") REFERENCES "Video" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); +CREATE TABLE IF NOT EXISTS "_UserDislikedVideos" ( + "A" SERIAL NOT NULL, + "B" SERIAL NOT NULL, + CONSTRAINT "_UserDislikedVideos_A_fkey" FOREIGN KEY ("A") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE, + CONSTRAINT "_UserDislikedVideos_B_fkey" FOREIGN KEY ("B") REFERENCES "Video" ("id") ON DELETE CASCADE ON UPDATE CASCADE +); +CREATE UNIQUE INDEX "_UserLikedVideos_AB_unique" ON "_UserLikedVideos"("A", "B"); +CREATE INDEX "_UserLikedVideos_B_index" ON "_UserLikedVideos"("B"); +CREATE UNIQUE INDEX "_UserDislikedVideos_AB_unique" ON "_UserDislikedVideos"("A", "B"); +CREATE INDEX "_UserDislikedVideos_B_index" ON "_UserDislikedVideos"("B"); +``` + +If you run `prisma db pull` on this database, the Prisma CLI will generate the following schema through introspection: + +```prisma +model User { + id Int @id @default(autoincrement()) + Video_UserDislikedVideos Video[] @relation("UserDislikedVideos") + Video_UserLikedVideos Video[] @relation("UserLikedVideos") +} + +model Video { + id Int @id @default(autoincrement()) + User_UserDislikedVideos User[] @relation("UserDislikedVideos") + User_UserLikedVideos User[] @relation("UserLikedVideos") +} +``` + +#### Configuring the name of the relation table in implicit many-to-many relations + +When using Prisma Migrate, you can configure the name of the relation table that's managed by Prisma using the `@relation` attribute. For example, if you want the relation table to be called `_MyRelationTable` instead of the default name `_CategoryToPost`, you can specify it as follows: + +```prisma +model Post { + id Int @id @default(autoincrement()) + categories Category[] @relation("MyRelationTable") +} + +model Category { + id Int @id @default(autoincrement()) + posts Post[] @relation("MyRelationTable") +} +``` + +### Relation tables + +A relation table (also sometimes called a _JOIN_, _link_ or _pivot_ table) connects two or more other tables and therefore creates a _relation_ between them. Creating relation tables is a common data modelling practice in SQL to represent relationships between different entities. In essence it means that "one m-n relation is modeled as two 1-n relations in the database". + +We recommend using [implicit](#implicit-many-to-many-relations) m-n-relations, where Prisma automatically generates the relation table in the underlying database. [Explicit](#explicit-many-to-many-relations) m-n-relations should be used when you need to store additional data in the relations, such as the date the relation was created. + +## MongoDB + +In MongoDB, m-n-relations are represented by: + +- relation fields on both sides, that each have a `@relation` attribute, with mandatory `fields` and `references` arguments +- a scalar list of referenced IDs on each side, with a type that matches the ID field on the other side + +The following example demonstrates a m-n-relation between posts and categories: + +```prisma +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + categoryIDs String[] @db.ObjectId + categories Category[] @relation(fields: [categoryIDs], references: [id]) +} + +model Category { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String + postIDs String[] @db.ObjectId + posts Post[] @relation(fields: [postIDs], references: [id]) +} +``` + +Prisma validates m-n-relations in MongoDB with the following rules: + +- The fields on both sides of the relation must have a list type (in the example above, `categories` have a type of `Category[]` and `posts` have a type of `Post[]`) +- The `@relation` attribute must define `fields` and `references` arguments on both sides +- The `fields` argument must have only one scalar field defined, which must be of a list type +- The `references` argument must have only one scalar field defined. This scalar field must exist on the referenced model and must be of the same type as the scalar field in the `fields` argument, but singular (no list) +- The scalar field to which `references` points must have the `@id` attribute +- No [referential actions](/orm/prisma-schema/data-model/relations/referential-actions) are allowed in `@relation` + +The implicit m-n-relations [used in relational databases](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations) are not supported on MongoDB. + +### Querying MongoDB many-to-many relations + +This section demonstrates how to query m-n-relations in MongoDB, using the example schema above. + +The following query finds posts with specific matching category IDs: + +```ts +const newId1 = new ObjectId() +const newId2 = new ObjectId() + +const posts = await prisma.post.findMany({ + where: { + categoryIDs: { + hasSome: [newId1.toHexString(), newId2.toHexString()], + }, + }, +}) +``` + +The following query finds posts where the category name contains the string `'Servers'`: + +```ts +const posts = await prisma.post.findMany({ + where: { + categories: { + some: { + name: { + contains: 'Servers', + }, + }, + }, + }, +}) +``` diff --git a/docs/200-orm/100-prisma-schema/20-data-model/20-relations/400-self-relations.mdx b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/400-self-relations.mdx new file mode 100644 index 0000000000..c1d39811e7 --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/400-self-relations.mdx @@ -0,0 +1,434 @@ +--- +title: Self-relations +metaDescription: How to define and work with self-relations in Prisma. +--- + + + +A relation field can also reference its own model, in this case the relation is called a _self-relation_. Self-relations can be of any cardinality, 1-1, 1-n and m-n. + +Note that self-relations always require the `@relation` attribute. + + + +## One-to-one self-relations + +The following example models a one-to-one self-relation: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + name String? + successorId Int? @unique + successor User? @relation("BlogOwnerHistory", fields: [successorId], references: [id]) + predecessor User? @relation("BlogOwnerHistory") +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + successorId String? @unique @db.ObjectId + successor User? @relation("BlogOwnerHistory", fields: [successorId], references: [id]) + predecessor User? @relation("BlogOwnerHistory") +} +``` + + + + +This relation expresses the following: + +- "a user can have one or zero predecessors" (for example, Sarah is Mary's predecessor as blog owner) +- "a user can have one or zero successors" (for example, Mary is Sarah's successor as blog owner) + +> **Note**: One-to-one self-relations cannot be made required on both sides. One or both sides must be optional, otherwise it becomes impossible to create the first `User` record. + +To create a one-to-one self-relation: + +- Both sides of the relation must define a `@relation` attribute that share the same name - in this case, **BlogOwnerHistory**. +- One relation field must be a [fully annotated](/orm/prisma-schema/data-model/relations#relation-fields). In this example, the `successor` field defines both the `field` and `references` arguments. +- One relation field must be backed by a foreign key. The `successor` field is backed by the `successorId` foreign key, which references a value in the `id` field. The `successorId` scalar relation field also requires a `@unique` attribute to guarantee a one-to-one relation. + +> **Note**: One-to-one self relations require two sides even if both sides are equal in the relationship. For example, to model a 'best friends' relation, you would need to create two relation fields: `bestfriend1` and a `bestfriend2`. + +Either side of the relation can be backed by a foreign key. In the previous example, repeated below, `successor` is backed by `successorId`: + + + + +```prisma highlight=4;normal +model User { + id Int @id @default(autoincrement()) + name String? + successorId Int? @unique + successor User? @relation("BlogOwnerHistory", fields: [successorId], references: [id]) + predecessor User? @relation("BlogOwnerHistory") +} +``` + + + + +```prisma highlight=4;normal +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + successorId String? @unique @db.ObjectId + successor User? @relation("BlogOwnerHistory", fields: [successorId], references: [id]) + predecessor User? @relation("BlogOwnerHistory") +} +``` + + + + +Alternatively, you could rewrite this so that `predecessor` is backed by `predecessorId`: + + + + +```prisma highlight=5,6;normal +model User { + id Int @id @default(autoincrement()) + name String? + successor User? @relation("BlogOwnerHistory") + predecessorId Int? @unique + predecessor User? @relation("BlogOwnerHistory", fields: [predecessorId], references: [id]) +} +``` + + + + +```prisma highlight=5,6;normal +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + successor User? @relation("BlogOwnerHistory") + predecessorId String? @unique @db.ObjectId + predecessor User? @relation("BlogOwnerHistory", fields: [predecessorId], references: [id]) +} +``` + + + + +No matter which side is backed by a foreign key, Prisma Client surfaces both the `predecessor` and `successor` fields: + +```ts line-number +const x = await prisma.user.create({ + data: { + name: "Bob McBob", +| successor: { + connect: { + id: 2, + }, + }, +| predecessor: { + connect: { + id: 4, + }, + }, + }, +}); +``` + +### One-to-one self relations in the database + +### Relational databases + +In **relational databases only**, a one-to-one self-relation is represented by the following SQL: + +```sql +CREATE TABLE "User" ( + id SERIAL PRIMARY KEY, + "name" TEXT, + "successorId" INTEGER +); + +ALTER TABLE "User" ADD CONSTRAINT fk_successor_user FOREIGN KEY ("successorId") REFERENCES "User" (id); + +ALTER TABLE "User" ADD CONSTRAINT successor_unique UNIQUE ("successorId"); +``` + +### MongoDB + +For MongoDB, Prisma currently uses a [normalized data model design](https://docs.mongodb.com/manual/core/data-model-design/), which means that documents reference each other by ID in a similar way to relational databases. + +The following MongoDB documents represent a one-to-one self-relation between two users: + +```json +{ "_id": { "$oid": "60d97df70080618f000e3ca9" }, "name": "Elsa the Elder" } +``` + +```json +{ + "_id": { "$oid": "60d97df70080618f000e3caa" }, + "name": "Elsa", + "successorId": { "$oid": "60d97df70080618f000e3ca9" } +} +``` + +## One-to-many self relations + +A one-to-many self-relation looks as follows: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + name String? + teacherId Int? + teacher User? @relation("TeacherStudents", fields: [teacherId], references: [id]) + students User[] @relation("TeacherStudents") +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + teacherId String? @db.ObjectId + teacher User? @relation("TeacherStudents", fields: [teacherId], references: [id]) + students User[] @relation("TeacherStudents") +} +``` + + + + +This relation expresses the following: + +- "a user has zero or one _teachers_ " +- "a user can have zero or more _students_" + +Note that you can also require each user to have a teacher by making the `teacher` field [required](/orm/prisma-schema/data-model/models#optional-and-mandatory-fields). + +### One-to-many self-relations in the database + +### Relational databases + +In relational databases, a one-to-many self-relation is represented by the following SQL: + +```sql +CREATE TABLE "User" ( + id SERIAL PRIMARY KEY, + "name" TEXT, + "teacherId" INTEGER +); + +ALTER TABLE "User" ADD CONSTRAINT fk_teacherid_user FOREIGN KEY ("teacherId") REFERENCES "User" (id); +``` + +Notice the lack of `UNIQUE` constraint on `teacherId` - multiple students can have the same teacher. + +### MongoDB + +For MongoDB, Prisma currently uses a [normalized data model design](https://docs.mongodb.com/manual/core/data-model-design/), which means that documents reference each other by ID in a similar way to relational databases. + +The following MongoDB documents represent a one-to-many self-relation between three users - one teacher and two students with the same `teacherId`: + +```json +{ + "_id": { "$oid": "60d9b9e600fe3d470079d6f9" }, + "name": "Ms. Roberts" +} +``` + +```json +{ + "_id": { "$oid": "60d9b9e600fe3d470079d6fa" }, + "name": "Student 8", + "teacherId": { "$oid": "60d9b9e600fe3d470079d6f9" } +} +``` + +```json +{ + "_id": { "$oid": "60d9b9e600fe3d470079d6fb" }, + "name": "Student 9", + "teacherId": { "$oid": "60d9b9e600fe3d470079d6f9" } +} +``` + +## Many-to-many self relations + +A many-to-many self-relation looks as follows: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + name String? + followedBy User[] @relation("UserFollows") + following User[] @relation("UserFollows") +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + followedBy User[] @relation("UserFollows", fields: [followedByIDs], references: [id]) + followedByIDs String[] @db.ObjectId + following User[] @relation("UserFollows", fields: [followingIDs], references: [id]) + followingIDs String[] @db.ObjectId +} +``` + + + + +This relation expresses the following: + +- "a user can be followed by zero or more users" +- "a user can follow zero or more users" + +Note that for relational databases, this many-to-many-relation is [implicit](many-to-many-relations#implicit-many-to-many-relations). This means Prisma maintains a [relation table](/orm/prisma-schema/data-model/relations/many-to-many-relations#relation-tables) for it in the underlying database. + +If you need the relation to hold other fields, you can create an [explicit](many-to-many-relations#explicit-many-to-many-relations) many-to-many self relation as well. The explicit version of the self relation shown previously is as follows: + +```prisma +model User { + id Int @id @default(autoincrement()) + name String? + followedBy Follows[] @relation("followedBy") + following Follows[] @relation("following") +} + +model Follows { + followedBy User @relation("followedBy", fields: [followedById], references: [id]) + followedById Int + following User @relation("following", fields: [followingId], references: [id]) + followingId Int + + @@id([followingId, followedById]) +} +``` + +### Many-to-many self-relations in the database + +### Relational databases + +In relational databases, a many-to-many self-relation (implicit) is represented by the following SQL: + +```sql +CREATE TABLE "User" ( + id integer DEFAULT nextval('"User_id_seq"'::regclass) PRIMARY KEY, + name text +); +CREATE TABLE "_UserFollows" ( + "A" integer NOT NULL REFERENCES "User"(id) ON DELETE CASCADE ON UPDATE CASCADE, + "B" integer NOT NULL REFERENCES "User"(id) ON DELETE CASCADE ON UPDATE CASCADE +); +``` + +### MongoDB + +For MongoDB, Prisma currently uses a [normalized data model design](https://docs.mongodb.com/manual/core/data-model-design/), which means that documents reference each other by ID in a similar way to relational databases. + +The following MongoDB documents represent a many-to-many self-relation between five users - two users that follow `"Bob"`, and two users that follow him: + +```json +{ + "_id": { "$oid": "60d9866f00a3e930009a6cdd" }, + "name": "Bob", + "followedByIDs": [ + { "$oid": "60d9866f00a3e930009a6cde" }, + { "$oid": "60d9867000a3e930009a6cdf" } + ], + "followingIDs": [ + { "$oid": "60d9867000a3e930009a6ce0" }, + { "$oid": "60d9867000a3e930009a6ce1" } + ] +} +``` + +```json +{ + "_id": { "$oid": "60d9866f00a3e930009a6cde" }, + "name": "Follower1", + "followingIDs": [{ "$oid": "60d9866f00a3e930009a6cdd" }] +} +``` + +```json +{ + "_id": { "$oid": "60d9867000a3e930009a6cdf" }, + "name": "Follower2", + "followingIDs": [{ "$oid": "60d9866f00a3e930009a6cdd" }] +} +``` + +```json +{ + "_id": { "$oid": "60d9867000a3e930009a6ce0" }, + "name": "CoolPerson1", + "followedByIDs": [{ "$oid": "60d9866f00a3e930009a6cdd" }] +} +``` + +```json +{ + "_id": { "$oid": "60d9867000a3e930009a6ce1" }, + "name": "CoolPerson2", + "followedByIDs": [{ "$oid": "60d9866f00a3e930009a6cdd" }] +} +``` + +## Defining multiple self-relations on the same model + +You can also define multiple self-relations on the same model at once. Taking all relations from the previous sections as example, you could define a `User` model as follows: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + name String? + teacherId Int? + teacher User? @relation("TeacherStudents", fields: [teacherId], references: [id]) + students User[] @relation("TeacherStudents") + followedBy User[] @relation("UserFollows") + following User[] @relation("UserFollows") +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + teacherId String? @db.ObjectId + teacher User? @relation("TeacherStudents", fields: [teacherId], references: [id]) + students User[] @relation("TeacherStudents") + followedBy User[] @relation("UserFollows", fields: [followedByIDs]) + followedByIDs String[] @db.ObjectId + following User[] @relation("UserFollows", fields: [followingIDs]) + followingIDs String[] @db.ObjectId +} +``` + + + diff --git a/docs/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/100-special-rules-for-referential-actions.mdx b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/100-special-rules-for-referential-actions.mdx new file mode 100644 index 0000000000..64174bd2c9 --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/100-special-rules-for-referential-actions.mdx @@ -0,0 +1,241 @@ +--- +title: 'Special rules for referential actions in SQL Server and MongoDB' +metaTitle: 'Special rules for referential actions in SQL Server and MongoDB' +metaDescription: 'Circular references or multiple cascade paths can cause validation errors on Microsoft SQL Server and MongoDB. Since the database does not handle these situations out of the box, learn how to solve this problem.' +tocDepth: 3 +--- + + + +Some databases have specific requirements that you should consider if you are using referential actions. + +- Microsoft SQL Server doesn't allow cascading referential actions on a foreign key, if the relation chain causes a cycle or multiple cascade paths. If the referential actions on the foreign key are set to something other than `NO ACTION` (or `NoAction` if Prisma is managing referential integrity), the server will check for cycles or multiple cascade paths and return an error when executing the SQL. + +- With MongoDB, using referential actions in Prisma requires that for any data model with self-referential relations or cycles between three models, you must set the referential action of `NoAction` to prevent the referential action emulations from looping infinitely. Be aware that by default, the `relationMode = "prisma"` mode is used for MongoDB, which means that Prisma manages [referential integrity](/orm/prisma-schema/data-model/relations/relation-mode). + +Given the SQL: + +```sql +CREATE TABLE [dbo].[Employee] ( + [id] INT NOT NULL IDENTITY(1,1), + [managerId] INT, + CONSTRAINT [PK__Employee__id] PRIMARY KEY ([id]) +); + +ALTER TABLE [dbo].[Employee] + ADD CONSTRAINT [FK__Employee__managerId] + FOREIGN KEY ([managerId]) REFERENCES [dbo].[Employee]([id]) + ON DELETE CASCADE ON UPDATE CASCADE; +``` + +When the SQL is run, the database would throw the following error: + +```terminal wrap +Introducing FOREIGN KEY constraint 'FK__Employee__managerId' on table 'Employee' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. +``` + +In more complicated data models, finding the cascade paths can get complex. Therefore in Prisma, the data model is validated _before_ generating any SQL to be run during any migrations, highlighting relations that are part of the paths. This makes it much easier to find and break these action chains. + + + +## Self-relation (SQL Server and MongoDB) + +The following model describes a self-relation where an `Employee` can have a manager and managees, referencing entries of the same model. + +```prisma +model Employee { + id Int @id @default(autoincrement()) + manager Employee? @relation(name: "management", fields: [managerId], references: [id]) + managees Employee[] @relation(name: "management") + managerId Int? +} +``` + +This will result in the following error: + +```terminal wrap +Error parsing attribute "@relation": A self-relation must have `onDelete` and `onUpdate` referential actions set to `NoAction` in one of the @relation attributes. (Implicit default `onDelete`: `SetNull`, and `onUpdate`: `Cascade`) +``` + +By not defining any actions, Prisma will use the following default values depending if the underlying [scalar fields](/orm/prisma-schema/data-model/models#scalar-fields) are set to be optional or required. + +| Clause | All of the scalar fields are optional | At least one scalar field is required | +| :--------- | :------------------------------------ | :------------------------------------ | +| `onDelete` | `SetNull` | `NoAction` | +| `onUpdate` | `Cascade` | `Cascade` | + +Since the default referential action for `onUpdate` in the above relation would be `Cascade` and for `onDelete` it would be `SetNull`, it creates a cycle and the solution is to explicitly set the `onUpdate` and `onDelete` values to `NoAction`. + +```prisma highlight=3;delete|4;add +model Employee { + id Int @id @default(autoincrement()) + manager Employee @relation(name: "management", fields: [managerId], references: [id]) + manager Employee @relation(name: "management", fields: [managerId], references: [id], onDelete: NoAction, onUpdate: NoAction) + managees Employee[] @relation(name: "management") + managerId Int +} +``` + +## Cyclic relation between three tables (SQL Server and MongoDB) + +The following models describe a cyclic relation between a `Chicken`, an `Egg` and a `Fox`, where each model references the other. + +```prisma +model Chicken { + id Int @id @default(autoincrement()) + egg Egg @relation(fields: [eggId], references: [id]) + eggId Int + predators Fox[] +} + +model Egg { + id Int @id @default(autoincrement()) + predator Fox @relation(fields: [predatorId], references: [id]) + predatorId Int + parents Chicken[] +} + +model Fox { + id Int @id @default(autoincrement()) + meal Chicken @relation(fields: [mealId], references: [id]) + mealId Int + foodStore Egg[] +} +``` + +This will result in three validation errors in every relation field that is part of the cycle. + +The first one is in the relation `egg` in the `Chicken` model: + +```terminal wrap +Error parsing attribute "@relation": Reference causes a cycle. One of the @relation attributes in this cycle must have `onDelete` and `onUpdate` referential actions set to `NoAction`. Cycle path: Chicken.egg → Egg.predator → Fox.meal. (Implicit default `onUpdate`: `Cascade`) +``` + +The second one is in the relation `predator` in the `Egg` model: + +```terminal wrap +Error parsing attribute "@relation": Reference causes a cycle. One of the @relation attributes in this cycle must have `onDelete` and `onUpdate` referential actions set to `NoAction`. Cycle path: Egg.predator → Fox.meal → Chicken.egg. (Implicit default `onUpdate`: `Cascade`) +``` + +And the third one is in the relation `meal` in the `Fox` model: + +```terminal wrap +Error parsing attribute "@relation": Reference causes a cycle. One of the @relation attributes in this cycle must have `onDelete` and `onUpdate` referential actions set to `NoAction`. Cycle path: Fox.meal → Chicken.egg → Egg.predator. (Implicit default `onUpdate`: `Cascade`) +``` + +As the relation fields are required, the default referential action for `onDelete` is `NoAction` but for `onUpdate` it is `Cascade`, which causes a referential action cycle. The solution is to set the `onUpdate` value to `NoAction` in any one of the relations. + +```prisma highlight=3;delete|4;add +model Chicken { + id Int @id @default(autoincrement()) + egg Egg @relation(fields: [eggId], references: [id]) + egg Egg @relation(fields: [eggId], references: [id], onUpdate: NoAction) + eggId Int + predators Fox[] +} +``` + +or + +```prisma highlight=3;delete|4;add +model Egg { + id Int @id @default(autoincrement()) + predator Fox @relation(fields: [predatorId], references: [id]) + predator Fox @relation(fields: [predatorId], references: [id], onUpdate: NoAction) + predatorId Int + parents Chicken[] +} +``` + +or + +```prisma highlight=3;delete|4;add +model Fox { + id Int @id @default(autoincrement()) + meal Chicken @relation(fields: [mealId], references: [id]) + meal Chicken @relation(fields: [mealId], references: [id], onUpdate: NoAction) + mealId Int + foodStore Egg[] +} +``` + +## Multiple cascade paths between two models (SQL Server only) + +The data model describes two different paths between same models, with both relations triggering cascading referential actions. + +```prisma +model User { + id Int @id @default(autoincrement()) + comments Comment[] + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + authorId Int + author User @relation(fields: [authorId], references: [id]) + comments Comment[] +} + +model Comment { + id Int @id @default(autoincrement()) + writtenById Int + postId Int + writtenBy User @relation(fields: [writtenById], references: [id]) + post Post @relation(fields: [postId], references: [id]) +} +``` + +The problem in this data model is how there are two paths from `Comment` to the `User`, and how the default `onUpdate` action in both relations is `Cascade`. This leads into two validation errors: + +The first one is in the relation `writtenBy`: + +```terminal wrap +Error parsing attribute "@relation": When any of the records in model `User` is updated or deleted, the referential actions on the relations cascade to model `Comment` through multiple paths. Please break one of these paths by setting the `onUpdate` and `onDelete` to `NoAction`. (Implicit default `onUpdate`: `Cascade`) +``` + +The second one is in the relation `post`: + +```terminal wrap +Error parsing attribute "@relation": When any of the records in model `User` is updated or deleted, the referential actions on the relations cascade to model `Comment` through multiple paths. Please break one of these paths by setting the `onUpdate` and `onDelete` to `NoAction`. (Implicit default `onUpdate`: `Cascade`) +``` + +The error means that by updating a primary key in a record in the `User` model, the update will cascade once between the `Comment` and `User` through the `writtenBy` relation, and again through the `Post` model from the `post` relation due to `Post` being related with the `Comment` model. + +The fix is to set the `onUpdate` referential action to `NoAction` in the `writtenBy` or `post` relation fields, or from the `Post` model by changing the actions in the `author` relation: + +```prisma highlight=5;delete|6;add +model Comment { + id Int @id @default(autoincrement()) + writtenById Int + postId Int + writtenBy User @relation(fields: [writtenById], references: [id]) + writtenBy User @relation(fields: [writtenById], references: [id], onUpdate: NoAction) + post Post @relation(fields: [postId], references: [id]) +} +``` + +or + +```prisma highlight=6;delete|7;add +model Comment { + id Int @id @default(autoincrement()) + writtenById Int + postId Int + writtenBy User @relation(fields: [writtenById], references: [id]) + post Post @relation(fields: [postId], references: [id]) + post Post @relation(fields: [postId], references: [id], onUpdate: NoAction) +} +``` + +or + +```prisma highlight=4;delete|5;add +model Post { + id Int @id @default(autoincrement()) + authorId Int + author User @relation(fields: [authorId], references: [id]) + author User @relation(fields: [authorId], references: [id], onUpdate: NoAction) + comments Comment[] +} +``` diff --git a/docs/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/index.mdx b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/index.mdx new file mode 100644 index 0000000000..d0ee27729a --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/410-referential-actions/index.mdx @@ -0,0 +1,508 @@ +--- +title: 'Referential actions' +metaTitle: 'Referential actions' +metaDescription: 'Referential actions let you define the update and delete behavior of related models on the database level' +tocDepth: 3 +--- + + + +Referential actions determine what happens to a record when your application deletes or updates a related record. + +From version 2.26.0, you can define referential actions on the relation fields in your Prisma schema. This allows you to define referential actions like cascading deletes and cascading updates at a Prisma level. + + + +**Version differences** + +- If you use version 3.0.1 or later, you can use referential actions as described on this page. +- If you use a version between 2.26.0 and 3.0.0, you can use referential actions as described on this page, but you must [enable the preview feature flag](/orm/reference/preview-features/client-preview-features#enabling-a-prisma-client-preview-feature) `referentialActions`. +- If you use version 2.25.0 or earlier, you can configure cascading deletes manually in your database. + + + +In the following example, adding `onDelete: Cascade` to the `author` field on the `Post` model means that deleting the `User` record will also delete all related `Post` records. + +```prisma file=schema.prisma highlight=4;normal +model Post { + id Int @id @default(autoincrement()) + title String + author User @relation(fields: [authorId], references: [id], onDelete: Cascade) + authorId Int +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +If you do not specify a referential action, Prisma [uses a default](#referential-action-defaults). + + + + + +If you upgrade from a version earlier than 2.26.0: +It is extremely important that you check the [upgrade paths for referential actions](/orm/more/upgrade-guides/upgrading-versions/upgrading-to-prisma-3/referential-actions) section. Prisma support of referential actions **removes the safety net in Prisma Client that prevents cascading deletes at runtime**. If you use the feature _without upgrading your database_, the [old default action](/orm/more/upgrade-guides/upgrading-versions/upgrading-to-prisma-3/referential-actions#prisma-2x-default-referential-actions) - `ON DELETE CASCADE` - becomes active. This might result in cascading deletes that you did not expect. + + + +## What are referential actions? + +Referential actions are policies that define how a referenced record is handled by the database when you run an [`update`](/orm/prisma-client/queries/crud#update) or [`delete`](/orm/prisma-client/queries/crud#delete) query. + +
+ +Referential actions on the database level + +Referential actions are features of foreign key constraints that exist to preserve referential integrity in your database. + +When you define relationships between data models in your Prisma schema, you use [relation fields](/orm/prisma-schema/data-model/relations#relation-fields), **which do not exist on the database**, and [scalar fields](/orm/prisma-schema/data-model/models#scalar-fields), **which do exist on the database**. These foreign keys connect the models on the database level. + +Referential integrity states that these foreign keys must reference an existing primary key value in the related database table. In your Prisma schema, this is generally represented by the `id` field on the related model. + +By default a database will reject any operation that violates the referential integrity, for example, by deleting referenced records. + +
+ +### How to use referential actions + +Referential actions are defined in the [`@relation`](/orm/reference/prisma-schema-reference#relation) attribute and map to the actions on the **foreign key constraint** in the underlying database. If you do not specify a referential action, [Prisma falls back to a default](#referential-action-defaults). + +The following model defines a one-to-many relation between `User` and `Post` and a many-to-many relation between `Post` and `Tag`, with explicitly defined referential actions: + +```prisma file=schema.prisma highlight=10,16-17;normal +model User { + id Int @id @default(autoincrement()) + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + title String + tags TagOnPosts[] + User User? @relation(fields: [userId], references: [id], onDelete: SetNull, onUpdate: Cascade) + userId Int? +} + +model TagOnPosts { + id Int @id @default(autoincrement()) + post Post? @relation(fields: [postId], references: [id], onUpdate: Cascade, onDelete: Cascade) + tag Tag? @relation(fields: [tagId], references: [id], onUpdate: Cascade, onDelete: Cascade) + postId Int? + tagId Int? +} + +model Tag { + id Int @id @default(autoincrement()) + name String @unique + posts TagOnPosts[] +} +``` + +This model explicitly defines the following referential actions: + +- If you delete a `Tag`, the corresponding tag assignment is also deleted in `TagOnPosts`, using the `Cascade` referential action +- If you delete a `User`, the author is removed from all posts by setting the field value to `Null`, because of the `SetNull` referential action. To allow this, `User` and `userId` must be optional fields in `Post`. + +Prisma supports the following referential actions: + +- [`Cascade`](#cascade) +- [`Restrict`](#restrict) +- [`NoAction`](#noaction) +- [`SetNull`](#setnull) +- [`SetDefault`](#setdefault) + +### Referential action defaults + +If you do not specify a referential action, Prisma uses the following defaults: + +| Clause | Optional relations | Mandatory relations | +| :--------- | :----------------- | :------------------ | +| `onDelete` | `SetNull` | `Restrict` | +| `onUpdate` | `Cascade` | `Cascade` | + +For example, in the following schema all `Post` records must be connected to a `User` via the `author` relation: + +```prisma highlight=4;normal +model Post { + id Int @id @default(autoincrement()) + title String + author User @relation(fields: [authorId], references: [id]) + authorId Int +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +The schema does not explicitly define referential actions on the mandatory `author` relation field, which means that the default referential actions of `Restrict` for `onDelete` and `Cascade` for `onUpdate` apply. + +## Caveats + +The following caveats apply: + +- Referential actions are **not** supported on [implicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations). To use referential actions, you must define an explicit many-to-many relation and define your referential actions on the [join table](/orm/prisma-schema/data-model/relations/troubleshooting-relations#how-to-use-a-relation-table-with-a-many-to-many-relationship). +- Certain combinations of referential actions and required/optional relations are incompatible. For example, using `SetNull` on a required relation will lead to database errors when deleting referenced records because the non-nullable constraint would be violated. See [this GitHub issue](https://github.com/prisma/prisma/issues/7909) for more information. + +## Types of referential actions + +The following table shows which referential action each database supports. + +| Database | Cascade | Restrict | NoAction | SetNull | SetDefault | +| :---------- | :------ | :------- | :------- | :------ | :--------- | +| PostgreSQL | ✔️ | ✔️ | ✔️ | ✔️⌘ | ✔️ | +| MySQL | ✔️ | ✔️ | ✔️ | ✔️ | ❌ (✔️†) | +| SQLite | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| SQL Server | ✔️ | ❌‡ | ✔️ | ✔️ | ✔️ | +| CockroachDB | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | +| MongoDB†† | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | + +- † See [special cases for MySQL](#mysql). +- ⌘ See [special cases for PostgreSQL](#postgresql). +- ‡ See [special cases for SQL Server](#sql-server). +- †† Referential actions for MongoDB are available in Prisma versions 3.7.0 and later. + +### Special cases for referential actions + +Referential actions are part of the ANSI SQL standard. However, there are special cases where some relational databases diverge from the standard. + +#### MySQL + +MySQL, and the underlying InnoDB storage engine, does not support `SetDefault`. The exact behavior depends on the database version: + +- In MySQL versions 8 and later, and MariaDB versions 10.5 and later, `SetDefault` effectively acts as an alias for `NoAction`. You can define tables using the `SET DEFAULT` referential action, but a foreign key constraint error is triggered at runtime. +- In MySQL versions 5.6 and later, and MariaDB versions before 10.5, attempting to create a table definition with the `SET DEFAULT` referential action fails with a syntax error. + +For this reason, when you set `mysql` as the database provider, Prisma warns users to replace `SetDefault` referential actions in the Prisma schema with another action. + +#### PostgreSQL + +PostgreSQL is the only database supported by Prisma that allows you to define a `SetNull` referential action that refers to a non-nullable field. However, this raises a foreign key constraint error when the action is triggered at runtime. + +For this reason, when you set `postgres` as the database provider in the (default) `foreignKeys` relation mode, Prisma warns users to mark as optional any fields that are included in a `@relation` attribute with a `SetNull` referential action. For all other database providers, Prisma rejects the schema with a validation error. + +#### SQL Server + +[`Restrict`](#restrict) is not available for SQL Server databases, but you can use [`NoAction`](#noaction) instead. + +### `Cascade` + +- `onDelete: Cascade` Deleting a referenced record will trigger the deletion of referencing record. +- `onUpdate: Cascade` Updates the relation scalar fields if the referenced scalar fields of the dependent record are updated. + +#### Example usage + +```prisma file=schema.prisma highlight=4;add +model Post { + id Int @id @default(autoincrement()) + title String + author User @relation(fields: [authorId], references: [id], onDelete: Cascade, onUpdate: Cascade) + authorId Int +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +##### Result of using `Cascade` + +If a `User` record is deleted, then their posts are deleted too. If the user's `id` is updated, then the corresponding `authorId` is also updated. + +##### How to use cascading deletes + +
+ +
+ +### `Restrict` + +- `onDelete: Restrict` Prevents the deletion if any referencing records exist. +- `onUpdate: Restrict` Prevents the identifier of a referenced record from being changed. + +#### Example usage + +```prisma file=schema.prisma highlight=4;add +model Post { + id Int @id @default(autoincrement()) + title String + author User @relation(fields: [authorId], references: [id], onDelete: Restrict, onUpdate: Restrict) + authorId Int +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +##### Result of using `Restrict` + +`User`s with posts **cannot** be deleted. The `User`'s `id` **cannot** be changed. + + + +The `Restrict` action is **not** available on [Microsoft SQL Server](/orm/overview/databases/sql-server) and triggers a schema validation error. Instead, you can use [`NoAction`](#noaction), which produces the same result and is compatible with SQL Server. + + + +### `NoAction` + +The `NoAction` action is similar to `Restrict`, the difference between the two is dependent on the database being used: + +- **PostgreSQL**: `NoAction` allows the check (if a referenced row on the table exists) to be deferred until later in the transaction. See [the PostgreSQL docs](https://www.postgresql.org/docs/current/ddl-constraints.html#DDL-CONSTRAINTS-FK) for more information. +- **MySQL**: `NoAction` behaves exactly the same as `Restrict`. See [the MySQL docs](https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html#foreign-key-referential-actions) for more information. +- **SQLite**: When a related primary key is modified or deleted, no action is taken. See [the SQLite docs](https://www.sqlite.org/foreignkeys.html#fk_actions) for more information. +- **SQL Server**: When a referenced record is deleted or modified, an error is raised. See [the SQL Server docs](https://docs.microsoft.com/en-us/sql/relational-databases/tables/graph-edge-constraints?view=sql-server-ver15#on-delete-referential-actions-on-edge-constraints) for more information. +- **MongoDB** (in preview from version 3.6.0): When a record is modified or deleted, nothing is done to any related records. + + + +If you are [managing relations in Prisma Client](/orm/prisma-schema/data-model/relations/relation-mode#emulate-relations-in-prisma-with-the-prisma-relation-mode) rather than using foreign keys in the database, you should be aware that currently Prisma only implements the referential actions. Foreign keys also create constraints, which make it impossible to manipulate data in a way that would violate these constraints: instead of executing the query, the database responds with an error. These constraints will not be created if you emulate referential integrity in Prisma Client, so if you set the referential action to `NoAction` there will be no checks to prevent you from breaking the referential integrity. + + + +#### Example usage + +```prisma file=schema.prisma highlight=4;add +model Post { + id Int @id @default(autoincrement()) + title String + author User @relation(fields: [authorId], references: [id], onDelete: NoAction, onUpdate: NoAction) + authorId Int +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +##### Result of using `NoAction` + +`User`'s with posts **cannot** be deleted. The `User`'s `id` **cannot** be changed. + +### `SetNull` + +- `onDelete: SetNull` The scalar field of the referencing object will be set to `NULL`. + +- `onUpdate: SetNull` When updating the identifier of a referenced object, the scalar fields of the referencing objects will be set to `NULL`. + +`SetNull` will only work on optional relations. On required relations, a runtime error will be thrown since the scalar fields cannot be null. + +```prisma file=schema.prisma highlight=4;add +model Post { + id Int @id @default(autoincrement()) + title String + author User? @relation(fields: [authorId], references: [id], onDelete: SetNull, onUpdate: SetNull) + authorId Int? +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +##### Result of using `SetNull` + +When deleting a `User`, the `authorId` will be set to `NULL` for all its authored posts. + +When changing a `User`'s `id`, the `authorId` will be set to `NULL` for all its authored posts. + +### `SetDefault` + +- `onDelete: SetDefault` The scalar field of the referencing object will be set to the fields default value. + +- `onUpdate: SetDefault` The scalar field of the referencing object will be set to the fields default value. + +These require setting a default for the relation scalar field with [`@default`](/orm/reference/prisma-schema-reference#default). If no defaults are provided for any of the scalar fields, a runtime error will be thrown. + +```prisma file=schema.prisma highlight=4,5;add +model Post { + id Int @id @default(autoincrement()) + title String + authorUsername String? @default("anonymous") + author User? @relation(fields: [authorUsername], references: [username], onDelete: SetDefault, onUpdate: SetDefault) +} + +model User { + username String @id + posts Post[] +} +``` + +##### Result of using `SetDefault` + +When deleting a `User`, its existing posts' `authorUsername` field values will be set to 'anonymous'. + +When the `username` of a `User` changes, its existing posts' `authorUsername` field values will be set to 'anonymous'. + +### Database-specific requirements + +MongoDB and SQL Server have specific requirements for referential actions if you have [self-relations](/orm/prisma-schema/data-model/relations/referential-actions/special-rules-for-referential-actions#self-relation-sql-server-and-mongodb) or [cyclic relations](/orm/prisma-schema/data-model/relations/referential-actions/special-rules-for-referential-actions#cyclic-relation-between-three-tables-sql-server-and-mongodb) in your data model. SQL Server also has specific requirements if you have relations with [multiple cascade paths](/orm/prisma-schema/data-model/relations/referential-actions/special-rules-for-referential-actions#multiple-cascade-paths-between-two-models-sql-server-only). + +## Upgrade paths from versions 2.25.0 and earlier + +There are a couple of paths you can take when upgrading which will give different results depending on the desired outcome. + +If you currently use the migration workflow, you can run an introspection to check how the defaults are reflected in your schema. You can then manually update your database if you need to. + +You can also decide to skip checking the defaults and run a migration to update your database with the [new default values](#referential-action-defaults). + +The following assumes you have upgraded to 2.26.0 or newer and enabled the preview feature flag, or upgraded to 3.0.0 or newer: + +### Using Introspection + +If you [Introspect](/orm/prisma-schema/introspection) your database, the referential actions configured at the database level will be reflected in your Prisma Schema. If you have been using Prisma Migrate or `prisma db push` to manage the database schema, these are likely to be the [default values](#referential-action-defaults) from 2.25.0 and earlier. + +When you run an Introspection, Prisma compares all the foreign keys in the database with the schema, if the SQL statements `ON DELETE` and `ON UPDATE` do **not** match the default values, they will be explicitly set in the schema file. + +After introspecting, you can review the non-default clauses in your schema. The most important clause to review is `onDelete`, which defaults to `Cascade` in 2.25.0 and earlier. + + + +If you are using either the [`delete()`](/orm/prisma-client/queries/crud#delete-a-single-record) or [`deleteMany()`](/orm/prisma-client/queries/crud#delete-all-records) methods, **[cascading deletes](#how-to-use-cascading-deletes) will now be performed** as the `referentialActions` preview feature **removed the safety net in Prisma Client that previously prevented cascading deletes at runtime**. Be sure to check your code and make any adjustments accordingly. + + + +Make sure you are happy with every case of `onDelete: Cascade` in your schema. If not, either: + +- Modify your Prisma schema and `db push` or `dev migrate` to change the database + +_or_ + +- Manually update the underlying database if you use an introspection-only workflow + +The following example would result in a cascading delete, if the `User` is deleted then all of their `Post`'s will be deleted too. + +#### A blog schema example + +```prisma highlight=4;add +model Post { + id Int @id @default(autoincrement()) + title String + author User @relation(fields: [authorId], references: [id], onDelete: Cascade) + authorId Int +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +### Using Migration + +When running a [Migration](/orm/prisma-migrate) (or the [`prisma db push`](/orm/prisma-migrate/workflows/prototyping-your-schema) command) the [new defaults](#referential-action-defaults) will be applied to your database. + + + +Unlike when you run an Introspect for the first time, the new referential actions clause and property, will **not** automatically be added to your prisma schema by the Prisma VSCode extension. +You will have to manually add them if you wish to use anything other than the new defaults. + + + +Explicitly defining referential actions in your Prisma schema is optional. If you do not explicitly define a referential action for a relation, Prisma uses the [new defaults](#referential-action-defaults). + +Note that referential actions can be added on a case by case basis. This means that you can add them to one single relation and leave the rest set to the defaults by not manually specifying anything. + +### Checking for errors + +**Before** upgrading to 2.26.0 and enabling the referential actions **preview feature**, Prisma prevented the deletion of records while using `delete()` or `deleteMany()` to preserve referential integrity. A custom runtime error would be thrown by Prisma Client with the error code `P2014`. + +**After** upgrading and enabling the referential actions **preview feature**, Prisma no longer performs runtime checks. You can instead specify a custom referential action to preserve the referential integrity between relations. + +When you use [`NoAction`](#noaction) or [`Restrict`](#restrict) to prevent the deletion of records, the error messages will be different post 2.26.0 compared to pre 2.26.0. This is because they are now triggered by the database and **not** Prisma Client. The new error code that can be expected is `P2003`. + +To make sure you catch these new errors you can adjust your code accordingly. + +#### Example of catching errors + +The following example uses the below blog schema with a one-to-many relationship between `Post` and `User` and sets a [`Restrict`](#restrict) referential actions on the `author` field. + +This means that if a user has a post, that user (and their posts) **cannot** be deleted. + +```prisma file=schema.prisma +model Post { + id Int @id @default(autoincrement()) + title String + author User @relation(fields: [authorId], references: [id], onDelete: Restrict) + authorId String +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +Prior to upgrading and enabling the referential actions **preview feature**, the error code you would receive when trying to delete a user which has posts would be `P2014` and it's message: + +> "The change you are trying to make would violate the required relation '\{relation_name}' between the \{model_a_name\} and \{model_b_name\} models." + +```ts +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + try { + await prisma.user.delete({ + where: { + id: 'some-long-id', + }, + }) + } catch (error) { + if (error instanceof Prisma.PrismaClientKnownRequestError) { + if (error.code === 'P2014') { + console.log(error.message) + } + } + } +} + +main() +``` + +To make sure you are checking for the correct errors in your code, modify your check to look for `P2003`, which will deliver the message: + +> "Foreign key constraint failed on the field: \{field_name\}" + +```ts highlight=14;delete|15;add +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + try { + await prisma.user.delete({ + where: { + id: 'some-long-id' + } + }) + } catch (error) { + if (error instanceof Prisma.PrismaClientKnownRequestError) { + if (error.code === 'P2014') { + if (error.code === 'P2003') { + console.log(error.message) + } + } + } +} + +main() +``` diff --git a/docs/200-orm/100-prisma-schema/20-data-model/20-relations/420-relation-mode.mdx b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/420-relation-mode.mdx new file mode 100644 index 0000000000..5b4bb9fda3 --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/420-relation-mode.mdx @@ -0,0 +1,259 @@ +--- +title: 'Relation mode' +metaTitle: 'Manage relations between records with relation modes in Prisma' +metaDescription: 'Manage relations between records with relation modes in Prisma' +tocDepth: 3 +--- + + + +In Prisma, relations between records are defined with the [`@relation`](/orm/reference/prisma-schema-reference#relation) attribute. For example, in the following schema there is a one-to-many relation between the `User` and `Post` models: + +```prisma file=schema.prisma highlight=4,5,10;normal +model Post { + id Int @id @default(autoincrement()) + title String + author User @relation(fields: [authorId], references: [id], onDelete: Cascade, onUpdate: Cascade) + authorId Int +} + +model User { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + +Prisma has two _relation modes_, `foreignKeys` and `prisma`, that specify how relations between records are enforced. + +If you use Prisma with a relational database, then by default Prisma uses the [`foreignKeys` relation mode](#handle-relations-in-your-relational-database-with-the-foreignkeys-relation-mode), which enforces relations between records at the database level with foreign keys. A foreign key is a column or group of columns in one table that take values based on the primary key in another table. Foreign keys allow you to: + +- set constraints that prevent you from making changes that break references +- set [referential actions](/orm/prisma-schema/data-model/relations/referential-actions) that define how changes to records are handled + +Together these constraints and referential actions guarantee the _referential integrity_ of the data. + +For the example schema above, Prisma Migrate will generate the following SQL by default if you use the PostgreSQL connector: + +```sql highlight=19-22;normal + +-- CreateTable +CREATE TABLE "Post" ( + "id" SERIAL NOT NULL, + "title" TEXT NOT NULL, + "authorId" INTEGER NOT NULL, + + CONSTRAINT "Post_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "User" ( + "id" SERIAL NOT NULL, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "Post" + ADD CONSTRAINT "Post_authorId_fkey" + FOREIGN KEY ("authorId") + REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; +``` + +In this case, the foreign key constraint on the `authorId` column of the `Post` table references the `id` column of the `User` table, and guarantees that a post must have an author that exists. If you update or delete a user then the `ON DELETE` and `ON UPDATE` referential actions specify the `CASCADE` option, which will also delete or update all posts belonging to the user. + +Some databases, such as MongoDB or [PlanetScale](/orm/overview/databases/planetscale#differences-to-consider), do not support foreign keys. Additionally, in some cases developers may prefer not to use foreign keys in their relational database that usually does support foreign keys. For these situations, Prisma offers [the `prisma` relation mode](#emulate-relations-in-prisma-with-the-prisma-relation-mode), which emulates some properties of relations in relational databases. When you use Prisma Client with the `prisma` relation mode enabled, the behavior of queries is identical or similar, but referential actions and some constraints are handled by the Prisma engine rather than in the database. + + + There are performance implications to emulation of referential integrity and + referential actions in Prisma Client. In cases where the underlying database + supports foreign keys, it is usually the preferred choice. + + + + +## How to set the relation mode in your Prisma schema + +To set the relation mode, add the `relationMode` field in the `datasource` block: + +```prisma file=schema.prisma highlight=4,9;add +datasource db { + provider = "mysql" + url = env("DATABASE_URL") + relationMode = "prisma" +} +``` + + + +The ability to set the relation mode was introduced as part of the `referentialIntegrity` preview feature in Prisma version 3.1.1, and is generally available in Prisma versions 4.8.0 and later.

The `relationMode` field was renamed in Prisma version 4.5.0, and was previously named `referentialIntegrity`. + +
+ +For relational databases, the available options are: + +- `foreignKeys`: this handles relations in the database with foreign keys. This is the default option for all relational database connectors and is active if no `relationMode` is explicitly set in the `datasource` block. +- `prisma`: this emulates relations in Prisma Client. You should also [enable this option](/orm/overview/databases/planetscale#how-to-emulate-relations-in-prisma-client) when you use the MySQL connector with a PlanetScale database. + +For MongoDB, the only available option is the `prisma` relation mode. This mode is also active if no `relationMode` is explicitly set in the `datasource` block. + + + +If you switch between relation modes, Prisma will add or remove foreign keys to your database next time you apply changes to your schema with Prisma Migrate or `db push`. See [Switch between relation modes](#switch-between-relation-modes) for more information. + + + +## Handle relations in your relational database with the `foreignKeys` relation mode + +The `foreignKeys` relation mode handles relations in your relational database with foreign keys. This is the default option when you use a relational database connector (PostgreSQL, MySQL, SQLite, SQL Server, CockroachDB). + +The `foreignKeys` relation mode is not available when you use the MongoDB connector. Some relational databases, [such as PlanetScale](/orm/overview/databases/planetscale#how-to-emulate-relations-in-prisma-client), also forbid the use of foreign keys. In these cases, you should instead [emulate relations in Prisma with the `prisma` relation mode](#emulate-relations-in-prisma-with-the-prisma-relation-mode). + +### Referential integrity + +The `foreignKeys` relation mode maintains referential integrity at the database level with foreign key constraints and referential actions. + +#### Foreign key constraints + +When you _create_ or _update_ a record with a relation to another record, the related record needs to exist. Foreign key constraints enforce this behavior in the database. If the record does not exist, the database will return an error message. + +#### Referential actions + +When you _update_ or _delete_ a record with a relation to another record, referential actions are triggered in the database. To maintain referential integrity in related records, referential actions prevent changes that would break referential integrity, cascade changes through to related records, or set the value of fields that reference the updated or deleted records to a `null` or default value. + +For more information, see the [referential actions](/orm/prisma-schema/data-model/relations/referential-actions) page. + +### Introspection + +When you introspect a relational database with the `db pull` command with the `foreignKeys` relation mode enabled, a `@relation` attribute will be added to your Prisma schema for relations where foreign keys exist. + +### Prisma Migrate and `db push` + +When you apply changes to your Prisma schema with Prisma Migrate or `db push` with the `foreignKeys` relation mode enabled, foreign keys will be created in your database for all `@relation` attributes in your schema. + +## Emulate relations in Prisma with the `prisma` relation mode + +The `prisma` relation mode emulates some foreign key constraints and referential actions for each Prisma Client query to maintain referential integrity, using some additional database queries and logic. + +The `prisma` relation mode is the default option for the MongoDB connector. It should also be set if you use a relational database that does not support foreign keys. For example, [if you use PlanetScale](/orm/overview/databases/planetscale#how-to-emulate-relations-in-prisma-client) you should use the `prisma` relation mode. + + + There are performance implications to emulation of referential integrity in + Prisma Client, because it uses additional database queries to maintain + referential integrity. In cases where the underlying database can handle + referential integrity with foreign keys, it is usually the preferred choice. + + +Emulation of relations is only available for Prisma Client queries and does not apply to raw queries. + +### Which foreign key constraints are emulated? + +When you _update_ a record, Prisma will emulate foreign key constraints. This means that when you update a record with a relation to another record, the related record needs to exist. If the record does not exist, Prisma Client will return an error message. + +However, when you _create_ a record, Prisma does not emulate any foreign key constraints. You will be able to create invalid data. + +### Which referential actions are emulated? + +When you _update_ or _delete_ a record with related records, Prisma will emulate referential actions. + + + +The following table shows which emulated referential actions are available for each database connector: + +| Database | Cascade | Restrict | NoAction | SetNull | SetDefault | +| :---------- | :------ | :------- | :------- | :------ | :--------- | +| PostgreSQL | **✔️** | **✔️** | **❌**‡ | **✔️** | **❌**† | +| MySQL | **✔️** | **✔️** | **✔️** | **✔️** | **❌**† | +| SQLite | **✔️** | **✔️** | **❌**‡ | **✔️** | **❌**† | +| SQL Server | **✔️** | **✔️** | **✔️** | **✔️** | **❌**† | +| CockroachDB | **✔️** | **✔️** | **✔️** | **✔️** | **❌**† | +| MongoDB | **✔️** | **✔️** | **✔️** | **✔️** | **❌**† | + +- † The `SetDefault` referential action is not supported in the `prisma` relation mode. +- ‡ The `NoAction` referential action is not supported in the `prisma` relation mode for PostgreSQL and SQLite. Instead, use the `Restrict` action. + +### Error messages + +Error messages returned by emulated constraints and referential actions in the `prisma` relation mode are generated by Prisma Client and differ slightly from the error messages in the `foreignKeys` relation mode: + +```jsx +Example: +// foreignKeys: +... Foreign key constraint failed on the field: `ProfileOneToOne_userId_fkey (index)` +// prisma: +... The change you are trying to make would violate the required relation 'ProfileOneToOneToUserOneToOne' between the `ProfileOneToOne` and `UserOneToOne` models. +``` + +### Introspection + +When you introspect a database with the `db pull` command with the `prisma` relation mode enabled, relations will not be automatically added to your schema. You will instead need to add any relations manually with the `@relation` attribute. This only needs to be done once – next time you introspect your database, Prisma will keep your added `@relation` attributes. + +### Prisma Migrate and `db push` + +When you apply changes to your Prisma schema with Prisma Migrate or `db push` with the `prisma` relation mode enabled, Prisma will not use foreign keys in your database. + +### Indexes + +In relational databases that use foreign key constraints, the database usually also implicitly creates an index for the foreign key columns. For example, [MySQL will create an index on all foreign key columns](https://dev.mysql.com/doc/refman/8.0/en/constraint-foreign-key.html#:~:text=MySQL%20requires%20that%20foreign%20key%20columns%20be%20indexed%3B%20if%20you%20create%20a%20table%20with%20a%20foreign%20key%20constraint%20but%20no%20index%20on%20a%20given%20column%2C%20an%20index%20is%20created.). This is to allow foreign key checks to run fast and not require a table scan. + +The `prisma` relation mode does not use foreign keys, so no indexes are created when you use Prisma Migrate or `db push` to apply changes to your database. You instead need to manually add an index on your relation scalar fields with the [`@@index`](/orm/reference/prisma-schema-reference#index) attribute (or the [`@unique`](/orm/reference/prisma-schema-reference#unique), [`@@unique`](/orm/reference/prisma-schema-reference#unique-1) or [`@@id`](/orm/reference/prisma-schema-reference#id-1) attributes, if applicable). + +#### Index validation + +If you do not add the index manually, queries might require full table scans. This can be slow, and also expensive on database providers that bill per accessed row. To help avoid this, Prisma warns you when your schema contains fields that are used in a `@relation` that does not have an index defined. For example, take the following schema with a relation between the `User` and `Post` models: + +```prisma file=schema.prisma +datasource db { + provider = "mysql" + url = env("DATABASE_URL") + relationMode = "prisma" +} + +model User { + id Int @id + posts Post[] +} + +model Post { + id Int @id + userId Int + user User @relation(fields: [userId], references: [id]) +} +``` + +Prisma displays the following warning when you run `prisma format` or `prisma validate`: + +```terminal wrap +With `relationMode = "prisma"`, no foreign keys are used, so relation fields will not benefit from the index usually created by the relational database under the hood. This can lead to poor performance when querying these fields. We recommend adding an index manually. +``` + +To fix this, add an index to your `Post` model: + +```prisma file=schema.prisma highlight=6;add +model Post { + id Int @id + userId Int + user User @relation(fields: [userId], references: [id]) + + @@index([userId]) +} +``` + +If you use the [Prisma VS Code extension](https://marketplace.visualstudio.com/items?itemName=Prisma.prisma) (or our [language server in another editor](/orm/more/development-environment/editor-setup)), the warning is augmented with a Quick Fix that adds the required index for you: + +![The Quick Fix pop-up for adding an index on a relation scalar field in VS Code](quick-fix-index.png) + +## Switch between relation modes + +It is only possible to switch between relation modes when you use a relational database connector (PostgreSQL, MySQL, SQLite, SQL Server, CockroachDB). + +### Switch from `foreignKeys` to `prisma` + +The default relation mode if you use a relational database and do not include the `relationMode` field in your `datasource` block is `foreignKeys`. To switch to the `prisma` relation mode, add the `relationMode` field with a value of `prisma`, or update the `relationMode` field value to `prisma` if it already exists. + +When you switch the relation mode from `foreignKeys` to `prisma`, after you first apply changes to your schema with Prisma Migrate or `db push` Prisma will remove all previously created foreign keys in the next migration. + +If you keep the same database, you can then continue to work as normal. If you switch to a database that does not support foreign keys at all, your existing migration history contains SQL DDL that creates foreign keys, which might trigger errors if you ever have to rerun these migrations. In this case, we recommend that you delete the `migrations` directory. (If you use PlanetScale, which does not support foreign keys, we generally recommend that you [use `db push` rather than Prisma Migrate](/orm/overview/databases/planetscale#differences-to-consider).) + +### Switch from `prisma` to `foreignKeys` + +To switch from the `prisma` relation mode to the `foreignKeys` relation mode, update the `relationMode` field value from `prisma` to `foreignKeys`. To do this, the database must support foreign keys. When you apply changes to your schema with Prisma Migrate or `db push` for the first time after you switch relation modes, Prisma will create foreign keys for all relations in the next migration. diff --git a/docs/200-orm/100-prisma-schema/20-data-model/20-relations/500-troubleshooting-relations.mdx b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/500-troubleshooting-relations.mdx new file mode 100644 index 0000000000..1e6d09215a --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/500-troubleshooting-relations.mdx @@ -0,0 +1,271 @@ +--- +title: Troubleshooting relations +metaDescriptions: Common problems and solutions when defining relations in the Prisma schema. +--- + + + +Modelling your schema can sometimes offer up some unexpected results. This section aims to cover the most prominent of those. + + + +## Implicit many-to-many self-relations return incorrect data if order of relation fields change + +### Problem + +In the following implicit many-to-many self-relation, the lexicographic order of relation fields in `a_eats` (1) and `b_eatenBy` (2): + +```prisma highlight=4,5;normal +model Animal { + id Int @id @default(autoincrement()) + name String + a_eats Animal[] @relation(name: "FoodChain") + b_eatenBy Animal[] @relation(name: "FoodChain") +} +``` + +The resulting relation table in SQL looks as follows, where `A` represents prey (`a_eats`) and `B` represents predators (`b_eatenBy`): + +| A | B | +| :----------- | :--------- | +| 8 (Plankton) | 7 (Salmon) | +| 7 (Salmon) | 9 (Bear) | + +The following query returns a salmon's prey and predators: + + + + +```ts +const getAnimals = await prisma.animal.findMany({ + where: { + name: 'Salmon', + }, + include: { + b_eats: true, + a_eatenBy: true, + }, +}) +``` + + + + +```js no-copy +{ + "id": 7, + "name": "Salmon", + "b_eats": [ + { + "id": 8, + "name": "Plankton" + } + ], + "a_eatenBy": [ + { + "id": 9, + "name": "Bear" + } + ] +} +``` + + + + +Now change the order of the relation fields: + +```prisma highlight=4,5;normal +model Animal { + id Int @id @default(autoincrement()) + name String + b_eats Animal[] @relation(name: "FoodChain") + a_eatenBy Animal[] @relation(name: "FoodChain") +} +``` + +Migrate your changes and re-generate Prisma Client. When you run the same query with the updated field names, Prisma Client returns incorrect data (salmon now eats bears and gets eaten by plankton): + + + + +```ts +const getAnimals = await prisma.animal.findMany({ + where: { + name: 'Salmon', + }, + include: { + b_eats: true, + a_eatenBy: true, + }, +}) +``` + + + + +```js no-copy +{ + "id": 1, + "name": "Salmon", + "b_eats": [ + { + "id": 3, + "name": "Bear" + } + ], + "a_eatenBy": [ + { + "id": 2, + "name": "Plankton" + } + ] +} +``` + + + + +Although the lexicographic order of the relation fields in the Prisma schema changed, columns `A` and `B` in the database **did not change** (they were not renamed and data was not moved). Therefore, `A` now represents predators (`a_eatenBy`) and `B` represents prey (`b_eats`): + +| A | B | +| :----------- | :--------- | +| 8 (Plankton) | 7 (Salmon) | +| 7 (Salmon) | 9 (Bear) | + +### Solution + +If you rename relation fields in an implicit many-to-many self-relations, make sure that you maintain the alphabetic order of the fields - for example, by prefixing with `a_` and `_b`. + +## How to use a relation table with a many-to-many relationship + +There are a couple of ways to define a m-n relationship, implicitly or explicitly. Implicitly means letting Prisma handle the relation table (JOIN table) under the hood, all you have to do is define an array/list for the non scalar types on each model, see [implicit many-to-many relations](many-to-many-relations#implicit-many-to-many-relations). + +Where you might run into trouble is when creating an [explicit m-n relationship](many-to-many-relations#explicit-many-to-many-relations), that is, to create and handle the relation table yourself. **It can be overlooked that Prisma requires both sides of the relation to be present**. + +Take the following example, here a relation table is created to act as the JOIN between the `Post` and `Category` tables. This will not work however as the relation table (`PostCategories`) must form a 1-to-many relationship with the other two models respectively. + +The back relation fields are missing from the `Post` to `PostCategories` and `Category` to `PostCategories` models. + + +```prisma +// This example schema shows how NOT to define an explicit m-n relation + +model Post { + id Int @id @default(autoincrement()) + title String + categories Category[] // This should refer to PostCategories +} + +model PostCategories { + post Post @relation(fields: [postId], references: [id]) + postId Int + category Category @relation(fields: [categoryId], references: [id]) + categoryId Int + @@id([postId, categoryId]) +} + +model Category { + id Int @id @default(autoincrement()) + name String + posts Post[] // This should refer to PostCategories +} +``` + + +To fix this the `Post` model needs to have a many relation field defined with the relation table `PostCategories`. The same applies to the `Category` model. + +This is because the relation model forms a 1-to-many relationship with the other two models its joining. + +```prisma highlight=5,21;add|4,20;delete +model Post { + id Int @id @default(autoincrement()) + title String + categories Category[] + postCategories PostCategories[] +} + +model PostCategories { + post Post @relation(fields: [postId], references: [id]) + postId Int + category Category @relation(fields: [categoryId], references: [id]) + categoryId Int + + @@id([postId, categoryId]) +} + +model Category { + id Int @id @default(autoincrement()) + name String + posts Post[] + postCategories PostCategories[] +} +``` + +## Using the `@relation` attribute with a many-to-many relationship + +It might seem logical to add a `@relation("Post")` annotation to a relation field on your model when composing an implicit many-to-many relationship. + +```prisma +model Post { + id Int @id @default(autoincrement()) + title String + categories Category[] @relation("Category") + Category Category? @relation("Post", fields: [categoryId], references: [id]) + categoryId Int? +} + +model Category { + id Int @id @default(autoincrement()) + name String + posts Post[] @relation("Post") + Post Post? @relation("Category", fields: [postId], references: [id]) + postId Int? +} +``` + +This however tells Prisma to expect **two** separate one-to-many relationships. See [disambiguating relations](/orm/prisma-schema/data-model/relations#disambiguating-relations) for more information on using the `@relation` attribute. + +The following example is the correct way to define an implicit many-to-many relationship. + +```prisma highlight=4,11;delete|5,12;add +model Post { + id Int @id @default(autoincrement()) + title String + categories Category[] @relation("Category") + categories Category[] +} + +model Category { + id Int @id @default(autoincrement()) + name String + posts Post[] @relation("Post") + posts Post[] +} +``` + +The `@relation` annotation can also be used to [name the underlying relation table](/orm/prisma-schema/data-model/relations/many-to-many-relations#configuring-the-name-of-the-relation-table-in-implicit-many-to-many-relations) created on a implicit many-to-many relationship. + +```prisma +model Post { + id Int @id @default(autoincrement()) + title String + categories Category[] @relation("CategoryPostRelation") +} + +model Category { + id Int @id @default(autoincrement()) + name String + posts Post[] @relation("CategoryPostRelation") +} +``` + +## Using m-n relations in databases with enforced primary keys + +### Problem + +Some cloud providers enforce the existence of primary keys in all tables. However, any relation tables (JOIN tables) created by Prisma (expressed via `@relation`) for many-to-many relations using implicit syntax do not have primary keys. + +### Solution + +You need to use [explicit relation syntax](/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations), manually create the join model, and verify that this join model has a primary key. diff --git a/docs/200-orm/100-prisma-schema/20-data-model/20-relations/index.mdx b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/index.mdx new file mode 100644 index 0000000000..7ade8e95f3 --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/index.mdx @@ -0,0 +1,579 @@ +--- +title: 'Relations' +metaTitle: 'Relations (Reference)' +metaDescription: 'A relation is a connection between two models in the Prisma schema. This page explains how you can define one-to-one, one-to-many and many-to-many relations in Prisma.' +tocDepth: 3 +--- + + + +A relation is a _connection_ between two models in the Prisma schema. For example, there is a one-to-many relation between `User` and `Post` because one user can have many blog posts. + + + +The following Prisma schema defines a one-to-many relation between the `User` and `Post` models. The fields involved in defining the relation are highlighted: + + + + +```prisma highlight=3,8,9;normal +model User { + id Int @id @default(autoincrement()) + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + author User @relation(fields: [authorId], references: [id]) + authorId Int // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + +```prisma highlight=3,8,9;normal +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + posts Post[] +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + +At a Prisma level, the `User` / `Post` relation is made up of: + +- Two [relation fields](#relation-fields): `author` and `posts`. Relation fields define connections between models at the Prisma level and **do not exist in the database**. These fields are used to generate Prisma Client. +- The scalar `authorId` field, which is referenced by the `@relation` attribute. This field **does exist in the database** - it is the foreign key that connects `Post` and `User`. + +At a Prisma level, a connection between two models is **always** represented by a [relation field](#relation-fields) on **each side** of the relation. + +
+ + + +
+ +## Relations in the database + +### Relational databases + +The following entity relationship diagram defines the same one-to-many relation between the `User` and `Post` tables in a **relational database**: + +![A one-to-many relationship between a user and posts table.](./one-to-many.png) + +In SQL, you use a _foreign key_ to create a relation between two tables. Foreign keys are stored on **one side** of the relation. Our example is made up of: + +- A foreign key column in the `Post` table named `authorId`. +- A primary key column in the `User` table named `id`. The `authorId` column in the `Post` table references the `id` column in the `User` table. + +In the Prisma schema, the foreign key / primary key relationship is represented by the `@relation` attribute on the `author` field: + +```prisma +author User @relation(fields: [authorId], references: [id]) +``` + +> **Note**: Relations in the Prisma schema represent relationships that exist between tables in the database. If the relationship does not exist in the database, it does not exist in the Prisma schema. + +### MongoDB + +For MongoDB, Prisma currently uses a [normalized data model design](https://docs.mongodb.com/manual/core/data-model-design/), which means that documents reference each other by ID in a similar way to relational databases. + +The following document represents a `User` (in the `User` collection): + +```json +{ "_id": { "$oid": "60d5922d00581b8f0062e3a8" }, "name": "Ella" } +``` + +The following list of `Post` documents (in the `Post` collection) each have a `authorId` field which reference the same user: + +```json +[ + { + "_id": { "$oid": "60d5922e00581b8f0062e3a9" }, + "title": "How to make sushi", + "authorId": { "$oid": "60d5922d00581b8f0062e3a8" } + }, + { + "_id": { "$oid": "60d5922e00581b8f0062e3aa" }, + "title": "How to re-install Windows", + "authorId": { "$oid": "60d5922d00581b8f0062e3a8" } + } +] +``` + +This data structure represents a one-to-many relation because multiple `Post` documents refer to the same `User` document. + +#### `@db.ObjectId` on IDs and relation scalar fields + +If your model's ID is an `ObjectId` (represented by a `String` field), you must add `@db.ObjectId` to the model's ID _and_ the relation scalar field on the other side of the relation: + +```prisma highlight=3,9;normal +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + posts Post[] +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId // relation scalar field (used in the `@relation` attribute above) +} +``` + +## Relations in Prisma Client + +Prisma Client is generated from the Prisma schema. The following examples demonstrate how relations manifest when you use Prisma Client to get, create, and update records. + +### Create a record and nested records + +The following query creates a `User` record and two connected `Post` records: + +```ts +const userAndPosts = await prisma.user.create({ + data: { + posts: { + create: [ + { title: 'Prisma Day 2020' }, // Populates authorId with user's id + { title: 'How to write a Prisma schema' }, // Populates authorId with user's id + ], + }, + }, +}) +``` + +In the underlying database, this query: + +1. Creates a `User` with an auto-generated `id` (for example, `20`) +2. Creates two new `Post` records and sets the `authorId` of both records to `20` + +### Retrieve a record and include related records + +The following query retrieves a `User` by `id` and includes any related `Post` records: + +```ts +const getAuthor = await prisma.user.findUnique({ + where: { + id: "20", + }, + include: { +| posts: true, // All posts where authorId == 20 + }, +}); +``` + +In the underlying database, this query: + +1. Retrieves the `User` record with an `id` of `20` +2. Retrieves all `Post` records with an `authorId` of `20` + +### Associate an existing record to another existing record + +The following query associates an existing `Post` record with an existing `User` record: + +```ts +const updateAuthor = await prisma.user.update({ + where: { + id: 20, + }, + data: { + posts: { + connect: { + id: 4, + }, + }, + }, +}) +``` + +In the underlying database, this query uses a [nested `connect` query](/orm/reference/prisma-client-reference#connect) to link the post with an `id` of 4 to the user with an `id` of 20. The query does this with the following steps: + +- The query first looks for the user with an `id` of `20`. +- The query then sets the `authorID` foreign key to `20`. This links the post with an `id` of `4` to the user with an `id` of `20`. + +In this query, the current value of `authorID` does not matter. The query changes `authorID` to `20`, no matter its current value. + +## Types of relations + +There are three different types (or [cardinalities]()) of relations in Prisma: + +- [One-to-one](one-to-one-relations) (also called 1-1 relations) +- [One-to-many](one-to-many-relations) (also called 1-n relations) +- [Many-to-many](many-to-many-relations) (also called m-n relations) + +The following Prisma schema includes every type of relation: + +- one-to-one: `User` ↔ `Profile` +- one-to-many: `User` ↔ `Post` +- many-to-many: `Post` ↔ `Category` + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + posts Post[] + profile Profile? +} + +model Profile { + id Int @id @default(autoincrement()) + user User @relation(fields: [userId], references: [id]) + userId Int @unique // relation scalar field (used in the `@relation` attribute above) +} + +model Post { + id Int @id @default(autoincrement()) + author User @relation(fields: [authorId], references: [id]) + authorId Int // relation scalar field (used in the `@relation` attribute above) + categories Category[] +} + +model Category { + id Int @id @default(autoincrement()) + posts Post[] +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + posts Post[] + profile Profile? +} + +model Profile { + id String @id @default(auto()) @map("_id") @db.ObjectId + user User @relation(fields: [userId], references: [id]) + userId String @unique @db.ObjectId // relation scalar field (used in the `@relation` attribute above) +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId // relation scalar field (used in the `@relation` attribute above) + categories Category[] @relation(fields: [categoryIds], references: [id]) + categoryIds String[] @db.ObjectId +} + +model Category { + id String @id @default(auto()) @map("_id") @db.ObjectId + posts Post[] @relation(fields: [postIds], references: [id]) + postIds String[] @db.ObjectId +} +``` + + + + + + +This schema is the same as the [example data model](/orm/prisma-schema/data-model/models) but has all [scalar fields](/orm/prisma-schema/data-model/models#scalar-fields) removed (except for the required [relation scalars](/orm/prisma-schema/data-model/relations#relation-scalar-fields)) so you can focus on the [relation fields](#relation-fields). + + + + + +This example uses [implicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations). These relations do not require the `@relation` attribute unless you need to [disambiguate relations](#disambiguating-relations). + + + +Notice that the syntax is slightly different between relational databases and MongoDB - particularly for [many-to-many relations](many-to-many-relations). + +For relational databases, the following entity relationship diagram represents the database that corresponds to the sample Prisma schema: + +![The sample schema as an entity relationship diagram](sample-schema.png) + +For MongoDB, Prisma uses a [normalized data model design](https://docs.mongodb.com/manual/core/data-model-design/), which means that documents reference each other by ID in a similar way to relational databases. See [the MongoDB section](#mongodb) for more details. + +### Implicit and explicit many-to-many relations + +Many-to-many relations in relational databases can be modelled in two ways: + +- [explicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations), where the relation table is represented as an explicit model in your Prisma schema +- [implicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations), where Prisma manages the relation table and it does not appear in the Prisma schema. + +Implicit many-to-many relations require both models to have a single `@id`. Be aware of the following: + +- You cannot use a [multi-field ID](/orm/reference/prisma-schema-reference#id-1) +- You cannot use a `@unique` in place of an `@id` + +To use either of these features, you must set up an explicit many-to-many instead. + +The implicit many-to-many relation still manifests in a relation table in the underlying database. However, Prisma manages this relation table. + +If you use an implicit many-to-many relation instead of an explicit one, it makes the [Prisma Client API](/orm/prisma-client) simpler (because, for example, you have one fewer level of nesting inside of [nested writes](/orm/prisma-client/queries/relation-queries#nested-writes)). + +If you're not using Prisma Migrate but obtain your data model from [introspection](/orm/prisma-schema/introspection), you can still make use of implicit many-to-many relations by following Prisma's [conventions for relation tables](many-to-many-relations#conventions-for-relation-tables-in-implicit-m-n-relations). + +## Relation fields + +Relation [fields](/orm/prisma-schema/data-model/models#defining-fields) are fields on a Prisma [model](/orm/prisma-schema/data-model/models#defining-models) that do _not_ have a [scalar type](/orm/prisma-schema/data-model/models#scalar-fields). Instead, their type is another model. + +Every relation must have exactly two relation fields, one on each model. In the case of one-to-one and one-to-many relations, an additional _relation scalar field_ is required which gets linked by one of the two relation fields in the `@relation` attribute. This relation scalar is the direct representation of the _foreign key_ in the underlying database. + + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique + role Role @default(USER) + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + title String + author User @relation(fields: [authorId], references: [id]) + authorId Int // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + role Role @default(USER) + posts Post[] +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId // relation scalar field (used in the `@relation` attribute above) +} +``` + + + + +These models have the following fields: + + + + +| Model | Field | Relational | Relation field | +| :----- | :--------- | :--------- | :--------------------------- | +| `User` | `id` | `Int` | No | +| | `email` | `String` | No | +| | `role` | `Role` | No | +| | `posts` | `Post[]` | **Yes** (Prisma-level) | +| `Post` | `id` | `Int` | No | +| | `title` | `String` | No | +| | `authorId` | `Int` | No (_relation scalar field_) | +| | `author` | `User` | **Yes** (_annotated_) | + + + + +| Model | Field | Relational | Relation field | Notes | +| :----- | :--------- | :--------- | :--------------------------- | -------------------------------------- | +| `User` | `id` | `String` | No | Underlying database type is `ObjectId` | +| | `email` | `String` | No | +| | `role` | `Role` | No | +| | `posts` | `Post[]` | **Yes** (Prisma-level) | +| `Post` | `id` | `String` | No | +| | `title` | `String` | No | +| | `authorId` | `String` | No (_relation scalar field_) | Underlying database type is `ObjectId` | +| | `author` | `User` | **Yes** (_annotated_) | + + + + +Both `posts` and `author` are relation fields because their types are not scalar types but other models. + +Also note that the annotated relation field `author` needs to link the relation scalar field `authorId` on the `Post` model inside the `@relation` attribute. The relation scalar represents the foreign key in the underlying database. + +The other relation field called `posts` is defined purely on a Prisma-level, it doesn't manifest in the database. + +### Annotated relation fields + +Relations that require one side of the relation to be _annotated_ with the `@relation` attribute are referred to as _annotated relation fields_. This includes: + +- one-to-one relations +- one-to-many relations +- many-to-many relations for MongoDB only + +The side of the relation which is annotated with the `@relation` attribute represents the side that **stores the foreign key in the underlying database**. The "actual" field that represents the foreign key is required on that side of the relation as well, it's called _relation scalar field_, and is referenced inside `@relation` attribute: + + + + +```prisma +author User @relation(fields: [authorId], references: [id]) +authorId Int +``` + + + + +```prisma +author User @relation(fields: [authorId], references: [id]) +authorId String @db.ObjectId +``` + + + + +A scalar field _becomes_ a relation scalar field when it's used in the `fields` of a `@relation` attribute. + +### Relation scalar fields + + + +Relation scalar fields are read-only in the generated [Prisma Client API](/orm/prisma-client). If you want to update a relation in your code, you can do so using [nested writes](/orm/prisma-client/queries/relation-queries#nested-writes). + + + +#### Relation scalar naming conventions + +Because a relation scalar field always _belongs_ to a relation field, the following naming convention is common: + +- Relation field: `author` +- Relation scalar field: `authorId` (relation field name + `Id`) + +## The `@relation` attribute + +The [`@relation`](/orm/reference/prisma-schema-reference#relation) attribute can only be applied to the [relation fields](#relation-fields), not to [scalar fields](/orm/prisma-schema/data-model/models#scalar-fields). + +The `@relation` attribute is required when: + +- you define a one-to-one or one-to-many relation, it is required on _one side_ of the relation (with the corresponding relation scalar field) +- you need to disambiguate a relation (that's e.g. the case when you have two relations between the same models) +- you define a [self-relation](self-relations) +- you define [a many-to-many relation for MongoDB](many-to-many-relations#mongodb) +- you need to control how the relation table is represented in the underlying database (e.g. use a specific name for a relation table) + +> **Note**: [Implicit many-to-many relations](many-to-many-relations#implicit-many-to-many-relations) in relational databases do not require the `@relation` attribute. + +## Disambiguating relations + +When you define two relations between the same two models, you need to add the `name` argument in the `@relation` attribute to disambiguate them. As an example for why that's needed, consider the following models: + + + + +```prisma no-copy +// NOTE: This schema is intentionally incorrect. See below for a working solution. + +model User { + id Int @id @default(autoincrement()) + name String? + writtenPosts Post[] + pinnedPost Post? +} + +model Post { + id Int @id @default(autoincrement()) + title String? + author User @relation(fields: [authorId], references: [id]) + authorId Int + pinnedBy User? @relation(fields: [pinnedById], references: [id]) + pinnedById Int? +} +``` + + + + +```prisma no-copy +// NOTE: This schema is intentionally incorrect. See below for a working solution. + +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + writtenPosts Post[] + pinnedPost Post? +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String? + author User @relation(fields: [authorId], references: [id]) + authorId String @db.ObjectId + pinnedBy User? @relation(fields: [pinnedById], references: [id]) + pinnedById String? @db.ObjectId +} +``` + + + + +In that case, the relations are ambiguous, there are four different ways to interpret them: + +- `User.writtenPosts` ↔ `Post.author` + `Post.authorId` +- `User.writtenPosts` ↔ `Post.pinnedBy` + `Post.pinnedById` +- `User.pinnedPost` ↔ `Post.author` + `Post.authorId` +- `User.pinnedPost` ↔ `Post.pinnedBy` + `Post.pinnedById` + +To disambiguate these relations, you need to annotate the relation fields with the `@relation` attribute and provide the `name` argument. You can set any `name` (except for the empty string `""`), but it must be the same on both sides of the relation: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + name String? + writtenPosts Post[] @relation("WrittenPosts") + pinnedPost Post? @relation("PinnedPost") +} + +model Post { + id Int @id @default(autoincrement()) + title String? + author User @relation("WrittenPosts", fields: [authorId], references: [id]) + authorId Int + pinnedBy User? @relation("PinnedPost", fields: [pinnedById], references: [id]) + pinnedById Int? @unique +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String? + writtenPosts Post[] @relation("WrittenPosts") + pinnedPost Post? @relation("PinnedPost") +} + +model Post { + id String @id @default(auto()) @map("_id") @db.ObjectId + title String? + author User @relation("WrittenPosts", fields: [authorId], references: [id]) + authorId String @db.ObjectId + pinnedBy User? @relation("PinnedPost", fields: [pinnedById], references: [id]) + pinnedById String? @unique @db.ObjectId +} +``` + + + diff --git a/docs/200-orm/100-prisma-schema/20-data-model/20-relations/one-to-many.png b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/one-to-many.png new file mode 100644 index 0000000000000000000000000000000000000000..e0f44cd37a9e3a9e064e08d309a35130260fcca6 GIT binary patch literal 41597 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�gQTl@-aF=ECII!#S?@E}|z?PRO4BkpKfS(w%_+ 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 literal 0 HcmV?d00001 diff --git a/docs/200-orm/100-prisma-schema/20-data-model/20-relations/relations-intro.png b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/relations-intro.png new file mode 100644 index 0000000000000000000000000000000000000000..47bb895580ea3e96bbbd7919d5b3ea192f9c0266 GIT binary patch literal 36481 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 literal 0 HcmV?d00001 diff --git a/docs/200-orm/100-prisma-schema/20-data-model/20-relations/sample-schema.png b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/sample-schema.png new file mode 100644 index 0000000000000000000000000000000000000000..c669b197211cc676910173d38adb23b6071f1d89 GIT binary patch literal 130861 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

r=oq$)fcx_L6{fFIKjPn$^cHClT!!&G zh0fbIym+!P)Up}QDf~te__}jsiaXW&YqeyyZRYaa1woZj#d?|n2u07c7O2}?^CaCQ z^WJUh&CQlh9dwaSfnSRAZRzpKr%v$XhBh6~-o(cPsQQC9!e$l3j%0t z$M>2B8FS+Y#=CNh7YB7uoL}DUXxACX6Y_X@EN*hM>kMV|V+ZD$8|zXA^DxHE+6Sp0 z#0%vJKZHyL_v=4{83cT*JGs%XPi z((_KftCXF0*G@oP12Sp%f4Y@PVa%NF`hV}k?{CnGpSbh>x?7oDqLt1J+5ZEA+3bHk zxLn8g=c#D*XQdOtwd(8l)pJO_lkd7-%J;yGFi6+`HSm`V5a9-W&Y# zJ3nu&(HG~~xHtX#yTjOLovLm(oBG(gr}(D+>9=cdo7mn9{Qs%y=CoZs>)t($S^K;& zvVWKC<9%AsKUL@~J{#EnV*MR+Z^y4I{Qs`CtiJ_`#Q(aB>pzL#Upwp8r>#a78{+R+ zvn)Clo@pk0|ELtZ>LbzG-#dHW-4WO$(bOWi)|r!TXZ{x&>Uaz9(i zige?v*E$)Vtea&U_C>T_#%*v-6t_+GukFQffwkD_Ao z+ZZnX(=dp*C*3$v>#att=mg6ZzGs_%|Tv#%ap zxb(BrZhceC;(Zx%ChV&c@`BgT%jsf>zI*=h)Xc*%mI+ q6 + +Prisma allows configuration of database indexes, unique constraints and primary key constraints. This is in General Availability in versions `4.0.0` and later. You can enable this with the `extendedIndexes` Preview feature in versions `3.5.0` and later. + +Version `3.6.0` also introduces support for introspection and migration of full text indexes in MySQL and MongoDB through a new `@@fulltext` attribute, available through the `fullTextIndex` Preview feature. + + + +If you are upgrading from a version earlier than 4.0.0, these changes to index configuration and full text indexes might be **breaking changes** if you have a database that already uses these features. See [Upgrading from previous versions](#upgrading-from-previous-versions) for more information on how to upgrade. + + + + + +## Index configuration + +You can configure indexes, unique constraints, and primary key constraints with the following attribute arguments: + +- The [`length` argument](#configuring-the-length-of-indexes-with-length-mysql) allows you to specify a maximum length for the subpart of the value to be indexed on `String` and `Bytes` types + + - Available on the `@id`, `@@id`, `@unique`, `@@unique` and `@@index` attributes + - MySQL only + +- The [`sort` argument](#configuring-the-index-sort-order-with-sort) allows you to specify the order that the entries of the constraint or index are stored in the database + + - Available on the `@unique`, `@@unique` and `@@index` attributes in all databases, and on the `@id` and `@@id` attributes in SQL Server + +- The [`type` argument](#configuring-the-access-type-of-indexes-with-type-postgresql) allows you to support index access methods other than PostgreSQL's default `BTree` access method + + - Available on the `@@index` attribute + - PostgreSQL only + - Supported index access methods: `Hash`, `Gist`, `Gin`, `SpGist` and `Brin` + +- The [`clustered` argument](#configuring-if-indexes-are-clustered-or-non-clustered-with-clustered-sql-server) allows you to configure whether a constraint or index is clustered or non-clustered + - Available on the `@id`, `@@id`, `@unique`, `@@unique` and `@@index` attributes + - SQL Server only + +See the linked sections for details of which version each feature was first introduced in. + +### Configuring the length of indexes with `length` (MySQL) + +The `length` argument is specific to MySQL and allows you to define indexes and constraints on columns of `String` and `Byte` types. For these types, MySQL requires you to specify a maximum length for the subpart of the value to be indexed in cases where the full value would exceed MySQL's limits for index sizes. See [the MySQL documentation](https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html) for more details. + +The `length` argument is available on the `@id`, `@@id`, `@unique`, `@@unique` and `@@index` attributes. It is generally available in versions 4.0.0 and later, and available as part of the `extendedIndexes` preview feature in versions 3.5.0 and later. + +As an example, the following data model declares an `id` field with a maximum length of 3000 characters: + +```prisma file=schema.prisma +model Id { + id String @id @db.VarChar(3000) +} +``` + +This is not valid in MySQL because it exceeds MySQL's index storage limit and therefore Prisma rejects the data model. The generated SQL would be rejected by the database. + +```sql +CREATE TABLE `Id` ( + `id` VARCHAR(3000) PRIMARY KEY +) +``` + +The `length` argument allows you to specify that only a subpart of the `id` value represents the primary key. In the example below, the first 100 characters are used: + +```prisma file=schema.prisma +model Id { + id String @id(length: 100) @db.VarChar(3000) +} +``` + +Prisma Migrate is able to create constraints and indexes with the `length` argument if specified in your data model. This means that you can create indexes and constraints on values of Prisma type `Byte` and `String`. If you don't specify the argument the index is treated as covering the full value as before. + +Introspection will fetch these limits where they are present in your existing database. This allows Prisma to support indexes and constraints that were previously suppressed and results in better support of existing MySQL databases that are making use of this feature. + +The `length` argument can also be used on compound primary keys, using the `@@id` attribute, as in the example below: + +```prisma file=schema.prisma +model CompoundId { + id_1 String @db.VarChar(3000) + id_2 String @db.VarChar(3000) + + @@id([id_1(length: 100), id_2(length: 10)]) +} +``` + +A similar syntax can be used for the `@@unique` and `@@index` attributes. + +### Configuring the index sort order with `sort` + +The `sort` argument is available for all databases supported by Prisma. It allows you to specify the order that the entries of the index or constraint are stored in the database. This can have an effect on whether the database is able to use an index for specific queries. + +The `sort` argument is available for all databases on `@unique`, `@@unique` and `@@index`. Additionally, SQL Server also allows it on `@id` and `@@id`. It is generally available in versions 4.0.0 and later, and available as part of the `extendedIndexes` preview feature in versions 3.5.0 and later. + +As an example, the following table + +```sql +CREATE TABLE `Unique` ( + `unique` INT, + CONSTRAINT `Unique_unique_key` UNIQUE (`unique` DESC) +) +``` + +is now introspected as + +```prisma file=schema.prisma +model Unique { + unique Int @unique(sort: Desc) +} +``` + +The `sort` argument can also be used on compound indexes: + +```prisma file=schema.prisma +model CompoundUnique { + unique_1 Int + unique_2 Int + + @@unique([unique_1(sort: Desc), unique_2]) +} +``` + +### Example: using `sort` and `length` together + +The following example demonstrates the use of the `sort` and `length` arguments to configure indexes and constraints for a `Post` model: + +```prisma file=schema.prisma +model Post { + title String @db.VarChar(300) + abstract String @db.VarChar(3000) + slug String @unique(sort: Desc, length: 42) @db.VarChar(3000) + author String + created_at DateTime + + @@id([title(length: 100, sort: Desc), abstract(length: 10)]) + @@index([author, created_at(sort: Desc)]) +} +``` + +### Configuring the access type of indexes with `type` (PostgreSQL) + +The `type` argument is available for configuring the index type in PostgreSQL with the `@@index` attribute. The index access methods available are `Hash`, `Gist`, `Gin`, `SpGist` and `Brin`, as well as the default `BTree` index access method. The `type` argument is generally available in versions 4.0.0 and later. The `Hash` index access method is available as part of the `extendedIndexes` preview feature in versions 3.6.0 and later, and the `Gist`, `Gin`, `SpGist` and `Brin` index access methods are available in preview in versions 3.14.0 and later. + +#### Hash + +The `Hash` type will store the index data in a format that is much faster to search and insert, and that will use less disk space. However, only the `=` and `<>` comparisons can use the index, so other comparison operators such as `<` and `>` will be much slower with `Hash` than when using the default `BTree` type. + +As an example, the following model adds an index with a `type` of `Hash` to the `value` field: + +```prisma file=schema.prisma +model Example { + id Int @id + value Int + + @@index([value], type: Hash) +} +``` + +This translates to the following SQL commands: + +```sql +CREATE TABLE "Example" ( + id INT PRIMARY KEY, + value INT NOT NULL +); + +CREATE INDEX "Example_value_idx" ON "Example" USING HASH (value); +``` + +#### Generalized Inverted Index (GIN) + +The GIN index stores composite values, such as arrays or `JsonB` data. This is useful for speeding up querying whether one object is part of another object. It is commonly used for full-text searches. + +An indexed field can define the operator class, which defines the operators handled by the index. + + + +Indexes using a function (such as `to_tsvector`) to determine the indexed value are not yet supported by Prisma. Indexes defined in this way will not be visible with `prisma db pull`. + + + +As an example, the following model adds a `Gin` index to the `value` field, with `JsonbPathOps` as the class of operators allowed to use the index: + +```prisma file=schema.prisma +model Example { + id Int @id + value Json + // ^ field type matching the operator class + // ^ operator class ^ index type + + @@index([value(ops: JsonbPathOps)], type: Gin) +} +``` + +This translates to the following SQL commands: + +```sql +CREATE TABLE "Example" ( + id INT PRIMARY KEY, + value JSONB NOT NULL +); + +CREATE INDEX "Example_value_idx" ON "Example" USING GIN (value jsonb_path_ops); +``` + +As part of the `JsonbPathOps` the `@>` operator is handled by the index, speeding up queries such as `value @> '{"foo": 2}'`. + +##### Supported Operator Classes for GIN + +Prisma generally supports operator classes provided by PostgreSQL in versions 10 and later. If the operator class requires the field type to be of a type Prisma does not yet support, using the `raw` function with a string input allows you to use these operator classes without validation. + +The default operator class (marked with ✅) can be omitted from the index definition. + +| Operator class | Allowed field type (native types) | Default | Other | +| -------------- | --------------------------------- | ------- | ----------------------------- | +| `ArrayOps` | Any array | ✅ | Also available in CockroachDB | +| `JsonbOps` | `Json` (`@db.JsonB`) | ✅ | Also available in CockroachDB | +| `JsonbPathOps` | `Json` (`@db.JsonB`) | | | +| `raw("other")` | | | | + +Read more about built-in operator classes in the [official PostgreSQL documentation](https://www.postgresql.org/docs/14/gin-builtin-opclasses.html). + +##### CockroachDB + +GIN and BTree are the only index types supported by CockroachDB. The operator classes marked to work with CockroachDB are the only ones allowed on that database and supported by Prisma. The operator class cannot be defined in the Prisma Schema Language: the `ops` argument is not necessary or allowed on CockroachDB. + +#### Generalized Search Tree (GiST) + +The GiST index type is used for implementing indexing schemes for user-defined types. By default there are not many direct uses for GiST indexes, but for example the B-Tree index type is built using a GiST index. + +As an example, the following model adds a `Gist` index to the `value` field with `InetOps` as the operators that will be using the index: + +```prisma file=schema.prisma +model Example { + id Int @id + value String @db.Inet + // ^ native type matching the operator class + // ^ index type + // ^ operator class + + @@index([value(ops: InetOps)], type: Gist) +} +``` + +This translates to the following SQL commands: + +```sql +CREATE TABLE "Example" ( + id INT PRIMARY KEY, + value INET NOT NULL +); + +CREATE INDEX "Example_value_idx" ON "Example" USING GIST (value inet_ops); +``` + +Queries comparing IP addresses, such as `value > '10.0.0.2'`, will use the index. + +##### Supported Operator Classes for GiST + +Prisma generally supports operator classes provided by PostgreSQL in versions 10 and later. If the operator class requires the field type to be of a type Prisma does not yet support, using the `raw` function with a string input allows you to use these operator classes without validation. + +| Operator class | Allowed field type (allowed native types) | +| -------------- | ----------------------------------------- | +| `InetOps` | `String` (`@db.Inet`) | +| `raw("other")` | | + +Read more about built-in operator classes in the [official PostgreSQL documentation](https://www.postgresql.org/docs/14/gist-builtin-opclasses.html). + +#### Space-Partitioned GiST (SP-GiST) + +The SP-GiST index is a good choice for many different non-balanced data structures. If the query matches the partitioning rule, it can be very fast. + +As with GiST, SP-GiST is important as a building block for user-defined types, allowing implementation of custom search operators directly with the database. + +As an example, the following model adds a `SpGist` index to the `value` field with `TextOps` as the operators using the index: + + +```prisma file=schema.prisma +model Example { + id Int @id + value String + // ^ field type matching the operator class + + @@index([value], type: SpGist) + // ^ index type + // ^ using the default ops: TextOps +} +``` + + +This translates to the following SQL commands: + +```sql +CREATE TABLE "Example" ( + id INT PRIMARY KEY, + value TEXT NOT NULL +); + +CREATE INDEX "Example_value_idx" ON "Example" USING SPGIST (value); +``` + +Queries such as `value LIKE 'something%'` will be sped up by the index. + +##### Supported Operator Classes for SP-GiST + +Prisma generally supports operator classes provided by PostgreSQL in versions 10 and later. If the operator class requires the field type to be of a type Prisma does not yet support, using the `raw` function with a string input allows you to use these operator classes without validation. + +The default operator class (marked with ✅) can be omitted from the index definition. + +| Operator class | Allowed field type (native types) | Default | Supported PostgreSQL versions | +| -------------- | ------------------------------------ | ------- | ----------------------------- | +| `InetOps` | `String` (`@db.Inet`) | ✅ | 10+ | +| `TextOps` | `String` (`@db.Text`, `@db.VarChar`) | ✅ | | +| `raw("other")` | | | | + +Read more about built-in operator classes from [official PostgreSQL documentation](https://www.postgresql.org/docs/14/spgist-builtin-opclasses.html). + +#### Block Range Index (BRIN) + +The BRIN index type is useful if you have lots of data that does not change after it is inserted, such as date and time values. If your data is a good fit for the index, it can store large datasets in a minimal space. + +As an example, the following model adds a `Brin` index to the `value` field with `Int4BloomOps` as the operators that will be using the index: + +```prisma file=schema.prisma +model Example { + id Int @id + value Int + // ^ field type matching the operator class + // ^ operator class ^ index type + + @@index([value(ops: Int4BloomOps)], type: Brin) +} +``` + +This translates to the following SQL commands: + +```sql +CREATE TABLE "Example" ( + id INT PRIMARY KEY, + value INT4 NOT NULL +); + +CREATE INDEX "Example_value_idx" ON "Example" USING BRIN (value int4_bloom_ops); +``` + +Queries like `value = 2` will now use the index, which uses a fraction of the space used by the `BTree` or `Hash` indexes. + +##### Supported Operator Classes for BRIN + +Prisma generally supports operator classes provided by PostgreSQL in versions 10 and later, and some supported operators are only available from PostgreSQL versions 14 and later. If the operator class requires the field type to be of a type Prisma does not yet support, using the `raw` function with a string input allows you to use these operator classes without validation. + +The default operator class (marked with ✅) can be omitted from the index definition. + +| Operator class | Allowed field type (native types) | Default | Supported PostgreSQL versions | +| --------------------------- | ------------------------------------ | ------- | ----------------------------- | +| `BitMinMaxOps` | `String` (`@db.Bit`) | ✅ | | +| `VarBitMinMaxOps` | `String` (`@db.VarBit`) | ✅ | | +| `BpcharBloomOps` | `String` (`@db.Char`) | | 14+ | +| `BpcharMinMaxOps` | `String` (`@db.Char`) | ✅ | | +| `ByteaBloomOps` | `Bytes` (`@db.Bytea`) | | 14+ | +| `ByteaMinMaxOps` | `Bytes` (`@db.Bytea`) | ✅ | | +| `DateBloomOps` | `DateTime` (`@db.Date`) | | 14+ | +| `DateMinMaxOps` | `DateTime` (`@db.Date`) | ✅ | | +| `DateMinMaxMultiOps` | `DateTime` (`@db.Date`) | | 14+ | +| `Float4BloomOps` | `Float` (`@db.Real`) | | 14+ | +| `Float4MinMaxOps` | `Float` (`@db.Real`) | ✅ | | +| `Float4MinMaxMultiOps` | `Float` (`@db.Real`) | | 14+ | +| `Float8BloomOps` | `Float` (`@db.DoublePrecision`) | | 14+ | +| `Float8MinMaxOps` | `Float` (`@db.DoublePrecision`) | ✅ | | +| `Float8MinMaxMultiOps` | `Float` (`@db.DoublePrecision`) | | 14+ | +| `InetInclusionOps` | `String` (`@db.Inet`) | ✅ | 14+ | +| `InetBloomOps` | `String` (`@db.Inet`) | | 14+ | +| `InetMinMaxOps` | `String` (`@db.Inet`) | | | +| `InetMinMaxMultiOps` | `String` (`@db.Inet`) | | 14+ | +| `Int2BloomOps` | `Int` (`@db.SmallInt`) | | 14+ | +| `Int2MinMaxOps` | `Int` (`@db.SmallInt`) | ✅ | | +| `Int2MinMaxMultiOps` | `Int` (`@db.SmallInt`) | | 14+ | +| `Int4BloomOps` | `Int` (`@db.Integer`) | | 14+ | +| `Int4MinMaxOps` | `Int` (`@db.Integer`) | ✅ | | +| `Int4MinMaxMultiOps` | `Int` (`@db.Integer`) | | 14+ | +| `Int8BloomOps` | `BigInt` (`@db.BigInt`) | | 14+ | +| `Int8MinMaxOps` | `BigInt` (`@db.BigInt`) | ✅ | | +| `Int8MinMaxMultiOps` | `BigInt` (`@db.BigInt`) | | 14+ | +| `NumericBloomOps` | `Decimal` (`@db.Decimal`) | | 14+ | +| `NumericMinMaxOps` | `Decimal` (`@db.Decimal`) | ✅ | | +| `NumericMinMaxMultiOps` | `Decimal` (`@db.Decimal`) | | 14+ | +| `OidBloomOps` | `Int` (`@db.Oid`) | | 14+ | +| `OidMinMaxOps` | `Int` (`@db.Oid`) | ✅ | | +| `OidMinMaxMultiOps` | `Int` (`@db.Oid`) | | 14+ | +| `TextBloomOps` | `String` (`@db.Text`, `@db.VarChar`) | | 14+ | +| `TextMinMaxOps` | `String` (`@db.Text`, `@db.VarChar`) | ✅ | | +| `TextMinMaxMultiOps` | `String` (`@db.Text`, `@db.VarChar`) | | 14+ | +| `TimestampBloomOps` | `DateTime` (`@db.Timestamp`) | | 14+ | +| `TimestampMinMaxOps` | `DateTime` (`@db.Timestamp`) | ✅ | | +| `TimestampMinMaxMultiOps` | `DateTime` (`@db.Timestamp`) | | 14+ | +| `TimestampTzBloomOps` | `DateTime` (`@db.Timestamptz`) | | 14+ | +| `TimestampTzMinMaxOps` | `DateTime` (`@db.Timestamptz`) | ✅ | | +| `TimestampTzMinMaxMultiOps` | `DateTime` (`@db.Timestamptz`) | | 14+ | +| `TimeBloomOps` | `DateTime` (`@db.Time`) | | 14+ | +| `TimeMinMaxOps` | `DateTime` (`@db.Time`) | ✅ | | +| `TimeMinMaxMultiOps` | `DateTime` (`@db.Time`) | | 14+ | +| `TimeTzBloomOps` | `DateTime` (`@db.Timetz`) | | 14+ | +| `TimeTzMinMaxOps` | `DateTime` (`@db.Timetz`) | ✅ | | +| `TimeTzMinMaxMultiOps` | `DateTime` (`@db.Timetz`) | | 14+ | +| `UuidBloomOps` | `String` (`@db.Uuid`) | | 14+ | +| `UuidMinMaxOps` | `String` (`@db.Uuid`) | ✅ | | +| `UuidMinMaxMultiOps` | `String` (`@db.Uuid`) | | 14+ | +| `raw("other")` | | | | + +Read more about built-in operator classes in the [official PostgreSQL documentation](https://www.postgresql.org/docs/14/brin-builtin-opclasses.html). + +### Configuring if indexes are clustered or non-clustered with `clustered` (SQL Server) + +The `clustered` argument is available to configure (non)clustered indexes in SQL Server. It can be used on the `@id`, `@@id`, `@unique`, `@@unique` and `@@index` attributes. It is generally available in versions 4.0.0 and later, and available as part of the `extendedIndexes` preview feature in versions 3.13.0 and later. + +As an example, the following model configures the `@id` to be non-clustered (instead of the clustered default): + +```prisma file=schema.prisma +model Example { + id Int @id(clustered: false) + value Int +} +``` + +This translates to the following SQL commands: + +```sql +CREATE TABLE [Example] ( + id INT NOT NULL, + value INT, + CONSTRAINT [Example_pkey] PRIMARY KEY NONCLUSTERED (id) +) +``` + +The default value of `clustered` for each attribute is as follows: + +| Attribute | Value | +| ---------- | ------- | +| `@id` | `true` | +| `@@id` | `true` | +| `@unique` | `false` | +| `@@unique` | `false` | +| `@@index` | `false` | + +A table can have at most one clustered index. + +### Upgrading from previous versions + + + +These index configuration changes can be **breaking changes** when activating the functionality for certain, existing Prisma schemas for existing databases. After enabling the preview features required to use them, run `prisma db pull` to introspect the existing database to update your Prisma schema before using Prisma Migrate again. + + + +A breaking change can occur in the following situations: + +- **Existing sort constraints and indexes:** earlier versions of Prisma will assume that the desired sort order is _ascending_ if no order is specified explicitly. This means that this is a breaking change if you have existing constraints or indexes that are using descending sort order and migrate your database without first specifying this in your data model. +- **Existing length constraints and indexes:** in earlier versions of Prisma, indexes and constraints that were length constrained in MySQL could not be represented in the Prisma schema. Therefore `prisma db pull` was not fetching these and you could not manually specify them. When you ran `prisma db push` or `prisma migrate dev` they were ignored if already present in your database. Since you are now able to specify these, migrate commands will now drop them if they are missing from your data model but present in the database. +- **Existing indexes other than `BTree` (PostgreSQL):** earlier versions of Prisma only supported the default `BTree` index type. Other supported indexes (`Hash`, `Gist`, `Gin`, `SpGist` and `Brin`) need to be added before migrating your database. +- **Existing (non-)clustered indexes (SQL Server):** earlier versions of Prisma did not support configuring an index as clustered or non-clustered. For indexes that do not use the default, these need to be added before migrating your database. + +In each of the cases above unwanted changes to your database can be prevented by properly specifying these properties in your data model where necessary. **The easiest way to do this is to use `prisma db pull` to retrieve any existing constraints or configuration.** Alternatively, you could also add these arguments manually. This should be done before using `prisma db push` or `prisma migrate dev` the first time after the upgrade. + +## Full text indexes (MySQL and MongoDB) + +The `fullTextIndex` preview feature provides support for introspection and migration of full text indexes in MySQL and MongoDB in version 3.6.0 and later. This can be configured using the `@@fulltext` attribute. Existing full text indexes in the database are added to your Prisma schema after introspecting with `db pull`, and new full text indexes added in the Prisma schema are created in the database when using Prisma Migrate. This also prevents validation errors in some database schemas that were not working before. + + + +For now we do not enable the full text search commands in Prisma Client for MongoDB; the progress can be followed in the [MongoDB](https://github.com/prisma/prisma/issues/9413) issue. + + + +### Enabling the `fullTextIndex` preview feature + +To enable the `fullTextIndex` preview feature, add the `fullTextIndex` feature flag to the `generator` block of the `schema.prisma` file: + +```prisma file=schema.prisma +generator client { + provider = "prisma-client-js" + previewFeatures = ["fullTextIndex"] +} +``` + +### Examples + +The following example demonstrates adding a `@@fulltext` index to the `title` and `content` fields of a `Post` model: + +```prisma file=schema.prisma +model Post { + id Int @id + title String @db.VarChar(255) + content String @db.Text + + @@fulltext([title, content]) +} +``` + +On MongoDB, you can use the `@@fulltext` index attribute (via the `fullTextIndex` preview feature) with the `sort` argument to add fields to your full-text index in ascending or descending order. The following example adds a `@@fulltext` index to the `title` and `content` fields of the `Post` model, and sorts the `title` field in descending order: + +```prisma file=schema.prisma +generator js { + provider = "prisma-client-js" + previewFeatures = ["fullTextIndex"] +} + +datasource db { + provider = "mongodb" + url = env("DATABASE_URL") +} + +model Post { + id String @id @map("_id") @db.ObjectId + title String + content String + + @@fulltext([title(sort: Desc), content]) +} +``` + +### Upgrading from previous versions + + + +This can be a **breaking change** when activating the functionality for certain, existing Prisma schemas for existing databases. After enabling the preview features required to use them, run `prisma db pull` to introspect the existing database to update your Prisma schema before using Prisma Migrate again. + + + +Earlier versions of Prisma converted full text indexes using the `@@index` attribute rather than the `@@fulltext` attribute. After enabling the `fullTextIndex` preview feature, run `prisma db pull` to convert these indexes to `@@fulltext` before migrating again with Prisma Migrate. If you do not do this, the existing indexes will be dropped instead and normal indexes will be created in their place. diff --git a/docs/200-orm/100-prisma-schema/20-data-model/40-views.mdx b/docs/200-orm/100-prisma-schema/20-data-model/40-views.mdx new file mode 100644 index 0000000000..7e4719078e --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/40-views.mdx @@ -0,0 +1,371 @@ +--- +title: 'Views' +metaTitle: 'How to include views in your Prisma schema' +metaDescription: 'How to include views in your Prisma schema' +hidePage: false +preview: true +tocDepth: 3 +--- + + + + + +Support for views is currently a very early [Preview](/orm/more/releases#preview) feature. You can add a view to your Prisma schema with the `view` keyword or introspect the views in your database schema with `db pull`. You cannot yet apply views in your schema to your database with Prisma Migrate and `db push` unless the changes are added manually to your migration file using the `--create-only` flag.

For updates on progress with this feature, follow [our GitHub issue](https://github.com/prisma/prisma/issues/17335). + +
+ +Database views allow you to name and store queries. In relational databases, views are [stored SQL queries](https://www.postgresql.org/docs/current/sql-createview.html) that might include columns in multiple tables, or calculated values such as aggregates. In MongoDB, views are queryable objects where the contents are defined by an [aggregation pipeline](https://www.mongodb.com/docs/manual/core/aggregation-pipeline) on other collections. + +The `views` preview feature allows you to represent views in your Prisma schema with the `view` keyword. To use views in Prisma, follow these steps: + +- [Enable the `views` preview feature](#enable-the-views-preview-feature) +- [Create a view in the underlying database](#create-a-view-in-the-underlying-database), either directly or as a [manual addition to a Prisma Migrate migration file](#use-views-with-prisma-migrate-and-db-push), or use an existing view +- [Represent the view in your Prisma schema](#add-views-to-your-prisma-schema) +- [Query the view in Prisma Client](#query-views-in-prisma-client) + +
+ +## Enable the `views` preview feature + +Support for views is currently in an early preview. To enable the `views` preview feature, add the `views` feature flag to the `previewFeatures` field of the `generator` block in your Prisma schema file: + +```prisma file=schema.prisma highlight=3;add +generator client { + provider = "prisma-client-js" + previewFeatures = ["views"] +} +``` + +Please leave feedback about this preview feature in our dedicated [preview feature feedback issue for `views`](https://github.com/prisma/prisma/issues/17335). + +## Create a view in the underlying database + +Currently, you cannot apply views that you define in your Prisma schema to your database with Prisma Migrate and `db push`. Instead, you must first create the view in the underlying database, either manually or [as part of a migration](#use-views-with-prisma-migrate-and-db-push). + +For example, take the following Prisma schema with a `User` model and a related `Profile` model: + + + + +```prisma +model User { + id Int @id @default(autoincrement()) + email String @unique + name String? + profile Profile? +} + +model Profile { + id Int @id @default(autoincrement()) + bio String + user User @relation(fields: [userId], references: [id]) + userId Int @unique +} +``` + + + + +```prisma +model User { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String @unique + name String? + profile Profile? +} + +model Profile { + id String @id @default(auto()) @map("_id") @db.ObjectId + bio String + User User @relation(fields: [userId], references: [id]) + userId String @unique @db.ObjectId +} +``` + + + + +Next, take a `UserInfo` view in the underlying database that combines the `email` and `name` fields from the `User` model and the `bio` field from the `Profile` model. + +For a relational database, the SQL statement to create this view is: + +```sql +CREATE VIEW "UserInfo" AS + SELECT u.id, email, name, bio + FROM "User" u + LEFT JOIN "Profile" p ON u.id = p."userId"; +``` + +For MongoDB, you can [create a view](https://www.mongodb.com/docs/manual/core/views/join-collections-with-view/) with the following command: + +```ts +db.createView('UserInfo', 'User', [ + { + $lookup: { + from: 'Profile', + localField: '_id', + foreignField: 'userId', + as: 'ProfileData', + }, + }, + { + $project: { + _id: 1, + email: 1, + name: 1, + bio: '$ProfileData.bio', + }, + }, + { $unwind: '$bio' }, +]) +``` + +## Use views with Prisma Migrate and `db push` + +If you apply changes to your Prisma schema with Prisma Migrate or `db push`, Prisma does not create or run any SQL related to views. + +To include views in a migration, run `migrate dev --create-only` and then manually add the SQL for views to your migration file. Alternatively, you can create views manually in the database. + +## Add views to your Prisma schema + +To add a view to your Prisma schema, use the `view` keyword. + +You can represent the `UserInfo` view from the example above in your Prisma schema as follows: + + + + + + +```prisma +view UserInfo { + id Int @unique + email String + name String + bio String +} +``` + + + + +```prisma +view UserInfo { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String + name String + bio String +} +``` + + + + + + +### Write by hand + +A `view` block is comprised of two main pieces: + +- The `view` block definition +- The view's field definitions + +These two pieces allow you to define the name of your view in the generated Prisma Client and the columns present in your view's query results. + +#### Define a `view` block + +To define the `UserInfo` view from the example above, begin by using the `view` keyword to define a `view` block in your schema named `UserInfo`: + + +```prisma +view UserInfo { + // Fields +} +``` + + + +#### Define fields + +The properties of a view are called _fields_, which consist of: + +- A field name +- A field type + +The fields of the `UserInfo` example view can be defined as follows: + + + + + +```prisma highlight=2-5;normal +view UserInfo { + id Int @unique + email String + name String + bio String +} +``` + + + + + +```prisma highlight=2-5;normal +view UserInfo { + id String @id @default(auto()) @map("_id") @db.ObjectId + email String + name String + bio String +} +``` + + + + +Each _field_ of a `view` block represents a column in the query results of the view in the underlying database. + +### Use introspection + + + Currently only available for PostgreSQL, MySQL, SQL Server and CockroachDB. + + +If you have an existing view or views defined in your database, [introspection](/orm/prisma-schema/introspection) will automatically generate `view` blocks in your Prisma schema that represent those views. + +Assuming the example `UserInfo` view exists in your underlying database, running the following command will generate a `view` block in your Prisma schema representing that view: + +```terminal copy +npx prisma db pull +``` + +The resulting `view` block will be defined as follows: + + +```prisma +/// The underlying view does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client. +view UserInfo { + id Int? + email String? + name String? + bio String? + + @@ignore +} +``` + +The `view` block is generated initially with a `@@ignore` attribute because [there is no unique identifier defined](#unique-identifier) (which is currently a [limitation](#unique-identifier) of the views preview feature). + + + +Please note for now `db pull` will only introspect views in your schema when using PostgreSQL, MySQL, SQL Server or CockroachDB. Support for this workflow will be extended to other database providers. + + + +#### Adding a unique identifier to an introspected view + +To be able to use the introspected view in Prisma Client, you will need to select and define one or multiple of the fields as the unique identifier. + +In the above view's case, the `id` column refers to a uniquely identifiable field in the underlying `User` table so that field can also be used as the uniquely identifiable field in the `view` block. + +In order to make this `view` block valid you will need to: + +- Remove the _optional_ flag `?` from the `id` field +- Add the `@unique` attribute to the `id` field +- Remove the `@@ignore` attribute +- Remove the comment Prisma generated warning about an invalid view + + +```prisma highlight=4;add|1,3,8,9;delete +/// The underlying view does not contain a valid unique identifier and can therefore currently not be handled by Prisma Client. +view UserInfo { + id Int? + id Int @unique + email String? + name String? + bio String? + + @@ignore +} +``` + +When re-introspecting your database, any custom changes to your view definitions will be preserved. + +#### The `views` directory + +Introspection of a database with one or more existing views will also create a new `views` directory within your `prisma` directory (starting with Prisma version 4.12.0). This directory will contain a subdirectory named after your database's schema which contains a `.sql` file for each view that was introspected in that schema. Each file will be named after an individual view and will contain the query the related view defines. + +For example, after introspecting a database with the default `public` schema using the model used above you will find a `prisma/views/public/UserInfo.sql` file was created with the following contents: + +```sql +SELECT + u.id, + u.email, + u.name, + p.bio +FROM + ( + "User" u + LEFT JOIN "Profile" p ON ((u.id = p."userId")) + ); +``` + +### Limitations + +#### Unique Identifier + +Currently, Prisma treats views in the same way as models. This means that a view needs to have at least one _unique identifier_, which can be represented by any of the following: + +- A unique constraint denoted with [`@unique`](/orm/prisma-schema/data-model/models#defining-a-unique-field) +- A composite unique constraint denoted with [`@@unique`](/orm/prisma-schema/data-model/models#defining-a-unique-field) +- An [`@id`](/orm/prisma-schema/data-model/models#defining-an-id-field) field +- A composite identifier denoted with [`@@id`](/orm/prisma-schema/data-model/models#composite-ids) + +In relational databases, a view's unique identifier can be defined as a `@unique` attribute on one field, or a `@@unique` attribute on multiple fields. When possible, it is preferable to use a `@unique` or `@@unique` constraint over an `@id` or `@@id` field. + +In MongoDB, however, the unique identifier must be an `@id` attribute that maps to the `_id` field in the underlying database with `@map("_id")`. + +In the example above, the `id` field has a `@unique` attribute. If another column in the underlying `User` table had been defined as uniquely identifiable and made available in the view's query results, that column could have been used as the unique identifier instead. + +#### Introspection + +Currently, introspection of views is only available for PostgreSQL, MySQL, SQL Server and CockroachDB. If you are using another database provider, your views must be added manually. + +This is a temporary limitation and support for introspection will be extended to the other supported datasource providers. + +## Query views in Prisma Client + +You can query views in Prisma Client in the same way that you query models. For example, the following query finds all users with a `name` of `'Alice'` in the `UserInfo` view defined above. + +```ts +const userinfo = await prisma.userInfo.findMany({ + where: { + name: 'Alice', + }, +}) +``` + +Currently, Prisma Client allows you to update a view if the underlying database allows it, without any additional validation. + +## Special types of views + +This section describes how to use Prisma with updatable and materialized views in your database. + +### Updatable views + +Some databases support updatable views (e.g. [PostgreSQL](https://www.postgresql.org/docs/current/sql-createview.html#SQL-CREATEVIEW-UPDATABLE-VIEWS), [MySQL](https://dev.mysql.com/doc/refman/8.0/en/view-updatability.html) and [SQL Server](https://learn.microsoft.com/en-us/sql/t-sql/statements/create-view-transact-sql?view=sql-server-ver16#updatable-views)). Updatable views allow you to create, update or delete entries. + +Currently Prisma treats all `view`s as updatable views. If the underlying database supports this functionality for the view, the operation should succeed. If the view is not marked as updatable, the database will return an error, and Prisma Client will then throw this error. + +In the future, Prisma Client might support marking individual views as updatable or not updatable. Please comment on our [`views` feedback issue](https://github.com/prisma/prisma/issues/17335) with your use case. + +### Materialized views + +Some databases support materialized views, e.g. [PostgreSQL](https://www.postgresql.org/docs/current/rules-materializedviews.html), [CockroachDB](https://www.cockroachlabs.com/docs/stable/views.html#materialized-views), [MongoDB](https://www.mongodb.com/docs/manual/core/materialized-views/), and [SQL Server](https://learn.microsoft.com/en-us/sql/relational-databases/views/create-indexed-views?view=sql-server-ver16) (where they're called "indexed views"). + +Materialized views persist the result of the view query for faster access and only update it on demand. + +Currently Prisma has no understanding of materialized views, but when you [manually create a view](#create-a-view-in-the-underlying-database) you can also create a materialized view by using the corresponding command in the underlying database. You can then use Prisma's [raw query functionality](/orm/prisma-client/queries/raw-database-access) to execute the command to refresh the view manually. + +In the future Prisma Client might support marking individual views as materialized and add a Prisma Client method to refresh the materialized view. Please comment on our [`views` feedback issue](https://github.com/prisma/prisma/issues/17335) with your use case. diff --git a/docs/200-orm/100-prisma-schema/20-data-model/50-database-mapping.mdx b/docs/200-orm/100-prisma-schema/20-data-model/50-database-mapping.mdx new file mode 100644 index 0000000000..7b8b6a595f --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/50-database-mapping.mdx @@ -0,0 +1,228 @@ +--- +title: 'Database mapping' +metaTitle: 'Database mapping' +metaDescription: '' +tocDepth: 3 +--- + + + +The [Prisma schema](/orm/prisma-schema) includes mechanisms that allow you to define names of certain database objects. You can: + +- [Map model and field names to different collection/table and field/column names](#mapping-collectiontable-and-fieldcolumn-names) +- [Define constraint and index names](#constraint-and-index-names) + + + + + +## Mapping collection/table and field/column names + +Sometimes the names used to describe entities in your database might not match the names you would prefer in your generated API. Mapping names in the Prisma schema allows you to influence the naming in your Client API without having to change the underlying database names. + +A common approach for naming tables/collections in databases for example is to use plural form and [snake_case](https://en.wikipedia.org/wiki/Snake_case) notation. Prisma on the other hand has recommended model [naming conventions (singular form, PascalCase)](/orm/reference/prisma-schema-reference#naming-conventions) which differ from that. + +`@map` and `@@map` allow you to [tune the shape of your Prisma Client API](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names) by decoupling model and field names from table and column names in the underlying database. + +### Map collection / table names + +As an example, when you [introspect](/orm/prisma-schema/introspection) a database with a table named `comments`, the resulting Prisma model will look like this: + +```prisma +model comments { + // Fields +} +``` + +However, you can still choose `Comment` as the name of the model (e.g. to follow the naming convention) without renaming the underlying `comments` table in the database by using the [`@@map`](/orm/reference/prisma-schema-reference#map-1) attribute: + +```prisma highlight=4;normal +model Comment { + // Fields + + @@map("comments") +} +``` + +With this modified model definition, Prisma automatically maps the `Comment` model to the `comments` table in the underlying database. + +### Map field / column names + +You can also [`@map`](/orm/reference/prisma-schema-reference#map) a column/field name: + +```prisma highlight=2-4;normal +model Comment { + content String @map("comment_text") + email String @map("commenter_email") + type Enum @map("comment_type") + + @@map("comments") +} +``` + +This way the `comment_text` column is not available under `prisma.comment.comment_text` in the Prisma Client API, but can be accessed via `prisma.comment.content`. + +### Map enum names and values + +You can also `@map` an enum value, or `@@map` an enum: + +```prisma highlight=3,5;normal +enum Type { + Blog, + Twitter @map("comment_twitter") + + @@map("comment_source_enum") +} +``` + +## Constraint and index names + +In [2.29.0](https://github.com/prisma/prisma/releases/tag/2.29.0) and later, you can optionally use the `map` argument to define the **underlying constraint and index names** in the Prisma schema for the attributes [`@id`](/orm/reference/prisma-schema-reference#id), [`@@id`](/orm/reference/prisma-schema-reference#id-1), [`@unique`](/orm/reference/prisma-schema-reference#unique), [`@@unique`](/orm/reference/prisma-schema-reference#unique-1), [`@@index`](/orm/reference/prisma-schema-reference#index) and [`@relation`](/orm/reference/prisma-schema-reference#relation). + +When introspecting a database, the `map` argument will _only_ be rendered in the schema if the name differs from Prisma's [default constraint naming convention for indexes and constraints](#prismas-default-naming-conventions-for-indexes-and-constraints). + + + +If you use Prisma Migrate in a version earlier than 2.29.0 and want to maintain your existing constraint and index names after upgrading to a newer version, **do not** immediately run `prisma migrate` or `prisma db push`. This will **change any underlying constraint name that does not follow Prisma's convention**. Follow the [upgrade path that allows you to maintain existing constraint and index names](/orm/more/upgrade-guides/upgrading-versions/upgrading-to-prisma-3/named-constraints#option-1-i-want-to-maintain-my-existing-constraint-and-index-names). + + + +### Use cases for named constraints + +Some use cases for explicitly named constraints include: + +- Company policy +- Conventions of other tools + +#### Prisma's default naming conventions for indexes and constraints + +Prisma naming convention was chosen to align with PostgreSQL since it is deterministic. It also helps to maximize the amount of times where names do not need to be rendered because many databases out there they already align with the convention. + +We always use the database names of entities when generating the default names. So if a model is remapped to a different name in the data model, the default name generation will still take the name of the table in the database as input. The same is true for fields and columns. + +| Entity | Convention | Example | +| ----------------- | --------------------------------- | ------------------------------ | +| Primary Key | \{tablename}\_pkey | `User_pkey` | +| Unique Constraint | \{tablename}\_\{column_names}\_key | `User_firstName_last_Name_key` | +| Non-Unique Index | \{tablename}\_\{column_names}\_idx | `User_age_idx` | +| Foreign Key | \{tablename}\_\{column_names}\_fkey | `User_childName_fkey` | + +Since most databases have a length limit for entity names, the names will be trimmed if necessary to not violate the database limits. We will shorten the part before the `_suffix` as necessary so that the full name is at most the maximum length permitted. + +### Using default constraint names + +When no explicit names are provided via `map` arguments Prisma will assume they follow the default naming convention. + +If you introspect a database the names for indexes and constraints will be added to your schema unless they follow Prisma's naming convention. If they do, the names are not rendered to keep the schema more readable. When you migrate such a schema Prisma will infer the default names and persist them in the database. + +#### Example + +The following schema defines three constraints (`@id`, `@unique`, and `@relation`) and one index (`@@index`) that will + +```prisma highlight=2,8,11,13;normal +model User { + id Int @id @default(autoincrement()) + name String @unique + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + title String + authorName String @default("Anonymous") + author User? @relation(fields: [authorName], references: [name]) + + @@index([title, authorName]) +} +``` + +Since no explicit names are provided via `map` arguments Prisma will assume they follow our default naming convention. + +### Prisma's default naming conventions for indexes and constraints + +If you introspect a database the names for indexes and constraints will be added to your schema unless they follow Prisma's naming convention. If they do, the names are not rendered to keep the schema more readable. When you migrate such a schema Prisma will infer the default names and persist them in the database. + +We chose our naming convention to align with PostgreSQL since it is deterministic and helps us maximize the amount of times where we do not need +to render names because they already align with the convention. + +| Constraint or index | Follows convention | Underlying constraint or index names | +| ---------------------------------- | ------------------ | ------------------------------------ | +| `@id` (on `User` > `id` field) | Yes | `User_pk` | +| `@@index` (on `Post`) | Yes | `Post_title_authorName_idx` | +| `@id` (on `Post` > `id` field) | Yes | `Post_pk` | +| `@relation` (on `Post` > `author`) | Yes | `Post_authorName_fkey` | + +### Using custom constraint / index names + +You can use the `map` argument to define **custom constraint and index names** in the underlying database. + +#### Example + +The following example adds custom names to one `@id` and the `@@index`: + +```prisma highlight=2,13;normal +model User { + id Int @id(map: "Custom_Primary_Key_Constraint_Name") @default(autoincrement()) + name String @unique + posts Post[] +} + +model Post { + id Int @id @default(autoincrement()) + title String + authorName String @default("Anonymous") + author User? @relation(fields: [authorName], references: [name]) + + @@index([title, authorName], map: "My_Custom_Index_Name") +} +``` + +The following table lists the name of each constraint and index in the underlying database: + +| Constraint or index | Follows convention | Underlying constraint or index names | +| ---------------------------------- | ------------------ | ------------------------------------ | +| `@id` (on `User` > `id` field) | No | `Custom_Primary_Key_Constraint_Name` | +| `@@index` (on `Post`) | No | `My_Custom_Index_Name` | +| `@id` (on `Post` > `id` field) | Yes | `Post_pk` | +| `@relation` (on `Post` > `author`) | Yes | `Post_authorName_fkey` | + +### Related: Naming indexes and primary keys for Prisma Client + +Additionally to `map`, the `@@id` and `@@unique` attributes take an optional `name` argument that allows you to customize your Prisma Client API. + +On a model like: + +```prisma +model User { + firstName String + lastName String + + @@id([firstName, lastName]) +} +``` + +the default API for selecting on that primary key uses a generated combination of the fields: + +```ts +const user = await prisma.user.findUnique({ + where: { + firstName_lastName: { + firstName: 'Paul', + lastName: 'Panther', + }, + }, +}) +``` + +Specifying `@@id([firstName, lastName], name: "fullName")` will change the Prisma Client API to this instead: + +```ts highlight=3;edit +const user = await prisma.user.findUnique({ + where: { + fullName: { + firstName: 'Paul', + lastName: 'Panther', + }, + }, +}) +``` diff --git a/docs/200-orm/100-prisma-schema/20-data-model/60-multi-schema.mdx b/docs/200-orm/100-prisma-schema/20-data-model/60-multi-schema.mdx new file mode 100644 index 0000000000..0a4848f1e6 --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/60-multi-schema.mdx @@ -0,0 +1,190 @@ +--- +title: How to use Prisma with multiple database schemas +metaTitle: How to use Prisma with multiple database schemas +metaDescription: How to use Prisma with multiple database schemas +tocDepth: 3 +--- + + + + + +Multiple database schema support is currently available with the PostgreSQL, CockroachDB, and SQL Server connectors. + + + +Many database providers allow you to organize database tables into named groups. You can use this to make the logical structure of the data model easier to understand, or to avoid naming collisions between tables. + +In PostgreSQL, CockroachDB, and SQL Server, these groups are known as schemas. We will refer to them as _database schemas_ to distinguish them from Prisma's own schema file. + +This guide explains how to: + +- include multiple database schemas in your Prisma schema +- apply your schema changes to your database with Prisma Migrate and `db push` +- introspect an existing database with multiple database schemas +- query across multiple database schemas with Prisma Client + + + +## How to enable the `multiSchema` preview feature + +Multi-schema support is currently in preview. To enable the `multiSchema` preview feature, add the `multiSchema` feature flag to the `previewFeatures` field of the `generator` block in your Prisma schema file: + +```prisma file=schema.prisma highlight=3;add +generator client { + provider = "prisma-client-js" + previewFeatures = ["multiSchema"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +## How to include multiple database schemas in your Prisma schema + +To use multiple database schemas in your Prisma schema file, add the names of your database schemas to an array in the `schemas` field, in the `datasource` block. The following example adds a `"base"` and a `"transactional"` schema: + +```prisma file=schema.prisma highlight=9;add +generator client { + provider = "prisma-client-js" + previewFeatures = ["multiSchema"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + schemas = ["base", "transactional"] +} +``` + +You do not need to change your connection string. The `schema` value of your connection string is the default database schema that Prisma Client connects to and uses for raw queries. All other Prisma Client queries use the schema of the model or enum that you are querying. + +To designate that a model or enum belongs to a specific database schema, add the `@@schema` attribute with the name of the database schema as a parameter. In the following example, the `User` model is part of the `"base"` schema, and the `Order` model and `Size` enum are part of the `"transactional"` schema: + +```prisma file=schema.prisma highlight=5,13;add +model User { + id Int @id + orders Order[] + + @@schema("base") +} + +model Order { + id Int @id + user User @relation(fields: [id], references: [id]) + user_id Int + + @@schema("transactional") +} + +enum Size { + Small + Medium + Large + + @@schema("transactional") +} +``` + +### Tables with the same name in different database schemas + +If you have tables with the same name in different database schemas, you will need to map the table names to unique model names in your Prisma schema. This avoids name conflicts when you query models in Prisma Client. + +For example, consider a situation where the `config` table in the `base` database schema has the same name as the `config` table in the `users` database schema. To avoid name conflicts, give the models in your Prisma schema unique names (`BaseConfig` and `UserConfig`) and use the `@@map` attribute to map each model to the corresponding table name: + +```prisma file=schema.prisma +model BaseConfig { + id Int @id + + @@map("config") + @@schema("base") +} + +model UserConfig { + id Int @id + + @@map("config") + @@schema("users") +} +``` + +## How to apply your schema changes with Prisma Migrate and `db push` + +You can use Prisma Migrate or `db push` to apply changes to a Prisma schema with multiple database schemas. + +As an example, add a `Profile` model to the `base` schema of the blog post model above: + +```prisma file=schema.prisma highlight=4,9-16;add +model User { + id Int @id + orders Order[] + profile Profile? + + @@schema("base") +} + +model Profile { + id Int @id @default(autoincrement()) + bio String + user User @relation(fields: [userId], references: [id]) + userId Int @unique + + @@schema("base") +} + +model Order { + id Int @id + user User @relation(fields: [id], references: [id]) + user_id Int + + @@schema("transactional") +} + +enum Size { + Small + Medium + Large + + @@schema("transactional") +} +``` + +You can then apply this schema change to your database. For example, you can use `migrate dev` to create and apply your schema changes as a migration: + +```terminal +npx prisma migrate dev --name add_profile +``` + +Note that if you move a model or enum from one schema to another, Prisma deletes the model or enum from the source schema and creates a new one in the target schema. + +## How to introspect an existing database with multiple database schemas + +You can introspect an existing database that has multiple database schemas in the same way that you introspect a database that has a single database schema, using `db pull`: + +```terminal +npx prisma db pull +``` + +This updates your Prisma schema to match the current state of the database. + +If you have tables with the same name in different database schemas, Prisma shows a validation error pointing out the conflict. To fix this, [rename the introspected models with the `@map` attribute](#tables-with-the-same-name-in-different-database-schemas). + +## How to query across multiple database schemas with Prisma Client + +You can query models in multiple database schemas without any change to your Prisma Client query syntax. For example, the following query finds all orders for a given user, using the Prisma schema above: + +```ts +const orders = await prisma.order.findMany({ + where: { + user: { + id: 1, + }, + }, +}) +``` + +## Learn more about the `multiSchema` preview feature + +To learn more about future plans for the `multiSchema` preview feature, or to give feedback, refer to [our Github issue](https://github.com/prisma/prisma/issues/1122). diff --git a/docs/200-orm/100-prisma-schema/20-data-model/70-unsupported-database-features.mdx b/docs/200-orm/100-prisma-schema/20-data-model/70-unsupported-database-features.mdx new file mode 100644 index 0000000000..8daa975dc6 --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/70-unsupported-database-features.mdx @@ -0,0 +1,99 @@ +--- +title: 'Unsupported database features' +metaDescription: How to support database features that do not have an equivalent syntax in Prisma Schema Language. +tocDepth: 2 +--- + + + +Not all database functions and features of all of Prisma's supported databases have a Prisma Schema Language equivalent. Refer to the [database features matrix](/orm/reference/database-features) for a complete list of supported features. + + + +## Native database functions + +Prisma Schema Language supports several [functions](/orm/reference/prisma-schema-reference#attribute-functions) that you can use to set the default value of a field. The following example uses the Prisma-level `uuid()` function to set the value of the `id` field: + +```prisma +model Post { + id String @id @default(uuid()) +} +``` + +However, you can also use **native database functions** to define default values with [`dbgenerated()`](/orm/reference/prisma-schema-reference#dbgenerated) on relational databases (MongoDB does not have the concept of database-level functions). The following example uses the PostgreSQL `gen_random_uuid()` function to populate the `id` field: + +```prisma +model User { + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid +} +``` + +### When to use a database-level function + +There are two reasons to use a database-level function: + +- There is no equivalent Prisma function (for example, `gen_random_bytes` in PostgreSQL). +- You cannot or do not want to rely on functions such `uuid()` and `cuid()`, which are only implemented at Prisma level and do not manifest in the database. + + Consider the following example, which sets the `id` field to a randomly generated `UUID`: + + ```prisma + model Post { + id String @id @default(uuid()) + } + ``` + + The UUID is _only_ generated if you use Prisma Client to create the `Post`. If you create posts in any other way, such as a bulk import script written in plain SQL, you must generate the UUID yourself. + +### Enable PostgreSQL extensions for native database functions + +In PostgreSQL, some native database functions are part of an extension. For example, in PostgreSQL versions 12.13 and earlier, the `gen_random_uuid()` function is part of the [`pgcrypto`](https://www.postgresql.org/docs/10/pgcrypto.html) extension. + +To use a PostgreSQL extension, you must first install it on the file system of your database server. + +In Prisma versions 4.5.0 and later, you can then activate the extension by declaring it in your Prisma schema with the [`postgresqlExtensions` preview feature](/orm/prisma-schema/postgresql-extensions): + +```prisma file=schema.prisma highlight=3,9;add +generator client { + provider = "prisma-client-js" + previewFeatures = ["postgresqlExtensions"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + extensions = [pgcrypto] +} +``` + +In earlier versions of Prisma, you must instead run a SQL command to activate the extension: + +```sql +CREATE EXTENSION IF NOT EXISTS pgcrypto; +``` + +If your project uses [Prisma Migrate](/orm/prisma-migrate), you must [install the extension as part of a migration](/orm/prisma-migrate/workflows/native-database-functions) . Do not install the extension manually, because it is also required by the shadow database. + +Prisma Migrate returns the following error if the extension is not available: + +``` +Migration `20210221102106_failed_migration` failed to apply cleanly to a temporary database. +Database error: Error querying the database: db error: ERROR: type "pgcrypto" does not exist +``` + +## Unsupported field types + +Some database types of relational databases, such as `polygon` or `geometry`, do not have a Prisma Schema Language equivalent. Use the [`Unsupported`](/orm/reference/prisma-schema-reference#unsupported) field type to represent the field in your Prisma schema: + +```prisma highlight=3;normal +model Star { + id Int @id @default(autoincrement()) + position Unsupported("circle")? @default(dbgenerated("'<(10,4),11>'::circle")) +} +``` + +The `prisma migrate dev` and `prisma db push` command will both create a `position` field of type `circle` in the database. However, the field will not be available in the generated Prisma Client. + +## Unsupported database features + +Some features, like SQL views or partial indexes, cannot be represented in the Prisma schema. If your project uses [Prisma Migrate](/orm/prisma-migrate), you must [include unsupported features as part of a migration](/orm/prisma-migrate/workflows/unsupported-database-features) . diff --git a/docs/200-orm/100-prisma-schema/20-data-model/80-table-inheritance.mdx b/docs/200-orm/100-prisma-schema/20-data-model/80-table-inheritance.mdx new file mode 100644 index 0000000000..32170bbb82 --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/80-table-inheritance.mdx @@ -0,0 +1,328 @@ +--- +title: Table inheritance +metaTitle: Table inheritance +metaDescription: Learn about the use cases and patterns for table inheritance in Prisma ORM that enable usage of union types or polymorphic structures in your application. +tocDepth: 3 +--- + +## Overview + +Table inheritance is a software design pattern that allows the modeling of hierarchical relationships between entities. Using table inheritance on the database level can also enable the use of union types in your JavaScript/TypeScript application or share a set of common properties across multiple models. + +This page introduces two approaches to table inheritance and explains how to use them with Prisma ORM. + +A common use case for table inheritance may be when an application needs to display a _feed_ of some kind of _content activities_. A content activity in this case, could be a _video_ or an _article_. As an example, let's assume that: + +- a content activity always has an `id` and a `url` +- in addition to `id` and a `url`, a video also has a `duration` (modeled as an `Int`) +- in addition to `id` and a `url`, an article also a `body` (modeled as a `String`) + +### Use cases + +#### Union types + +Union types are a convenient feature in TypeScript that allows developers to work more flexibly with the types in their data model. + +In TypeScript, union types look as follows: + +```ts no-copy +type Activity = Video | Article +``` + +While [it's currently not possible to model union types in the Prisma schema](https://github.com/prisma/prisma/issues/2505), you can use them with Prisma ORM by using table inheritance and some additional type definitions. + +#### Sharing properties across multiple models + +If you have a use case where multiple models should share a particular set of properties, you can model this using table inheritance as well. + +For example, if both the `Video` and `Article` models from above should have a shared `title` property, you can achieve this with table inheritance as well. + +### Example + +In a simple Prisma schema, this would look as follows. Note that we're adding a `User` model as well to illustrate how this can work with relations: + +```prisma file=schema.prisma +model Video { + id Int @id + url String @unique + duration Int + + user User @relation(fields: [userId], references: [id]) + userId Int +} + +model Article { + id Int @id + url String @unique + body String + + user User @relation(fields: [userId], references: [id]) + userId Int +} + +model User { + id Int @id + name String + videos Video[] + articles Article[] +} +``` + +Let's investigate how we can model this using table inheritance. + +### Single-table vs multi-table inheritance + +Here is a quick comparison of the two main approaches for table inheritance: + +- **Single-table inheritance (STI)**: Uses a _single_ table to store data of _all_ the different entities in one location. In our example, there'd be a single `Activity` table with the `id`, `url` as well as te `duration` and `body` column. It also uses a `type` column that indicates whether an _activity_ is a _video_ or an _article_. +- **Multi-table inheritance (MTI)**: Uses _multiple_ tables to store the data of the different entities separately and links them via foreign keys. In our example, there'd be an `Activity` table with the `id`, `url` column, a `Video` table with the `duration` and a foreign key to `Activity` as well as an `Article` table with the `body` and a foreign key. There is also a `type` column that acts as a discriminator and indicates whether an _activity_ is a _video_ or an _article_. Note that multi-table inheritance is also sometimes called _delegated types_. + +You can learn about the tradeoffs of both approaches [below](#tradeoffs-between-sti-and-mti). + +## Single-table inheritance (STI) + +### Data model + +Using STI, the above scenario can be modeled as follows: + +```prisma +model Activity { + id Int @id // shared + url String @unique // shared + duration Int? // video-only + body String? // article-only + type ActivityType // discriminator + + owner User @relation(fields: [ownerId], references: [id]) + ownerId Int +} + +enum ActivityType { + Video + Article +} + +model User { + id Int @id @default(autoincrement()) + name String? + activities Activity[] +} +``` + +A few things to note: + +- The model-specific properties `duration` and `body` must be marked as optional (i.e., with `?`). That's because a record in the `Activity` table that represents a _video_ must not have a value for `body`. Conversely, an `Activity` record representing an _article_ can never have a `duration` set. +- The `type` discriminator column indicates whether each record represents a _video_ or an _article_ item. + +### Prisma Client API + +Due to how Prisma ORM generates types and an API for the data model, there will only to be an `Activity` type and the CRUD queries that belong to it (`create`, `update`, `delete`, ...) available to you. + +#### Querying for videos and articles + +You can now query for only _videos_ or _articles_ by filtering on the `type` column. For example: + +```ts +// Query all videos +const videos = await prisma.activity.findMany({ + where: { type: 'Video' }, +}) + +// Query all articles +const articles = await prisma.activity.findMany({ + where: { type: 'Article' }, +}) +``` + +#### Defining dedicated types + +When querying for videos and articles like that, TypeScript will still only recognize an `Activity` type. That can be annoying because even the objects in `videos` will have (optional) `body` and the objects in `articles` will have (optional) `duration` fields. + +If you want to have type safety for these objects, you need to define dedicated types for them. You can do this, for example, by using the generated `Activity` type and the TypeScript `Omit` utility type to remove properties from it: + +```ts +import { Activity } from '@prisma/client' + +type Video = Omit +type Article = Omit +``` + +In addition, it will be helpful to convert mapping functions that convert an object of type `Activity` to the `Video` and `Article` types: + +```ts +function activityToVideo(activity: Activity): Video { + return { + url: activity.url, + duration: activity.duration ? activity.duration : -1, + ownerId: activity.ownerId, + } as Video +} + +function activityToArticle(activity: Activity): Article { + return { + url: activity.url, + body: activity.body ? activity.body : '', + ownerId: activity.ownerId, + } as Article +} +``` + +Now you can turn an `Activity` into a more specific type (i.e., `Article` or `Video`) after querying: + +```ts +const videoActivities = await prisma.activity.findMany({ + where: { type: 'Video' }, +}) +const videos: Video[] = videoActivities.map(activityToVideo) +``` + +#### Using Prisma Client extension for a more convenient API + +You can use [Prisma Client extensions](/orm/prisma-client/client-extensions) to create a more convenient API for the table structures in your database. + +## Multi-table inheritance (MTI) + +### Data model + +Using MTI, the above scenario can be modeled as follows: + +```prisma +model Activity { + id Int @id @default(autoincrement()) + url String // shared + type ActivityType // discriminator + + video Video? // model-specific 1-1 relation + article Article? // model-specific 1-1 relation + + owner User @relation(fields: [ownerId], references: [id]) + ownerId Int +} + +model Video { + id Int @id @default(autoincrement()) + duration Int // video-only + activityId Int @unique + activity Activity @relation(fields: [activityId], references: [id]) +} + +model Article { + id Int @id @default(autoincrement()) + body String // article-only + activityId Int @unique + activity Activity @relation(fields: [activityId], references: [id]) +} + +enum ActivityType { + Video + Article +} + +model User { + id Int @id @default(autoincrement()) + name String? + activities Activity[] +} +``` + +A few things to note: + +- A 1-1 relation is needed between `Activity` and `Video` as well as `Activity` and `Article`. This relationship is used to fetch the specific information about a record when needed. +- The model-specific properties `duration` and `body` can be made _required_ with this approach. +- The `type` discriminator column indicates whether each record represents a _video_ or an _article_ item. + +### Prisma Client API + +This time, you can query for videos and articles directly via the `video` and `article` properties on your `PrismaClient`` instance. + +#### Querying for videos and articles + +If you want to access the shared properties, you need to use `include` to fetch the relation to `Activity`. + +```ts +// Query all videos +const videos = await prisma.video.findMany({ + include: { activity: true }, +}) + +// Query all articles +const articles = await prisma.article.findMany({ + include: { activity: true }, +}) +``` + +Depending on your needs, you may also query the other way around by filtering on the `type` discriminator column: + +```ts +// Query all articles +const videoActivities = await prisma.activity.findMany({ + where: { type: 'Video' } + include: { video: true } +}) +``` + +#### Defining dedicated types + +While a bit more convenient in terms of types compare STI, the generated typings likely still won't fit all your needs. + +Here's how you can define `Video` and `Article` types by combining Prisma ORM's generated `Video` and `Article` types with the `Activity` type. These combinations create a new type with the desired properties. Note that we're also omitting the `type` discriminator column because that's not needed anymore on the specific types: + +```ts +import { + Video as VideoDB, + Article as ArticleDB, + Activity, +} from '@prisma/client' + +type Video = Omit +type Article = Omit +``` + +Once these types are defined, you can define mapping functions to convert the types you receive from the queries above into the desired `Video` and `Article` types. Here's the example for the `Video` type: + +```ts +import { Prisma, Video as VideoDB, Activity } from '@prisma/client' + +type Video = Omit + +// Create `VideoWithActivity` typings for the objects returned above +const videoWithActivity = Prisma.validator()({ + include: { activity: true }, +}) +type VideoWithActivity = Prisma.VideoGetPayload + +// Map to `Video` type +function toVideo(a: VideoWithActivity): Video { + return { + id: a.id, + url: a.activity.url, + ownerId: a.activity.ownerId, + duration: a.duration, + activityId: a.activity.id, + } +} +``` + +Now you can take the objects returned by the queries above and transform them using `toVideo`: + +```ts +const videoWithActivities = await prisma.video.findMany({ + include: { activity: true }, +}) +const videos: Video[] = videoWithActivities.map(toVideo) +``` + +#### Using Prisma Client extension for a more convenient API + +You can use [Prisma Client extensions](/orm/prisma-client/client-extensions) to create a more convenient API for the table structures in your database. + +## Tradeoffs between STI and MTI + +- **Data model**: The data model may feel more clean with MTI. With STI, you may end up with very wide rows and lots of columns that have `NULL` values in them. +- **Performance**: MTI may come with a performance cost because you need to join the parent and child tables to access _all_ properties relevant for a model. +- **Typings**: With Prisma ORM, MTI gives you proper typings for the specific models (i.e., `Article` and `Video` in the examples above) already, while you need to create these from scratch with STI. +- **IDs / Primary keys**: With MTI, records have two IDs (one on the parent and another on the child table) that may not match. You need to consider this in the business logic of your application. + +## Third-party solutions + +While Prisma ORM doesn't natively support union types or polymorphism at the moment, you can check out [Zenstack](https://github.com/zenstackhq/zenstack) which is adding an extra layer of features to the Prisma schema. Read their [blog post about polymorphism in Prisma ORM](https://zenstack.dev/blog/polymorphism) to learn more. diff --git a/docs/200-orm/100-prisma-schema/20-data-model/index.mdx b/docs/200-orm/100-prisma-schema/20-data-model/index.mdx new file mode 100644 index 0000000000..38f3f46a38 --- /dev/null +++ b/docs/200-orm/100-prisma-schema/20-data-model/index.mdx @@ -0,0 +1,10 @@ +--- +title: 'Data model' +metaTitle: 'Data model' +metaDescription: 'Learn everything you need about the Prisma data model.' +toc: false +--- + +## In this section + + diff --git a/docs/200-orm/100-prisma-schema/50-introspection.mdx b/docs/200-orm/100-prisma-schema/50-introspection.mdx new file mode 100644 index 0000000000..a974fb8934 --- /dev/null +++ b/docs/200-orm/100-prisma-schema/50-introspection.mdx @@ -0,0 +1,398 @@ +--- +title: 'Introspection' +metaTitle: 'What is introspection? (Reference)' +metaDescription: 'Learn how you can introspect your database to generate a data model into your Prisma schema.' +--- + + + +You can introspect your database using the Prisma CLI in order to generate the [data model](/orm/prisma-schema/data-model) in your [Prisma schema](/orm/prisma-schema). The data model is needed to [generate Prisma Client](/orm/prisma-client/setup-and-configuration/custom-model-and-field-names). + +Introspection is often used to generate an _initial_ version of the data model when [adding Prisma to an existing project](/getting-started/setup-prisma/add-to-existing-project/relational-databases-typescript-postgresql). + +However, it can also be [used _repeatedly_ in an application](#introspection-with-an-existing-schema). This is most commonly the case when you're _not_ using [Prisma Migrate](/orm/prisma-migrate) but perform schema migrations using plain SQL or another migration tool. In that case, you also need to re-introspect your database and subsequently re-generate Prisma Client to reflect the schema changes in your [Prisma Client API](/orm/prisma-client). + + + +## What does introspection do? + +Introspection has one main function: Populate your Prisma schema with a data model that reflects the current database schema. + +![Introspect your database with Prisma](/img/prisma-db-pull-generate-schema.png) + +Here's an overview of its main functions on SQL databases: + +- Map _tables_ in the database to [Prisma models](/orm/prisma-schema/data-model/models#defining-models) +- Map _columns_ in the database to the [fields](/orm/prisma-schema/data-model/models#defining-fields) of Prisma models +- Map _indexes_ in the database to [indexes](/orm/prisma-schema/data-model/models#defining-an-index) in the Prisma schema +- Map _database constraints_ to [attributes](/orm/prisma-schema/data-model/models#defining-attributes) or [type modifiers](/orm/prisma-schema/data-model/models#type-modifiers) in the Prisma schema + +On MongoDB, the main functions are the following: + +- Map _collections_ in the database to [Prisma models](/orm/prisma-schema/data-model/models#defining-models) +- Map _documents_ in the collections to the [fields](/orm/prisma-schema/data-model/models#defining-fields) of Prisma models by _sampling them_ +- Map _indexes_ in the database to [indexes](/orm/prisma-schema/data-model/models#defining-an-index) in the Prisma schema, if the collection contains at least one document contains a field included in the index + +You can learn more about how Prisma maps types from the database to the types available in the Prisma schema on the respective docs page for the data source connector: + +- [PostgreSQL](/orm/overview/databases/postgresql#type-mapping-between-postgresql-and-prisma-schema) +- [MySQL](/orm/overview/databases/mysql#type-mapping-between-mysql-to-prisma-schema) +- [SQLite](/orm/overview/databases/sqlite#type-mapping-between-sqlite-to-prisma-schema) +- [Microsoft SQL Server](/orm/overview/databases/sql-server#type-mapping-between-microsoft-sql-server-to-prisma-schema) + +## The `prisma db pull` command + +You can introspect your database using the `prisma db pull` command of the [Prisma CLI](/orm/tools/prisma-cli#installation). Note that using this command requires your [connection URL](/orm/reference/connection-urls) to be set in your Prisma schema [`datasource`](/orm/prisma-schema/overview/data-sources). + +Here's a high-level overview of the steps that `prisma db pull` performs internally: + +1. Read the [connection URL](/orm/reference/connection-urls) from the `datasource` configuration in the Prisma schema +1. Open a connection to the database +1. Introspect database schema (i.e. read tables, columns and other structures ...) +1. Transform database schema into Prisma data model +1. Write data model into Prisma schema or [update existing schema](#introspection-with-an-existing-schema) + +## Introspection workflow + +The typical workflow for projects that are not using Prisma Migrate, but instead use plain SQL or another migration tool looks as follows: + +1. Change the database schema (e.g. using plain SQL) +1. Run `prisma db pull` to update the Prisma schema +1. Run `prisma generate` to update Prisma Client +1. Use the updated Prisma Client in your application + +Note that as you evolve the application, [this process can be repeated for an indefinite number of times](#introspection-with-an-existing-schema). + +![Introspect workflow](/img/prisma-evolve-app-workflow.png) + +## Rules and conventions + +Prisma employs a number of conventions for translating a database schema into a Prisma data model: + +### Model, field and enum names + +Field, model and enum names (identifiers) must start with a letter and generally must only contain underscores, letters and digits. You can find the naming rules and conventions for each of these identifiers on the respective docs page: + +- [Naming models](/orm/reference/prisma-schema-reference#naming-conventions) +- [Naming fields](/orm/reference/prisma-schema-reference#naming-conventions-1) +- [Naming enums](/orm/reference/prisma-schema-reference#naming-conventions-2) + +The general rule for identifiers is that they need to adhere to this regular expression: + +``` +[A-Za-z][A-Za-z0-9_]* +``` + +#### Sanitization of invalid characters + +**Invalid characters** are being sanitized during introspection: + +- If they appear _before_ a letter in an identifier, they get dropped. +- If they appear _after_ the first letter, they get replaced by an underscore. + +Additionally, the transformed name is mapped to the database using `@map` or `@@map` to retain the original name. + +Consider the following table as an example: + +```sql +CREATE TABLE "42User" ( + _id SERIAL PRIMARY KEY, + _name VARCHAR(255), + two$two INTEGER +); +``` + +Because the leading `42` in the table name as well as the leading underscores and the `$` on the columns are forbidden in Prisma, introspection adds the `@map` and `@@map` attributes so that these names adhere to Prisma's naming conventions: + +```prisma +model User { + id Int @id @default(autoincrement()) @map("_id") + name String? @map("_name") + two_two Int? @map("two$two") + + @@map("42User") +} +``` + +#### Duplicate Identifiers after Sanitization + +If sanitization results in duplicate identifiers, no immediate error handling is in place. You get the error later and can manually fix it. + +Consider the case of the following two tables: + +```sql +CREATE TABLE "42User" ( + _id SERIAL PRIMARY KEY +); + +CREATE TABLE "24User" ( + _id SERIAL PRIMARY KEY +); +``` + +This would result in the following introspection result: + +```prisma +model User { + id Int @id @default(autoincrement()) @map("_id") + + @@map("42User") +} + +model User { + id Int @id @default(autoincrement()) @map("_id") + + @@map("24User") +} +``` + +Trying to generate your Prisma Client with `prisma generate` you would get the following error: + + + + + +``` +npx prisma generate +``` + + + + + +```code no-copy +$ npx prisma generate +Error: Schema parsing +error: The model "User" cannot be defined because a model with that name already exists. + --> schema.prisma:17 + | +16 | } +17 | model User { + | + +Validation Error Count: 1 +``` + + + + + +In this case, you must manually change the name of one of the two generated `User` models because duplicate model names are not allowed in the Prisma schema. + +### Order of fields + +Introspection lists model fields in the same order as the corresponding table columns in the database. + +### Order of attributes + +Introspection adds attributes in the following order (this order is mirrored by `prisma format`): + +- Block level: `@@id`, `@@unique`, `@@index`, `@@map` +- Field level : `@id`, `@unique`, `@default`, `@updatedAt`, `@map`, `@relation` + +### Relations + +Prisma translates foreign keys that are defined on your database tables into [relations](/orm/prisma-schema/data-model/relations). + +#### One-to-one relations + +Prisma adds a [one-to-one](/orm/prisma-schema/data-model/relations/one-to-one-relations) relation to your data model when the foreign key on a table has a `UNIQUE` constraint, e.g.: + +```sql +CREATE TABLE "User" ( + id SERIAL PRIMARY KEY +); +CREATE TABLE "Profile" ( + id SERIAL PRIMARY KEY, + "user" integer NOT NULL UNIQUE, + FOREIGN KEY ("user") REFERENCES "User"(id) +); +``` + +Prisma translates this into the following data model: + +```prisma +model User { + id Int @id @default(autoincrement()) + Profile Profile? +} + +model Profile { + id Int @id @default(autoincrement()) + user Int @unique + User User @relation(fields: [user], references: [id]) +} +``` + +#### One-to-many relations + +By default, Prisma adds a [one-to-many](/orm/prisma-schema/data-model/relations/one-to-many-relations) relation to your data model for a foreign key it finds in your database schema: + +```sql +CREATE TABLE "User" ( + id SERIAL PRIMARY KEY +); +CREATE TABLE "Post" ( + id SERIAL PRIMARY KEY, + "author" integer NOT NULL, + FOREIGN KEY ("author") REFERENCES "User"(id) +); +``` + +These tables are transformed into the following models: + +```prisma +model User { + id Int @id @default(autoincrement()) + Post Post[] +} + +model Post { + id Int @id @default(autoincrement()) + author Int + User User @relation(fields: [author], references: [id]) +} +``` + +#### Many-to-many relations + +[Many-to-many](/orm/prisma-schema/data-model/relations/many-to-many-relations) relations are commonly represented as [relation tables](/orm/prisma-schema/data-model/relations/many-to-many-relations#relation-tables) in relational databases. + +Prisma supports two ways for defining many-to-many relations in the Prisma schema: + +- [Implicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#implicit-many-to-many-relations) (Prisma manages the relation table under the hood) +- [Explicit many-to-many relations](/orm/prisma-schema/data-model/relations/many-to-many-relations#explicit-many-to-many-relations) (the relation table is present as a [model](/orm/prisma-schema/data-model/models#defining-models)) + +_Implicit_ many-to-many relations are recognized if they adhere to Prisma's [conventions for relation tables](/orm/prisma-schema/data-model/relations/many-to-many-relations#conventions-for-relation-tables-in-implicit-m-n-relations). Otherwise the relation table is rendered in the Prisma schema as a model (therefore making it an _explicit_ many-to-many relation). + +This topic is covered extensively on the docs page about [Relations](/orm/prisma-schema/data-model/relations). + +#### Disambiguating relations + +Prisma generally omits the `name` argument on the [`@relation`](/orm/prisma-schema/data-model/relations#the-relation-attribute) attribute if it's not needed. Consider the `User` ↔ `Post` example from the previous section. The `@relation` attribute only has the `references` argument, `name` is omitted because it's not needed in this case: + +```prisma +model Post { + id Int @id @default(autoincrement()) + author Int + User User @relation(fields: [author], references: [id]) +} +``` + +It would be needed if there were _two_ foreign keys defined on the `Post` table: + +```sql +CREATE TABLE "User" ( + id SERIAL PRIMARY KEY +); +CREATE TABLE "Post" ( + id SERIAL PRIMARY KEY, + "author" integer NOT NULL, + "favoritedBy" INTEGER, + FOREIGN KEY ("author") REFERENCES "User"(id), + FOREIGN KEY ("favoritedBy") REFERENCES "User"(id) +); +``` + +In this case, Prisma needs to [disambiguate the relation](/orm/prisma-schema/data-model/relations#disambiguating-relations) using a dedicated relation name: + +```prisma +model Post { + id Int @id @default(autoincrement()) + author Int + favoritedBy Int? + User_Post_authorToUser User @relation("Post_authorToUser", fields: [author], references: [id]) + User_Post_favoritedByToUser User? @relation("Post_favoritedByToUser", fields: [favoritedBy], references: [id]) +} + +model User { + id Int @id @default(autoincrement()) + Post_Post_authorToUser Post[] @relation("Post_authorToUser") + Post_Post_favoritedByToUser Post[] @relation("Post_favoritedByToUser") +} +``` + +Note that you can rename the [Prisma-level](/orm/prisma-schema/data-model/relations#relation-fields) relation field to anything you like so that it looks friendlier in the generated Prisma Client API. + +## Introspection with an existing schema + +Running `prisma db pull` for relational databases with an existing schema file merges manual changes made to the schema, with changes made in the database. (This functionality has been added for the first time with version 2.6.0.) For MongoDB, Introspection for now is meant to be done only once for the initial data model. Running it repeatedly will lead to loss of custom changes, as the ones listed below. + +Introspection for relational databases maintains the following manual changes: + +- Order of `model` blocks +- Order of `enum` blocks +- Comments +- `@map` and `@@map` attributes +- `@updatedAt` +- `@default(cuid())` (`cuid()` is a Prisma-level function) +- `@default(uuid())` (`uuid()` is a Prisma-level function) +- Custom `@relation` names + +> **Note**: Only relations between models on the database level will be picked up. This means that there **must be a foreign key set**. + +The following properties of the schema are determined by the database: + +- Order of fields within `model` blocks +- Order of values within `enum` blocks + +> **Note**: All `enum` blocks are listed below `model` blocks. + +### Force overwrite + +To overwrite manual changes, and generate a schema based solely on the introspected database and ignore any existing schema file, add the `--force` flag to the `db pull` command: + +```terminal +npx prisma db pull --force +``` + +Use cases include: + +- You want to start from scratch with a schema generated from the underlying database +- You have an invalid schema and must use `--force` to make introspection succeed + +## Introspecting only a subset of your database schema + +Introspecting only a subset of your database schema is [not yet officially supported](https://github.com/prisma/prisma/issues/807) by Prisma. + +However, you can achieve this by creating a new database user that only has access to the tables which you'd like to see represented in your Prisma schema, and then perform the introspection using that user. The introspection will then only include the tables the new user has access to. + +If your goal is to exclude certain models from the [Prisma Client generation](/orm/prisma-client/setup-and-configuration/generating-prisma-client), you can add the [`@@ignore` attribute](/orm/reference/prisma-schema-reference#ignore-1) to the model definition in your Prisma schema. Ignored models are excluded from the generated Prisma Client. + +## Introspection warnings for unsupported features + +The Prisma Schema Language (PSL) can express a majority of the database features of the [target databases](/orm/reference/supported-databases) Prisma supports. However, there are features and functionality the Prisma Schema Language still needs to express. + +For these features, the Prisma CLI will surface detect usage of the feature in your database and return a warning. The Prisma CLI will also add a comment in the models and fields the features are in use in the Prisma schema. The warnings will also contain a workaround suggestion. + +The `prisma db pull` command will surface the following unsupported features: + +- From version [4.13.0](https://github.com/prisma/prisma/releases/tag/4.13.0): + - [Partitioned tables](https://github.com/prisma/prisma/issues/1708) + - [PostgreSQL Row Level Security](https://github.com/prisma/prisma/issues/12735) + - [Index sort order, `NULLS FIRST` / `NULLS LAST`](https://github.com/prisma/prisma/issues/15466) + - [CockroachDB row-level TTL](https://github.com/prisma/prisma/issues/13982) + - [Comments](https://github.com/prisma/prisma/issues/8703) + - [PostgreSQL deferred constraints](https://github.com/prisma/prisma/issues/8807) +- From version [4.14.0](https://github.com/prisma/prisma/releases/tag/4.14.0): + - [Check Constraints](https://github.com/prisma/prisma/issues/3388) (MySQL + PostgreSQL) + - [Exclusion Constraints](https://github.com/prisma/prisma/issues/17514) + - [MongoDB $jsonSchema](https://github.com/prisma/prisma/issues/8135) +- From version [4.16.0](https://github.com/prisma/prisma/releases/tag/4.16.0): + - [Expression indexes](https://github.com/prisma/prisma/issues/2504) + +You can find the list of features we intend to support on [GitHub (labeled with `topic:database-functionality`)](https://github.com/prisma/prisma/issues?q=is%3Aopen+label%3A%22topic%3A+database-functionality%22+label%3Ateam%2Fschema+sort%3Aupdated-desc+). + +### Workaround for introspection warnings for unsupported features + +If you are using a relational database and either one of the above features listed in the previous section: + +1. Create a draft migration: + ```terminal + npx prisma migrate dev --create-only + ``` +2. Add the SQL that adds the feature surfaced in the warnings. +3. Apply the draft migration to your database: + ```terminal + npx prisma migrate dev + ``` diff --git a/docs/200-orm/100-prisma-schema/80-postgresql-extensions.mdx b/docs/200-orm/100-prisma-schema/80-postgresql-extensions.mdx new file mode 100644 index 0000000000..bb035178bf --- /dev/null +++ b/docs/200-orm/100-prisma-schema/80-postgresql-extensions.mdx @@ -0,0 +1,116 @@ +--- +title: 'PostgreSQL extensions' +metaTitle: 'How to represent PostgreSQL extensions in your Prisma schema' +metaDescription: 'How to represent PostgreSQL extensions in your Prisma scheme, introspect extensions in your database, and apply changes to extensions with Prisma Migrate' +preview: true +tocDepth: 3 +--- + + + +This page introduces PostgreSQL extensions and describes how to represent extensions in your Prisma schema, how to introspect existing extensions in your database, and how to apply changes to your extensions to your database with Prisma Migrate. + + + +Support for declaring PostgreSQL extensions in your schema is available in preview for the PostgreSQL connector only in Prisma versions 4.5.0 and later. + + + + + +## What are PostgreSQL extensions? + +PostgreSQL allows you to extend your database functionality by installing and activating packages known as _extensions_. For example, the `citext` extension adds a case-insensitive string data type. Some extensions, such as `citext`, are supplied directly by PostgreSQL, while other extensions are developed externally. For more information on extensions, see [the PostgreSQL documentation](https://www.postgresql.org/docs/current/sql-createextension.html). + +To use an extension, it must first be _installed_ on the local file system of your database server. You then need to _activate_ the extension, which runs a script file that adds the new functionality. + + + +Note that PostgreSQL's documentation uses the term 'install' to refer to what we call activating an extension. We have used separate terms here to make it clear that these are two different steps. + + + +Prisma's `postgresqlExtensions` preview feature allows you to represent PostgreSQL extensions in your Prisma schema. Note that specific extensions may add functionality that is not currently supported by Prisma. For example, an extension may add a type or index that is not supported by Prisma. This functionality must be implemented on a case-by-case basis and is not provided by this preview feature. + +## How to enable the `postgresqlExtensions` preview feature + +Representing PostgreSQL extensions in your Prisma schema is currently a preview feature. To enable the `postgresqlExtensions` preview feature, you will need to add the `postgresqlExtensions` feature flag to the `previewFeatures` field of the `generator` block in your Prisma schema file: + +```prisma file=schema.prisma highlight=3;add +generator client { + provider = "prisma-client-js" + previewFeatures = ["postgresqlExtensions"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} +``` + +## How to represent PostgreSQL extensions in your Prisma schema + +To represent PostgreSQL extensions in your Prisma schema, add the `extensions` field to the `datasource` block of your `schema.prisma` file with an array of the extensions that you require. For example, the following schema lists the `hstore`, `pg_trgm` and `postgis` extensions: + +```prisma file=schema.prisma +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + extensions = [hstore(schema: "myHstoreSchema"), pg_trgm, postgis(version: "2.1")] +} +``` + +Each extension name in the Prisma schema can take the following optional arguments: + +- `schema`: the name of the schema in which to activate the extension's objects. If this argument is not specified, the current default object creation schema is used. +- `version`: the version of the extension to activate. If this argument is not specified, the value given in the extension's control file is used. +- `map`: the database name of the extension. If this argument is not specified, the name of the extension in the Prisma schema must match the database name. + +In the example above, the `hstore` extension uses the `myHstoreSchema` schema, and the `postgis` extension is activated with version 2.1 of the extension. + +The `map` argument is useful when the PostgreSQL extension that you want to activate has a name that is not a valid identifier in the Prisma schema. For example, the `uuid-ossp` PostgreSQL extension name is an invalid identifier because it contains a hyphen. In the following example, the extension is mapped to the valid name `uuidOssp` in the Prisma schema: + +```prisma file=schema.prisma +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + extensions = [uuidOssp(map: "uuid-ossp")] +} +``` + +## How to introspect PostgreSQL extensions + +To [introspect](/orm/prisma-schema/introspection) PostgreSQL extensions currently activated in your database and add relevant extensions to your Prisma schema, run `npx prisma db pull`. + +Many PostgreSQL extensions are not relevant to the Prisma schema. For example, some extensions are intended for database administration tasks that do not change the schema. If all these extensions were included, the list of extensions would be very long. To avoid this, Prisma maintains an allowlist of known relevant extensions. The current allowlist is the following: + +- [`citext`](https://www.postgresql.org/docs/current/citext.html): provides a case-insensitive character string type, `citext` +- [`pgcrypto`](https://www.postgresql.org/docs/current/pgcrypto.html): provides cryptographic functions, like `gen_random_uuid()`, to generate universally unique identifiers (UUIDs v4) +- [`uuid-ossp`](https://www.postgresql.org/docs/current/uuid-ossp.html): provides functions, like `uuid_generate_v4()`, to generate universally unique identifiers (UUIDs v4) +- [`postgis`](https://postgis.net/): adds GIS (Geographic Information Systems) support + +**Note**: Since PostgreSQL v13, `gen_random_uuid()` can be used without an extension to generate universally unique identifiers (UUIDs v4). + +Extensions are introspected as follows: + +- The first time you introspect, all database extensions that are on the allowlist are added to your Prisma schema +- When you re-introspect, the behavior depends on whether the extension is on the allowlist or not. + - Extensions on the allowlist: + - are **added** to your Prisma schema if they are in the database but not in the Prisma schema + - are **kept** in your Prisma schema if they are in the Prisma schema and in the database + - are **removed** from your Prisma schema if they are in the Prisma schema but not the database + - Extensions not on the allowlist: + - are **kept** in your Prisma schema if they are in the Prisma schema and in the database + - are **removed** from your Prisma schema if they are in the Prisma schema but not the database + +The `version` argument will not be added to the Prisma schema when you introspect. + +## How to migrate PostgreSQL extensions + +You can update your list of PostgreSQL extensions in your Prisma schema and apply the changes to your database with [Prisma Migrate](/orm/prisma-migrate). + +This works in a similar way to migration of other elements of your Prisma schema, such as models or fields. However, there are the following differences: + +- If you remove an extension from your schema but it is still activated on your database, Prisma Migrate will not deactivate it from the database. +- If you add a new extension to your schema, it will only be activated if it does not already exist in the database, because the extension may already have been created manually. +- If you remove the `version` or `schema` arguments from the extension definition, it has no effect to the extensions in the database in the following migrations. diff --git a/docs/200-orm/100-prisma-schema/index.mdx b/docs/200-orm/100-prisma-schema/index.mdx new file mode 100644 index 0000000000..4ab105016c --- /dev/null +++ b/docs/200-orm/100-prisma-schema/index.mdx @@ -0,0 +1,11 @@ +--- +title: 'Prisma schema' +metaTitle: 'Prisma schema' +metaDescription: 'Learn everything you need to know about the Prisma schema.' +staticLink: true +toc: false +--- + +## In this section + + diff --git a/docs/200-orm/100-prisma-schema/prisma-schema/relations-intro.png b/docs/200-orm/100-prisma-schema/prisma-schema/relations-intro.png new file mode 100644 index 0000000000000000000000000000000000000000..47bb895580ea3e96bbbd7919d5b3ea192f9c0266 GIT binary patch literal 36481 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 literal 0 HcmV?d00001 diff --git a/docs/200-orm/100-prisma-schema/prisma-schema/sample-database.png b/docs/200-orm/100-prisma-schema/prisma-schema/sample-database.png new file mode 100644 index 0000000000000000000000000000000000000000..9aef1eb52409b66436a266720666ba58ff034cda GIT binary patch literal 171134 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�%z=MK9vLZB+A3%ho^V(mWJe< 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/={RE+Oahr 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

oZ?iwpPYiBjPm(`7&H0i?{4XVT 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 literal 0 HcmV?d00001 diff --git a/docs/200-orm/100-prisma-schema/20-data-model/20-relations/quick-fix-index.png b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/quick-fix-index.png new file mode 100644 index 0000000000000000000000000000000000000000..c82ed1a7ace6c5095ba3178343a82ebce9c500a3 GIT binary patch literal 27929 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 literal 0 HcmV?d00001 diff --git a/docs/200-orm/100-prisma-schema/20-data-model/20-relations/quick-fix-index.snagx b/docs/200-orm/100-prisma-schema/20-data-model/20-relations/quick-fix-index.snagx new file mode 100644 index 0000000000000000000000000000000000000000..c8ab225559a319efa24778ca90d14347d008d91d GIT binary patch literal 99541 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

SiX@^hpfHnJY*!e`UqDaXjxQ70 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 literal 0 HcmV?d00001 diff --git a/docs/200-orm/050-overview/500-databases/images/drivers/qe-query-execution-flow.png b/docs/200-orm/050-overview/500-databases/images/drivers/qe-query-execution-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..aca500b4feca68e6496eb26c95caf2d0a12d21c8 GIT binary patch literal 88110 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�#_#1N zJ$;wN-m;XZZqJ(f_dL7wP1nsOLuTZn$mzlO`ZdP1ccGlQc1wDk(DI#|ee{Ghrr-1{ zZi8`ZauD~xz}u`FNy!f{xQ!SG?fy;snEBX`i?~EH;d}}rD`)#0#qzTCRr#J0_ALc0 zye_21>mIPw5P$IZ6MC+K&L(VpK*(D&)9wHp6XWtlYwNXnMTbpNm(Gez0TY^%qt@u@ zWl-OF_d?M1@j2H;N3bYHM+4LYR+Kh z2!rk1G5c@)Exhy23Hw|Bt*+6!n|^Wv!i4z^GYtooPk*F`9^H2AcdW~#NQ?%n7`}?! zfW;xx*B;>8V3WQTa=>M)YrdU4OjH6Dw{@LbKX{z1@xnrhPMhyJRHfmPof}I@SGdE~h#z^$!$ouh+ z`~S$=a$|1i?MV6kc;96`ec$ZI-uFU3nVMV@yZu;cr~GwGvD-xn&!}aXfXe2T>G+*I zF3SeXk9o2`HGit=iJOfrIUGBed^o7Wb%AmWF5y(-Zd57+*L=o!D)aCE)T)*?A98YzB)0z`-4Vv;OHpj3zgGbSj@B8?OGtrRW za-XcQ2|j^ou_O200Ed5ue%SyV`E&ybNvyo$z%Lp!gj@eY$S+&l$f2Pg=F%1i6i`%< zhhW2nD8W~2CSj`&Gmi~k3VZc= zEi3enz*(k_L&%5Ku&2Z=_*|jm4%5fTC*RQaz0rvBnqOyRsHMdTF2pv>x}_!=Fjo$D zrneQXucV%)l+zBf4PvowKSZYDVy8OF;#R8X@3$S+N@vZrN6xj!cK^uLXBkZ2{TnE3(P zp69}-Tl?`|&dbg%j~2`0jl_Tn;fp3eGtUeAdZG(n?i01nanBah%Qqu++(kxwXuiwe z(gp@&W>a8Tjoh3ooTO`7^Zl4~~8ztuXhE(k=>eEN1UhefRM*dq;bO zm|Aqra@0okMby^*LSr7l!^apG$SwIXd5HS2%Q|xVFP_W2vm(oH2!ewO=mVVlg9>j3 z^K;vpqqZ*wLLA~)6a(k&bA}+Bx@?tg%K^=GMPil zd)kCT4T0|~Iif&ay5Y|=Hypti`42T`;v9`u_P1RUz47Brfb}8uzK)y-@bWUqD+fhx zfet7YCt~vKT0fa%#fJD!#)e?(D(9`LP9fywlsvCfcud9N9B6JsVGsBCDnqMPNL@(x5JR8H-|NNZasi_Lvb zh_xY;!xJ}y@rG2%d&gEMrn+e3w+5->!M({s>vY^k#eF=A&ByrKMLx2HwZ7g)qCZ7b zuxro|;_*d=^frMyE z@vInQh;%E(MXU2tAM2w8(aOLr&{ovy3@R@hpOKRIsT#@Q2S?-8OUw>7wC^%E@w;6- zizxMV(IKzM6gv_HnHIh-Gl+-PsU^(<;5_lHnk_i&J7j7*hMtX@^BxMLZ;koz$6||i zdu}2CT%d3HXU6P>nUAOu#--A&K*ii-uNz`OmC|S8D3_;gdJLFQ$Bxl*DsJ*4PR$ta zH$l)$ zLk&H|zAUdt?~z_w*uSuDk0Y1u#F1Usl=}(k;>)>(O#AD`BVrsjJKvd8h#3V4b0z!I zD*}TGtF%z@PwKCDV*ap{Tey*)9oQ;vhL)5!i!L3~?{F&#nyXuZ_wde$jGl)|U2XZbcbcyXPZFTnq*|^?jP;zTE%!B^?5VT-+(d0N zK7)Y!nO#%yrJSyBrtlm_yOpp8`f%j6$9d^ZRn*)%7zYqrnn69CQ=NXaH~INu0BPNh z;k>t{D`d}`#q#^mBsCpI?d%Fs2$+C1bdK|UJmJlKe87Yr$zv_{ZWZfpwJ;ZWl7Ua3 zvF0+lyC}oYr2iM6C7Cu#qY0lK3j(8rICoKb&(aIq#k$s6m&YaN45Gv`1HbcbPqL0b zosn%;n6vZumd5r*j+Ha94u)tEYE&sPH%{=K>f2IoX2OCzw|$OarRVKC^da>hycZrX z)H)+2%fRtL(@c9GboG{6DBQFI+45EaH@fxOzDRh^c<1&>KH7P1T67r{S(;=c1J@DX z_65jYX*+AFyd`ge;Rf|#_7;;tx!!5%dh6Wg*2;&D#!VZMsOpm=UxyTNGHI8_==d%;y zZrk&1Oy&JNWq-#`QEh=V#`7aHBpja*l{8)~0`2uV5}w&l@6X(`4_{k@c_Q4bG<*!c zxyxCRFrUY5{Eph%5lLqMNMO#NRvtyub-0N_Eb%UKgEXfZvPRYnkCA!c0fWc1|9w}8 zPV?fUBV`)}bW%ZZ0zn@J8zzq-O%gvV?-aU|Mpxd&g)U@O7@@HHlv(6D2-(5cNy3Hg)fKC15@m zodUiKc%12(=$XI?>03F(@0A6$+Zs3azxr5Zjokd)0*a#Wi3Vg7#TMbpZyBHqf%|tL zs630IT(MV`g1wIM9DgzjOs-rI`uD@|Gup(;C`egl4ACY0DK+%26+#XMARYSJW`C%( z5!hsv?AmJ+w6zetQ0#;10MQx4?c)7^KW`0FdonPZUIiLOZj%rlFtTF9PC*`ipU@b! zKGKrwRYTiQNjNp32 z=`zmdr;-!1sm+tS9>F=g&lH<(*PnZ8E!L!!%*$EcYd|0UaA8^50oG7k)f`Hv)CDfE z9)&_DNBpgwPff2L2papD9V8#{jCs4n)oMyB@H&LA;wT?7()y!5yz{^N*t-x-@#EwB zMDo88WP!v+EBWN>I&nP}mB9&ssK5$!(GNE}(bd`b6KMMH1XYR#?=~6S?laq_fQeDt zEs1><0w8)DDvub~wpXe~kzSLY;9^NXVy-SQ5Qw&}oun!c{R_JF%kh+Rd~J85*^``| z`6tsw>F;y$Dg-wlWYH`%2Sz+-OC;REcp4ZuKWeitQGVZckE(y_;i*vY@gV$fP?HuV!vGOWja^)Bffp7Y(qqgzHfM(_dCzE1?ozo}oOluI00cyD zRAVLRv=A}CQC6k=@8x>_O<|CL0*^m!Mz{SN^cOf~HJGff^fk}5k)w5vW2xU3tmqbK z`L_0C1>)$df>HU7t}ZF08LV(R-mMLVL#liDjqVCCF8SSu zhOQQ>m9>bOdm>`h-2Nv5JQWo-(P=weKg@z&AR+F{lf#yk4Q&B)uA_JK1X{#jU#G~- zG3AvTgF9`J2v5Dz8{qcx5+*kRpRidA9bc^VzyUX5S&}pH8Skh83Y@=o_a5>%Tl{Gh z7`2Ftu*BpUm|$2k-igGNHv6>=D1P43fRyD0CA;qAz5ON#rVS4NG|UQ4CXSBjpRt_# zDgMDkrvOLhPyq&dg>bDcQt+_8RBlT~o3 zL?}MmMOxUbX-}n2<{}BCU1O_9oa5>ysk3rqvV|9xlwB=c$c+Au-26;hEtfQNE{T!J zk7ZegGmvg`6xKqf&T(nKdQPk@qhcY~iCp{e51ppO_zn$-I5g#>{OFzWl2*;2Qk&Id zKi{xJhGOXZ@f+?9Z19Lz${)B?2S<0}WfVNQBI+DsBQgw~0*t}oZnu{Dp$oSrc4VHN zO%ooyn{J4s1RUq%6Rmy=k$7%_L-E_e(Vz+&M2bkSaoe{YnJK(^zNm-h6fZfHXObY$ zK;^B}U<)xsQ7|P~E9>8CawZm__>SK@MmbIS;+@ir`~m$8!yo#;Ehn8mJKO3#_j+Z| zitM^#v|L=gyYg?JK@oV_2BdV&GtDeXwz6Oco)1Ss03PtrM`7-D)O@sxtMN~P%|wiB zBrA1i?n}0KMcY^9+)Umnze_}au-_VCa*^oD;n(I%Ac6J2IYW!*<&XumoR42bXa0_D zJAu%JF$0CS&?ZsD868iY>H7s>!Cz+wcBR;)8ya{k_Q|e1Yuxp7U%}_;lOQFDut$|b zk}RWm(YxKqZzPnk+&{$rE+uc?!aYb3^5azteD|n$#i^aC8Bihfz?sQ@_U=CZ-ckUG zb-j*yJ##R3e$`p`>P*jrMK?PV%Qb*3I)N9BI8?$aE26d@m@!mJ|AujB-559j69juxR>=M2^~iMSQB_|IEKDe{pTBOW=&4r66yRqj*Fb3+$JQF-%-Qr)3nPDBlGG_ZmhX=YNI=J>@l6aE);?c+I2 zP46}*1jK5_RRMyt`)@gEZ@dqQ0=-tLU(#C5%Jh?&?xgcpFvj+9`DmL zp>Nqoe5@33iBTd!3~LZhzCTi!A55~{e6U-==#%?);El@*p(5d2e=d`oHqHw2(jfS{ zMQNjg{5RvPRKrxcoN=+v5^=elTbHw8I$7KE^zqz0M`GsHviW?^-(SBLES?WZXh0CV zJAaA~nm96)htMWDITo~>rJKpb^G;EBLzEziweDh>rNfM+muKI)FzghXJcu|DGSaYI z&N>yQ;Q8tU_P=8+4(_8(1UI^lF`RW5x@h0ISrd-#KWy2U%DWa_F#CjFvHmTGpv$rk zAZt&+iSZT&ytL2Q_TzUePwhOSVBMu@%V{s=h%i$7@!=DL9_#&HSk2S{cu&9TBA<4G z&Z3iDA>5ohdBV+$0hR2-&T)=Iyk=y={x||3Vq=$c90n2s>4$JAMzEmoZtm01FNQOU z1u-*mk--fY1$43d-;Gggx37Dx-Qu#r#fnIjeicHWDS45+YJZ^mFW*{OeNy0rbW6Zl z8B?c$;Vzvd|9M_BTI#>;*!8*rw3eDOJP|+LyA#%G#t@BcL$2&E6%e{00 z1u2PDAbk-Y9WxWZlw#;~Ho*`J^|=G@XQeszDB2UJKbCDg9wU;ss0>!@^T9a@=6Lor zrcbJMAx7=zBKIF`)a`7qQmzioELA{w>gd+LOz1Q6-Vfd$4teKBHbYneBH7cuk;C=4 z@j}*S%fmw)B*hA!x?Vz=ose$jyW)2WXzk+mNh$}YsjmiRPSJm`v+uK6lEP$fq z$qRQOR&rbEb-pkI6Y)x5PfN&I8ik?REx8NevOTfHMUEKsxb0pvIIuW<^xEA7qF@ZX z47iJq^cgF3ClWlcs8FKx&iB%dO>4{KXpsGZ@biS>%-jvuE31OKbT~NXo)|gpW>d_KqlJHtBru+azF24)NZy3Y^Y^TwVhr_=p$*q+ZJn0R#*?m|1&t=NAX zNSP&HLcMZwUg0orjy<^!E^sa}uCmn=&~RdPS89bX)G2?u4e)+(P!I+31B^XAa>gea0=v5bxse$>n^8g!3G}utG3rfiyXA3zlfA z{B`rWS}m}W-X(1P-Pr5?aa%LK{jJbt$km^J`&x3*UfVE4-lWJ0h1&C&tdngfH_>pS zCHS(S&+$PiRWiqiOQ@BsJWPa}yfGom(#_|-!yJa*{juILu{wWO=N^&ZXh0|3ty?K? z!7KPqz-wM%DSBV;%?*E%pSH4ZEeAi!@C0qLou@sD&d;W+IvVsur$WSuaZ< zkSxZqRqI9?hETn~ZSzlbSGHi?*NZntpEro)t^M#d^0+suS;}}vesvf zJ^I)W$mBc>u|6bu_B#BBv6uGE3F`$@n1;Nskr&!O#W#Ex%2MA<2ffk@s%=~kNR$oo zqn|!C|65imAHBBgc4drxr$_#_CXYK|#gaB5sNQ@oLs}vWJ}&is;0bBJMMdsmV)oyoT{S^7a>s_=%N0 z;LX?f*FePR=y^fXgHn|Bga*I$AJrC_&AVVBV-?rxHkbXY@=M(zE6_PeP-5ZwRkqJ8 zZw~;TBwMX3BWD&)iw_XFz?O`)L+qew#KS@}Zz1qp!g|8J!b?gB`T2WDRUNX)b{$BA zR~}}N8sI?hS%IX7RGSh7c{t!#%jI;+<_w_e*Z81_8v5IfHg(5~pbkU)Lw~z6V)$8( zCc6A>V4fat!FV4-TM`mRZV=Y!{a{h)pK!!I7(|@R7G48DC!YcuS*YZJo#!T9=O_K=e=< z$Ks2oAhWs!Z?UEfS%+OA4$G^Mhg3C)#k1>1sUI?Dgs~TYu9EDQlSi$WGjfk1Hv6n~ zaS*rBCg?(5mscOIO)lSX`fI>fer5YF_qrfsBsk~?7^cl9D-N2EF`o?Q9yI+sQ;A}g z56O;{_8~_~e~68|t@?tt)S+>8^B(uv_XjDs@y>NeCZe)B?()Z%A z>6qfNXHCW0ASSz+WtneDmu#%+?5^5#X}pk|_*xdYXcy~fPw5HGtjY*1iy~LHw#&iP zL9OLv;Bixh4*%_Mn)XiZ43}lyV6s0KQBww~vpE@fxW?J+PIRsgQa`+bmF&?jn%m*! z)xeV-G|iSS+C5VAKrBBi`lBPec?Lm{0Mfa}RgCo#!3_?J@~??>S^z%!Qk!s5_-;d2 zzQ908^2GPmwk~(xNYb}hzRX~@MA^$(k|EFs6;Pt$#Sd<1PqjAS)*E-P8D9UUC=4LIC8Q)5qT zmz4SGV=gKnSo^|`nEW=`#notqeg5`@%7>0OaGR1U!1ZjT1}kwafOoA-`>9{`%U=^`go}2apth`*ob=KWu>WK!h)x^* z1%rI|U=BC{V*XujBFex1>gkL}mf+zoX@vZ-M z4@6VvkKzwuL7)oo%wjg+aqiY8l)LA-!P5(jRm+PBgfRIV+{9CgAm-Tx!Oz&OfN@3v z1yHQ$HzrC0n6XG0_ip@%Y+#_QkOzoo^+8d%tu`d=kX|Jbe%R=gSlWwSoY@Ux_7Kj? zJ-cNr;N__N-&OhSiz>yLbg0e9(vsoann>uMs}>HQudi-gbbG(Tj3&pl-iHIH+OK)( zL-(n_qBd*jCLCFgt}Hj7mo8;Ur|J7{3Z$LkXv3N;=DwC@&oR6OZY#3Y08FWgrEAtM z-WW|cG-5}Tn4ED? zm@@M-*@C9OCBP+ot8PXG!14KUQFaJ6n%WMuONS*359R*r_wPA3sCy=}|DQVM`DLP+ zV6;i`N__r%VruW%xxiq@L=lmoiUJ%3nP zgWt*L1i8RM?{78A0U^+bHW^sHkA}*r71|nOwq^irQjC0o@cb)1j{-$%CPEw$@T((v z@vo#b_;Y*nFTwlfKDtKK1%Y7rR4B^xd@;}lTDSnA4If`sHH5q~Vj$rGJfoiwc|-ya zvH;m@LMcUxD99ThrDAxe?bi}+e#@{E;B&c#16YDp*@n+!rnmm~P0;hh(jwq#12*TJ z4k~8gHIgokG?`hJ;$JTnJ+{`KmwwQa88(Lhf+H8F&1mMHKR8kU(1C+VbXJEpFxH1{ z*p&slk6ol5nkI~tVV-{m)$MTp899cv_6U-I*`L6rw&8*fABP1v}WKUc_3Q8*~UNJ+OPI18(C4Di0xZgArjkLo?k0JI$ zA5{R@Ph<> zl3yyfvA#yu76kwDn54&CkRc#4=2<7i&R?MLH_6oeQKQ6pC$b#}P5*1eXHE+2d=44B zZxwHz=&`Ru`Dpy4Q~-O7Jc2k}ciunL3Q?-~6$xI}NDyBu0SVq+2lw}*s~y0bozBE= z>FNk*mc)RM&K)Qs5_##>R0X(k7z`a&*(hRKs{-l^2_g?Tm#zY2E^HQQ{-{@q2%=Iq zS}U0V@o$dME%rtoL)5fG$s;MNxP!@lsL&LDhOZMbR{>2?)1gCNbCcrh6JGlMGSJ&L!(ku#}y54Yvjg7feLxo#I%N6mFvkF`L> z8n6%ls!s1vWqtT#y>^xzF1E5jv|d}aj-DSB*l^i6)=D;JFQ3Xm#{BzJS$#?b{%acf zfH0iUUkm%bpZo0t=lKJC@YP95UzHnc{`j6u85=xH>NNCM(D}ep^Xg z)QDD(uTT3wEr3}K&$R5)gbEdSXg+z0QvW<$cYW9++B%Tb+{t-d=O-BP+-G~IbB$4x z`!fVB1~Y4F#7)F}NnvVcw2=)g5iSFe|F#~`N08OtZor?tCA(8bLB4E5i+(rB^;TAW zLWo)d+`-)34)`TQYEo#w@|v@Q*9i}G*RakC?31JakA zL)scNoJS^}4a+U|&ww@m8*z;%4>Y;gi_^mG8&gisqSt1_;#aF@SBc090o}Rwb@t)r zvp0;T0(#gGdrm7eWM47-Q!`Kh!N1~2gbdXPm89GopzSKTf$`jTSaD#xkej4|qDa?w? zq>x!IN?R>4*tqVntBY)Ti;6`NFfRu24r`MLLT$4L;ZAk>8BP)PG!I90nQEnf^c(5) zTHWS;c5O8Gt5!7R?%t zgE+A$3YFRvK<^5fa9hiD{yRh(!>%x6k9f7c>G5Rz zz}VD;85@JZAMWKF5#qq5HWIHgT%dVB__MHO{hYAUkoTUI5Srdx%Q;&GyZ4ifVVteN za_!(1C%d-=6%`{Ss-R`{s(ryJO_i^;nht(nvHq94h%?ji`B5D$x4(JsFS>#iQvI1^ z`m?Gn?;`bcZ)uO8-%zxK_LQNR^pf=ZjmlloZ0YIvp$)H}Uh?+?hQ+(;rudbl!xIYx zzvLff-=YV1JKaw1eg&tb1CmZKlQgJ0Kin`Ff>_%zBzaa_2Gx0(mHnjqh5m;klacF! zqfgY*ES&v2-6&*cQxGceDy(edY#LF0^STn*XOAbHi&w7cI3|tM^~}{2eyK>ej)n|s zk=B35Awl_*$Ez*8>4Y{JywF)}&P70vwGM0u$aXD4bQLe$I;Ll}*S(2f?%_=DT$^yW zorcAO;8fm8pz`&4*et^4rOv^}-?m)46jZY>FQ#!zX>S}KZE@aWocbW(pi7fbv^&eV zp#8hb*D~V}&daqib?L8<82M@4Mmcv`-e;0M#aAxYrq^-DHO*CPj=01L2{xMTS$U0_ z=r*!uot_Q9wqw~LJfZb`f$`CKN`s+e^jpZ1D>TLFs8!5u*TZFXkuMHJsq&fk zOT)6Z+Ih48|E~q%2L7nLLS|tX*}!$p*MV?uqW&%y=WPRN#sWts9gHKq$rE;7Ud^^+ zN7}_D&XBYg)^W1X@lZyV60c;PQ`+ppquWoc#eRp{u{I+KMsy3@wk+q`u?@W);MYFc z2^uJTTa44Gn^Z*Q0P^XzRgyZ~r_kjE*Hf5mTM~>|t;3@>IE!0o<*Si=oi+Bp%d7>% z^#ciT*jDnyi&Tyo75uKlZ2|Vv#x=A;<|SPk&cg7Zid6znF5QS{=buVqR}fPM40Qq% zot|H^0q2H|&fLlX)!JF!A6`m^s&m|H{;=~e+%vK%y%^GoCnwjve=6@ea^Th8xrpI^ z8oJ|WvHZ^!c;INCQ$A?{6WPh zvhXr&J*teFy8k%pH2w+qb=Iw4eD^v7P*RXkaP@rm>3R%24m=vkC$CDHTj(9(>y#eD zCfzRDKiX3PH2L998GH+adZM8Q8h1#H{{1%<%4o{VA6!~!U|2J~4C8BB5uT#+S@Oc& zyA1hQp$Jc7#Psj{Q-@n%zzDAu*l)o_LBpL5xe!#(%L{He>^%NE`Jw<9u&SGCL&!rk zf%mkMf~U1gD%M*ZwIK^i6+C^p5c({udf++MC)9)jKJJ4&L>dmLjNx0dvjA*&I5lw{ z2P|Z!&HI{f-0gXN&rH}(tvIgyvi6BoJ?9O_K{XQu2uZ}JZO-Y?XAv;66~bfGHY8X$ zr*82j+hGB?&JMZ79Y+X>8qJ*v%%YGhBsdeIrdVlEmY04S$+`#yHiX1q_u^o;u{Jm| z-rIv_=5-mvji39PP8s<}4UU|y+GEViG5l4$fl_c<+1x}@1T|_f5IPuq^>u)5Tg*y0 z?j>z}#yEi>BP=`K%)dT*ajOmi(?`?)wg}WmpzFj9;rCXZ53F155qNY={9`R+@=GO; zS*j#E|L9jEy6L!wO`b=1m2}L(;(ZVXU~P&7?l_zj_*44h?)q>5#7l^ntK+tUhs~$G zBc2SoG@na!d3qijjRMbqJ$0Sde$$=#JccWx{LIcyx7YlStlNKF{}*sI`^**0zw(Ff z|C}*E#MfC6fz$gkW4y0%;2+ZD^zw<>J+iLCxjdCgUe<}3<|Y1oLlG306`Hwx-RvkI zmHgSb{YYD)tbXXAaKeaJeA>lsD>fV%`Uu_J(ykXXy&lGj8U8sn=W$rO)CCOKUDd5YuLwyDj!`-E9H!&Uo*bDxPHx&xy)d% zHFE;{@dm7YaRjxo)jcSVi}A0k1S7Js+j2=0oc>bVcsN;JP*{@HD08cp4AWfmQl87#7N}U-D!@h894$`w)8m!Z|f(ZKlz;{NMkuR$~YJ#wr zw;FMkUD+C_`)x`6yIW7KH0TP_g?5rtj@?xQx^8Yt=eGGIX!_qe8&X(wTKRBpORHd` zxq>cUs$vj@ej1j*Mh<~jbY@6^H_&v>;Tu&&FT zqq$ZG3q=llkN9iIgMCSWrka85U3l0}i75kF^n8f-qVFUxlGwMQSKd8=?0-2Ybh(Rb% zVPkOI4BYS~XX`8evlcu9^G4zzFnfF(`@ zb(@>CqA&b6!Y>#^`=f^3SJQ~(9iI~*Xlj-x_I9=K$T1Q-^Cr}?6pw0JOR!$6lCOLT z*}-tOF*g?CG^vucrw5^1w1`!ffyXS339i%2IqHlD2{W|Z^f!`Fz0^w^v)EK!m|{~| zoS025lh+2v+Im`IbiJQzQ%0WucQBDVb$DEreERoT>43`S7kRzqV#Z+S~ikITs_cov778V^9$U@@zKh=+~V`D*flm z8FQ|~tC-M zuRLs9Ubo_59b-I5YbD26t~o!hU`hAqPOO$tasw-w&z<7V_VPxto4r^ZkE0?h3y(WC zyZsnx&cc;=qarGG90mhMa!$n&y8da3_hSXutHOKneJCV~FK?ppP5)z+;mh00#Mvrj4}N#BK| z{tqy*dTSOlr_Ws>^#pHxw6*nmNcAaDeO4VTF$X^k*ZKL&lzz^~YESF&e1U;ew}!mW zg@PedgvkIOCtFZjGlnCv6xvwspNqV(Ck6{(gMa|L!fn&5CuiztUK3UEy?K*-;|P~Q z?B?OzZGkxIOpJ~&Ghq(N5f5;`Z4THwio({s@G3h8Go->%&ryzcKlCc3&GiE33ZL_-${JG8Lf^sy+^V_R(_6Da2v$P$&_etUH2W4|h?7BKO;4Cl}QK@3i^z7%?10lGWIT z@f_r`!R8FzY5U3r>X49d{Zx^MsLibym7)vJbGb#V#K=Y9=|M$bSaXm8iz2rVoIyQo zBfIh-yD+2mxFWMc#Q5v?{w@fi|B7`{5HX$vJ-*9uWwnJ>t~iE2^p%^Vbdp&YZ*+eU zdxGgW`-YFLPJeLZ8u^FXR9g}2Tz(uuKadQQ4vv1&M8cV3E%|{eD_XaJ75zOSw#lc> zczkuzmZd*xO@ZP?xrGXrk;GL3X*htKK6H!>%>WR4ZHj%lNQ>Og$RC4My)9r&mM+pZ zI1EKvxdmeD=9>=pbob#jEmlGPFIp>+xX;NFqN=|wE^CDiM?I{)yxn|xZ!CEr{Snts<=D=~?{C+7!&+me z_Ik-8lf@>>Tf*-gu9^6EVknI0YS&EQX0}q0J3Iwdk zCapny>kY(s*yfOI1T*?6lh<=kE%Nkf5?I}(ATK9uvK_fs1ql+FA*Dw9Kh$-9Jm^K7 z{FHhMu^Yn$npG)tqw0r+dJ6Ucn|0-)1H67uUPhsY4w#5DRkWe}2MNThK!++Ygen`} z-Xb7XHY_16EZehlKxRo!&gsADxthaoSJOn|+coyuKwPNG1Psrtwu`e}D={-N=z^?H4!W!%y<+Qv+Yn2RmC(*1@DIlR3t;#r#`@UKkYk*Nj-2iy0ixp6`0K~8 zxV{)ixM+&yXLICkS#R1k2^R$qZsj4U}l?10vCjchkMZX0yumT5C0;J=;o-c=jx49Zb&}#f8ffUt>d(MgKXQH;O*bU-RUS-}zDYyKY1KJA`NXK^t(uXr)~PY~AUZ`n=k5 z&%Xc#>y)!&_g~sPz3BU<>wER!Q9u0%BqW>x-0k24bJ?f(jvj>{jb7EI*KNukb8cSEpBqY@RVg=& zh7p?!TagR%BW+rd(@}nX(GvIl`e41BRRW{}3Lru<5_lTpxE1eQ^gr{@p%5Z}5vh7M zI%ty);}$N&jbCG`!o96V;Nhqcn)j*^%2SbBF%sqZh8t*+1i*)Zi=%jrl_*u4Qm1`a z@`Ny=v+#QPYAUXfw*8gqe@kSW{2u|RVqn4OXu;q4?G)$U54Y440b~i*TC36GvCRf( z8<~9O+bj)JySTph%B`s`5^Ccp6dMzJ^hIna@NvdSs!;z5yS_5i4U^ZT6TQL*`dq)XSr3fXTeP?F_!K(<3<35ICg*sYspZz(Lk=Vim^#51hTZc6n z{r|)FMk5^}k_Mt6f}()bz`{n#fy6*mP*gAoiESvQh!`LkFhmjQ63MYqqJWgrF+w^v zV!>EEXMR54>w2yye$Vg!=O1zGW;^$}PrT3j{R-%&xt|zK6(JB3WFkcoK0=foLi%mm zCFVI!;k1vwVq1C0ZxDVXZ$*im>8T%eYDt?ff6#HjQ|sWIA?(I|RSEe)@#5*e&0uc> zZrUM0z<$`r(_!x`dH2fNi@BDXyNAm++20-(x)G=;id3}FrvE))Y z!B!VI+iPz)S|8Z5&E{r?@rQlZ8JBwg$O0(FLHkCb!ry)U9l7*0U)GdRofDM8PT26OY5Up&c9DBqhtbO(g5yx(Ze7WqRJE8T2liiOu&9 zHdO6a>Ki;5Z?#VHEU2fqxX~wu0i{T1K?uDHSwLt+>>*957tj4m*3}m>J`0I-Z<~RV5L?+ z6Y1mer|yv6czw4XtKLEHCg=1P178iXlrnf!YonWl;=R}P?mdsL=}wqES9!?irSn2) z?DCAE>p|6suzt&!Xb)W0rhbodDA?MGC~>T3L2u!wM7`>(siX0a)2q%UYX^fp(ikm) zxMC9jPCTVQy#IRZ-jUglUPr7JZ1mIWPcF=M+-|t<9e-!GKC`I)f!0@#;kPPXc~Qlx z2NW+!yy4e5aLn_Gt^R_gY}zal*wu~(d8h7ovdWE3rtVRO8xWJJ`Hvn7fkPTdCOi>y zLY#!W1;V^1aVV-n6;A-(*KrTwaRR3CRG065Jnf7bx7d-=p34fhLpuTBwdy3!ZT;7c z98e;&B_L$i#u#krNi~p#dY{iSR|3V$GwX+%2@9`Dq(`>vR%{NKL5}oNB$}I@fO(OC zN@te95oi0F)J%DpAB9@rY#hH@Lz3r3yp>h@H|=5Gw%F-lTkLh=7#Q{h%;-VZ1#Sgc z_lD{m^a5(Nwv@PQaP@13HQogjInneaC2h1ULKPFS$@{9;NAL9AA2o``D$!J~mXs#@ z_bwgg&zXE5Yv9uIZShgY%{JHStCFpb_{jF$9sQxkmpNK9vCnTcA2GKM*s`B*K+vq|DN?ncZ`w5+V?Y4vykvG42KceKybIxaICk4r*RlU61%GM zT^%_+ZGG;=t2S8hQ;c#DHXkW8b9)*Zu8BWd*XT^EOaB$(Ui*ERGNxJOJ`$Cp7s!^7 z5cbL+7W~~mW_*i!ExGvejesrPmv+R$1prRdnflEH z(dBG}=44Vn>juNh7G1HTD@onZo)W@T01l50NJ_BfM;8Udf?(>d>lvpA{2a66_834X z*mS!?$Z6dHjX6dIsxp!f>dd8B#}hDr$mB6(!vOiH0rV8L9%dOGc7a0os$80n2y4h^ zbH+|FQ2fBqGMYjTT|F)ky0t-@igYDktUJP|)LiRx7k{AhxF2|=5 z;3qKU@Dpv$5<8~$O^iwn zoMa&EDhhjQMtGvwvzf4Wa#Ru-`n#$1p+Ws;i`CkR50)ew8H)I-1wxW>PY%0hD_r6Q z2eY42;0%IfLy$D!!7_}E9taD=ut9$Nh6*34ofL&`KZhu?lF-m;*r<&XwA5uTl4&&h z8>0N}^}`-|2oCpI3739;Szg=@{T13hV(CG~@F6VXfAFnIAuN!mpmJrHy2<^do5vH? zO)Lz7dXCU;IPvg&0C8_XP@7|kz~{VyT*(U((Bw8_H`Vkx=s2TkV+RZ-4=G<)NzY+y z%iab!3_@oFKET80q#UFQarV-*M2hv#tdKp25BX?hJ`2`rorErI$vN>V5m2nRrSW5b z30Y&A_^20r_tjDVIjw>Rv<^#Kq$ago+R!0WH$Wh5Je%YnP`r}U8+M9E_HiEiMs`>7`$fE-tn4~Kj&P+@Ob>k$M#6*+;go}#?S7^RMyAlXODLfRM z>K!EdBgiSUPK@EKshM&Z42{8NcLK8u7Uv-2)f|DuCVBcz&iR)=SiOkFfaQ((^9*n? zGM1w9@YeRTR|Nrp<=hTlIaGtS3MWb;fpO*ybK2c4hkX^Jfila~-f)kSBw|N@tjCYs zM!g#&cek{Ud>0Gl0=KC2xT?_|2DtIo%HSmZdJyy*4l~56UTv(lyK0sVf&X^D^=M>O zS{||3=02vs@Y4SZI#GY&$l-b!>Dad@Y3A5#rMC28&9+D9J^REChiZLoO%^_Pp}#kT zA4$)kDhp=iF7H405P@LrfC`(QxAtOHxQH@WHR7Lt^y@$IRbL4HgSk-7BRiGUAR*7$ z*Jh#Jff^zF2**|7@t#j*^Qg?Y1)`d%WnW&Qb zkS!+fql>?nqH35XA$!EGnZ>9?^znJ^i-PIf9AHbY;W*N3p3$DDilr7LdOe#QT^({h zRkt^6+OkY!m67d>telJWsqvhATX3Uvsil%HpH+Mtao70kbo}o$Hn0MJMz{BFQ5}>} zm?s1Y3GVpQ>Gh%e`KeHWWW#)zWa|ZU4k@p|puY#Cw5tnxJQ26rb!@N4C zR)RQG;98b|sn| z$wQ62LMvcR?EqtlxM2x=#6q|-uaYSM-4O_y7&&^W;Rv9W3XR?{ z6zB_r&i_`$E`zf*Rp_cc<2 zXPqH-=4Fg9U#3pPhXt+}u1fAi8%pBioyO!}IiCI1#u5lY^ZNYAQ_3qJnkBo#)Jh&~ z4j;K8!KAc*SyJL`Yb({x$o3U@=auwWakF9D=drEJp)=+$etnv_w%T99_in$lWUc?$ za>sq*776ColEczf9wZyntTNaG3Jz{&x3sIV1^mwDxkh-AOD}U!cpqS zG&|_Ox&Z7Nm8ooQ^L@2F{Px^Zq@ zih2HxWLRHqk5`xJjM?>lYnO#w+C}cAHAVDyc(QKJnBU%f-*ec1;p_;=onYHOdRb(4 z{(g`d|5i}N>U^Zc4o68Ge9@^)$v|<5SM{NTK0O5XhFyX9*5L|Q+w zXlTY>Idy#WSVvEca;kV=ZI;A^Fu&~jl4-qmSJ}JtPga-ty5%1DF(umV+sEE)-H}oA zKPT9PdwFTLSa4)D;{q3$O}vb4fouWcrf<$OJ9btADcx-n*G?vD^pdT^5!uXDo@Nz~ zD(9i5%)(*b`;@vvkXLBV=e$^)o2iF^88UJZ57&+XN3svdw4YQvk{NeW@#`gLG zXf4Q32i^_ZDv)Mmx;*;c8ZVnG><@#yhPFZX#qFDdCE8!KjXjpRp@B1qp5A`fZy?$W zh4yQch5XVFn}&dFf|Cto^h70XMvLs1VZ}7=7Kp!0_p=Rq!Wl`%x*)g96w~4Kn)mfI73uiK!&uzTl)M9?=u@%gl zk2tm!`b<3tbzn5F#`r5}{QAhbM@~&P(KLYUfo9E8dW6(--g!rKQo`vp>`R^b-4hSZ zfjMC~=Kio@HcM8UV8GD6y@#7HXRXb>YdeYB2DnNO&0n5bkK4oy+I51O`3jBNIfsy0 zvjmQ4+5|a{*-j+-`j2QqOmX6h?w#g>Q_OSx+?zZHgVf1U@FASPk1+PsOd@IG?j*97 zU^Pa-(1nGt$R&X1x+b~63nACq&&|MsmgvVNYIg%`Iu!M@31-)#qE#%qoXcZ#;Z zZg9RC`m7X6GpXN4xn1N@1?jzj>zSoP2e)rFuK)I0l(_jul*+MdjzW;Z&h4Acn~K-F zH7_s!%D)~c1%D}X3jU4H!uFJKOzE#(YR-~dHzn0nDf6<10V&4!VBeNZY5@pCUI5}dHK`jKN z5K`pbb#NE8iHfq@1FfIJFXX~B`LWL;-m1McyQLO+(8@gJ^-od18-@cmTmZK|n~)x% zO)UGLv*-3+QA1&9Et?|;*@Jb2J91|Xw@B5jEPu7;{AVY7YI`c?@b#_&u=czFI7aSH z1_+WsS-Za(p~L|vNfggBw0-i47SKd#kv_Ms0iFu0u@(`5=GwafI?{EBG1?*sX-(pk z)|Tnho})Mj^M$qgnPsd^I6?J#2-3K+*@y)$2WJ(e4FwTK9Ea{P&X{5N0j>LwwIn3X zbg8}{$$q9%ip2H?U&JDh1NBCM(N8<&u=#O`qR@V&n^&SzDv~!jE+__k@QRXmzKP!j z7@|u>+Qi>fvBCX<&^M(MP}+MB=j)Ksh;-4@Qd4N+_+Ea9cDC;O>2(hEotGu8161r9L0vw9A zT1pKPv(MC=fEl&V<2tUkntJbd-|=TYc*~7IhUkrNCabd4>tFgW-WTt_RZ~F*T1Mp926j*Nq56i!Hg?)~vJcx|*Q&fLOY7rTv!2QS!!WYn<(ef; z+y7g<2r=O*T@}8-wCbO*;W&QaNYjG&Zye%^Rf@4>%t!9;VQuFHGk?M$C>ELJTMPW9 zH!7=E0B2-mzZ(YZID(i)F~)BXwa6W4jP9LDlpF_dVak=sW0?b(mLLbO%J4A_0`6 zL9)UYtuqM*QPT$!IbsDwHyCz%{qwjmNpImFY@=iW02=-?9CrK2%)Qwa2gb_0z95u; z?;>`GDpu*1q=f*K)DQW|yzz*H`<3QF3EIR?xltoYi;$?&o4J56luO(Axs;P10x5ZZm&^Q^~0gq&|$2vu#iSoi4KQF|N@1C}B4x=SVop4$j)S z_M2F+EW*dMH@pmvz6Bp(XnEIBt28w@B4_^bK3srfU_GsAbYWd-Ea@MRbjbti`+Btf z?3ko|)zA{ZJt$7x3YIq867RiwT&wZ()|sH`SsFR za;2X0Ll;0U=CUdDK*mpogV{5@u+yEiwXnTr?kJ6Iis8r*`XeB{-Tx^Fzp1y&g9&&-n z6GjqH0Qd{Ju9t#p@!wQ{82%`Ap`IZ0bgmss@bY|U-cU&+~ZadkO@>0HK8-dKzzkN)ZP@@RZ*wiRl-cLd0k41NdF zB(#L9aOnI>5M&E^YeQ^R?2;Ie68{EEI}JN82Y(0^zSI2iG6Z_|#2OX=o|+ucNH?~8 zEeG9@wCEM`^WJ4nd$R$3zV;cu*5^o7Hc_cLd@mJ4-Y>qjz~O)DND^&8$qorSDG8=b zObNXDZ_}_@kz~8ZibV6cNlnN&fY*G&EPwofiir8N zOC;@&Z;sEWs#3FAT7OJht4t%&xh>Zzfl|#G$xB1zRZ8r?S|EMkxrRIz_1;*VobV-8 zZ_-dH9Hf!jPc!1qt!Fe7B%hMhoYv(%)C9y?K&dIUP;!py)q`Fvl!S49G#3bB?oS$) zf!d!C#;pL+V?2g5IJe$CUt>IrtRqC*cNK_iFu(_HpQ)dq^FSE!`}Yv?=d2%qjgMdj z=yl+uN68)x43{cp`qP~5tBVF`qT2uBFitF|wX5AGW{~rV{r40`849R-HnF|}eYQ~k z8VI{er~4k;{upm71abw^MPmLi_f}Cq#DV&i!>^;TXWvga!Jfg1$5gSM>Mf7IH=!v( zAp(vMKxz9VhL(Q;Ji@P+Rahh;9%YM=8DBPPuB)0N%DnRaV*3b&@ zR;dqx5Eu2{{`neCnxqw#{*pun*&LZkQi&=fGXbMD*=xgj;DCwmAGOZnaK<(<{a&F( z7$qe?0HsIAvD!G2SsGTFv-X1KZ_X- zcYCC|5r=Cl(HD~Uu(E#tFmk@E5h9)|+NN&Q#5}ea;Ka^192j~9&s9%r|K2=&d9~kB zQElU|JTP--!qgq0XZIfNmDPsu+thzTMAbL^P679hS}aiF?KMTVgmGzVhieJF3Tvya zd1)NLD}#tvVuAiI;*<28v4D|2H-ah+ZNb5-FBL%XyP~JRBv)zv+zoA99micD48Hh; z4DtD%OAF>Ry@Zi3So0anrQL;Qq5?x-_?4Cw3o&f03BqeT=JBtSaBlN)aKefxv)itN z{5%k^V2Oia;A>e^qXli~VcBb;vgjgSVq;DfSl&oMZk2GaHaF~B@j;CX><1SC*}sGc zimE{^xvT*n042hcB{#|e!Z=f<8yB=Q6|>(`?b@Uv&|)&1THc5y0*U6|;XpF2U5M*O z1=N+tE7m}11d{V1>~BWMuX)rGytY%UGg-~0sG^k(BS3mN(S?3Y!rjbZ+Qk>t(Drc^ zEBuxZRMm+6cT-Wo;ed=$Dgi=;-II8xjA$$y7}7Baj7m|pfktZo?dGnqw$>&$K4R9g z{$BCor@>I$=p15#?+cWc2i;Usf^V0@mJ6OWgTnR@#g(Dt_i(?M6!?Mw_GkkdB(U87`%w8Jn(J61sm#17->dmDsn21HT zbjLB+vmh7BT`Au~5am@qX`sHzZp0!gmvTl?7dzX(XRvC>k5VmccTI@9U!exN0vl}akstOU`uzC_`pdP$N2<4mGhT~c(JyTD~JKoAU5p7 z6kw-=Ux}qy3xqvSMA>uLN&HxAbE@&p!J;I|F$G=Mv6{2=k^>Vze*O;TSe*Qa!CzJO zpZH9HHz-MZwV`vijan%MP!uKL=aC%CL@2YL&KS>V zacPjN1KeXVe=n=gZZNkRe@T$@z)t{hAAKj#yE^eD2as;qIPza@(I`qSqJ<3RQ)+1sI%^!{7}gy+;(_o= zEs&D4U029qt_p@Fcavh~$kG)nXI`PXS6`xU5ePw)=xhR_DTB33c*D;Db7GlpWWzSQ zX3D+)Bl@NYhqB+gX1ws~pem;%9I=B@@(`gfTyvWwQSSswj!QlF68gN4s+9vZ&pR98 zzh&U6ChLdxULu&e!OFMK!Ho6aQ%3iqqwgQl;D@@S0G+=xRXa--$^8Vb-`xzWf# zIk@ek&$MfwSMI$EN$DODAB-amN8LhtI-nh7^QpVA=(w;B-I11fE%r-M%E?kTE7T2r z=QKiq-F!MjEfU?A@qirp3?Cnf%KI0}WkP9N^7Xo@bpjs>iSo*4U6uEv1?9AyP3$Js zknF>jYEHr|fTcaztP2zqrgB-A0AP1*fczW4Hs@<(IBz0QMKm84XJnj0?(_otj#Vh7 z{oRTZVdab+nmcx8J<&tWg=*Ck=E|6M-f#dwlb6tQCYufGMROSm0-SU(Yb$jHFzFd2 z5=Nw34b*IjBbeT$M~rs3#E^IMGp+a9ca5s#qj)v0;mNvpV&f;e#lt?HwzM#PXFxXl zD_(q1n>c?~_y;hx$}fV_7Co&;QR!08`{YIij=^?&Ic7l(OJkoPXGl*5en4j{{J{N} zFsvdP=p;c4)&K;{id}`yf@;)b<6k-OR=v~2+qb1+K%%GYE;u}BF`}{b=0u;+MWups zb*n%;l7tkL_#6WK#$nk@smXi? zWuYJ;m}+^Cv)Q#g1$oTvjBkjmS*+b_`n4(|)vT?Jd)P7-h~Ad=m9-KF^yC3P^g-gs zXL&0Vh1M{Fu}ubU248)q_n-CXzxxc4CgM0CMm?V3OT+z}Qfl*qnrwc+lIjYHQ0E z#26tI8^VfiHuIyUnhfjIB#y!aN@msB1TXv^0-R$u`-x>fYr{GGgg`R846~SAr8n3W z9DR}QkmgLU^&9Q*lHsI8`nH9(pbhrj(cSkosTTL1j7Dz7Qz>L^T7Kb=--pCrUk09~c_z$U)N zTw$Nf!%`EP##z`2SqBYV>IE%F}=CEnB)e(!=R{)gB6_$Du<}Sx{*r7#; zNkW}5DJ^^JvS_xksKYL;3U+nrXmdu3WFItpV^ov`g1$zugC)RJ<;`HKyGnZrJxXN* z&d+kGujxB!l|Fcv$;!$qR<|IM|geEE(R@n7ExT%@lPX9QyA zQ-#rT{H9c@;>rqp$ZM&pKuE&-3-Hi+d(kW6%6ITL?Dy@+@d{B`=cG1rJyct6e(GBH zXRtyDxgTs@Y08A0c{sbmCcci{(6qBTc0}I204R_y!+=VR^f!26+|5e(P#xevZ-!xk zwhKTYBEDyFT-1m$G8eL;6zKW)uoK?hYHldXG_Ye=$XFq7C=Jmi9dKjo8oV?$`s`_l z!H4QKdN6lz@9P;>o?C<%*TuZQkI>>N4I_P!Bo0UN_`N>|KWPe6 zy^lxcGK_QZrF5tG{AOKIHa}qMxvHQ>eyJW0Tu}V)4Dg8z9Ngb2pXeGS#9;}*V9Vn} zQP>aU%pSh28&0Dm7?SH`Zz7}QuF39$AnK!*9JTn!UwxOlRWjD1yD}(WMxE04v%sDD z4d3wnM%aSbnQ2FmFR5xY=!HOD#bNvF$cw@!5ij9GNZ+Ct>d$wA8&$=ghV^}Sf?f0> zh6)6w3B#^WhQHCySiou-LAK#m9*z#qrO7rjN)A$Q0X)rYB z>+OJeiZ;>S9N(dwdj8={L9Fbww=Q9Be}`@f6#sd+rnu%B4#y1FW=-v@`oT2~oE7jX zEweovV|83+)Z-C>0VvG2v%Qr~(}iK}@>|SjmBiUbl;2MX{5g2(M3Omv#3wT7&-T-V zx1HT?;w)f(Rx>#FvOBgn2Jw?`jcPKLxv3vT*Y+YgkGn}Zy`ShfF|P1GB?&@9sJ8ulUDf9H&#NRi zxps$!O1Q`Gxx5gz{>_K#ExRF?^FXpWT@|Z;3pyFO*S=vqiYJD&ALhtsq0N6~>nT|3 zURatn3~aAWKnv}dp{*)*r+{M!RBXV(>=fw};@jav=%kXqhglK*Xw-hp-+OoMPBGYH zbTL98!>mC(;@#K--dIM|!hVup4*d;0*@h#0I)@KbW{7RZ6xWx)7p!5am3!Ca-Nhk= z@|D?{u`C#n0e?UB_yS0&6}ci1AJ<^5B4i%OfxkZ-5?(N? zE;Sy;tbVXQz4V(@N%Au{}gl=<-LNb!U?i zPcR|ih{dHVGVpX6Y`3W2O;Nvi4^ATKn5e~iVBE&Di0iSv-i>NyFBvCB>|eHPm*2uV z3kBKDPW>8WZfwqO4UY(B3r7LCoj-I=RXhS@+I}Ai#~rFtacbJDuJd6D36A9 z&9SYD5M{xn7v7lQzYz-)l-V)aLL~i8Cs2xbytcnDtfLoKyTpg9-Ip1dJ%X{POY|HW zo<^=a#EDQYxS>COPKgcuwX5Bvpc_3%e_}uS^IrRd4{EN9i^ekvXeFU%E)#h-+N`EM z?Lvx_zHW#yCAcpUm2T*(W{>epHwx64SBnQ?b-^kA!us_YS%LOf-xK^!JwmwrIs!r}?~@D#!9&=( z8#|;#d8ojDn-nN_EpI5>B;_7t&`5}&%TY7vi6Vx>%yHdQ|ka?Ad?91^KbVBo9d zZ|@d>f-?WlyhE;g1L|NkcKTWtKb+HJBFc_w*0sc1oqqSqk2d)3MS&CjX+ddMfpgRa zY8Yoy63%Mm4@#>mXi3vupHH8&&SJgJFgz*mFnQ~o^`L;7G^7j(LM=ipLqNe+=DBpF$qDheAW*r1y)-U=zb>yW(pi`k_ z)lSUNhpMCW`Y{D9(y+e?!G*Hmd$stB}B33Z$ms{Zl?i5N=dV=d@(^L1ot1^Y3WEFDtsc4<1`Q%*seb z)DZ6Ihgt&YO(d?Qrq?k4li_HYg8#`FAJ-!C4-sGys?h3q9^Z+FAO-JJ$1LrOwyjG^ z$y}L5!Ojap1ERzwH^@lVIQ~=}-*YW!hc2xun>s#yo4Pr}i<=_M_3jGXc@|Z@ z*RWPVb;zYH6R;bLrLX>&+?+|7y$U2zV zU{Zb(xPQ3u%=VqD!Jz?jfn2w)V`8LFTz;)lNKV!xvu!&Se3Vij25ppHZc)B z8y4S!i5<~7yxds&gY=6}MV4=|0EC2yD5ig%BjM#_Sv1rhZ482vpW4VMd3*vG4v% zEMR9e*g$}L6}Mq!hgE8b!0xo=mbPt?oapb3If9tb0HL*$qH3fwzwp&N4kklq!6pw8 zamyEu;rO5Se2)#Ru8Pf3IXSUz{9}F7&_p!NseQs}#fwDJSSA0gX19*)3hU2Ykv&b2 zeeuVwJI(|%#x|}vO%N4-c7$t#TE!fda_l_4a0rbq?-{&0s<0IbP^Ad0DWRVbo|Xno z9IqM3fz*3)BfUP{BeZ`wG4W_CW6|V(;>P-|VIAAYz398)M+rB?=|_Wc6QQLFY7Qci zBsa&emi3{&RqXy&BY~r-q@Q6Dl_72VV1Vr zb!Q&>AA|yGmKOQB<^Hib+HztICwyLX&@aZ4^Foi!1g`Gl)=XSrligcYc`+Ixd|GG! z>d0M-(L>_!;5fWb_?K=Tyl%jF{*A`5+i4V&2BesT`1JDWsGmqN51 zPlB}?0)`^6$bxvs*@`;!o;$xD6@-KaMk3r^#yKX?-Un4@R$@v|5^H}ui( zG4wbs%M6;*ffEtQ7b4Y|^tg8`8o5rG)Uxc#bLQP0)@A(YzDBL$rYFw*6BoUEsqT!c z|Hk;n&9oy@F>wmyvYk@)VcJv6x2bt1tPPY8cg}poIsJGYd2y7=JL+5@%ueSy?-Txe zaWirh9z2kmlx^|yF8N4aJAo0k(KnGzSxCe=Y7@6Y#k5H5u}6CWPaI%_05urS@o0*| z2AM+65~=D(Erx(H`&J;n|NI3|?LXHyzjj$|a82WKX;Lt=qJzAq_>orSH&#qx{LZOC zP%LZ{mDRv54?!5t4x5dgUrg2+v5$o&d`q*M3uJ88JO2P#hWMXN?d}Z;`bDUeQ}@~~ z`QWq9ohFx_#0pt2oHG+n*?9NI-JazkiKEE>@xFVqzJ?vm4;@1w5{J%&tJRsykM8%W zyj_a48kAotp>Dz{p7k}1p76%cWTk9NMHy@1+^NA5dc3FA6 z&7OngzxM)ANj0v_189j4AdeE!K=pJ-4d0 z)0d{W(P1V(2~|pQU$?}4ol9)Xn&xXq|1hApG-vkx^_aKFMC5| zchdGW+{p#`EPQ#JHgQP&#YpURym3XK8aYf9dS;^WJLLFf-8yptX!y^_^6#21HPq^} zXdP&#&RhcOY>M|6gkj5jLRk04B#k_mkjk_V&Fv7;jGuL@l!z)4b-u5lL*RwhyyYSB zpx#-dWR0MdD+yj}q&;a*H@J7WQ#J2rxD`?dmliAIf1-5`gpjyDdrjZOZxg%zuLPlM zu9nrmCMa1hW3U-1B36COJ?)b0#nkYjKyyp=NzO-H{WojL`X}eA+&Kfk^sfHAwB>N1 zQv+XNARwD5z%Lg-O)v{XfpY(Jxlx!WLuY9Z-`=OkF4 zGD))~q|+HVEIO&YjO4JS5+crKcbq;lV3q7ZqO5{x1mH;de4SxWE7YTY3@`rGb=x*o z#~>|j+;bxVIO6G}gecotE4b-UgWKe^0cdH&-S9S zo32Wb)(rB57Av94S{rH#`{{u06J}mRpM>1w%qX2tO7yNQC~Re95uZK7KReQtYSp;$ zqOf3Rco-wFxk=Y^O=Q_X(q)Qhoh72M&+L~xW>XUSBZ6ERM+^F(1}CIX8Xn!>bNp)A zBEZe?4hy`x1}Fa?sZzYHhWmNso8j>Ryo+>zhdNy>Va`H;pTIehyGaxNFtf(|Bg#CK zb*AsZsD58DT|IZ8Sn2i6K8X_KZEV(=p1N`Y?FW)?0Z{UsGjS}5HUaOzRo+`$cKlC-7ugEbEKd$B*KB*K~w~tn%|0wie1(N?k^O_s&@Wk{p z6kp9q%d3gwY0NM{Jh2_Q;lJ?UShZS27|5uGqrUH6UJiW%6?PeHFiw$mxJ@Y-^hLaAh zY2$8O3@MVPeMrJx;!7=^*_*IUi%@KuMOXhsH5f>dtJ!m zn5&H1RDQpG@)jDa&3@}|+6r?|3=a9wJ366vW$ly%-FVG3y&LUdOQ-0?e_oXM(J-QN zp=>s@qh@0pEpX#_uy4kq%VhLp{JFuU=`j^8qGv~pXSH_E0IXDLX-XU4=rV&Gi9)9v zuG}8Hj$(Y+^skrxjX=;nHAcb-=3mM_AkIpD5zr+_Ekh_;)IL>ISsUM|oq4P2h{-Qnvsp8NY+DbnCG{e1F+ zOPTcSBf5lQ`$^=yT~~;T8lqE>vDi7LQkmmH?n*^#HB&^->qc5cHk7es=4WloN zy&>(8W4RTGY42tXUxf)&T%yzk%7|$h?Z&>l!S4r`OO5`WIkBOXDU07%qa#6U8z7&_ zBa0p<2-HDRjz*7URR zLLW}p$ch(l(B!gx#8FBzAK2d3+|1b1EqYY z%S1nR(5{=&LYVJY->;fZCv2N-TwkM}t{GEo319ho>aedlY1Qn2V`iH$7J@8p)@SA` z$UfX*Q%LYPI{sDecUSF}tIE~-$y@h+Ua*bOJ~DPUxW#ocV(4FX=+YTFb`PN_ zleEW^T;_ zI3Kp-4~Ws4e@EGQpBeOCU2I4^>3CLpv(MEG4yiF>Y&Z%>aIQd8CT?)%6$S%-UvhO- zI=e*pW-upGR=_Jq)pAgIWw76?J(OgY&hc9 zW<6)dNjYP3eqAN&?7Fx$T_ykKyozo*Dak66C4tOjJ?TKcTgy2?7@MsbyM^cG`p$>l z*v(YYsY8W1lWSj`B3Q1OT*xO(&;Pv+lY*eMx2@T~A5x7RbKSo6%qPl5%vJ>Z%+Eiv zpcne!k@-|NjU_6E5O-kZR?lbV6M@Ij$xP)C+N0*JDQil{2xpuNgfeNL`AloV=5Bl| z|9bKEV%V~m{-7)xi}zvgZI!HtROoj1-Kunn)le zy-g=oi93h9(`0|Yw2S@rGfU#)L(&hJs+CZuFYrbx#+T_Z7cs?-n3nU^ej^Gh5Cq+K znTC&M23{=o*;KZY=vGqp$!onk9R&b|-`$(ZGx{HE3j(lBz55QnA2M+|zj5f?dYl@< zFa|Adhpx}0J)>%}zQ2{A1XX(Y`1*H|vw-y5dFPP$L)Pn)vgqqwzQC8Qx)NV@n4$9J z7=i8ih`Q1171jxZLI#GY)-4h!vq`TojMx`n?Fc`T)j zW^kOq46a{OgDiGIaH&Vo$?4po!5=mLcPne~fzfs$N|~%@xPpe7Z@2JNyO1VTqe*(( zs1v%reRbY}MG8XCMX*qVI@EPaTU)8W0Ikn`E)?`WCvR*I0Sx``qx2;(Q2xlVqQ23dMG-DL z`>ytkJSw#dah9Nf-ej{y2+UPbb0+^x0W)bdsYfA|;S=yTtE`yB_V})_1<2z=!WR5+ z^%OAJU$fVB&-7bk4!=uT{~7&=I&qn;ZGtat`#V3^GoMHO7)7n0y^DX|qkTQBqdb*c zo5*CMi}rc7<3kT~i-Pd@ed0Z5>`MK!9d$qZ-zjW!X+8gXzRo=*zb18W@8hp-$*tCl zDo*Xl-in2Wd(*{aGdjA$4Lx~;Hqfr?g<<`+>L0G+*lvO@Xn>v#hlC-h;|RpB4*xf+ zBYDkC*@X3RCfz6J4z>5b^#$iO;y$e|x2%)!^!o zD`+AFeU*Y>F&4aU^4|9U)?{!oWU&b*g%##C1-lu%mR?xh3>pVnxbWVDAbv2CcrV@m z*Dt}%D=EF}p9|InlLp-S?LGgw_5XV-U;SR4WJe1NTOh&Mfgm05&D%j!A?Om=u8yhm zzU_af>EH`-BThf_b%vUeKnoZube_t`*p6Us-nx4f(DHXJ6uetGvKj?- zoce$2P2Lv#f4#?!3aI=m%V}MlF;J(2vjnSduN+(_Cf?1d@8gX=2!hM<`VUgq`|rz5(hzyrxkar5 zTt)fPRr_d37mE3`3iI<=M)db*_20aP{^=zPK|woxeDDjbwa}WS+#z}tBy}W{Z**lb z(Uc>v-Dm-BpKB$}eXOZ26J2cD4dwg!FZH;puB zIG3X~y!J)_g3OZuwr6CrV!*61Z?e65KNKN7B{zD5f9=;+@TFUj)3+;eka}*|3y$8V z*p~j*y1X7P?)>T{SMqu;AHcUIED3a7B<%tK>G5c_LE0vZlN+=ywQt5` z%(dL4l-yhF2rKd|3^949RF9&60c3o zbG`H`*mZ}K*Rix%=Ie7V9zzh=%4ikj#M2ce%N)6#&mW(g{i3iriten4z|^6y7s58b zy^e;#&zVgzuyabKRGWglAmD0Ls01SkLDyQ0v0FmOJ{6f1YnCuqEFagS%g;hd{=vdn z$NfFKUmh8q*cBw2WDQ$Vu}~xS%K5w9^)eZRHkdO|CbPM|03PIBq_$TOaR4-rghmwr zkAH@uaQYKSmncS3zg2<89u)EpNVl;73<^#ps20-ikOHsmfsUQsn$EiA_@bCyGy?a- zIhdjIqf24;7kYV2H>pr~Tb=X%iSu{_8x$g*Y+1~NR&#+R5iT_*Y4y zuRvVEPkvWZes5m}afBleWS&n}%IOW>o)2^4l}SD$%3{q1A8}Y=oAh=98*Vf07L%)p*2+Q?)iC_b%9N3G96W=# zQbYj3=d}Oxygwxi?MeYTu;qx$_uVqCKQ~=F4-uc5k;>TZN*@GAD63FDmCzrMOW=*% zEkta8Zi+4*Oh)e_ob2ziwQxIu4+$I} zQILh5IRt(2UY#l>jTGLcACv!x$&8$T z0uSWX-7?%xG9nfb@?Ch~B;|c^vNHmvK1JGn2ka)m6*ShhX2I?oZN7dN$awRlA?K@M zHw12d3YTVWXl+0U5Dr!k{2y0uAF$lH7n4FGutQrw{S_-!WtE5&v(h?Ng^C<6(tVws z3|HrYNH|VJ*tcTKJ)E8ohDpqiJZSCJE$J|LeIjr=Y5Hf!h#Bc*EHKPDJB~2hfwTfw z0IA`eJe6bJwRd{Gv^H_M6x6JU2c!XysM$l<69GqYGh1}(PFbI^(@p^cl<;|LbIp= z2h>7le~TkXy8TMTE(t7aB4+ciaSaQl^AhGOMcTiZ`cvUcHJAQ)S2rY`W1D`)XY0A0 z=vyl;K(~)nI3nA9a_Uv=>sV~wxF*3}w_8mpTUE=hRa*hXYVfIAT4$v>k6J|L; z7~!w%@27P3tRUZcmX8e1-iOfJTpslmtK?_l=OsxvB8R_$lT zECj7kGp?~(k(81cxDp~x1lJ*gVL-_ylqmpcYV*Rt1auFrje zNlB^HknOvl%`%o-e+a+BvcB%)0Uj-?H128#R&Kn`kE_RSiofQt0E#Dw0(5LxbRPShVDl9SKMj@al&VS3(=hrj4njqs>g zmB}wU?jcWdjRxg*U4|&K-K`Vig{byNPn6At8*p~bCN)aD{6k7y-bg^s$Fs6U>Myv7 zW@YUiPm(^yxvBtA5|a-hyTqKyV}AeGMNJ46w^<)adG0#L=$K$u9H zAP3~t(lkBr24gh!Ms-j9GZH1tDo3d1vsW}dkC`;#rSc}~Ane!$m!D^(=8rl&i-gNy zC5@o8-{}%u$gKynAlU0Rw-nO8W-)nfA8x*nh_?ga2>l_{#ba_9lj9F_g-37&UN|;y zouS_$qq|O;B z_pg!<35I@JS;pT2H=$^sqc{lWz*o#6D|%B^tjuQX!&^2rU2NyVbSHE&tX^35j6VwL z+A?-@e@MYuU$qE)#-0-8zAgNMsYSXv1!qgWu0V4YV^Cl%F5U4rC677R2 z?{FVE{#s*+#g#b1udPExADSL(*m9D;Qw&jm$p8A=H?uyjt47t|3YCbHcks}vx&t*a z+u`ZzJaxxHcG8x6&13ccgB9On|9PmTj~ycpdp2s(i^Fa`=2$}Z$so+$o$on#H_M0W z4L3SyY9h-JXdt7!$5i-Pm2XXDs8THa{_PUbV$W&PL7c7;j+~*OakJj|en;KMeovEQ zs7?)e)L>c#PP6eX8)Nr-QVE^_lVq4d_Z2ml_z9pL>Hp|F%=Ho-VZnK#_~!mR-U~1S z3}HIcZ2Dd6w&GLZM^9_@_Q>8qS{UAOKlkq{1`&+Hkf6-xzeb~hRd-x*zPkAi`!3^K z^`=P=S>#E?^F*A4Gd&Xdtkf_4RU3P6E3Nkz6M3l;Yh&#GbNlgtcCj!$PJ5#R&z)gi zdFwQ_C-h|nIPS6-XcL*!Qp5bwe3KGzzEFvPvn=Nw2M2BqIz@I)SVjwD23hZ?-@_sN zhU|Nwbip;vuUq|8ZA4tQT%5B%5|SZ3h)5`SKta3~Q2C6#b%Sr7EN);8(Y5}nga*{w z3*ruL%)4_`ox;0(ZfR`7pp4m_AG(SY;#K!@E7&k)A0xt6wRBv7Bp@)PFo1O_4JHio z6tE0c2=n825+UZVAOHu9gK&?&IE#!vh(62+8|b5t6?I3a>s4jRgN<01FMsS}E6>%o zS1x}}@duKB`9#qhKLBvFFOq>G3#T!f*fy2Z9Uj&v|C9=hDB=!9RyJ@GW`zz$e$>hv znfikO0OCeHu^1Ox&W`TF20i`_pxc&i)MwA{R^^RXd8rsVm;iu9wtBbMHx5VFHi!Mx zd2RK;zwuOxKCmz0e`1<{0nopY>0j9L|JeAyy?*85#B%BEdG5+RcL)v0I}FHx(ARgf zIajKGcJS`dKF-WePX5>K39g^FXq$TBpG)(O4Fb6PCVvTlw+-|~%a#QPOyAl&vu|`v z92|_fTy7g0+k;>}ZJd8xlOL(Qm>J6{oOO788hE`rfdl(_=9H=Gb=hjSD^#5wc<)`} z!u9l`Nl6)W?-msF)z=@xzxrtC%2Gti<*?WDG+*#(`ZRt80C;0_ip$^*#cZc^XPmV?jjd*fUrA{@Kns?G5GtQAgMtXR*T1YSRMh!5u)%8p<-_YjI> zn?yQ`wU77xI@RGqn3vzUG?RiHXlF`1z@hPV!j@d(zr@odlYOzI{Xmr};@JGeg)}r> z{5BgyGp$)7Xk`x%QJL@14oSkMNFJ;_wG)K+VC#82aY$pG%+&NetrWCQAG2NS=FNu4 z&!#?3-*Fa!Xmkygsi+)ul)E4RR3G_UosBJ_1mXA;+xSjs;eYR`{QK zn&rrQeEr@$vNCD4jqX)yu6H-I7VReP{(q*GdKqa(rdqKUHYU*n$bK34e9zJ@Eczy#`1v6NYuMWIPUd&E#v7X*@}!b zp#M>m!qb`TQM(yHnD1g!Q#@~P^HP2_W-neTAMEV(D;u2Wj`f_!KQDPWQfpL;PMqMH zZz(SqYqXn4Rrd1kyWjOTrVm2O8d7@8bam-XLlXKu{mm6G(D}$O@StrKU*dyK2O9^6 z(3()FX~mGm*=LW)Yt<#5(O}m32zMC2;lQ%yYNE=+b<;s>xrN8z#(A;Ys;t&wU@#Q& zQPjP}k};JS0msxIhUi&+oMS(|^TYE^T;OFV(&v5vkq?>?j5h28&+WuyqX1&vJ3rgX z)@Qi!_I=98=XnG6$8zLLLgy}pO#N$tUmNwa$*gu#sT1-^d3s6*%T;nnDf+zcuI*)nZldORZ};DzjUqx!;-geFM1!G(kti6C{1KL-d$^2n92O69g{bug$pY4EYx5ZeaJ6-E0u zTmnbSdVfy=Siq#AEjW+zKEGh^RUSV*tiEma>KF}q(tLIwWQ;*&fDEQX`DkgZ$hBXI zT0{4Kx1dgTxeZ}v`r+9~sI_XwB7DYV^F#6DlHcypHtqSYoM0^!JxQpx6V~qpM@YQy zW-MfriYPck%sG6_`-HncROB|#VPvQZVSQ(jv5lTONfPXtBpMvFu3h{qqNTaOjYssn zD!X}&zdmFd((LlGj`bz{gV?rHbqDB}{v#kZyi>_QF5K8;K2SqA-K|1io9F4hZCAFl zLx=~`4|EJbf*8syulx1W9w6!P}C{vJC=}5%46C6hs>FkLA2x&`H2lT0N4QxChl1|5GfIBDIU54p{_!Kbz;R z2N${!-H+YaON|cBC4l;%Ow?1I_E0j%#;bJ7%NAK9;ja+EeE9^o^^YDF^EI`-7U<*m zu-qZT9+lKhPQU5)DFS!(=ee&!CpO5_UxJwZzLG%`!J(U7xI1G?mUaqL_bq-C#WS1{ zft)Dlrs4Dhh4!B(X-9g;W>c33VHDDH^B6{j0n-;E#()3dBfDT9m;#|5A%MJ02L>pNBZg+;-4x%!>(0my^LHPRgVwl0-+qXJ-l=-zp~ zcQWX>p3YG+M62FO3}-;iWJsq%l|(8tiZLYoV%I@+1XwTXgFyC>Y`%@_;J3(gOgI)FWH;&@T)IHS?v&1$sw+(FVI7TzRF!=$nBH9WBYmmbnc2m zB3p#>C@DlqStbeeT-ENOKx$49bJ{#H^Tgoa`;0Ez>g!HGgrG(FqXPaSbG`F=E$FM6 zRndi2xy5vbZV1r9SVoyd-X!jgypW&%im&Ao&kJBT$8R{BS9V8(xF6MJmkAnS((%Dr z*x5*3Bko;U;NM*dcZVMbq#7@T;R5t3w;-<|{|Q-!b1644YS-5iza7 z%eMEh?K9Z-c{R(wwq2dHzr2!svHUpdHm7)O_4G#yWSZt771ifwB<~@+pkPN5Jj%VziGQ<{%6u*aIy2Rt{iR2qAw<>C2 z5T&s~^gvD+LHoPdUGv^8>Vxuyu%vX6N@+X6M|G=n_5jl2hRb;0ejXry;G3TA#*Ss@ zo&TUnDWrn8&-H%pj2foKjLgQG6p8yKA#KaU*Fg+a$+~hzN_lX4`0#DYv zdAq;sII+oIx{2X%{c=v}u77#Pd@tA4^x=@Zl7Q@O;kH5n-BG~*$}1%BGsyqaXyD?)tEU|kLH>_Kdgb9Ol%>K9DPst@ zK6Mql%4Mf3BXtJ2e-ZNNKBC{H$1YSCDw+&8WSUSWGmugV0OaZCUtoa$J6+(!>Ptb+ z*EksuhAYTY8T!^S|TEe$#6hETQ)l{Zq|ywaZ~@pSoHT;9%l`7a5TEHgrAH3M)3WHw>?nLIK2?&xw3>kTpd+SqU<_?ucPu zr|f>3$kqKAZC?M(ms9>MH|x5ZXQC~=J<`bd{Jr*sLjn0m<8+s$F^5cwYztaXI^R(z z=zCX-_kPz*#P>}jnw++BBm077Z4E8p8oK=0_@K$X`jZ;oUR;iuH94UFP)+aW?)klf zcQZopRHIJW7NBq8VbYW%CX%QbMnwvkGiMDOIwXcwZ8Zcp#8nK7KZGNA|D*PO&8alj z_k~96Cgl4oEn6o4l$pq~DmA3Ngg-a{q{XYUs!Gqvo)$STLamnxyVR&8TBaXeZ{(pv z7h))nY{j6d_Txu-2KZ_U@ar@fpe<-;de?2RnPRTFYY$k>G0{I>Y%;^b1b}aqU3#bZ z%6TxSbWUe4J=4B7IWnt8dgY%3TX`J*wypyQOq=t0EH^Y()S7v5>+XV*#em&>cfIi1 z`a=iQ4%hYgJg?AEj8v5K_6zYqo6eo1GiO0Ra>$pAlY^kVm?=_Rdy zJ!dlqA19OcM{pbX37u`w>RTUSk@~upu_T+ay`}pBLQ%>ctSnn8Mth4ETcEJLoKVHN zTkaT<*@JKUyZUq2os@^K6Zx&%|(^ZN6gd%a6I%4Thj`-MF2LerhI#+WV8= ze}omgwa+MXDu#KyU^ZM7TrXOM#SF;m*FxX2YBmu5rXSGseP4zx=vccpjY{~~F71nF zo;S`=ISokka&@!6{3w7Ra%baY5u z*o#y2)cfl~hvW!aOPu(=aSCp_B_qt1c)N12#mh=vyIBVePwY-sP{OM0mYJ?Z9%N+`Bwk3nFWrtdsul0ijmsVwx|nHi#dscR3@+fc zCd9~yNTtWzf@?sfWlebKBYwt|@h7iopL&>%yHk+u!+l9Hw06AV--h4OIa_rDpvY#h zPE7H;o>{fEiMHv!vpz()>mNt3$;ursRhit3|B%66FUv_wE785y*{Wce*ALpf57}Nr zu+gH=x>xOMv6^qKc(Tk~BP!P;ym#Qo-Myqj`~$AF4gX>^OH;@}G>m0I11CE-iU ziIHVydQf$bg4|3_zRX|5$g?<^g$1W5W7Y~)PltDNGegH;Lh(2~6ZK5Bx$&tSKR?cC z3BU0^Zz!jwv-3Bp9}H7NS9c35#NnZ-IhaDX%2=XOe$a==9~XCJU9HPYOhU3P2pdsw zpoGoVh8OR}biYukHA*xQf#*QqJw0X{ zCzI)C?B=G<&quN{Bvx` zyNFXAh`uy=q6pUMky$-^E|#02g`5^70H-7$Jman5HcyF+k#(H7o0Yq`n`eqPU{F0v zo->mq7msU%G+<$_Qig1ryBM}+!pU-PNUxezZ}#-Zh^(Er*C5ErONafUk1*b`mzK)~ z4TX@4wQ~gLv$boC27FX52AXm?GuKsCTbskA#w{P(;T6UpRxz7Sabq+tzY4Kg7r#{Y zx+njZA~F5pN{}>H{JtirO{uHuNNwYsHFW?xOr{nh9)0nn9_JM5u_)-eU+*^uLsJ*N zE|*Tre6Tgz!bN-43TSuz#z)G!V9IFnSm4;v)hk^ZG zO-f>7AxIAokI;Dr&bc|3KORGP7^>A8^}ps+d|%()7%(J&$Cqap{g4ieWm{Z4JdfFh z%T#*wzqQ&o7$gqIhu5e?^b4Hko|&s_pa06Oag7BH0tA$@|5RJ$tI6TsQWPnL-@N1LkL7SYdn=p+;)=dLq&3dg0p2)v80TFg;4eQ&r-u_xgXJ#4(jGf2Afd zz1}HeMz3u+Xk$*}xD?jV*_*E8zOf(jy2p8-UZYZLvMz$%H^2;DZRC=D+so7<)T5BWap`rFWrApn(g`q{3qa4xq z4nJO{m}`;6Y;{91;qaB0a&{*-;b5et$q$=KpX`c6}$d)dd75?2G6t$ zfvX|+vnRrZxn#4dbz{+1J9)A4pn&-aNr+mlO1V=L9vkecFNzoh}@?BaGnf^T1TiH3K>@VUCdMQ1cLe63{t zAgr2QuK{WUW7>p@$)M3SxYW1o4H96+B9%vXd?-&`C56Hh&b{b`VXpFZ^%(SB4Ec!0 z&LU=HfRTOTSQ+$OH-T>9>_aU2OZk4n)m$U&iWtyF#9bu`B+7qYw<{E^4#xOE4CvnV z&Tc5fz*K`b!?Bt#F(TMhIiuMmv02PoX@-l+(K3{$(i~b;L!V^PQ)j(j5=0nQCj|-y zomOWvp0wKWy@y4=l+}k!$4cU;mU43O8l~QK{g!i%K>rj~eh7qZGs_=P(;SrL>AmpO zOAKcgeEqb0ccp84KeelpQyZzp9Q-MF!Fc-xUJ}0&u!~)$;}_j@0V*J%7$N1vRy}^gk+;<_t~$85AGb#~$B`b8w+70$cm4DrRLhuPLQvQM~j?1Nd=uHN-a@YT(YVip|ME z@XYF~Da!8oQj4EUUam1XOv=H}E&e5u1oQbYw~j?)Y;i=u7HLam+tB6#83RR?;Xg`% zT!n02$8)MK-Y)RywMCU?Li%TTqg~+iM_UB;LD+3TFG-Ya!w>d{NLSk3Y+KSQJcFgT{G% z#*HwJyt*Wl{e<*sbM##TRN)%Iv1Rfdl#sq@J>(7M$vGldh#CHLUn|W^l>5Id=6B_? zqn|%%z>L1C@X+b`KJT9d?_n|-o_xol=EX+cXOX5KwEOMziqO+)GUj@3Wk&1P|6TRL zv9u6GlaeQ28jB!9_6L^9$ZRc_x;Pd(o9@`u)lWv6_bSf;x395(T!IF&AaX}fcs~hl zd47%HEn#WJy`WKhW`RH`J}23}1S-$ah0(1@pB|+U%>QVbZ|~LyopG7mE=a+vv3GtC z{=SsbPkP;=B&esxq)m_vG%3(z(}kYN;>E@0#rueSPZY-ET20oO9Ck#I2{=~1aCgFD z;o1%6RI>`;MzpeH^wY181U*)5zUZ7Pp-&o+rKK;X)q8EtBLbQNMlRAt#uF zTL~GGX{H*+b_3b$%*z|Ep-bUrOuSY-SZk|d;iE)V%q69T!C)Zj7=Sb@?#pX>s&y+P z#p1VZ!SEC?M~zi*1^UGK|kwSgY3MlbXLb z3xFG2;W^))GCc0)C6kok0dU6}tl7u$6D-V*nJ6=EY5+QE8j^YQFs1daR;;QRjZMot zue>LBDSj&+(_-JiL~2QXT=pMdE}<$%g0CRs!V(6A3eH+dRAZRh23N0X; zV-8-B?z~^%>^Om@JKV%!z_7x5>W?9eP;)i0nisE299xw7h2Cgn zI~JD(x;9uO#+p6<#`^1)Ae$@JXY4L~H$RJl94iZ1ARpIhb7l_RPVD|A&PlQzpqIU2 zF<({$Ux-v$E|p4qdve92%D)g!g-5_MLG#Ul8!A)~Qy0Ih<&@I*;cY4hpGj9s0Pcx` zTRh*WJ~DRS^l&c?OtDLo)I@!Z*k1EMmJ2o|9~<4e;d!AG?1hsX82UdD$dau~r`xUb`W7*dlQ=Ju4V!UEG% zpY41EyWoS4N>O8kzmmglnmNQ}{#f!=redHHrhB}uJT)MzL2pWpl@t;$c{W`RH5;4^ zHqgIA`K?C;1;fadnTbL8UVz7wJn>luhdxW4elSx=)2JkFDyVxj%fIsC^cP)PClFII zBn+#d-)@^9;We3ym2znjwZjfpLrq)iijJK=SR)Oa!%80KcWj-&Xd83|N&J5b(=L#> zv@%ajqju+%5P>#2v`~t@#x=4vbYX+(R@v?(@$TsY#qU{tIw#S5WLf(}swhu1KbCxn zu2T6&n;y7}{{~M>qEUNj8?z$WWZ_PKXYVMpZLJgh&>?<0v)Soa5Z}|z8aw0gIOxZ8 zK5>NmL8Qqr9pl+u$&@G z_{_NyyrA&AeUF2DY_}_6x-Q`T#+l#G=hn~aesfLB^Mk-<@Q3gc{iYt;KhTU+l(gL5 zZ_)={B;ujXZ*`XpiPt;2T~nMjG^dys^xZYX7?5!lL1AVSpT_RLIZ68}c^*6eFzc>4 zHg6zC;qs$p`d41XC+zoEi+oP20F~5W0b`J?gcBO3oGT zTg3T1NZ2$s4lJ%FOyxJWZ`vW|Ts}1M;{o#`e{)42A%M`K)AfeOG<8P}K$hf|qmApU zku)vVHzE*iu9el>*AXS!R$728nLTIrVy2BWZ7bNfeBCl&SHK(Le^P#b6GQ*WS^Z15 z{7Z;2!b81}xTB&-f#y{x!Hk>D%{zWYkvajDqg4Cb75s1N?H>T(llM|16ggKQC+yY? zMwg=XDt$j?f0GT5Mw40n0^w&XAEIHmUgzzFdi9HMS?HmHp`Tx^E}sHj^l+spTe#6$ zRrcg16p$Qc53o|!b4#Ab4x3Qql0@{gtM4`p+&(h7dtEB*P9twu$1q2~8>^uM0tUbW z5%f&yuU!?1?y~%pzV#{8}O5Hwakoeuy{J8+c$qgf{LEnL+`|FbT3(WB!tOe?<$;e zdBYg8AS|Rjz&nreKK#d6l%ByGrBST)D_+8TMOipkBB^x7Dq zO>kkr77{kc36MVkD}SvMhE^R86Q;l4vaQ==c9#$EJUYD|c2{bT?gm$bygJUNseWud zBt4z0Z(9E}RtX=kT{Z;k4lg!VS#h4xT>Socd2;Nw(+#7ZoR^OQ|J%o1{IIviqGmx^ ztay_|h=rt*F@=;v)1I1XQ7AH&<(`4Dnxq5()c;(V5I|&uqloPC^E6T3V39?H{Yx*F z__ijzr0Jyr7gRUMp->uCQTpJRAQRS?v7bxGe03iKnmQmYdARG}GFTrEmWTK=ohG>s zVL1=8oVtB3&MW5Ul~!@oBqTD$2{7?}JX__ij7O#tdQp)jQNt4m71 z;Q|ixsf?B7G})@Ro8LHvzp5MgOOM3_5*jJ^}ea5D8V9Mx-#Sj|DBpQwY+SndXdI%^|L9Au{QD5|Rjc_FOmBA+WX|#n3SR1hRQ$aZESpQ%m!iEmGv;4=Tpgd=(1?fnz*-3D(_WqpM z3sZ2{h$XIk{(%Hlx-z>8D$z*GGA~)cp;&oVPy<8q1O{i-7eN@bWWf2?WnO$|H z{S9dgrtc$=V@nSod+_7A8c18b>4A-WjuPZfPgBDNS!7^|I= z*seGnCb`r~7w#X`id@h@(X-M?WZ-ljMo zmlttzeL7*b?h<3Nd}kHje3I7I);BkDixQ19Ve)JuE=1!RCVQAO16J{fm2py6lY#>c zBf(ec&qbG~K?GQngo)R!VQT_plQdNHc|adfXkZH6lvxiR-6-m-d5ILP1zC@$g=*YB zmW#9gMD>c~>|$IIJh1zn@}!)7Bo~mxi>OSbHYVUy7po4RtJAeUHK3cuQ;HN)tX=3D z+92yqehJc1${}u8jX-A9h|o#4t?Cz@*VF5{&#>esfCdN3-oGzxBvU!=ee(o^srCJ8RzUk&=s` zrv#Q^E`rI^HjCn0&lRjla!z`=3@_Ltt2+toNO<}+Wg)79>kxZGEP00vVgyNUjh0o% zd8Y04dN&(8TU0)6XnR3HK}*N3%TZm)G=`Nni|^V$%j>AivldDvTaCpq0qj*UQZ{AM zoyc``Xr<0A_}uWC_psDonT_?UkX3f;Yxbm^n^}axMW>BOX1;BIVes9!c+mMF&p6Sl zRsA|7<`wjYXqR=a%EMu!3X;rKbJBxEmJArh-|pEBWMGxkXoS=U7;O&*ka5>IzvbFo zQ_LI6-{rIL;C+z|{9A-PAI)w(Iyuwuob2Y-n|8++JjH?-&a!yh8x09Yq+_Ps~@G3qm++`pA{OXT1kT+dW9vX+}{C ztwT4L%idEx&kTB-FKyXU*$VQ&!dQ9QXW_$IeHaNL-uY#4^}xuzYW#A}xH-z7b9IR2 zcR;73e?rP{ox|&b*p6nnZL$Q%1}{^qf=s{e2B!zqiQgEY+Vb*%t=?0p$Y0s`48FF; zazAMa7leO4{ce*+ku|W=e5y#WC+<-W<1XNx<}0Dh8Xp#J!n)ni*TBF_Icou0{L(*9 zC}h@E)t$S^3<$-6R5#81SIgqI>i1QR?YerELEcXtl=A^>Fxx*BC$Xl58b{K(YE);U zhDyPN(IBHd#?)@B%LnvUiNE?D-PF%nhyX=NaIz%R^wQjwGxKo#)nx|M<`k;H*_Ml( zH;e-xkk$0*hoBS6{F6f*Qp8{t9*`=*JEe2u95vC{7z3uaw%*m?K z?aL@xa9hWe`##(HI8kg`Jcb5kBwao;uE7ARAJ?m(lqosM`=KkExa3olF*Ysn<_Lyk z#1M%f=zz`7HZ|qs5Ubut{=4ULn>j3=`8}FNx8_7*5aG;X=HO*|AYV911A|7Ia5gaN zlL7PEl0m)QMs=Y?4i6}NsuS9~#9c0(LfaSu4L_^S8_Rk9xJ z(?!u3jz)VUJ<=Y%2vx}4myHbBNlsKp>Nj4$>buhjDl$8}RE^(1|b(`aP zJbSV1Xs$}s0|6n&xRRJ?tyX5qTx$FFh4Anp;55u0G^<`(5Y~g##3d@&P#bT)pr|)s zIP+a}Q7DX|5dWUtQ|OVd)lXirK%~IC8=#mtvlIqFJQxh$i zs+gptWk-a^02^6*R4zNRZyxPwl;F&TB&X^~8(pW*a_y)?Cdt+Ee;JO&c>Lymo�w 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�-bt*ERVXN5PAm>V8~am55BvJ@imLDmp> zA~=|*JOH)`Le96`e(?Ei@k!MfWaiMK9fdD6c2(Y15TNJ+LRvzwqci#AUmSdDbM$=| z*4I`SX7W-e5rVIPyrICXUExc@)(@ySkfX+B8U{mpFIeA&GV4IFd4Kw=)@?fy(skje z(L=d!*l3?-t~m}y3r0FZw&WU-u;Xy+?FTn(8i1jby1>P8-U>7hVv2MqlxB0`C^IDl zu|{Al{;F$ERfHL9sQy7ea*{{`W6pLh5$q8U6I049C9f|Rgv~lNZ%Mfl$qX#pmOAw$ z1s#R4ZU>1|YgZM>W=N12*i}WwWyV1_%O`k3=cPS)())eRQh>@!Zd$5Hx$sX38)QR| z;#4UmHVmXBK1mTV3mKshE~QX;MM;3uf`tOnYEvgdo+oDkxIWUTA0wx()l?}ZJNnHX z`MO>tUoo2J1Tgok8G{pVJ49nVWMdxJG|RdLuD)ez2*3$INZ7?NLE2gu|Q=H z!1|ZK`+|ZC&OHlVe(;fXg2(Rq-9rSxmM9+61TjO-UcHT#Y031LL!DEiPG?7scwMgVao=;AWU6gZ)!9g z7BY@joW+pUjs&p3-_g|r$OjAz$sMeOxt@Xh__;G0L&ogc-@0x0{=Em=VWm09kAsy> z+6KpQk;FJ&OC0E|a&skP8ETFO1MWiGSbwmzGuJOKXvL*4&#Uq=>)y7Ui3=n-7lTU>H8!wf}&u`J_u zz-0CZ+~BR-2QRsx{te42xq$`H8`y<8qQed(jH4i&))vNE6L|Qc$GY#kzbih(HEKxY zRf&=e{vkdjOcqbnm6c?*Ab(s~;*JK1_*yag#S(CXu>tX+l?}%@E7%yaC@ljzuHb=n zWwQB=0XYQ`W*h4jO(v@VLHP*~Ot;b$j|BufT;`=;9`s}6kE563S?buT(l*#R)YGm7QRS8VV#6n4O~!xTj_ zxDJ-aU^hWbNrOxL((LIgg*f*stxO4KEJO^#2o^Xr6|pE(RbWFZgLD0+nT>O2HX_{H zKe*>W``!Z`ZC$-MDB)w*>#G;5R#MSU7Bl=OGKS?AIm9-^b>J<__w}u8zIA-Ju+p-! zy82oO`_^+a&MSgx6j!UepkbNV`i zZV&wgvr?nm`1>IvwT+sx}#%qUA9*;n*bj-C=l!?~I?qkbLeg1Js$BoY#D= zOhFTT4#MPL2ZB3_>?Gb`)2%Hf!yNo$vKs)?opm9tv3@o@Be8WO3-4iE)^KW+@yC^v z9p&g3NC~{bm(&f6R3vo~3N8n$EubBH#^J8zrxP?H{Ts-n6`9y`&Ri}ru(lQGm%bpE z7rg5%w`zbiRySeQi~+U**A)C=fEMskKQDum10f?0;CW;OQx0mJMEkiDJtqr{XRGEn z%^XYMIIxAht_0xu9Q9^A%|2*#oFwQMMDcH8?|JiZYht2vEJ2bu6DM=zL2Q69QJDrz zOCnqL3t>q^+PSAWQ{5?y)P+f+X4-NNBWF~0n%6XojYLrs zR)=`G+uGLkq5}n}d`M59?UX$!_=v)B=_TjMQ^WIGar!ApjC}!2(Qn^)$4h1f+UH`# zIA*cbM}dHj%a*j6=mYH?FYIpF*Vf)Q5T~r0z!K<%Em_!f{u!rVdEq(#^7rRoc=qd7 zEIna%V=Xj$E&V%Hyz@3^oVXiha+1AEPa}`KG%g~LB$9}N&qA76QC3!3Utc?Ke$(P5 zC%yTMH?DZo^5YjCKYhk@@T7#>CS?lCx4XNmtE*#hpdaX0ug=*IW0~Y}$e4`ZK2VNAx4~pL@Izy% z$=kFnLz@tjvostw8#arxYm)H!J!kjPPz0Ko+i}zj(h4#5L@~a_N7jv+(0roAN%5kY z!}hptUv)MPmtxcrGKHftTpr7`tSstz-u7goKAwW`{UqDlymX-}(^9&D(gbuvVJi>w z!a|n}Gc6~M3w_;;R@uH5GT>j`3U$vRWcRdnaprSTKW7wGye7AK=Mn(0x3GO6HnV5I28c)6AC5qMNYBZjYq-=m&yWq5`Q;g&9;AD=K@bI%g`k3mMTv|iz ziql&lnaGy%>LhneM26X&McIjsWKmhFqmeUrpdzuHs&ngNJNfkWNWzC1#`y?Xfz}Ko zSsIFp3SYJKrppMvj7>ViKsB$YZ=k!kKV%H1H2h+~W)*BzYHeD0)LSrj#)3K1y?|c| z3yR?D8r`sSbgrXAwJhXwu84l@cwv0u7w&;R+-PE-Wuu$881cKCZ=TXgZe zrv>1{C@#fVNIaRDG2}%vM@Vi6`1y8_OV@gK7Hec^Rl&g$gLDfb#HeO%>t}wRiEQh4AGP`NmPpwX@157Fj zD11SAd$y4npG{G`KlcU-WRqt$&7-xfW0p=Yi=I>*ezHIC2$L2&)uSN7#+n{J=<9E zr+Kw|8!ApKiJn#(JDSliR5uS5{gO^TX#wR|-73UTEe;|XF7!!l6y3}nya_8Ts2ZZ7 zNJ%MN7laeixK*tGS}fFbVZRFaJV)(K!JlXqB!MBPiV_O`R(>6^D=uc5EE^M9sv|;Cb*=Un-B zXJ7pGH=K9o=_^h-;nWk4ThIisRs%cF@ESl%4-@;bumsMSR`G+hYYL#;ii#*6=*$_@ zjytYt@ku9~y7Z(o-m?6hv)=UPH@*J!)0duj;-WcoW;Ha_7msnOrQMX4^WYu1x3{;o zwe`Tk1AV={$>cCP&QX!Nk<2&?A@rRRaP)cUin1PdTD)l92QEAt2LgEx@GFBLXPYzn z)t+pPqnYSuq@ayhQpuRyMFQhd&rL0uWUUT_x$5I{>+4D^8Q@3P_5A+99?B}e)P#!K z*Y*N%f-U^cbE+);+l$}Rc*Yy6|MOcrVYn;9KlBZMc=UKIA*$CK2@62_8||Q?Nic}@ z-t&(+&;E41QyGh$^@h_Q{>w&fR7iV(Vam*vErO}xofbVJaZ^UVQi_vmBNE=D#1(8F4I=7vs(h;|sa%HFLnu?=%%&!o;$X{2qxxDYrM+onq^u#t&uBL zR92ekzDEC!2EW?rqL|0d+US9bGK693b?kTpZ?(3CiY5Ertb;=33ksS*Qg zLzA$n>mg6Btsahs-p23T{!k6DO^%j>F69^rS^Hd!XuTa;b|yw4F*9 z05cyJ#SnldGky*jKp6z=u%Iy<=a+(v!d|{&3+p$rPOFU0S~m8zteA-p4Gks|tsPx> z6+>0H9Nj1@1&0+5BMG6EJ;Z{tlG2juV$b(yG}L&YfWPXe18IWo8yrK!I46-fZC?sb z_%Z}HqcDvl{y1QwhmJ0ALe&VMUPM8K5dWmBbdRC9yBb3HMgRf+r*)o_pag*L@G#8L zx(jA))0yt^={K0)4pgc}%ShdFD{llV&jGgF9d+dX>y_DVgNTgbD=PO3`2-8G+?PxQ-H{hzCMfH8Z7(67T52GbP`VKhU>*VmSO{h9@*FRh>juW^iE zWzShm5YrsJ(!F$+s}5Y7Oct7UxsO4D(93B{UUSl-`NRRPr6zu7xpA`>&sHP_E48a%t7k_ zXDLuKuHDTcp54r@a)G-8#SCn2Dr9!nM71?CL>@f^1W5D?b2}Il07$L9NiN){KKB*) zT(K+_xd4m+1ME{IMj=p5yz-ORP%If1l_fx?DAx1>8j+HQe~26i0%4O0$)HtB=~I;k zjO%mAe0JrZEz|@CDXSK@F%Tt{svQCX*+-?;EaK2GafEWnm=zd?Ltu%RCd!3aj&3LV z4wQu!VjqDIix^2GG-Q#-3JcPxU0m|w!F}Q1ZxHM>b;5|DaC8c1gt^@y695fk15mp> zR@9CI=8LtuFJR>L!J|iiuTx%;^uv{+P=ZuP3s|mJ@aO+M?Jo*7iicrThhBqQ&b9?C z)7A30In#0{PTDNhk;9y2pjPCjdknW>GD_(F4Vh8m%;!#r4CCNHLN;;eD(tWmahrq0 ztYnIrN#3!;!9p8ws1c$&$c$%s z9N=1sKRpOkL%6!8s=TqjrlGEC=JfieS<`XMoi%;V%<0EB&0Msg>4f9v9@jK;_N>O) zGpEg(ISpqVwYAl?HB|uL@Fx#n^osMUERZO!EY5(qiFg7opV~V+TlO8;+tRZC0Cru_ z+CkhxBCeM7CuiJ(IuW1R8;7_!80_M2m3ffDM{1`(8emI$t| z!26ZWCC*QtFMfC9W$&L6i4^K4U3Yym@F#6?y(~nJL^!m>HJbYAk2k&d{AnBmt&l1J zzCc00eH11e2%Xk%FwLbjhM9<;Uxd(-IL72yB2F1tLd0Ob>#R4tVc8Obw=AaiIiiLv zEn}s1-N3mLzB(TZW<`cq+NhN!MC22Cus|nBfTgqYCdqw?=TNemnL>_)EZLE~rXe?Y z+-_R9;P}_P1~IAR5bi+!=-4FkC2K-Oj7h3zU~Er}xjV8otiZKk=B8C`VWf*={Vb@M z_uQtr6*})IlMQhjxBI!^VVzkH)lMfz8QeS_H9Pl$%?RoOUo~s=0p{D-t&TC9RbqTN zOM&nWLtuu)C4ja~G>W_N4uWL*RkGlsa9>%` zM2)-z=z^|pfxggGW+ykB?wT&S^3yob7tKT^=b2~+(j5%#1qlJPM<#D4x z$#tm2Nvo@)^aOdroV3Zm(QKEw@83%FB1d?fn#vFFz&m_7Iac<~n ze!m&uB}-sw^4%t8)@&*`Qu6u-;|JS2;Vo(FuDwq^w++X(U3+)z-FKj^qob=EvKWcs z;ZfgXv1ZH>B)?~Lttasrz#I^5DeHJPO#aF-;*F+~Db&{6*WcCM-PX~$Z~uYadz<&R zpe1b`U0v{coJ=L*0ND@7TIY}f;M?efVA$~hHBL{_xC5SN{pLlWA^hBtGmDke&iw@f z;p%8kVM{c$z*^p4bbbTminBOjI!ZX?V7*>+eyx^>MzaI1Y%3XUS~7O*WJDvF09o9$ zBAW806lLMqz6c=y?=>CpjdYBOKpO-gcH@R%N8$QG#?r-&u-ZX$s9=O1SvvH zDH<>m!e7Q_90iX{L3hEDhNy!u7NkXpDa0cu?WfldNN1FjsIsWZKi)mB3hVMSg;Qi& z3SlBgoQPKCSSW2K>cXWiRRNQ;8B#B7K37y$)lHiQNv3p+=Zz$XkL6DWC&~WN6l0F> zPLza8csb^JP=P@F)05eAO-f}qm*rkeEKsdXj(~V!+c|LrseM<5nT@lGR|4`5`Of~6 zL%jFm9dq3$6?uMRYfo!ql_WSYk}7xw62x(_?gv7~njWAc`@$W%vRJai`6|*=H59gs zfz1SUFeM!102_eksWAhSS@;mXUI55ZrX*YS@ypo~8r`Ld-Ryieln(%T-M4O$($GAB zjX-?#1r5O9HRrCt=P(YW0W1gqnVdr+BKpx4QC<{|enF>N3db3k2iBysGhhLq;)4lt zIHeq5LT8AazB^s}-Z#Do6I>h$jw-WEkuE&%>}mD2Y^t9Rbvlz{usP?`*=FjNRa zq``Gi22zHCbrV(sQn>tsICQ26;B7eLOaDuaj35T*QN(y2+=)_Iml>59Gi{A%Z~1Jy zuLQ+$D6az?1Xm%5NhkZ#kXM&0U3tBd{nFJIc3I}~w!ozi`+tn%^0Njv8n(*gD} zQ;|mQa3(v>d+<8vTN|dB^HDsv;kK1h`&jY2n^^Z|i^G+lo$E{5WyXjZiQYA-pkw zvNBp6xaA=oNMR3zbET_S&3?_o$T1}RJnG>k`@qI$3kyTxNCe{!<^ zl4r)NwKgS-#{SDo+DivK#>jm3f+&zDhg<|<{2v|rHh2i&Amax?;hwz zu(3NnZOguC4YhM;PNR)7EfDW3xR|-ne0VL`l^JuDS0!SRa*rvs^)vpVt~twaV&sw) zu{^s0a*<0red8>-9QKBKj1+Pq^IGsj#)vH-W#Fd3zeMeGyENBD=rf3})I&XlZr;&+u&Y;ZV#`v2uhX%0g!)ovKGq64azESpWRE4_AGHi% zCGKK_#j!?QDcCB|IvrGNl1vHg1&d+Phzx92sdjm)de)*(0(Tu)t4&x9p=3vdC}0QGz`+F^KztP z%rh|U9HfzOVlXb6s9d=V>=12pSFhL7FVr@is0BlEFi<CkY&Q7HwJ>W9maxH2K#OFKp_UHaP%Kh%)CBnj3xKwl0#!#QO z_{it1{Z^;o1l00!oKbZy_E{(dc1gdu~1JYLJu z#YC21z`%U(yBjR@3%gTC|DeHP5}K+p@W-y0J$H5)*QfqCE2$uw-4!=(T&d#F3toe3 z!r<&+81mRhSQEH^aA<#f4-N!gR{cw0;L(AB0T>DNIJNjbHQJ_-OVkySp?16o6H-z% zT5ig<9EJhj!AoB*SUiD`Hd`2yNXEM^aU`HnIMW(O-_uBSmZ5)@hI$7eijk`}vNt40 zwMd$kOvJ(a^+rb}-e)1lBms2Y)!(&#Xz)*=9M6_X~eqE5b7h=_6Pcv0BiSlMHIr(!SSKmti7MRLK9)~_cW)H$MpX(*c@(_D7#4;JH)sm$!9l=YsOETzUKpJ~%m-Xx~t$`Mh$b1ItSle9@ z{sZeFFxObuXiRQE^lUn_af}glxM}9pIyve)nMa-wB$1&CH0VxegaTOgCU0uX0+@In z!W7mJR`3}71)q>VPusdH*N@qs-9ugPJ-_bA0pK_Qa4!Ng>I=%FWiN{#V2%;Qi=j2- z5BT5+K~u%o29N1Q9w$MLzUwANFZvBdg(Zf6JxUgVP^quQc0|;NM0p{~OG~8ZF%|Cy zO`#kS3zUCs17lb#n>N-wPm4}xVjY*j{7Yg5g45`0p81()G*I9{Q~8n38%^9i9A_8+ zxFo}Dhx>=2q2$(G&7Ix7^XATg-$kwrAPBDqKQ}d#?3yR8>mhDSIu$YKnyBK1vD{+G zjT~G%`EHBYUN@(1f|=|FW8em(yR$2iNT7L{a`r#$6J`2j94&>^a?h_&_hYtN$YtC;#(WODj)q0?zK7st6F?~}-#VRgo^3JFTg zB<3Kvgt022J~ININ4aYGGTO)ZLcheoKU>}Qk;|viH_}J1nE78f@BP2*y#;(6N3uUY)icXN zOJ;TwJIUp8xg0aYV}9?)%*@Qp%*@RA7>@Ifa>+T22HBP^$ri45ce?()Q=0Fm)IIX% z-uvhIC#%0%?{-&L_sniaGyUzVt}>;i!@`#Xv|(5vx8I;Jrmm=rb4gw_SqYf>^0gZCI}oVX0=Vt2$Bi7}{Wq za)V60QJ1nI(;RZ(&4pVl3r{?IU}oz0(F4s|oi&?upB5D^KSrV|G8TJOlM?d%(!#-+ zK|U?KlB-cQr3&e7l~GqUkB)#wDZI%%ccMyO0cmF!s$c>A3w*v-9Lv(a@dU0iKur;}d_N zWm1M+1*URp;x#DZ0SV|ZVp%ax%)Jm1Ob;OSsjkEgj15t%)u?5etIRLl{K}KhKmW?*&0as`p@D<42r0Cw z;vGA|So!PwmVI4?Ks&Zq257EMgM?3FU+#|pQP|=qvhYXnkKNtqUZ20=e4baAhwQgr z%N!FkL{P0a8ns*zU>gbWH?}8sB(sH1M8qz*Xm=sV5E;{K)Q<1px5I6iAR)N5k)9=z z=A~t*E2tA5<}y{#^B?a8rg zgtcj1o9NI>-hq$5^U>*vF=Ge~5qpjRzj|?Vq>j!f78;gddt$Z{gl>Bl7B+_DO10&F zfZ2UD7c~llJoVhV3oDiETKud3Fz>eGqWVj||8ToaHetkOvPojfaP36;N5dXzm^A&u zNZ`MQM!Oa;MpMvL2zXQ;Y21{mkId>Xsd_lVfx|C{ zGJA2a@O=r?cW&;=+}zcbg8CAfcDvbVHuTA~#yZBB-8*TCh=_ z5q^Z#1I!C$B~EU^M2nzr8ApftS4UdJ@k-vWx({qJIWdu%)VP&J4D$J!w_lQ$ z;l1F!j405qiuknh4;eg=$K!jx%>|jSW9#of_~%!XU5>y1&#xjLRlA*j(?@1Y%Ohgq zAt$Hs7Q&($%x^@nZIUJ)qn9xD28jI9_Nc`wjWLF3iVNu88814r#BEYRc&wka79@;Bejp z$?ZVo{gvQ=-htpePgqUi>Ihhvq@Xew^p}=yzWVY7$9}sT8#0}$*K3`2D@*+iM=mWj zzIjAMM8qzH>;X;(mM<@@JooaY&wlyIgc45NubF)7$UYzTv5qYnEnOq#*Uk-fP`MM4Bjo&xhZ=&FlT3KA9(k)&cJjR zIPto#;NnrC`pqAibu?H9b7#hS6>sre%b>ZgjJ>7b@Szv`dy4%6Tp+Y!aT%#!pv`64 z9IAObW|} z@EZ{O7Gh@bu0n!MI36L_Kd458^MXEnU^d+ARj+03R&gb$``fVT2&jV)p5>-$&{MB0B=?oeYi%4y{Uk5&pxxzgUql;$9S2S*F^M5HD+T>1NfYaR59*Uq z6Mljza)=9i!vd^tpG0^mg@noAhRdY4!SFV>WDfj?L4~!yjlS_#?8^b0R*uE;Pz&$f zq3zah$H`P0=mhXXTeDY?nwwuL^NKM{yQpbrdJIhv zZv$apcW^1`YY0*ZLtqfy9Uy`b=ZoSfbh}-b)@bhXm5UcIEi5cLw`Y+Xp}y@_yZs>>f0q{q*N8v z0N#pbJmExBxA`vG;JdJF<9t0HgHTtRM3KA`<1yv$lp#EW^+K#puD3VwiO%G7;hOu_ zK{{gzB=OYoBm1T&!f>A@4X(GF&1SuBQUjIsZtv=ir57&DJ^9?LuUx){j|-S2-}?fy~LRQxaZF2KJ)pF_4Ub#as1>Pz5bIgy!tx%KRIwG8hz6pAvzbM%389c}*o)aRE`z59&7!*I|E zV{yyEL)Dcnc9@bYBi1gd^|q2wA%)bPN2^(%nHqC1S4i$881JMf%7{tsWrINkT`zJV zUTU)~2F6wF*^zflYKq+~=*-)*%u}UFjX@~@#-oL*gA?I&8P7;$BM1X=$=@kxzQ?PX zNsfYgxG1Y#tVn+4Jsk-8NLK#?(?@e}4(rROeOJ^$k6mo8tQUs`s-QLN?A=895aiY5PUq3bB25-{Zv@Kg|( zCD0lS1{>>Lx3l-!)%lATE?=3uwzPP2qezmDzo;xtoo#%q({{gx`{~G#=W4`deSB(a za%NWT@8ZPfXK$>2+rs7_*mq=KR!brxA|iGbuHRZ!0gow7&CKM)>iWk2`iU?6mmm7{ z@=DRFjI*MtfxhK(HiCKvQZR@-yyXAZGUHD0IU4j|TgW&pxX_ ze{9%72r$?vsGJ%uEiQfei(hu0&&)i#Z=Ym6f~oqsOIKefSXGjD(7oO`)KB*42J zpcYcV#c9b9D|Vs%F_`@*qTlqa>luNO5@}*%XaPF;W;M)cIC+W@FC5JUh)(3&4RL0Tdys12{ z+O{bo@^`sqJBKvkcho$R4XT z^W#Sj-go-AqjnXSkO<%x-E2C`rz;pkS|_)>zP>rXxcu_v>(9J$<(XHmy*jtxs*B6( z&SGq>^}Nd1%X$T1&jo80l$0tw?sf<@f+L9*ObeoB+4lQ`wYBw|OUus8d-3Aj+~up+ zuisc%UhNJ!ywzMhP19zh?s#vj)r85n1bIbcX!gKC=lQG+*>*6Huh|^r&0Y97j);he z=;t|=AtdDXo2F*pQ(t`S zOKzi0Ez4$S_N8emebOwGp}U)#NyMHd!0&t4#K`4-wUDE7k?8%?hJJmKnom3-b7#f26-Mw zzJ(U>vM~`3Cj^Gcdz4UtAo2vtP>T_W0*gKO`+a7{Rdirx`i=LW!Iog?hh<}E7%#d} zAEx`MH?lM}sqxmyt+kH#I`%uixN_mz;&T_~pTBVZ;?l@vbmDRvyfJzkiA8HX15fQs|8Us3e?8rep;M2^^ z?wfMUgRb@K&%N>w{{8>?!B2m2d1YPA9Bd-+W5baA=NVn0QAio?TMS#P52oO`K=SU- zp17!BdI4Y~u1ewvArS`9;2}Jd265H&11N1qj1Peesrb~_pZ@HpK6mBv6-sEVGfX9& z8l%HW$Xsq?v*#URBqHeU_{osQ_Wy#m1t7u&3Fu@hjIcO1&z+2n=oihzIySF!3I6rJ z{204CN_Vp-TeBcnwtHxka;0a>iFL=og1f)@ z3J?v*IUO=;Lu6dNmZnaUWm!__ICibqRlNNcOs;MRgIvVUtSxJE?lfFEw?p9AToyzb zb0$`s$xZP}Q{!H)st@cBf)D00wQ|F`Jv-{_BpB4@?komU6--Zzz3svK)0oOJA|hf} zvESVCSDt_M)<#$EmjCI0{^+GE^OR6x$ zGYJ%-x4oF43qq=y$;G#o*R^tnkI6pQ|4&=xM6ppQp_KWTwj%}L}< zQ{R_fe93LMk>jVSnVOiW*K5jF$J6`wAHU~5`Lg#Mp8d_=|IKNd#!N_ikO0FNyIz?P zm_k1YqQK%rvJGAQ+~g8B;wee&fQ^vvcZ6I;yiU;c-A7)$RmXj1y}g^i#7@)8$i zGGr36LPmsI6owH74c6-mI~e3OS9$Pk8%%qT5MY-!=0E?`7pBI?ao_c6Evou{thj9p{iDBQZxdk7b9-fBX~PlV?IAa^EUgvWS#{Lx`5TKD=H@qh z13!2-KIH}xF1jPxgWZ}aupRzaIw>%Yj+p@764VrH^__Z@8Z^DJ&;S+PtnzFL(H$Z) zu11XRVIP!(dZXExn4GGM)mPezFbPBUn-4@15a5`|aW^3%A`;;KApi2SFR%4;x!=2F z0RQoS{g`;mI0537tZi(rZFCX%**Qx;a{rlA#}1B19(OwJv3AR!+$8+Kqi?Cz8zMY&aQZj?z_%eDN5pGEmfT%<;I>qXnLXPtgc8F^ zg!o%yD&}jneUfC8MzgLdcXF5F>F3u`K6Sixa6e_nbo9&2*SYq7>hC%f=V@*+2zL<{$Z8v7FWAAkNVb9Rb{QCv=~9T#7c%1 z4O{``(M5pGHC6|qQhR+#h2CY0LjZCxlH=?Fka^c{piEzzWT(o$@Zz>*l^ECV{Lu2+v^n%-}O&_`TVE9a^9JO&z(Mc zc>lh!c2kI~XCkeHZ(rTMZHuX>G6c|v)U%Gs>;$`|$^sFpaE?PSKN6_r#5*9vO%i=D z@(|b=<}&KtxV|tyf8*xT5@QRqG0uV9y|z>x%Gr&p9Xfuz-e{IQ+A`Zc8_Y8j;L%{_ zkoW3VA}sKTmmixXv4+HY=IVJ#FB}jo>eWkk?bh>GFK)Uo*lrsnhLvByGAwD9ifN=V z$zYJAX+_R(V@$<_FM^Y2UK|qO@~Xp)%@vTd$H*_t%zk)gp}RJ?h6}RL_Y*~|Ar_8if!%SW;xWj_A zMQRz{Ij|g*17T!5NMtZ=Y8D;R=YuR8BJk%wkie20gj{i&w6t`~Ws-M67FSnRr5~KA zT-+VE<9FCgx!u96eBkim!^cl@IWQ04z!k%qL;^g52Jd7vAY+Dd_m_!n?%4Bg**b~0 z-~E+K-Q=#u{9^A^yXgwJAEiWFwsEBBA;P@P7*}RwUiE%tRPQ*hEiAh*Jg#tH-}u3q ziJ$X}P%fUUUp@caBM;t(pJi(alA)#+7lqqy-G0GWiLKRBa)#cP0tS&1Hf<`FEXUPs zwlXsihJqG*>Kr^5iJ_#zUom*TvLx#tfpw5(oFN_|!6OKt@&@xF%-R@8o7v_r&n+%2 zA|>FS1yzZ(nLW>Q7lkr2>5v9zDbfWs8}&0M4!f5#2wz*cd24muvE^;!F@EgP@y0xA zDg9D7Q>O-h5x!HjpS_oZtAdq2^n#z)EA!ksmGphg%7;r;rGAu;pG2sVDYivADDEwZ6@J@1Hb33y?+0NS1yN-nlv?& zW1WPCdxN{1{Xw3~R;9(8tM2tUQN3O}w14{0%;dq@sj2ZcvckgwTIK_oePF?zw+sVF zRv}H&J5dG(--}ICSkYFJa1w#p$@b8m<>2hzVZWvX^JBs4>e{Va%QuJA_hx@EkfC7T za1U8$@~zcs^0u2B|5w()@iI|WVIc> zq^Alfr1N}SxZ4Tvg^Qa~KronGHk2~UreFE%&YhGKW3(H2;$E(bxva=hy|YX>x7OWw z-OCm3z+au&`ayp1ryjd@eUY(6)lUqETWz&ND6%f|b_*zhtl}-;t>p0(l%$9dyQEG< zpIOlgbB>6FvVpE6dAIKlKbJEJN;P zY*_A9J~`PBo4mHZv9h-2rZqzm_IM>UH9mIk)UmfeboSx1r;i+%>9iW;XPrhh9KISD zVMGUSP@nz2MsUR;soFCc!#11E$*HM>hYy`Nd1BwpOtaPU@?_+LLC@LGdtGbuk!Q0? zBiQe5yH(zKL_|bvbT^l7uDF*gyiW6K-1d5#o3dxnq0y*+=O;e!uD8BX=MM!^W#Va?ybpECP{i(11haY+D$A0?!`4=u-TU>TGAvGTmUH^W~ z%*fQJeSAP!efZNP(#at)Hc~X=sDw!o7iAa;M2Ut70#d4BVSKFTHIMRqbK+M-+X%5$svln6sa zk7#RI) zex@ay1l(UWs61nkQW1pupwgiyC~Sz3vy6sp1S({h6Kc~Sh6U#5umAKHzBK3$>a|+3 zw=p;9{h6h?zmu$fF3oo!qQt6_=ho5So6D=K>)kxhy==G6FZ!MnhaP?Kp0~a6z6b6( zeqfjbqe&F5#EdpVGd@BZy7PFrFh?ATLovYk3~yQWMtx#(;=rK;Cr_O?bokKJ^pvB) z+bFb2thN1KZ?oHV?*;W8jq?X5{_lbIpIw@}-0vk35fKr)0HrYlRMXn^_4R@SlPN^+ zee0XP>BH}u81LXYj9yqXPmP%vYdQbtnW+iqNmI)*OhhCUh07cN^%pPw)R&(A??3sK z|M98EKmGU%Prh*Z#Y;C_=Dfkc>X3%P3B5swKJ(ZYzWT*4e(mX}p1XYc>aCl%@S;D7&-&p!V2ix1y_=Ip8C%|^{K z`;&9!@&hZERzh5avT++V_IC>lM=nquCcSd*4=XOospvz4DZz(Xq_{*pRxhV3@gDsQ z_)zdH)S_tAMF^K~n3Z9s)?>iqU@#cWUz@*tX>Ms@QBJj9ukZ1_m;Y^bsms5B;d7VxhAOf(>$JMF}zVjy|rxicq@9QxdspE&>AD_*EX7&)b! zrlylNoCA@o_Ve6%o!HzCEbB#BX9T{nwBo35>C~KLshR9Fv&>AihwnpUa%$Smx|?4i zpbz%W&V9$Pl0fdx9(@m`Hc%y*+U68=IRO8=LOVzq;Z!0d4mCeZ-{3uo#1j zjnGYZa`jrHmTjGz=wb$^fXzrV2M-=QeLBlBILEQg2i=3iS`|_bSp&5Dlg@I0W1$sq_|HN4b*mIgB9UWCgB~Z5G4$aa zVE#6V3o?N#JEAvo1CiQN3;)=a^$jOWjd9QP#*ijvvSD2`4JEbAxWFfqV{MW2bL*J! z`i6@II&cNYhuxIHwfIamw9*o!p*j!>LnVfm*CDG7>256>qFzA4S?O=ijM)%d_sVU5 zxQi_xwaa%jgaaoL5fKr)3VIK1p66?;YmH{Z!4OH%#Bce~yUw0I@#CNS%JS-3wcn3y zUn<08sGioE^}4HA9`3#=Zn2!RWxMrs!S*KCw&1jtMvFS!P_N*{C_G zW1ccYa8;c;82_K;d1}fPwrdCXf+m}TqqVk!N)eF*_ zV1_etZp_K}u+uZ9V7c4g%|}okZcPKJIL8k8D_{L3(c@@0>8Vp zjl13jx`(nP2q7$o6)>(K^75wz2Z43HG8ERHU8y44dN)LF*T>4*1|lF}`44=RjCwjC zeRc8TQfM$DCg$$l3%kpr2kR*#(y|u@w@^}no-L!T_=Exz%*GHxks!pQZ8#E*e11~G zR!$9ZwESp_sOav9U#+5H`-yVk!yr1&l%jvkd1$V!YYUbGOI1H=JYS1Dm^oJ`c}hfgl4=4LSj} ztY*ycB#kNNC61tz8Rmk{QhZnKM1kYs@7JB1SbOs#O2p{QOZc54A|fL0BC8UDoh)93~ldo@< zFbDCu}@B{7kUBiLqk0VMIlI~V9Y5u$@04&}7=8!+-sZ+SG!-yV#A`;}1B|~SSFl?a zOPTSoT#{z{B*&Ic(SlRQ8=wAsau?&RZyMVcx{28c{natCSjvcRjCgxH`agrl>{%CR zz!`zlG#iE#vNrJ;qslKu1r!qrWBRbN0%LKKjp!6*3@?KqeE>2ng>!fR$&i5K7ERDr zDF@V^U;>w5Mf@=$1_;@))LA*dB6Oq*1nu{L0PpB8CSeH^F*)uGkWD>2e&=WbzJ2@l zmF^MV#@6zt?Yk_&tGppMhisT8BO8)oqAbmbh%w1vDM(R3;#}?EdWkzihnqGT{s&Kb zTt)EE2N;=nOL0*otwM0VAR;TeYzv}0aIfM6qk8bK)Nox08YtWqh=_=YKsI$hEMd92 znOnQOyt1*;9UpUxoDEn$P98mQ^5{XAKktiAKIdq#_(kIZgvktKLV111wxW=wh7+n~ zCP`{Ktccvh*)p@uExU5!ghOy~V!11n^P5yom~ByIR#RCfSw$ry4+}B{2}fp00rJwz z2iU0hvCZIs4^Z-9W`X^O4jevuG|e&$F3xs?zO(yoPHCvVY3G?&O0*-QHWxhI_f)kmAxK38@LYfytCTq^>sviyXQrOLq~AkW`vf7(`KF zR!t&-9nloTKC_1%lHmQgq%6D3(XG|;9dO^A%a z70X@>E-88*@{AS=PM&Pkiug?)7uKit5AdS6x`VS+Cb7#>ZNXMxjK85*PLPWAAzNWAA|%F<$N^`DB!&7g}|Cc`mCWuxQSO9Sa?5*j#n=Z*EjpsydYRP~I()cOuwLXiOPx`ivx?30!u zorGBAmI>P_iQxaASc{9S-8O&lcO3uIf92xc#DT$n-B;7A2D!B`>2CcXu2}vg?$eMV z^#e0YNxAPb$ADNwiMCt8dztTf9Wuy0JGvmlQCKT%?kQlI1 z^%wv-Mpu-jE{&d0<^B_qziygfOz#X`nM4hBV)DrE$8J#Y*~a@_ppp18P~65a7Uyr zaq4l%ZO*PNMgdHX685ffKMXZ{n->7I!oAMNNZap5&7iz5-5pQlh=_;?#yYciufvT} z8HQbe-OCj(%w2!(mAMO7uU}idNeN>#P3;sNuFf66 zRhv^_(*lCfC(!p*a8TZ1?nM7BY`R#A|ZaVJyD zYoTDc%BmP5jG#t@Fi9ENw9<&N+ckP=PLY%e#eQsuEI7H zLWNK{Y-T)Abrfr5P_70D53uw3k?+Y$ov|_A+jiiiSsmp~;_6r=dID2QAcn?k{u#MS z#=$k~Yw~Lxn)FGI1Xqns5PFLvD2%$ap*I@+)S!GMt0xf=5fQsrMCHd;HKu zr}Y{iD=-!KNes5z4QPk{%sZIS)Y##(5F)^N_U+$4bN1XlZ+`Sm@B83;-}?5q-h1CY z`}fbv-XH93E?k}a>ualv3pZ}wTIzP!E!eL&#Ug~R03(iw1bDyeTsq|L`h*(!hAH+ciJwmEqkL^_MMqxSafNtwgC@O9miOb_STZRQfVei(IM!|w>mXiXwdgtU;sMlY^B zL?G1+))P|r#coe-nN?u~*gwiB+_SjW>gTR-rq+C@(MlpBA|iGPxZHpx6@c{z+@!%9 zIYAcR`5TKbUcCJ5%g*t6VQqaw1~cTaHA`L(BHf6tpA_>K?1<5zz7M}PefeEfSp z`i}QK`oP0yoway+ywk!=Bv=+F%!j0vgEQp7+XuxGdV?@ml1@@|_rQUf6UUF8J9qD+ zkG|=HA9(M3-t*3f-}J`g$B#|#o6fQflVR)%bSV>7S5|J^xW2TwxVE-xZI1JVkqO3L z{NnJh_CUH45eYCCsFK4YbgLaohTO~dt%nD{A(C3xg*WXFthIOXPdD_#=x!!71Y+;v zt@=tT&B9Xf2}azd0Pb=Bz1~b*FQ9Tj8Cltv;Lj7>_`PL83Jk%-j3#_QA!Muo28MD) z{=V?}Li&plPEndQ!^Ylm?;Clv2QmyBZgW7|WD#I7hP_qa{f7==m_54(__t3T{@s%Y ze|H|c#=ZpaKox`L(Q6o7$x}(BOkr0XoT~lVl*j{z;?baLm*|n>H2e84 z+{}KD`(H45Ac=^Gh}b=#gu``A3h(~}U1)4eDc|c4ZY;lkx7o_+E8S1!#jEUvC? zVEMbi*2J<^uOB-!^T@eV?|;h!-}#Yu{Nita|F8RjPki6U-tElA?|jp_M<2ZB-jhcU z@1LHTbbF1P-eZfDKOA}ai#=~2R$bM$Gbe7h8WR&8M|6)IJ#_CqCm(vlxkny(!~5U= z&X0ZU1Mhp^JKyxChaCGoapKrM$9QX*oVkpFuhVm+cXf4PVPSs$+T!BE+S;0!({MWE z?<*#p2P69Q$c5#IxCdB=|Eb*Eg`6%aQI2$>!A1rv1!HV(6B1LfEz(_5mZioJGEBlP zf5cQWRKXvhU)EI}T*`kBfuMBwE8gJ@3Gd9d$gVcz_5}MlNj`J(m=g|-Jru@}wQP)m z!3I5I1T3AQ_t@bB_nkie{L7aJt~JbLJT|MB8dyr@eb}fuH(`fx@rG7^HcwulB9tg3 znbrTlkhO-;#K^0JBCc1nMs`jTPF22lvi~!d+2bHXK(LX zfblEtGg-gYTf5DM}de~4Y z2b%Tzp_zSSCfi*LF%c0F5$u~*rN(}UjjAP0eCR@M?aJEv^4faBoTjGLXtr7nmo2jG zZj`l}>{XPsjWirq1j+2a32XVt?6l<}+`EKAbm$IK4-7Wl`(}?5URm4VqIGR;oslj= z$JtDHn659)1A{g>99Xedk_rE?(n^y`#0$Kb8CaZ zCJ8{Lgi1MM_cB^2pfspNL;`%sc3{ac zrjCoy>WCD@s+AbW0tH8|T?NsB0($uhs2WN<9U^F=Mg+zzaDh0K^VH9yBup!0kyfzUU7=-u--{`d0gy4=tG zNi)d@8cF5zB^5La9nnSWQn&{P(fLP*0#bKfRsvRLHZ*#Shys3#P**#X5Jk^DqUBf7 z6O_FCi?G^*8s`kP;b)`KJazAVY;)-BO>8Yr6Q#ysU7$j~4p#L+)(E~Hi$B%Hk9D!YWtBi<<+=Xv<3fJBKIH9{kfrkbQGP;%NOm(c5v=mM=tqeG=(fe32D z3S9hk@>E97nKFG?Vg3~{$Ry)%n1o?$oJ?8ZQqE)uWgb?Y2FsyEjskiaLs|%B*B3ej zAt|AI1&J|@F)BAQ)RKkywNf9Tv9%*;OGKCKl4sp$b*dbsX6Xzzgtg zoicFbzz;lR=V1tEPZ@*K_ETm*Y}n+~^uup^dzNK`-X;;`dlbgK3I~GmRx3->P2wKb z?ZcRv8stSip&h6pK7F9MS}D91JkNV|L5|n~4sHKaYJR_i}~g^#Yy+0F$aK`w!l9aDE7@lqkXcr=MGA zEx3AP@%dLTKKtUUk3aRCd%66{X=TBx}Dsvhj0D;RfmVRE$n!Q z*jGx3u#M+Iv2li{DN;T?nY8&_e&&GHa9`9wVFqjgmyItEEo6p?0G36h`*e~Qy|tBa ze+LoPBA_M9Qe7koWYzB>5v&_6_wzapjI;cddB9{3@e&9M?6|vmm#%uPMdZ@)!s!9D zf+AFmF?v{K?dYz-hv5Z9Ov^O8csaISi{X3Dqo23$56N=7*x9aCp+#V)Ch`WP=|QZh z7+$gXAqc-|sRrzmBLTr+V5;cP0zCehfTZPX)Rp+QoDzxqAQ_LiO*$n*Ldh^$7MQRVY>ua#I|SH=I6uSTpp zkIVSQ#4~-YK&CU>&FT?|yR+Hf1u6CdfUe$A-+m>@2K_txuu&JQokr`(gNBHKnW02u z7*uiDc-7#X$KVssDdD*7_l`jqA3D22&-U?P7uRd;?5Z2Ii0NYV;R#@$ewQtmWtnQG z@8=-OT+m-uCe0GE;XJ&2#Akqa$PS=}*b(###O36YsBySL% zc9eZ-7!0aV>V*+NF=CKT6XspfKQbFHnSJ<>$x6PZ6#Y>RG>4EB$CnG}DFfuZQNRWQ zaNwaEk-^s-hM`mI=uUF};*90%SE4P8whn@1F}RL&WZT$p;}3N?0YwmHVf?(a);D~7 zE4Q?%C0=WPF7QFeRj=Nzl(&6tcJG11%ncq_bSI! zF+ktcahgRmU?Yqoq3+!($Oq^-n;o=(t>t?OWr~tHgm5y)H)%6f3SM zv6>$4M|X6QF8(a`{u4~5IVG6#C{=7;ydJ(em?qj`&*MMto>D8%!Cz0`E zpepHvd;C-n^D5ZWDUwB^V(LfLu6Kf)<~0jLDcU1>oeV&l8QIu`!dZ!#l7%xquq{Ev ztRN>3gEBsL~FdQo8uw}r~J|{9`+NO%=_*ge=s)1Xpm;YQ+4hAU7>K-Sx zQ60QJHmNYLW93dxZeDAW-zM}M`sYSPk$me(nn+sqYF)NP6N93>=5<`$EzPnd0_tj1 zjsUi952*);xHASCJEO4~l&8$dx@?u8HXbhlMFSvPjKqWRowfy9=GXm93o_#(9}4E2 z7zkQW92)3QsHT9xP!{W_r!ZRQej$O5H>1fC$&G#i(4s#0b>ywp{7#aD@ImwE%U(pRAY`I|u>nL3 z&96kL-dBgmh8aEXCvt!Zov(C@arIS?w-bUGRDJv_z^98W!0WqxvU7K)O2M%&2@<4( zm-v2p9n2d^2&|LzIvfH5p{!bGX&Fh8a1-)`H3Y_ABQ}=OXY!5gZRUjmf~#S?Z>Uv_ zg87Ll$0;M@(H2s)<9X^LW^PQ#byHH+Pa=tiJv%GylvNoV`^QnQale)mg61|SlMj=* zryZoAmm%+Aj2?tNqaPi*m@D^@U@fl}>ev##O z!};-WeDP_tp%BGIRj z!xsC`tLySlAT_t+Qjvp!d;w9Nb868%x{ilbh?5nVR8$z)76aFN^4AgnyD@*)x={_mm_yziPa&MTCNY1hEG>-TUh(Cfm>N;(nvPw|VUxAsjH3yX)V_Db;P zC@3z!&Ez^+moqXU0yLO_LEtag6pd8MO6ZU-XHrUmpL^O|C6tS;L7PgOSypY-2&fZn z-$d~XPq+o9sjgc8l_FhGwkhe7qXsE+XoFd-)Qc`nl;h2}$u(fJ%*KtiZEC989P?y^ z{Ch}VDf*G@tGv7V3`dOq*+DPf%32kwgRkj|k4U*!X0kjpfqzM(c{?I?WsO0ru&4@K z(pqzAuWaR%<~4#)h-R)_ifus*i)c@63G&!Os^19q((7O@TR)F>0iO?sQ@ub~yt zY#ga6D3V`RM80Oz+|2Y`?|cLKgQ=0`&V{A+TgX8-W}Tkkx12!iI5=CY%Y?rAaG8QZ zltdm~%=7LRdSX&=nHOlWm+PsEQLEnTzC=IjzZtAbf7t1UGy_?>!>`AuilkaAPsC(Y zo64wFgKGKhi$BuaAmVTgl0|KIGQ}>2?(#T@q6l*d7^;v9(!<7Y#u?D+vCh2J*ZL_N zo5hpZs}3qWh_B8?A_No&S{ijTVWMH@70h_i#@CDplYPw&%%z( zpJ@p3^t8t}J({zyO>J$V~*g4$K;5}5ad(Z5Wg$qjHicZS&&^UW`>A+2r)@C=d0o`w%{;$o*jb9 zqiN+WtEQkc>fJ-qwzm%w^&tcRmcp=NHcn7>?>?P5Gal)(SEg0-zOfyf z4FTp?3~S64VSw3-L~<)jqCpRE@j(qwi;TWt!eLcK(gb*>E5E}~@Hu)Jy5fGXTCTr! z8R*j9m9=g=IMbV}aOdPU+@Sm>JUWXppac>xThlTZRz>Tn7Q)%ZkJ|dBxrHt^x3xml z&12Q0Wcb9EE{LFL>Ae8aT82ev2JV9WG7!zc9Bn1{up{UfRXT=`i6m9t-5b_9kjKiH zjHGh%idBPt4d_;A#yU%`M89bp6>|1HIT?O!Bj;+F?hse?RZ#nGm;B@CxB|>8AwOqv z{{W3{I4A2&a5GI-`%WR7W=i?cjZ@>-l&Io*4x#wfK=0Nd>wAGFh|FYRbj%GcFYMYD zT{i5@S(dcc)e>3YFn}f5p?T5?wk-W7PcPxOt_AtWwSAX$1YJ>2@!pMmtz#!Hx&2cc zfqwxs&mimu$ygUI)gP_D1QN4wA%j__3)pCokqK@8oNzCjkz#_pQVxT$)%|nza+#X_2ATR+aN%!t$b z-Qsz-muK`3D9mkqrx*tYlN3f2gK}{iRlCZuQXbN(yk*-7qcQFn5&E*0FJIxgbF*FL zH*#MKp63?I2c`E%cC4vJ#vo7H8N8}b&%DK_vZh}BE3n0W<~lOVpD+Ap!VLYT{F*+6 zyqh}_SGaJSG;nluls{wZKV^$Qb32y2+)&K@YMfH@^I~vazqcny?~_Km3pj4YyG-Vk zQ&7Xd@Q!=Fsu+LJ+i1Hd`Kv8_jy*rkDtDX$jKcJ;n2$fLPtR#L+1_2Abl^VrD~E+N z1Dc=|*poIbT9M#_;xzjeLP?-C2X#YSk;gD*9_Ka6V~{{2!|kyg6^?IE@YOdIR{ zQn#usA18TwQdJq_jt_@MO842KDaB;)m%i(PX0aE!>BSEnnTb86JcmAtZBl{%I4{B% zx^elH5F=;0&$wH9H6{WpNK3gYK?o*-BB3Ejw@=oY%B%4PZ$o_1@<1KV>~tcKyrZS! z@qzZr?2zgxf_SD$LLm1ff)Gkx?vGWZe>u0Gx?KxHqCVc(w|`PnFHND^<>nNxxrYP` z{RziC5q%m8hNvpVy`K5(xmg&%X+gD#=%~EbBB1F9vhhgsUnBH~fjMv63_ zu!jeVC+B?P+Xv%>x9WiL-$sAVZ04Uoi#`t;yXgaXI%r3~IWhr)pr!2!U=pSrR>h+p zoSP90cu=xXaw*%f5};KuhOC=A9qqksikGn(Sl?H@XZ6|WD*mF>H3n&+6-vrKqw|3; ziT6Wrm4CkRxq&)*qjR^f$vEwq?|WaP{~Yl|_7u|~EifH+akDw63ROwX!h~$JVawgz zMm$Dm{3M^VvF=J&K6TPt@C=|uLbGZJ zZy)CrqvFp1TyMbWGK>y#Udcxys9Yu}vUzo@?N=QIWJQIX1|Yf>zRVb*%S`P%PXc$P z6(q{5;+#&*OQb;A|dL;p`vtgX2=xZ_IEp6Y9(TGhhn^2}f|%dvFjk zQCsP{m7?YMm|vPjOX`xzu_hldGoRNzx2?<e7I$!~Q2}_ofUAbZ$Xh?-@=JHnH|s z(5K)ZcRFHW0*v9*Wj>tCU)pNdfGKx5AX-*>IUO-t2IdPxa)&m8kbT(deqv7H@*z;? zG8~GhHZDg;xVl?Ht90{a!OGzRv7;O?cVG`iV7gwkXi5FvZ__m5lo=JD<6`oHd>2^= z{t2!&V_RKC$^1tYnPx3%sw*|D9Hz-ktg1%7kToU6iFG5-G)#;_Zowb|qw~;@;;|8v zL0NU|xX`JgGv2`9(I<{|xty)>`XPUbWvm(Y>^D(YEiyhQ2$x9+JNrKYI2DP7q*o;6 zE1h|g%KM8)DXjVu{Ousk51B{_;+Je$V5d+5N^E66t;v_s5BVMjQ(H$Z!@yf z_}rD*(Cbq$WwRs*H5*YkokYFzF>DwPHR`(1 zD8#eOB2iOvS&+jYt%vErr+1*bh=V7_G-27XyDNL;3!t?Oi4%VmM0D`PlNn57VfLmO zP{-%>+G{L5`~K+#jcSyT7GNHICQVeJchtAwPm~*A83$)3Qp?r|j?2Qf`tI+4;_@mV zxzaPDq#;I}1>)vBvS&X9JidSHe}XCNfN9r_|#lMKS*tgfJ)PQ0y{nZGF6gpfJ8ZQFDui!2a2?0ee@9Yl-=1z;MKP^91 zD<=rWVPIA`#oCD6`>AX;rz~U_n@V&B4zmBn=d{@@gGK_TY3&=_+ z2sEBhy;JZTkW>d1ozd8GcPq75L7=`1#uVOXVOL0eyZM1b+rG^Ks17 z+;3JusGqx=z-FinVZSZEA=g71mr}P>lMbH#^+4@i*+cm2ARjp9Q`T9tOk(IGbCJ<~ zi8wjzr`$ZYAs$fzILKKO`%qO6hP5vNaaSJ>-5V`mq(n(jRdf!75x3S~8aZ0xdNfx^ zvrbP9A)kEPP-!jiE-Fu_TUn96s0Om;Go?t|APC6VtvRx9lSxPzCyxn(b|DM8i-Gd8 zohUydz+=!f?u2fa>jk|zc9#E@$FK(tC^&k17gZ0C!A)bb(8L;#N%AL_p$JvohsF|N zR|##li#-D7qNT4FhL}CHBuC5lt?jXkxuMTHd@x+ix_{tB{nERqfa(3Hl0!r^NoRMf zZ1mQJNh(^~Kq|!7c;e$4^1g^wr;@}f#H%Ja+k#Pne0b8txtPRHnF9tAvs?h5b*t_6 z$f+TFI&0&3<+dzYl+>}BC$&f+)vY`2N{!=g8`VEm z3l4ir=@d9NU^KWkiw0fKlY?2KhWXZY)y?;C?>4kz)~taOTylrSPrO`BAsI1&3Ndx# zS`$QY{n*`l({9FrJ(&824o*u1+0@KnalLm7D=MoMkxd%Rwwv9OZCyuNwDLZ}}C8l6-|B_QQJGAt!HJspoZ zvxeGUdd=>fdpeB4pG%@C5+m+ReQWDh-$OgwEs>&QWQxJPDyPlbQFSK;d_=VKN(BqG zf5~qo2tq(|8ot0xH#oTsjC3GU8|e#GPup8J#Ul|ZW|M}5uEz057bzpP* z7(*)*&k(+U3N+-n7bAfXwR5|1sUpr8jgmk@G{cn+(zhkfIAPMw6e^5TvB6FUCJX6-k68_Ez)uV*A)*vwNqgJ)O@%KUer;=+3fbU^v`zk2` z;F7Dtc+}ZXnsG+YS=rL<9+LiSSBY%*r%#g1ke8~SlhP4I>ce=AEnBC3&PWyKBdA*5 zjOIBzx1}A_YlV+HBfb&9n_K0?ylr}yB93drSMMGE`$=gu2jmDC$f||<^iAh`%h%;o zG}T5i*h%O8B;ygnJ~w12qq|ZCjjBm;I2lA8L^n|Rmlf)t^DQPT9-xm$;Ow^EItBZ=C}Ao$i>_z!;JF?XH4mZ%pL z7MC403k_-6`SxvZqd$RYh)Yi4BOG>aN{i}p5l4zgT34PQK_i#a^KXFUNG{8K^BcfS zpAuc(*j8f^z<%yZViv)tcWh^0(foQub9RR2QCzXc*;d@AIhwYhEA~%VfKQ(r zFd!&RS<0v_9GOaRI5{jFL6tHC-jCRvo?1mhs06T%1%;Q8l(3f_A(YJFTXcbc7t|tN zGyls(4V7gU&GbBD5M!_u88yh-FAQNC!^0RxdN2&UqFMYsezgTss+7p%J>r@0rh(0} zX(k)vM#n?Gh&~FwfS{Cd!K;^Ud)rh9fit`*9c>m0FM^SZP%|VpBVF?Q#%}9d%y<4` zRq6LEbvQ|T0o$c3P5)0}3@6SAr)8TK+ZY-ISzm56 zk~kR%ZpRn8SRWYAPB%qHhS86mo zxj1`Dq(^{0la)qEu8qY`1`FDh$tqV1L4zuN2o4rdDXORN#b!|k;PEHVLHWSq$f^t6 z9lxBpN%c;{tDwytXJiO~jX*9a7Y3Uz%4^3h_`|ksj9E>wz3l`EpQ4*EH+_7~XcX)4 zZv+G=l?$7ww&Wk}RtfS{DE8{T{hc^7TJdpP0Cc>l>ve=j^ILD7*r?Q8PyzR^1|mWy3} z>$54$UT+xh+OP1YaqfIh5VK;KQogrQ&b3}RZ)$%}baslN${g3jaTf4^PhT?_!!2cj z%hXib1IMHk`s{l z(y!2FNX8V9Px%b5^;^ZlxQ848ur|exuR=qv*Y6KD<$w}3ntqXQ5T>jjm>ql9bH$e zY4pPKl?8x7+6bqQG4mGD_^^U5h#DphhfYl2-r;d=-*u~j*t$=7>Uqy)TV~Vecx-q3V1*gS z9*I|rEArEmhz&3m=h&D65I7t*t={`MK>mZ4he3~2cN$XaIi9UF@A}- zlp{NBtK22N^Rr{avN<{$?w9?VL*r^{Is8d?wYcZ32PKk`o+W3TmvQi|wz|%vXc!u` zFITx7m2_VFSUwz8gIcHP9S?*Fq2^upE&%o2#y zq<9B#^<=FYHMv|aF9-gsYBihcnmSIV0Q8bLAETrfiQ^!aUt7cghIW|2ukIoV5Wj>Q z)@XG$L93lqW3lATIXqYjiv8Yr0nVsw^Ofy&33`K5lO-tXx0hqY{rUv;JQIj%fFXPd zEKwj{?ScucJ2)%!_KyYo$<5hgS21E2mi(o~*+1gaJQ8A92l>RW zRyYG(uU-sF+<)IL4V^>N8Ysp=r?NMu^i$aeAx82*)3-j#W+$6+Aeq)~-T3M1{!L;- z=WR4HuTfN%#a{Wo=_tO{1n0 zt^hsrfcPuO$06AZ<)#(lp#1{!wi|g_1O=%lHH+SV7yyK&y0}%>U3h_E z18bkQC2qeo*E-5Q^u5@_EJFHFcGIpr*0Vo%JME)-I0$PD_9WyJRs^VokHhE2HD;1m z-3}wrsaFH`=cNCgT$TZ#O(rOd!P^jdpi7$5Wl} zeV(xs(k+<3PcdPdcrGr!|8A-HwM3h0jR#v`4>Q7`gr*x*-=KiwnRtNlIs$oI+0}TaZk2 zB4GTl#o^l9$mHrG%3*45+hH4g*RI2|?(a8>^Io5Uch;{M8r`sCp_L#sGKQX+Aoya> zm%9BM>Y1`9#hhMN81)OM{9GJE(R$raODELYXY{o0c~6?_=rUH!v5idV^gQ0lcG@hj zZc~5Ss2EhR&^Ra$c0PKq55cvo$>D7A6!sx;I-Ok-n;7ePO8o}9j3ntMTcr3VrPaMrh0?p ztx!$Hwu{p?-uJ8wPl>sBjkp6f2f7KZ))TNwJF8u(+dh@-6nim1nHET2&ct5z6yyeS zR?4n#sGyw&W*v4olI5i5bS59!3ew5O6tWwtdFVg`zZ~9B0^lvWUkM(&pi&4b-%$=+ z$%(g3Hcpp!{+s5>{yc1=pp-0zciJpC**u6OnIq4X0I=^cHs5h3Cr;%dAqShg_1@%g ziQdf?_C;6iTeZfLIZm11&E<{Y2PqPS9jpGC?Q{<4noeFxABT+~bqMwd6RLMUvizRz zV~}Fs{-Dnz`s=0&f=o?>KaxI`jI{-~oWmk-%tdPH1dYZlI{|iXjc5bL#)@Fw%lvW` z=gOi}ZGoq~Gc#qrVgIe-&keYISm}}eI2+?2M~jrQ6ybnJqHr~X9qc|k-sLOnOAJtx zbl(fWKwjJ96+X8mIsX2w&QPpaa=LdJ$5pk+-yhRC*I%7P7}SShdrq=+e=91f-v+jU z0ZGLU^E37rBE%M`YE0FPPtfCt^9yqDykjW*IuSF|9^oUkayFmL5+Ixgl2A^u*$r#! zu@e^)FY2dbiX3qTZIc_I;6nEgepA&@K>dAG0`RY7cv=;7f$0fG?}P(kC+K5%a_%ax zBL55B;Bg;_)73SSytp-QWms=6%kniz8VuL7FU!0qio;M-dJ} zzp$HbnN1Qq%D9Rto6J~ z>GN2E8|AsHlrhCY^SpT75(pzDdQ`ja=D2E=(*rb@%>`b&=_ZNMy#1;1_t|G@s%K0_ zX!B1~1uEM$hNTUj0Yvv&LNxvs4zbd&WFsuCIvg2mUA^04wd@23X|#m>C{7L?3MGO# zdK8hut4z5fo zKNz}OZbzrd^$iwpE!kU7rH6iJjrW%%x{uylip~pitgrY0i`ruI1&+t2XU6WOwqDPP zlOE?y-1!+>w&qjhwyR-3hnaHY1;*Q|9T&cygTkY`nd;G4{p-idQl`hPWu=z$W!E`A zaTm+Unv2o&w9mTFt4Pyvu1fki%}T^k%{n9G6i>z3M?*R0IodwG%O&p1Y0bLkddQ(D ze(G5YEPii^X$)!>B3Ak{8f8_qnk(}&C4}kYJ>C94+FuETVTjYkulqJk9TDk@-mgEI zI`(`6Yk$Aj`EI|B4$X7V*X(z*+qGu zOK|W&{(_pcb8~L*n@`J|F?8R_~y;1_mnnyzlhXqx4C;?J<@5UPNO-tQNtIzPxr2=m{|L~|A4qZ3jz^%pQ@vy zVIu`R#+`mrbap)z*EH9g6lkR@Yly%fM`|_G*jg`-NVd2XuGU9a2lPGn6a4JhaNrU~ zfW6(~fuj+Ls0ZrOl|c48@w2nl-Co~2_|5cW&JT|`rU;6P3fZ;x$X_LkNotl8Q;wz;ral00eTa{t_6;FF$_SJPgnz2~}(m>}o{ z-S3I4aa$=}z{}by&$U>XcH3}3o#!Oen!mTwReV3RmP>kCYdWbl8_F+YEQ2U^ji3K6~?Q3T!Ay}yuW?>>~imu7S(hWJ07=ruHOf%$&qVxbikf6@z8Bb z^*(N&t%qxmyY8NrnhCn({eSLxGdgsJs2$j~|5=U9RHoXkTQzCYtP7@m1MeJYq())@ zlBYPIJUo+MuyJ zY-W`r$udnP0qIf+Wepy_a+mXoH}mc%@-O%8~B3#;SXH z3vJ8=qc7smuT#4lrFHiQMn1UQ)H3(UAd5x-VESRhs?_wOD%Ag?LH zb!!q;BEqtTqyA|9IJT3Z0RAsx51I+?u?saztoXGN2wdJ+@|YE@37H|fo>KY-(qRN!=5W3 z?W`!7!R+^8;Iy8DfhqZ*s@#Zg(Dr%17Rx1 z9KKmYKD3R*;CRqz5GfpE0rLwZj>WzT1rO&YB}e3-wj`d(KxNnk8<@d97waXVoGp0F z@b=t+X%{}2B3PnV(djE6N!LP&jM`4#iYI#@H76h6LB`sg#mL-*60bHP-?#VQA8Ujk zzqpo6mbc6a6%_n_Z;AR6xZ-;b{@(NW`FYZDSKpp@Og(In8M!XV3EJ!Ike*dig5jlxz2AXDme!MD&LmlL; zz6Jw6O97(Et**+nGKzEIk(kVQ&R~UHfefUVsRcbKs5Pb7hrm)3} zBro1A52tMuG*y2vqE@y_bAdaHfN01t&;%1Wu+z;Z&)PN<0LZL(C}@q!v9bE$1FQ53 z&A3_7J*o>Q6X-b5x3_neI|TEN6kku_Z}ZT7^j^ES^>K?*%!yUgd<6gb!>8Z-o?}X>0@s zPS1~DjzHW*9JS8DRS9fDRDxvb5M-FP)Efy^!i?5Ij6P+ElvE!YD|BUuYD#$4G7^&o zinh7^DiVYf5Z+`I(>LWkz<~poI-lvpW}g$D;qX=a*_5fpQqP4_`SzD{^cUzeW4_dp^+I~G?QZ2R(C7t;n@c7hug2q zJspTA9VSBV5iD4AsFd%cbnv{dbrp84ddRw=Ya!olRrdi-R_^W{Fd&S*jH8Dkpbx+BC=4HLE2h>H?h0XZ)Pc*oYO#;gt_)d}3+Gx}15FmW3R z=vc*EL>M)>g0g<|VYHwfG=T1Y#iv6{N9QCh2jX?D!$)g7%yk!(`zZdQhS$&usp*1q zG@-(M_WI*vzoYJmOgb&Jrx>IJz$DKryxe-P-d1a{`QgmCN}9X}z1D7|)Lum331`rP z-Q!1JJNPVy!t9r>EHS*+LtPHv{~jb#8avX`jrUJ*#rJc@#Gjr$b-dlWI?!K#4{nl6 zf*{j+APho3Wsd4M0VXk?UFVXg`mW=2*||@{F%R4pydJsQU0>q~?f>mzcXM^ZHHjM@ zy>F&P56b6Q;Vhkn76F=e8UEMw{ACDU0jMP)NdZE6Tde}rKEo}`Nwn6w<01gOKpEXN zi8ED`ARYrcr7ZhJB-wUQnhzim)dD4?WD>%tYw2cFTuH%@O!60xIsTH8q&EptYa61U zny~j>v*W4BMM!;Cz3We1h=>1vINcXKAK&2X>YBMi^K(XpCCB;rHpj#L_V1e{p@<_V zxf<^4$_V)xa^fbB_fVHnSDKXPHSBXoSWB-i2jd;~vq^gfMlJ6brSjB5J?_DIHkF=7 z*i0rSbhyxMN*uVqbUxoTdLIToPoi?>3?8 ziI?R|w%EO`=DS^*=@R2;4uz*XZo^;>+;q}NdL%s}24MeX`o&bs+h*LfkPgC%Aq3zs zvOf`*6ZI!;NGqT6o#Wo1j0&m8!&sWojrhlt(<`LPR#(Y^gNrxQ&JzKhQW(t{^t1?g zEID-~CZcQpVmnwfIi7}mAjeGRe(imw@>-cNLW1oUMgNZc@f?jayjr$aIv$I!nx7Es z2((BgiD>&+)7=U^>Xsy53C~td+Nx$(rvmcF+pW!~S^qVwyVI`}GEhl4vVOr;>uPV-K^;I^_1%aRxB_HIAkdFrr1FUsHkf{>)$E ze1|q{&l`1JF7t2LNmgpv2>pTIzm=|W*6(+^UcCf>>=%&6RV*%GCna9!ALo*Q3pZ1| zR)mM0%8Q5PrzSwt)EsSl|J|vf1CX^$26Y@o$VN~}HgCF3@KnS{%}JV0oGqM+?lt_& zYzwI~_{U*M>WaY%HbBEm;6ujqH|^Od~~-mXe7yR2Ztr z)h-H3mO?qi!O0)V5055@q!CMD5CmPn4s7D%nebp)P?8U&1Z`rI3}QACN`3SAx5`Yn z2T(%SM0Fq9ar~LfO;{pG(w69@t0ytA3(?Go$M2RS78;6tGd0(V6WRKvO#xzEj&cwF zdvm{<*>JmWj>!*@?%TgmFeg*b$cB`}D@wVWLWxt0n^%#n4j(#Ej5C#G{b5LP;!tQ8 zMm2!~oSG0}=Y3f1TDLuG(%4?`;=))x__fc?Z6TvmcP&XYR9Zo-T{4m}ik{LyJ2@aC zk>0(?_l9VNcR$jE@sC&W&kjJ|aqssh(b#y1%FUXpLb9+VZ;&|AmX!`o&lKF3qNsc4 z{%HxV1AdIiNN&R{sE*Uxtse7aaaONkVI_P=+nakejD<@}dQPYnQ-XL)7D@!r-?`82 z%qz2yFpcT^pQ}m~oFtpAh@_-lo}{+k_D4GZ{92PNZ6Pv>Bi0NP+&ldi=k(uRVJfK!=Gs zzP2l;c&vo#VI#0J$53=v%t!Bv)z>9 zf@V(DXu6WKMnePKoZ(FO^P-gA$4B)4u9@KPR5{r?*SDO}c?~{qRF<6MRsR4{y^ke- zzK`g-V5zN zz;aqQV=^Fs7&O;NBzP~R1LQ7tVf*l&l}KBVSV5R&h^s5P=`Mqo<*rLu z&!wXcQkn17HdbH&eOy55a5GvR*)K=n?@75ww5ezqEUkfOzNwy%;%z)-rms-e%#qpf zeZCT*_)zN&W1-M=vS%DFYv=4@=o|xFU#m}o+hpV#aXL9vFAtTAt%~aQm!r(;?$0Hx zeSBbmyi=g>xB(($x}`ZQ(;nXF?;KD)*ITiocX9v#fJOz>FM^NBJQ)*&oo4$683{<{ad9rxVKibAl}Gs z0^K?4n>7KP$vI%NFQ7MjUWk?F$vQSff)~gHhnMzN%@_E4d}zrezMBEc0(tJ@ZpF{>_tS+*IJDYClzjI-?g4G$-rqgr^ob({fyiAKKl-HI}PKr!D~Jea@yz?}P{J-D$u8 zYYHg_ar^k02tgnm<@_mgNxGFw=S2V4H?WwMRy7M^L3Z>VLq{7=GvB4 z{CUv#4=hT$Kw z4e(v32M+Y}76Jr(RFSRZQUCJ{2=@OX{QrD7b|C40_#pnT1PJDbEQd{J&P>za_i= z8UEkL|5TuV`TkRZ{^k4skm?^J@~ZsM^-QRuyd(lFE-U~5K#=+>rVIc;08c@`L4yJhwQuY701(bDDX}lA zKS0iw{DEx%(CqgDqCd6NL14fSG{84B^MA)c;s0L!-!VS`aP-<`l9UjVT z_fLC*1{2-A$41@lV|wRFU8ibn=fb{Io!fb-?gGML-vfOxlF)mtz_!=pUX^wCoEKv}(%3y&(s;~UsgXNiQevvGL$=7Iw`6~dhJ0s6-e@auZ z?CQ050HxIY`;p5Uws9~?^*S{}AmGaqoNnP_GGEmKWbI^L; zx9^^WUZ6-UR^^STS#Fy?W4WQ@$vm%DdsDbV4wgC4w}(v47m1#!Mb|cfA)p8j5r|49 z(zz|94I@}gkFKkHKL`f#`jThJo-OMlm%hK@mQ{RXkMT9z7-HMY`f-4<>?00cyY8_e zK15jaDe9&hZb%<2WL4Ryj0^jA*Mi#hk?09W`bjvPK;;7zTzK#d=U>o%w?Y}~BhoZN zFL!i5Xo>&|Y~1;}o^t}w9=jnU+m7k1x$ODx#0lCvj@c@uc zo8j0l5fb}zQw-{#4CKQB5hbt!_(4t9NO}b*!bYm2@jN9xGze>X)%wcuEQ8RXIvF%8 z#KNF08%5NoVW!OO+s9{3pwV1I72aUf`=)2C?&AVjm27 zvCzkBuJF^jNA)v&S0W4IRl93IbXX@J`LCJ<5V<>@+aqsz#^sq)w&^OO;;7`hkKr;o zzO;%<9O6@DxodhwoLrmfN#qk&nm)P{m8gdeH?j;m+W^Y0^A6CARojc;Pz)tX*+oZM z@?m3ZHeV17SpHne66AX@9P!mT^;1XA_(YCJYIiQMjnrIpN9tGx)z-~>`wjpoPtAlt zv@;dnGqL6KZjcQpB}6k! z-eu?T!B}6gOlsEBAB$r_%DcFYp8`qkCz9w0IREa3yWgK|F8oQeE>hnR4CvYH;^vEz z^LSr(QrTT>D8Q0AW)~uDWl5)`DXl4%t?-By*|z^TV#P5f)nz5AkIOL3va{ z(lX2IQKF*EZO}?XpafU2dkq?1Di4M?{w9) z@k0#_H%nUsLBc{k8}aSmzgV&Raa1#Pm;>;PBWga`sBqYsz_841J5Ej-v<9k`QZiiB zIQ$k;c*GO=3!IV;(5q7`GabMFCW`ATyJImKtn1-bFoH{oh$+z8Zmb~6k_8*fF_w@( zT+HvsHU>)$wvF8cYSv=JKqf}2m9#*sh_=jPH9@D4UimzNCzadZ&fDqUm0RgS{I9zcq~ZI z2O5q@EYL)0Rn*&A&@%PoY|FzEE^@4;kITp!8QdL2Mk5%+;`b>-!y62m*YP2se|6L8 zS(adMXWbkQ>c(`82kvuX1cTHV%S?(r23^tN*?AZ0Mch=Gz|q5QfN5WBN+~ZjC&5CX z7DO9i>UVM%D0QgVi*7m&KaM`47mwAWMf ziW7Id=|};F-2erf`C3-Gq-19R7;;m0u>;g$Qe?*4|DC=Y2o3p za$4&VD;T&PO~(nbjj~$LBqwt$jl(cSd$C9<@-&$xFZndXU4LPFgjPM;Qx-O%+#0Uq$<(4`Q=@Rpb@;vDCn4*9FnV zneOZM7+=REgPRWk4Js{^q7XHI#4#eMxr+_YlY&S7uo8Ykf}Bpn(({>n3RQ93h=D9c z<+Ev`xWBQo^XZ-imaoFnQI@ z@BT`r9c=t}RC_HiW;lIKc_D4dJEl1+HD9;qFjYv2IqexBoHFt~D-iU4-Q^00yv46I zhp!vxlVuk$wxR`JrOC2>JYbZ2`Q9BbVd?mwk-30j5`%CW#M~@2ZJPbTEo1$Tko{)k zDnK4YmFezsc;3|h);l-Fe}Cjf)Qo)5`AOppQl-32IG`-Un90f5`FZ?klp_r0oLwz* zwZ-ZyIvzLG8KChz`{B~G9&Un0DKDqb)%GUF33Hj z*ll!pwM>TCU1((y=LEb1jd_PFLeK_iBkW^yvEdE=3{`n*KbAP9*totn+d{|aLF5c( zSER^+d?Ppk1L^a*SxI8?Nh!dbV^xs`f8$l%I)<{mLHy^hsT^yhCw^auE;hLGGqZjW zoBR$ApXRs#oId`ve`MuNsLDGX!q7yS(r4i#P4V90guNS1PYh;TmQ}w@VvA(i1X-Ne zEXBe%-x-MvLggL+XB1a9opbf$LC@s_3fZdf?&FZ#f&akTB)z%jpM>F){GZ!bBu)*L zgpkZK9GyGUtJ-2l<=5;`m^9*yqnEo9(Hg-Ea>l*7+_#&9ez*L;pg@p zIK##_Nou%-HTVU7?|R~cTRf8|AEBhyW&;XEjT(e!1^+(<+W796FW^mz$6(wgUKjCwBbYJYJT8TF z$gB9En5Cif!-Hxfb*eQx!O#H9C6JXxM%%PxKqijA9!-L>Rg{ZO4l+vM1~6%y9CM4* z(HX>&P#M|tJJ*$+Q@v5ax-p7C?j^Z5x!n~oBh}Oy|*ISrYm#lx(M|p$jh#5WizVgFVK9=c9SC^+dCy~pkhQbuZv_Ul=w1V zV853%s~J_0GWu*AkA<{n%|>38|AOS{2EcK_9t3$}Lo>-n^)n!`AV%Oc?VUCtAm$^M z`-)x&-os1)-VC!1*=_KZP0j$s0A_>()a{c)&8q{`>(}>FYsbu?Q?@oRsLRK`SD#G~ zNMV5B#~TJfk$;%Tskf#$H+?=b>D3{AA|1x+xnl(=3g50FLC-mH3GYPZEapOYGs(RO+N77d`g`Cp?PU8Ir|&)L++eqtwtD(a{%~&2 z;+>z*&P!{e{n6A+W5UjSbC21cg(IQFX@8aB{g<5BTB~tY2^19h!S#=#R?LQ@Wg^c* zA!j6VrBHM&|oFJYN6)6ZZ1} z!j5yH9}y106Mu|tWWQPBgO=f}HyNH`egW_6?S zFX6ihe?0jC=OqD?-D?#f^!W|?ibxQLYfu7$37oh5I)i5nrR~1uuu|=PU%R$n74o1u zx?=6Iq~i*Ts2R&ePJoxaTr1~@O+nyc!R#_;`B-S*r>F&!MnI9ZS;LB2>D^paAZSwG z_X!^?#}Il!$Zn?eE`na@VSCwpib=>vsq`pXQQYzx<-CbV&<%W|wt=eAF#>uvWI`=yDfYa0r2w>xJK z8axDUy3oVk3|WZU>uS+Twb^s~%7LR&8H2!E!&x<+7X?!bk|u$a5&sKocK|VTuRmE4 zj}e4?k%gpCnHpU?7+Id4fJ&Fy2r3?1_nqumE(R`cR(eTe-!uE=w8rsDyEoImC!E~) zVn^!PhVK#f7Gb!)84&^>e4RB4Ez=Dt(+!nTETbfG4m9ka;vEYY$q9J;H!eseNDc;p zxEB?NaU}egqtu|cY`>gqhK7>KAlhB#K-J$k20QA%h@k_nKDSqj2zNrny+1oVdwZ5UcXVn^RKYnAMmeJetE=-TppT|nCOxc7&;;J9d0c=wFy3$xr0 zFO_=)D}5Smrt_WaD#APMX*^qZPu;}flF+d71P7fgoOem696XNx{X@# z^!C5nozko|JiDW4#dhqqUrMUNGMmbLe3}gAp=QSCxT%lm?tz7U(F9q}Yx8Jh?Y=XH z85Lp+h@ZgO_G&`X2$=^+5&~5xqHMWX9eO)BrBjOW?ik9bb$382{swJOBy`etiSMdX zdZe%y>}v6?4Bs-V7>z5b~_M@@=S?@N=*elD5Z@z@jcl2@Eqqts%%0V#5sRLk2v#b`NhN+Rq57VH_ zCP;#%KF|hYB1C`CrQk@{aS#96wbG$1M?p|!!r zK))e_e>w5tLrRt{+uA-IWz5f?J|!wCz@!WIkxOg?sp1+pzFVR)s?A*ryguZ`u%c5t zfMk=6Bk?ZhooGFI5YDlU{%nGsW1mC{AP(6oMk8wlv)~ zV0GJ(7BXfzGi36^`QkrWi%1s)LGvy()4K0}-o3lZtVfHYfdv0<=8B z(|fhDeUa(gfAD}-QSN_@<#xSXDYR9=>RJDS;Hx-Iz`^18*K0$$D>=TV3O!Ryva?!9k`fzhcavfE_<3P`g3KdciDfb!(=c2eb+& zW`Cn45Nsd=hBr)|tDe>BodOVknV8|vYD+{RRp(hgsL zFE3#GII-8LGwXGLr)RrQwaP<2rY^yzA|Inx{%M!XnVoho`)W>g`J9;-lM5y*WhO9# z-6xZk^^3+eSJ}Fjsna4)7mM}-8?0>AI49EV_3;=*I02m?qxxo18HCoIKu5FrnuJmgF$`7rU z%2%3wbXW4@{AuFpfZYMgf*3&le+~bb^_U(A%f-dfk^tYP4iB-yk5`J#S??y$fm1!5 zit}wf%v4GK=UXeXd)+0%urSIjaM>IV7~sgX|DgP1|F19s0AR2O02mBZ$N=tY+cx$Q zqkk;Fk5YDm8VGE)TlAgV)iqepj&!4s0tZk8q4`&D|G!10ML^{|EQPyD{0BvN$;#?i z0oqh}Z?+(y?*7WF$@}h9X{Mh7uy{Mn&{ipcjv*%qlPqF|3Y-42GR2~lkcAP*6lU+PwcSy@60pSI=m`xx!AA$ z%QZ+5`0lS)In)@U*DKflmqbLNJ)tDh-tfcDM+`gHvGug`4X;q`3PkM?tzzct+nGvAQQyMyllDJ8h1(A!NKw%Q5>FlI;8;RjBtl6=kRN+~;bN zan#D5=8djsLD=e?_U=h(Q`gB{&s%OvraTIoJuAa{Py&y$J8tW;umxxr8JmozNg*GP zJT}ca4>2+Gaz_kcVY<()*i$7TsYqefTa3Vs@L9WKF$U&~1V80a+-UAgn7nSqSQ6F% zY!e4|VGc@-8DSvlF(h<|Aj!|q16B`6VxX!u82EWHAc@(W%;-%|(v4%Quu)&e82qmX zcg=<@31Ivi1B{uSzWW0mM5Fy$9X$NkE?dt;e~s9?(?&BKY+hl2>tWrU=OUMJ3)ah9 zcgEDL9iQExBNO{r$88JV@lsk1ts4_Nba(n;i~batnV*yS=f9J0wHE@9r|#SEs&qFgOCa^{FL~DaPvE6mV#X+=goX+cw ztb)et9tAJK9@ICRmmj%SKAI5)nUE&DP48vuANB^@RaoaTnx< z)!=VV^rwK^^ybra#)LUYYZ=7U#E8{pYkB#{{P?&mZ?xK5Q#4VQJb>!?xXLFMOqT4CwO$Nwz1=yID(9`1>>RY>G7h1WAZV@=TNq`2+~Y<@F76@ZWCu@w)5W2EOEQ-`NV= z+=jzPN9Br><|gqHSiU=vZhW=Z`(~HNipn1`o@1k7EH=~T)P3rf4Pv39HUOOg6Tv{}=kJ(mrQG70q zqIjJi-X`+}61i@!cWQhjqcyvN8cv&Lg(Z<6Hd;#7dln+d)`ljeGcgKo#y7^#+RKka zWacMpk<_)JJLr4J$q2nuC&)WAL|p2iydxevNYP>m9V^l;s)hbFxhO)gN>+X zmsD1Ug`DEQbsma3CnbXl4&u1ExeZ!d_FdFiKZWlbC15YcJlxrlrJ%Ycv zx&~X|)p5`9C|)6Eal*J#N5&a5=rbV_NQIO)rl<VW` zTx;3)DMF2cnSGpGgN@RRF=~cl8e0Vw*3A2$dq>3?hCQniN+$cBL&{Ii>V&Q9`Foy^ z6q=d1cE`2q5RHd9Fqi~ybx6}oyzB6H>B>gS;pL>1O7|jTlfeSpJ0ycxD3|5bk8^d? za?%`ki$8mOWEuS4aOzCZHzZ$_0+-0RXA*ej+DNhMRY`m#+vc^}2(G2U7x!nGzXVDu z+r`jHvC7BUW9|vtrjP)}d9E2-+UUEytK8e3U?U4hPf=4a57P1&9!+MLS zJ_h!DGQ`M8$snPfy**$Ts4F$wT%8t2_GXvUL_;^}(mQ7;Dxuf2sf{e37mM#PLWKO; z{=lSorS34E;q86Xw8zQR^dYx+A4aI6SG#Rg&OlCb(9jYTFRqQS(LM4&d;fhix2Mts z-w`aou+y*!CNU*J9PG<WCtH(KTETixgAPZ(6NccQ{KxRA z4xNrw;JL^Vf$<4oZ+dK@O!?+6xMCEuiT~l#75oeNv`7z@%Wr%Ygm%jX-1h7?_gi)7 zXr-iBXB^3d!Tqr$sS(*2tQ^*Za=nhkLGr`{tt3bm7X6tE@?V7;O24#y)P4CC1BlT{ zzmFxl-@xdDLzadZHjL+?#-Av+lfq4~CG?E#byB@ompxi|XDc6MKSz_Z=QDPg%37Md zBdo11fE|6;O>K1TQ`dM5IIXYqjGnCcs-9u0JC#0?L;{W5nJj zZu)Ow=EPI#m)Di=dBz<6ui)s6L`fl&MV_=aVYd2OMrOS_pYWMJ%`U+00y|8-RqD5x zkTg34aFAJ@re*k(18?@<4V(trs+AVwY0!#M=JI$8!fV$oH3xuJPA0PR;-#3_SH3Zk`Q?pY2swX!0}h zTcMmu+WwxH^qsT#zY;LUJE|aZbZT}-<$yxd3j7>bay1-bff&qJsBAEZrFCuwlU=&% zZ?lU@z|ti@E3px@{DRE?4U{3C{wWtx+@eVSTrs3KEG1}&`ioTDnOKKM14~>WoK^-V zLn>}$hNvjswTbtm`>m<)Ljyx@e9&m?z0AQr8vg%yUqx_+$QS;(iU-iy%*JurWG8OlA1$*ng9Wc zj6_{kzpSypR897Fx13ykJeBAu<@hE^Y>7KjYfO_8x!U&l53u0e7rpq}d%SbvP9uP} z)25eA=;f8)nuNwmBZDI)3d2b%=+i4=9Z{aYklv-_2TgXtv1bjp*&BG1uiax?%l1;P z9%0$gu*zpnp@4sxChu_%9jx%|(ZKmaRZE|Op9V7c?B+lC^5+v@^%3s&nLU}`7=^$w z9FBbh?$VayTLJ?#FI|=HcoCd)Sr*!HG%~izpf2MyJ_Lh*Fb%scY=Bu3;XJmOm?R1A zM5;KBC+*Qu*^Mt>05Ph0bfHelEGKU(dp2ch+}urBRi`vqEWR-!#P{Lgu;^Ct=ZNfZ z2d%6AP?fKg6a|i%88v4+r)r6iz_QIpwPK@4jS&xXMlSPc>`2Xut|A_$fZhvy)h0D% zS6TIMkNBL<%C>JPj|At0FHIh!ya|GRaSoBh?K-9PwQyWtk5yWa9YXW98EdOk7K8G= z*@@Rq@`NhA$6jC3$E)E+OsZ1FtC^ofAu zq^vA0E6We5il^c&GyN;d{Ge3LN-4^Sb?^+Of?Yn7KWNE0qqki(_$dW4H1y4sX`wZ1 z+K)cFhA(k<<9L<+I=>1F0k{t>HIP)*xxF9wv9gf)mnu>GLe91#3DQtn;n*qpASRV7 zw^5T8EjIXj_q9hug(`Mg>`Fy@t-ak)<=cMZS2#o?xglvRvb1n~d8&>`8s!4s#0qPt zQIfLRi?@GTFVozpFleJLn&@%hbo)V;KDlyO%S?+NIJmc>)YZ+v&_~WU^_pp%(FDCv<=(8I277i-Gc7 zNy1Kg(ZE2gbzVpm`1q++Mg5Dmhq($<#w5^g$)^dY<`kZ&!@HMpAjissOwkTJ?oX(} zp8iyEqDe8C{4UDZhK7gF2I0tccXJ$>b(7qzbv~idr+^mOaeP_dC!jfohF6^d(_dFp z|3>)g{n=x@0-D-Qv_mW&HK8t)n3j@Iz>eypCvNjCNp8D7qR$z)D&eD zHh%>Z9E~>V9_VClX+KSKJkXl$d%iyCf}uba5&>y7@y1Vy2I*?C9A!KbG@i}s}EhMWClGfW-6HgtK61}(vnjI<3q2;SMmQ(;?tBJIYQ?$c3} z^w0%k!(;T5XJ&k+%Imc(lqniONF*30Z67Pa8Tqp~A|13223RY>lb~4BQax8akq5aP zm0rjCEan>kJ|RN(tGIz?XW!zElJr_b!NS4aSX9{sWTU9hWq7(`SsI+HT6QOb4A^=| zU|F7R`x$`wxfBZTWhGw;`|5*DJiq+-M8h+!2LmM1CvR3MDD;s$ago@Lyd4Km_|^36 ze410B>d^L%d0HzrgZKfgY4r3mJ3gY7Hrb}h-ycpf5BHBPfEU+4JS=|@z&b*nDRhOJ zJ^V6PPMYuoAWgLx*1%dr>LmFjiT6WYSwIm3v^g&qObx)FURP%k08d4f!z&5?GgWR1 z9Op!@X^>)z;G9V&25)=kWu_9dvcL)V;rXj212&-!I`n6m0Bx*S3r>dz#{oJBl`!* zA}2X@!Kb&4pj^q6EK?;cKXZJiZsBCu+cgTn(6%K*IKDDQ_b>^PYm&coe#G~-k^z9( zvWgi!*#&1siwtM&1@uLD4-{KmNJHa%NqM~dA^`|7Ag{cgl!NVZV~IUz=T}wd2S=#J z;mzIoW3&_wZ`|6nWn1<(meLt;?^Fj%mkj1ig0kulr{p_da+9RPl+C1#sgkSk+ zn6|ikD31kfpZ09${DFXU#d6xmxsh#fY940Fe`-npQ{wrbdd0u0h@a3b(!&L^sy{Jo z-_gwt9AuB>oO#WoiGpid$1>l8NrP6uEyr@Bjglhr_#RSXMZk!_FT9I8!)+NbU~%Se zJ?j#!8<0MEZ`w9xGJ*oQd_KP}PqU(w@y}`z0mb&)*lE_OVAFI2@All(xw!nKuZzdD z5BexY1lCUcqCx)^^8P*5GyparcLN!*-@j5B7;{Dh)~zO`Ocdb9)N9A*jQ#Hsf7W+%o9mQ>NiBm-u5&rT`YZuPbs%}R#a91oiKUO^~$<4lV zAOF$X5lmQ(8AS0QMhZ%25|ncpi!M`JciFV`F8qmfXSg;9k22Gx?-v?U?EH8=dOn1V zfBa4^CI*xNTUnJG-FMv*$wu52!9NK!b_tuT#|EE%@V}jCTTA;|G(Rttdld*L|peU`LL!JkCw=Fv6!Q=wGtk`pjCdOq~M9hQd zQ&yr4eTa(W6OvikenlmwXe_G{&fwo`!ed=fS#mEJHOCg-)p7Hk&@O#$)YG6C;XFwF zm_|hm3xOX0NZK}iLISWQ;}AEPX5=IQ)P({RrVXxZk)O8$%pKU1*v6}N>(NFYl{0_# za@lFxnzk3|@Wzg&OMPPKpElfiT&RZcOLu^f3jWmkNlZ#gntPw*DTH3=i)ngWSp2L@ z%fD7jMW#&8S7fUq-Xz6sjsZ|I_C&T#>Tf&|{3>I>0gwd=RCtR@CUSp=KMNn)h1W5b zQH3!mLe8wUhvtPL2zKp5=nFHlh}#oCC&ZPb=<{VgR>k(AIdq!a1LXesG_rKoNIn_= zK%?4ehz#i;ueL-%QM$PQwVoCYsLZhHa_s~QCnfdZE5dq1Uo!(W;eS`Zx?!cYUa=(>G z4O!*Cbi0{zy_o|8XlwlFvO0xCz9yMR_xo$=i~dhsQ|@ziX327;AORs?7SiXs2t+v4 zAjS=fQR?g8B*bt9P(p;@p${nZaumn~6TdT{Wid&17i>H_OAu_^Z2P&kwkd*(Wy?3G zpukd4FDC?mnlWPLchKb>V$Rcyzzmd3j_OE~blrgRN{i5$E<^^@@5jIS}4q9e&o+R6Qhon}lhNhnI`}+d9L_UXnY>HSzqovx+ zNF$7;4+&{-fizCs?{{08g;rh|lG3oRif^|J%MA-M$O0)JX9E+WIi()PB|Jk;(HCKl0V*B6`VZZ2FeC+f~MIJA{G2Dy*0y?!T!7Kl`Q zq0}rQ%3MDsFqf!k^yh@h{Szp5(7nlE2|!d*fLtc(^ZD(a(IIZ;7ND1SO=R*z%4oLB z+dN7E>(H$!t*~dyULjS0PLQ`4+X#PX!7OBt8O9Z#z7=HUj{DC3>-o6pqL-N`osF3d zo7LL!9C&mXFI02xUz!AoDs56Y7`mlU5?o7`&ghMk(j^J`s*2F>|Ant7MefQrFaS*Z zSvJg)QOr3g1TL$gG4~tF>-qN~^9dLpG*2oxh_gWK=@fwz~#$BD`0E6V zIX|}-dOXpo!0P8nMN&)rE?RPm`o-dN$PpR7ga~3gJt#4vT(_a4`!mVqY$J8qKt!gJlzT;ZIF3&FlZ+058Tbr`7|ye{vH& z52;;7qoS*!$m>xH6+>yuFJto5ySaJsKp#1R_27DvtOH{&4x|C&sJyu6jb{-K`d35o zz;}@vQrv~{+MQ{5n~8X20rgTcM46FM=je-LrqK&iExB#)ZNv>il?u99L~{d6BvdP@ z?0)JHbWu)Lc+YUKu6?yB?VMalAK$Yh+6sqzj5dXKGb;sA>>+LmX8j3AaSo8f;TMN( zQmBJ&hIzDu3gaQ<9Q>vj2P==-3$jMF&z@45T0H zg<85T?tCy~KJ||W;oF1|I^VLXZ}b>{e58&EaQ+_WWnz0hsQ;rQgA$hw)iFe0duD@d z@-eymtOGtaT#*HHb_mtR-P-#BX6L@KGjN+@RCg^yC7D=tdJVI7DCldpRc!arAp!`K zW{*2rA*c5I4nk45BI~|_NUT8gaT@cpMS+;;*>s8GBY^%g#G~VTLYM6Ebiy4WQ{q@< zSKBv-t$d{{#(dm4v)I9FYlM(u_Qb;~7=A<*Jj>xAYeM9~Pir$uJjV1jDfXw5!1s5j zw&=H2gam+w>R(!K_4KGc$~_q|a-X7R5D0uk)03&ukF~hKyj6%x(KqI;EDgD~H|pDL z&{(cF;V3<=c;o%HEbt`h6os5^llaG2rr?-w_9HB$sHe*3p@ggJB&d3&xMu6J!)3rq zZ_d`Y=VG8p6wg@IjTD`SnP{g}*7J7o_YzqZwIjIgJ2$h?1u2|JN)~g-=BL!$XU$#b z2?5_>=fQT0;x$We`>Fgv*#cUUchvuWFW-I;f7)UvjuVY9<;K7s{{L%i`CBRjH;g7n7L- z;*op4ZC_gRS9gj~EkRO!&b`Ta>L~o_P*^WTZrYjk4gu<#8GCj1L34#VoryY!FJ<1l zIXPL>c{-6}6nH&5?Y$H^M(wk6;p0(ti7dGQ5T2xDJj`p8{WcOy&d@wQV=&reO2%Ms zaPs?&)yu^Kf(ev1I`G4~PMG@XUb}7U$8n3|wGy$!dGOBU@vcct#LU#v0*m(~X6#qB zVccvguAplo%1x1!N7nuC5S}~NL@w)5b@_(JS#-yn53al23PgHd2iu`n&^f5vVSg#L z=E1k=f_%q$B{EML*WNH8Mkl+G`7`X!xl1N7-J)HOG2LwPsHnd03jQUG^8_;>_;7a% z1l{l8eU?-B3K=Hrw$tq^+26IXx!Jx=zCC4IbXi_*4>02y)0ay$xH8sDeMh9H{1f`! zLa@5HYAzzf6pxpyylf>)d+-JRhyT+tYZN+e5G9&oJ?&Ec({HXHto) zuLOCBd4t%JSjP+znWc}`}S9^M~^Q?S{H7X;3RhwWDlREo>(Agt-7C`d$52c zo5Jw7&~?FiVEt z;wR(BQ7oW1sgvgBAH>ak_ke;to}W4}`=iYmcmcj*xrUX=pFFXuSi@;F&v!d;T%V2s zxkGZo93dJ}(mwfwqz3dO*X%+cXm2{GZKlm4>J2GDc@eOGTjgCyBJf| z{^Kzrz>=8~Z^e^-c5Iw?Y-HH`=9KPXS8aBdVS+@(*g_;b274B!V&rzLxS{kY>$p06 z=>2?8{Te!8e{6GG=bl3C#Qe>mgprd1)o9#wfd!8fdFCGfn@%S?rHb!?=N7Nknwsu_ zMD3P1mzZu2kpyxmDHP>%-&l}dUba~Hh<6HDTuE(iGc;Bk*>4IaOh6KNsTBSbh5`|% z+^v1o;U4xc>^Nqt)J7Y^r)zhw)~_U6ETss48a?~4^CWi5`~7eCgd7a@O#@^SpZzzM zv{FoHnUxwrBR}7?o@QHh^KAVdkb2m5rg-13|hBUztnY)g^fu(0; z_!^ifj(U;1xNB~2fyx@^tFXj_c=qbgg_0v~6Y1jn(zaFGz_BI^s^idlw&#qE(1%P$ zL0Oxs$51LA-wa62t#0eM?^XGQboj&Pd39#r zswwWOcTS=G>aGVYzf*FKHdJa6=G}P#d+4iV_?mq+reA>ml=crkr32QVGDs$wpndqM zL%wA|y$|pce?!OSLY|$u2Usu@iA19aI&$j&^FkoE9eWdUd*v%fSgK**1-M6SIh~Gjc^?V+?mlp&N%J7)5nwyRiw;b$hmMI08j0&@ z-r5XU%NZn*=VED~Z^1@=HN$fx)61W9+LCby@Bx2n^Z8)V_;Qr?t-8n^a4eb=!>LVdy=nClw zw0iRE%MaxWzA?+O_U}sy!4p%Z1^Pi8JW9w~;VMq@75z?c+ZFBO7#L0?KmLdu zLnW^N`psB(xO-b1G<&hWNd6x0)^6eH>AA?6W5o8mw@bngt<&*xn_z;|40SFC`geet zuIU6jol>-ka^`oPA6%#vf7&)%r$K|PdM}`ZxHi!JK75KZn5No&ZsVBRxz{Rbrjj=+nlQS!@q-eM5 z7%Z(vtYA?P!14bf9f3lXFD*_GPqCG$mbu%k#ifME@46CCE? zVk0*4XV^r~erMpD4x37)WG`5dFb5Wtt0Y<2N_NFkZbG%>lEl{mb?}G0^?s=7Cv>$( z0>vH)o+rhuk=nt`pe4((Pl7byUkFZ{6yz~8MjE%-Ho}$R)sDRmF;$85++M^8%+i8XW`mpZ zi4MXz1mGg?x%^y-h}%A{Y@xteO9I0H(#dl^_>esXb9Mo{DP3zCAyWv?_m^XyBBop@ zlqO5`smC~&Of4u`Kp`^oMVWZDU4QY$hks%oSQio`MAf5yFRUP1bZ6Cq@#A=1jkz;# z0v#u$Q{?X~8`E*M6g=>P6H?V%&EfKeZoQUrqXAYZiBPjkj~L$3#N}lRm@(UA1-QCrcgo%43a~jX|34V;?7N3W_QkMF*!-3yq1=Pt1DeYco<=%Ld-Z!R0qvn9_3%Gw?6=oWAwTbkK8>%<9k!+Y=!&h#0!Qe$;3@t3@^oq}rrT3_ z>{DLDs?!gmp|?7tR8F!JnIEma1NaI#@w!@#`|sMYF`aQsfkWzhMaS}TGS=9@TD#30qbm)i zo{CWv@l2$*;poFP?Yi(oSKzddq3@*Xkf8-mYo8K!ADC zVPs_RO;+v_O1%-{Ejg5*7yp5DWeM_9A5K5hwKd)^n)O4UHFyH$(-DWllzN!<9s-nLq}{ zba@1OFK0OXF*K((`7m|qqu-9;p@MD$5cC9#-1T*+tHvOZ+KU#$n@qI@g_(5uKmD89 z8TsprQMRSMQD!EXmd58*V_Qly_$>YP$8Q1*Y%6BCC3MQRhYS)++~{sbwU_&%VgCC0 z^-wf|XO2u;dq)R_0;r7^=!)cF{N=O~DNrVSIgC@HuJ<L8w^+@Xgr z`1%9zqOPD1R`aW+63mX#Br^&R4 zu#yPv4inNDXH01Rg4PaxGW8h2{Hd&<}lm#!-ODUGd zvAp}^xN35#D8{zp$hG7_HPy&i>UF$0plY2~ z*sVxHDnY3^nnabjKhhR!2H>$TI;-vWFJQ*Q&Wl7}41z>Jgdd?>*7^C#YB%#BXY8cZ z2jx2HYyT*+{573E(PAyyAtHwAj_y!@4L`(iRT%Qmo;Wpz6+NzfxK zQHr1Ldk={N>cup79Iei1Lm(GDHijBS$e3B(%);x9KJoVBJkL3j$%k}2r!-E1bjpu) zk!%Uh<_-L3mi5O6i_3cSBT7~4*;P^|-L3)_ewSt@k~D!9Cf z+wmt#kSMu4(DOfKI_)x~MFQd6;uMk#rJ&~%0V*F4-M$}}`@qBnsq>v7?HTssyAXcH zIK}YB0Bh;XPU@x`VuCVn9iGAQkG^Rr8SAIW>x+ZLNB>H`00CNECV*>r6ua55+>dW& zr{ijXieVgIj`FA{;C_0T9e~TpMcsx1RnR0cphLq4X{^wcuvZAb4r6DbP5h7*SsP|9 zMYs=%BPWqJ7FiqR*6Ql9^&W?pu`FOv(t(DrECres^_H&{Y4_0o1A{<(ze`Vm6PR-{ z^Hprr#w%ukP^@w1VM>zW&lj15=VTOlDjL2K`J#TI1<^$<|4kqh?}Zck`La5jPsOlKw!p5N!epgR2Do(k#*UbxXJ_+IsjVsq*)H^ z2&(4$FV6?|%*V|lUW-T5Lnf*w5JMwM7jE9ZbM?l}!~F{%eA`>vb`wv%i%}>Y8vSengf!HGI%NGK+q;iHw7kDwsUcna?CF%|(c|@7^fp*?KGRV!F4tDsz z_JwEO@Zz(fq7vW-0#ALZi0zr)c&Vs*+Po6RF>YOO+`gTMFHa&L4Yw6i~^*}+>fsMl6_*HedNzPm3ztFK#(gH z6Wu;Y5XTvO^cthIa#%Ni%VngL@8;-jshSBu`K7%0Pe^fK@`g*qr@k{0;2HtmAgJp9 zbj$xey8YBLHWHq>blA2{kkAkJ=D_Mj`=RKWW?Mna$1cmlXD++sGM`z1Qi&KVFJ{G^ z7IYK}Hu`K5p)}-#Mc1Y9@6brNwEtPJfBl778$>qk2)uQ7K8&#&#zo)bHZseB^F&VQ zuUa6pG?KFcaw#dm%Rj{nladu`^ZURGB32n%FXFsu@!>2nc9wzXpFDi~YhQc-x9*hy zS7hh(`dSOaPD*LpBtQzF3a#^hmE{NmlCUp_fX!Ux9L z2Zp9?o2L&B>;M>J9M;K&X6{*D7uqSb6tq>Z(jxP9l1ugX+AN!;3}=)JG&skBJr`yp zz@6#Nch?X9efi3<#6NrSaK6^+q5Y#N2iNnh|6K5ZiV-oY;eOb9DrlMf)1X z$TPo-3>qlgwiRhC%&V$kzjpFs@rGekn+ZQ_o2{)`LfW(wl3<^tNT2Og-L})GF>X9g zf#r7k_{AHij*Km@1U`EwKo6xMJlv?LsCenhjX(a&e@dSuJh=4^Xt^1`suRD@5X&$( zycTqV;C>XQG)V&;TS4xzA~Y}13|}VZ*6f0IlBr*c;iiqCq+0sph{1q5Dr`iXx> zrcMH8dI@@WeRaRRx69Lq zYCNCMyBkM$(It>87 zB3R(h52XAXL^OMhp<7nd{+N~_j_%^S+Ro6yPJPD-A%~ao5UK>Y&inO65+JKaW4taK zIjN@RNkjl);=M*|?Zri*2$_&96Dw|}79r>ubr^LV)w)oP*c0o~lUwS7lx7?rVpLRA z{Ov#f`%nGcucuEE!u^G;fV)fKg<1LL2J{ZpO-W$nQ z%cOf;zB;$++^W*kz4dC}LkR;Eo=Q#&kx9OPwAx6+GueXi-@>Q@K{XyI8G+Z_H@nRf zYsuU8EO2}_SjQ1(I*RK#@NFq49NbhHKV}6k+8IqRFfhUB9vqsOnlcPrRZ*cP@d|R8 z1I&IZ=~GssFY+v`;8j6~<_X<+Ly3nBMcJUBJ^ERCgd!74{$kM@v@a!-8Xg^M>6k~q ziWUlmGip5_8qYU%4xoT3TL!YV71`ez30XG4l8T6nAzyRQfIxnvhvNDyz?3+fuSH25 zj_%?NN==B)9whp=Bfl^kqnuq&;)!nvsu<(=6kwANJI&vMgIW#e)6?J24_;__Z=nnT zXHlHyZhfQ6>)?)C9h*-W@A;y#M= ziN$9A11aiuAU`^7ZEA<^Gdx8z`_$N^Y9i;x3f@xBqi>ng3Z;y&uNWK|9~sZvJy8W~ zGP4RxQV)M#sTJd4uA1lA>iNAE+jFZyWtu?tb{)G#5Hm+4}4C!^h>I|%r#Xs)f?2Yhkof%YTE30dN5hHxd{V*nVxLN9-$0>2$&4}p ze5wrpNDTGt1dK1JFj$S3MPFKyyhN0`pqy=Zq*k9jV;r(Jj{PU6mFP_L&oYKk zpl*?4`>RO#$*IQH_QBy%)@0jY>}SXFlcV`Oc-&*Y$x{*MGTUH)#OrVjkh;7oJ;V1j$?ORj%#WO8!y zRH5Gt0B58MQtEX*`i(_*Ul4^+>_IYp!hBU_Wx_%!pD*0De(=*@Zu`TlkNowA8^7}H zj_+RA&GMNqw|)52Eol1kw>$3HJObhW41>k$O}Pd!OM3R zwYYwQ_QTJ?&%_;RJ1X|lybY~H7lFd+VvPF^AI)~?82~<&QLhqq!n9ttBjB(dLogm_ zlgmLwfw>66SV{lT?gIDz!PQ5;e?#Achw~E-+zO#-XT$h+uIq*{j{O6(vhDy{+gOIe z!P?xxcynk||AHj^RR(?k`;<{eh!nc}!Is@>v7$PFkrG;6fyl-xEOio6 z=QOKSr8;=bOBv{%4XPcsL$DUUf>$MhzbN=PB~%FeOI`P%5-K)I2x4CV!lv#{1x!&~ zFQaA)_8CHxQ`5I^+Ww8}*6lsmw0xt~hO~dLr}4?D_MUbFZYsc<%w z!al(-0!r*dt01h{L;ZoZMf(%j;^7awAkknu*@y5ByyQaJ48mOX_8n<%%|pqy7}c(j z3}gyB!`Q@R-|%QCDuH=lxeYT(7k@E>77>k!<(mAZ?xmzR6(*{bIg?b`N^>3p+2kBz zbb&0~9Q5O{M$SQ$=l(%6a!o?kCf`OjhhwenBV*%b%S{;o&PWplIZt3ysDh{sW{x8J zNi#N!n+LOJ*ed(S0tgn+7usFm-iJCd=z;(0!;OT&oFTk|@ioV<9F$znC*{_lDP&HH zMRZ0PWwd?I(T0P~-TlKGw(LLJ(sM4p5G>23^*MsrJlHkf&gjD%jU##1Z6(M{a4Gun zs;!(y=XBon*(aH5f?MPC)DHcj^)MTz+NYJYEOY={vg-h9HGdTx;vonA)`sMBS z-@b9jvF6TeetO%shJ(vA%B$5D8k_Gf&O8G!FXl^RKe916*z)daXupo zJ%h^e=~Js`?a#F{T5oCXG6hRvXl0`zmdI*eR>IyxtM!4m7YFmu7a_08O4Gx~rfO&B zz#t9MGpp;$RuXx2P-|DO z;S$s6fRa=ilbj^iY&)>s55*a}IZ#+e3GUm@3L{haen-b9_8vNFeBqSot14{zOsCtaQm<5T9^}#_SPok)=bt~qsV>P9zVHW)Z72t00Gwv;ArU54Z zlXV-G2?PJn`t#OaaQVB+>RvckzNpVG+Muax?e6dFAB5i~PAz;Uw88U8I0xeGCRW9s z(Lo}2`wD}V6!y3iwUA)cUv`(m3i=u-4UJ`ZR*(;DvviW96Zxk0uIBcx6!cZ9nVow< z$M9i2zYmNf=40p_ zePbBNNTaU*%JY|tv`4$C_o0!^AZnOB))olPX#Z(DeH6MtD*o^!V4Fb4<4B;l?2$uyDIQ*M=`*O6(P3}j|zCy z&@bJ6zkOZz_iyN>we!-55wkGWpZ#jUS6Wgf+mnS5LjW5WaJ$8ewk1Y!FF%mmHw=C6 z`ksIObo0Uo()#7%2ZE-u(v(p~89nWZk0ifL82Fh_ef;mdbM0A;QKL8@kmWg#WJO+uy*5utdrhdKRSTzes??syPj&ST9&T)H z?d+MDoLV&Cfycm?%+A%6g)?nEzhHIU;~sty3YcXw{|W9b!t~6{fyP$cT{x|&tf;Om z_m+~1oD~xruWMakUGlqt8&@Vh@tBoRRVf{7Jg53+U2n;H#~P|<38)3ur|(7&jZ;~Z zazUhn|Ak@peDC&Mc9&X1f#_OjS#F`TpJ?}$kpa|&1d|QhT z>>@fwX3jM}vYkyjAI`x|L+7BgpjfazQ#k^nofaqKTKwdsH~ma-usJ~RmCtxmb#)b^ zDxO}-Xj{V}WOMa3zw?&Yz4*CLJ=qUnp`&jI(Vm&vB}V_u*bnzW*iVXJOHh%kudS)C zsj025GS2|^gMWoNOI{%_v>eL{*6O_)e2cF&$(Za_<^8kagzZ!wd}psAZ8BTKy`vKo zLnC9bl3NVwYFi*qShMOyPk#zFSA;Sv#Qu3^W_IVH#-XwN!b%pQaCz**FT3=D^9+^Y z&YYd|n`&z8b^Ygmzu<|4elO@xiUeL$di^KQ%k8?z`%J$VN_>6j`tN`6J0h5*dKzlC zj=Zy?|0R%vde6Zl_+0s^KJF2h|M~B{1s;#t;-3NFr9j`G|4KsCNC-Fc^<}iS@U}Nz z`1Utl>~$TeHpFYd5;Ak(7Vdk~yH-_HqJCM?FX`1UJMWL)cR5e-HHiR*_DtijpzH|9 z8|%0hhUZ0_NOV0Qy?a1>NgtaEp)-&jX87K80- zO?4HJFan6k4OxgFI~r;&lzhFFhQZ25d9+1Pg#{dmps+F>{fWKV$XGrH2O93CqM?cs4%Ukp(UX3z9gfMhsLrEiAEC7$?-ywjQW_dHn^tyK`{xl|{g|HRs7 zJ^jfa{Iid+pHg(qH$HvoCFipC{;rLi?L&Cki=O-V$38OC1D`}fw)2N#0!=FYo?YA2 z4mkuL%D%Lgl^SDSUs454hLXIF2F8^1mr^C0w6>-&-{R}|=sv9$Rz*cxc_MlYXnvvZDw-egoY9knK-#ZhpOI&W{&GcdGu&*4MO?UP0A3$(#&>T2q%t6*fGTK`24 z%)riii_5o#h6dF2pBISjV$d%m)zt=D{M|@giuprc*vMp~L#u(4u_wj$*-5)0WAl?! z+xHx}b<_QQgF}3yg(CN^zdWN1053ww6?6g+)N2@IZ!-JMZS@4$Djy~%j!Dxt-_`G#+yto_sX*4Nje62SPEH*b)ue($O)AtMFq zUo`#OH$DxXotXR^Ui(rnDeB)+CfUjQj4})yg_F$@)5U3faGt!n`_@eh`I0f2iI#IX zA@mFyWs|um90@At#*2n`;Mk)Fy#a-%BFx+!?9X9V21k|HgEZ?FJLzPCDE1zF8swEr z83vX|L^A`W{Bcdjq(qa(8g+z)+;*(3v!$!Iy}Q46U%YgY ztO4TPw&%fHHa^hO(Pd#C*a?ph;jYXmGl8Z87SX5rPQY80wss_Xe~>e}_`-@${nKOX zYI8m!XaGVkK5P{g6$HR=%|(u-vQtZ6`^@7Rr5P?g_%5-P3x`|?y#q5}_ zoVvsV1wiHy#N%Jw|CAUV`m-N?EG(kSGJ0sny72qG9?WHzUiA5oul3NBP4)G)H(c{& znm`)>e%DoRI`Pf{fY<)%`=nJ=&ELKLMldgZ;d6k)zkA(H0KjHbZGOdDw(o`q^87q6 zx#(HXc=Eg6d8HX<6UP7Orkgi!-;Jvv@Q3ezCpIhpe#?3^z4?t-y!DM&fcfB`f5e3U z?dzX52H5_eKKT_^`f1;_X-jfAT8tO9yX}V3G2xfK=(+E@>Pl<+>Nl^4{hKx6CBmxu z+CO;TRWEzdbF!FNCoKx}%*^QYEKVn9W?>QSy=rCsWTiA2FF~FXaYYQ$8Yf{zC{9Tq zU&mFjIURLH{s)Oi<<#ABEq`*_$p}0p0#h@>m3%mA>6{8!%~`(u=}%ZuCeWEJ^oM&} zCu70*cg<9;j<&J(y3SC*F%<;Ms1SK#ZERXNi~bIFkCz?T7rQoc=Ffcaq0=>wQ2#*T zl+%R+1r`tnA2HoBpe!m~P-~DMQw^*ABvZuaT5FS{i-v&Sf7zO@H8ocG*3}ojx^B(N zQU02pxdp+RKXXB_cmRR3ef~?v_Ek z6u?O?7Yg&$R?PT0qTm!wGy>GexI{)`YMvhwWyZS304O^2YiiqtFova!+GC zp9hFVX>4f+X7=h|gyZ_&wKoEe614)L!Z5qHcYx>@I2M(-$^<_3rSI%LaM(ITCB>}R zX|mElJ|>VHj_4N_;}BraK*B$|@mG*xpKJod({n}-yuIPzH?CWU0;cTL5*4P#CqSJe z*7Eya#Ryg%1&t8GH{l6OW?r2OIkD~pNq)%Sji1@d|HXg2QjERb47}A|bjn%k9;k?- z?w510{sTv`nZ$(J11x!PIwO zRldTkkzJ<3YXy$sG};_3L(o+Eb)wy3H2`6S-@AZrUq1xYhYG+;NF6U8DMRJ+gNIMU=KG#4BYBtK z7~VD9H61)MdH>c?o2k8hbN+g{h^iQ@DbQbEV@0G1xs&noLMm1hAh8vx z-+SPQ1a<~WJSp=5u!PnW8e^3Dx;k{b?w0kYp#JFJ{V{aHs5e~t z4ZHTw-utX)JP9i0rRl>>#m(WMJ(l5sb&Ww2-VXfh7e5SPn>or89`h(n0D5EEe&h7n z&v^2=WD7kwJa(+P69vp^Py$dX3M!402|4ARw;;fU{{)M6E*mMaG}g$<3_7J&!Qv~H z-V$>T(JG@NQF9EoYQYh~>Z}9({-8gwN8euATO{IXs|wsWnUu!NUZ}DRd<^KaGAP5q zzq9({7gpClro8f5bLC^a<-E>TYl5hy0y$5tasGzt+DOiXghJ3OByydzvNK6;?`5K? zNW-Myj!9ost=9omr|YTU9yT&6ddbA}r4!Rn&Q-p-{(>h|R?8r#cRhyz`dEGn1gn zyyH+~s|8(W*Ct6{VwqcT$3k3&m0xb5vz;;k{BvdoT9mxwy9U4yG0vgho>=a;?$|KI zT~^LEEewA}P3&pPb-ZKum`{ns2Of&+vH&LH7#NezzKdX66+$r)eu4T83H5HQ(rNmA zulvQOGq#*~_9J76*+5K&#DWw@0#gALeSytz*-4_WfAODTFO34zVl!g~!94q=FM19v zqEQcgYjd#ZT-4SA{r=unZ+gRPUiQ(y{SyPFOV)>TxIcLRRWe*}@1V&*0Ivox$nOxT9zVeKz|8J7`vVHHZuJpXORn2tfqPj~eMF9jn5j?<~_e8V{gczP_U8rm1sJZcsa}n^ zSqLNz<#6SE1U0nzVV$*(dxvQ!5+cz9W{?TG)8H3VR%psTiOWb)|M*0nN`5A@8*l39 z+}g1JrrS5J-@Nlsa~o>dr#(Lg<2}~3IVSIMA`zvGG61|(1+0HVAIak^xVS9zbivuZ zo00Ym3gBpda5x5cUxH4D`jwWQ`b zqyMfN_6YEvFQ;s1INW-;c&xeIoRII_xS85!{_%@mxRZ=uZOUPjhcEHcesN=x!|f@y z0{7Y}6DA|n^Ru7!WMEyWtjo?e+P?SbS-2A-%6(|)i=y1S2=4+zr8nlX`{Eu%HtHVH zCif5;d75)Dm26Ho@+qZq1Y_7c7pO(%+=8kiqHY9fMy?-(H?wBcRhcOb5rL0C3 zYKrGI>M+GwDLOX^{Tl__vbrQinGr8)x~RUdzS{VmGm~NE1;KLf9-O}3tMYvgE{`SU zPg<0RPPo0NZ_kmYO*?kqw`<>l##Tg-My35tp$D!iFR!hvs4Yg%s;j92gVbEm5CaiI zsY47L+}O@kS$#=B30xjLcqYhqm|m<70*!TOTJ4hAI}AKAF?FoHbI1Ne>(<|U$S}W$mu*x-tZ?eF!?2r4Cl4wZ@Kac zs+Z9O3++#T={q0z^N%2KSJ_!eu=qOb0)Y}9sv(&pSv1lL7X@|pUp1_f!$n)7U}SQ} zt1_1(=nTc((7TR_X2I{PxXBLz2XDY;veaRz7MI(6BhE^ult9wK|KjC1%jhhmnwllL zkJg49`LPfWR-y+!?*@`MsoI*UR>0|ge98cLgEx2f>^N}b z?rjb0w>50vf9P;a$H4ID?D07h1?H{Dl~+|%R09%MRn=8hK~Y>+ZKxQPP!*R08v`~M zOTfR}{D0afJA(sAZQpgnZ5w{M z{@yJO`wum>B0PF@woeP!Q}IiigNUQ#?c$e?Qe4#bC!-7iH%vUlhuh&@vq^}C9t*VX zfPt{F_N46GJD#J`6z2Z!W^F!AP>@)Zp}+X3?A$Y6w8rC}(T?23=D-+Fe`dRSA%J^M zf}kcdPM!E9Gon7zTy5#yiXhJ@SW*Q~o=RF(SI5y|V=Tp7Z7BmfiTR3?!C4L2vz*;v?+Z*xBYZfR>rISp?V+c;0Dz4 zg-CCXs>q6jX}(a5+9t}?5cEPdXZ81g(6Kmx>S%p$vBdpfI)72x&)4}FP%x5D5k-0A z6~fE8!Jawyw#k(6D+qwlZiS@pGRW8-G8x-1=qJuUq%$x?KCSM7p~KDX47l{ngI1;TJuqLW+>DB7}EmxFTpDwp^eq1pgzp}s!U)V8@{|IM4W{Pflhzqsq( zjoTV_>^q30*@*4TPt8S$kQmdb^d_Yiz=Gh|3Pm-;f+~kI$^fuX>*5fU_>iVAwid_0 z8041Y*K`6!3~0dEZoflECg-BbL6G*(9Q`y~fQurb4I1fSUv%>&r+MVd)sTy*iv?4#PmE+X8y1k|H;QghR)N>l240qFK{o=rfGmNPdL+B zfxYp(^X+3Eg(GALK{va=S9fpRQabKeJAY+q0-!YpohOI0%Ml0~HzHmTeE#EC-*C;p zSfDIWQ*+yyd`G?V`I`O&VX+V#>#W)Xfp9zlN!1UFpOui)e-a0#P-S4>M2tB}0_k#N zn|zJoE>XHlW-$`=wV$@v07ngTRjQ{b_N+od#O3_iog*T;(x|jSu0Y%1+*#H7Jb-nM z9n^e!S8%Th1={Qz8U^~@cckgQUHdm|Z}|E8`)+?=2dt*I?m4*kNYl}_uGY?8VB?Wu zGHMzvIuqsjIz!9&pDP|vf{AE^8-uvBh)g~*Hr~o(j6%WYUVH@0^TjgHNSj0!GgyxUC2q|zJz{A*7G6mt853;aML=ST7t8D#)i zY2t+ZQ4P(CtAIVj{wXp==zL0D2wR>bROKg4BWzTx($P;FN%AMmd}4C0tQh9GJX$_A z(;TAI+Z!-{GoMZxdw=>%--fCd zGTvyJF{>B`EIAyYxSgVyz85mcIZPXDGW?)0AF8HLBOPn$x$oBp&sOxSfUPW^urQ%r zERy{Yft1Q9IHO@!+aYilMXy~)UOerHTY9SMDyI40nc#>sky(2!a&+2iPqeqmIlv4` z8H9_gnpsxUySWhQCY;e3M@(|_<8>QO3i>sAVpYvEs%yclj=7g~PauX++HO}(pvfj> zN(F=l7ZhcBB%_rIMM=>+FDfKf{{smM=jvln4Y1mUI#P&6EXFycC@7ldBiYgSh|WRq zH6iz^+BGW>euyWWu+ARXdvj>+W^aCD6|4zPE6l7a$(V)t>FK_q;m-bnBQ2eK4mIvL zaQL2`d+*+|>(=|W-E`-@H{E&9FV{bC%e~ufzIW@!?YlQ@-@S3ZGyptr+jnT&-h);E zq1SKQg?Mxuw(eTLb=SXdd;sNVci!{kTh`xn$35TychT*Zh69M(e6YC{NO)*;9%TDD z$5MKs7#+`3WBB<{9~{{S*&sKn<6!$8ZR?&<27pV$zY~9|BS-?iha%t&eD4+J>j8ap zs9JFP8W=pja7Gt4oxmBga~&AMRD&sd3-(PCVgQL}zjO9Og@3^9Q=pj8(thiV{_uUp zK*uh;Gt8k~XyrE%7LrU%3Nh!&AR1%89$}VE?+OU|TOarvAWs_z6El@8opOOrk-`@q zxtPCQ<>@VNd>vhjkyscqFMH9mMFxHT*TX^K{H}Mt(S*^-mA~~TklC`m!7?Yk^~x(m zuMR+t`7}1QpG)ZX)h~VaNB-*FC}7G?6XAt76P|O?Bd_1|x-C|nC-I(F^Qh7_WnfHg zEhvqoDI45KLDi?m5Ob#Iq!`xgtVAM|o`Zxb4Se^?nQ3$`6k30~9*0K8a)GaIGg=Yo zcX00bH6wjfg~I%VxIYd}Luqs3EkT1jk6p*Obd z(|toDeS^b5%RK|beS;&-9o=v?ZtUo8>gew1=|gMJ;85@2Fp4Ft#)V#iOWR~0-wTw| zj+f5N&U8xpa8PILzI$>(o)Wf@&Rer8w+!pP+(PFv0M3XvU1|>ztsV_A<--zD9qmB< z2Kh7Ac16BbVkoj^>I`C*KEt{tT|6>6*_OsI;eQ5yEgVX{H!EgYtHd7Ue|-`bk$3(sGT0_Jon0mjBBajal|H6zCpOh&z!VoE`D0e)ZLBXb5t+Qw2+ zfAFxCc{gCxV?=AUz=R}C6G4o`kK1n`^>%=1==18|0Z zNk1O#-#48 z*7Y3mpMXwLz%0ie(#!zQTUE=CiuGK|_?E?4w)?+niLir|)uqz;T_e=>Z!VYzk5pCIpTJmb(Z; z+Cs)FV_RbIXESovd5)Ju5h|dX>CM!^k)hw`i>O92H(#7B6hfj72Mo-jrQ16803u^n z5()!LnKSW$>6$_9xwA~cZ7YD)vRdZq%8tu2ofU|~!KmiSJ(cQ27^@f^yVz-G3dG=6 zCs0a}P;y{9Y@~sHPmYdHN|R+m8TthkgD0PNF}HPETAEs#o8b!RpVxM{m68$8d<&J&fBu{W zblui1){o=4QwD%D3`}ij9K^uRxMBgxhxat~<@*^1`g0;Wjg$PEnh@JxXbEszdu(=d z2l|?vBOj`?Hl#*bu$|Pwt$nQL(j4mz8WWUZi`niPf&2qU4wjN}nr5P|- z;v~j(a>)T=j$|(8<%D5PGAMHOWKOE(9IGKI0U48$NRlMsr55<43c8XOAY3uW8j*1I zLrP_k^?V`PHYb(n;z6Nf90o@lahd+)nv8WxYA!VhoLw-76=19O3(JM~eJRt8}nx!z!tS#pI^# zl7rVqqt2G4P++cMT&Y+ZK7Mle#Bilj&9?&owy;MR$2AoOy)BNHpV1&FUe(vb2=+Q0 z9AiNflBOEVGRTNpX^Objy3n^4CPBN7azW|W1O?G)+Y;cxm88t=Aj9z|i=l6avc{Xxj z{d$n(y@+Gyy_Xk?8X25vw_V%*i!xe{=$EwMLU(tE28ECV=i+#wQb9}@ z97BVB>sGC3X=&C#)e#Ug(+GqukhNN;={o-Dq}>8hAvSOzOW3_@y*vY3&+3A@ozuly zkZd~w^qrWTDi(^!k7Jk5x8~xUuGZY#Qpv^3Qv&Rq3qH8S_aS2EuITMPK02`|%~g+1 zsFQMU=0tg!`aafkeLd-!H0nZZxR^@>tDh;!v5zDbo7oE|>&3p4Gn=qJ_@JIoIR)#& z+FXJ~sct27ZIP49O*_Y5ihxhn;)8Eq4P?CbW!J{Biy5Riqf7$)Z1jrjI?vLjdk86! zFZ{+j0p~z#r_ryGc)vi>5z*+rE+D@!J`L{pPHF3P>5u7 z*iyl5P~GTtaH=*Yg8~~3XQS0-f)44MSI|FeiWbz{5YhevYWD$MbLGf#{437&L}fx#t|()I(l;KQboTM z=*rT7vjHMWAcln41Ix_dx!3?T7$3BESLP#|T?QIKooOVTRFnkR#))l1(9&J6!MD0J z4bPA#3|mW)@PU_?#!hNVGn^xiP4_A7wE3>0pyl1^v1%k=49O&0E&t~WMaiJ(n5ZB~ z@&%=gp4fZnLZV;N`ZYs)_8lZflvfgJySZwuQmLD(&de2XoH#Ys-POK!a(W4glcVy?1gyt ztfOl4pZBV=RB?`XO#cX4p_=OytEne<%@rH+Y(1upq|Gt=B9Q}R^yB+?T}brHhoPsd zqr0nPW_I4ZsSpJ>Hvt9L>LI&BfL`?2#Prz2OnX~?Xt1}dJr8|pg>|{QCuu<$QHdq1 zT1_IDW-3)fgdet@1}sET%(U27+f`WQXWw8{QMFo~otrBa>+qMabLMy&i*<4o>rm}Mzdk(G=!pktD-|9aQnH@|WRZLptTvX4-v z0{x<((vP}^Any_C&aM;_?mWLbTxbfT; zN~J@`Pw#%_$WsSSoEn{+E0mV-_bVSf8;%Kz#hfk-!FV4E!G;z~)BEK3S=*AntZEQ6 ze9}DQdjRoHO-&CEpFDQ#_|(J{lGGb-%jXer9`HByQn_4HcW&+{iv zkN*Cjeyi?#JV+L8QX1YLB!jN+Epc8BPHLswZ}ZVfc}h6_YCl^cRTH1NdRfa1$CRK^ zDYE-gjM)l=_XDoS3-x?)!Wdw&yu%SX`()ao{Kino$OT zml6WM=k0@O(AVhdlL`7=3&B$>ST9X{2*2>&A?lv#**y3F_b|K`M9|R%r}w^NP@~@v ze8alTAv*D`Zyhi@vs8%2p~NhWf>?Pbs8h_jLVt6=c>Bs|c~eFiU48kw%Qg(HUp;Wk z>#n^d(eD{ibJOve&M{VE8f!Y59qP_iFSH?}8)l+YbJ@mvs}V^^tvu{d6%pqeb7ZN% z*hx?ZB2w6BqWw10$_r$}n##-VFu$~g|)QIfyAo1wy9%~kt6H)Hkvl&a(QNEc64Oy z=+R@RPMw~boGLGr8NVAgy%34Fx3%eS#+WTY9lC#L$i=Z_wNtm|uJYTUh&`wrZV4N^_duY z+Rp&+S$4yP0EiHYmt^G~S z?Qz_c;(%JtN>v3EC^}VfIApeSsnFfgjf&J{Z^?Mo<|qxfSjPHVSgY4ej3DVk(APHp zdZbcAC@d{P1H%WdlL#b8T!^!`i$N5S5#+2tciYV${@J%s6nsAD!`&-i(%QBq%Dt=7 z3;;}59j*D+?N@GrT60?H6yX8nVni$h-h-2@TpaVQt$9B^S3GuVY~PVnPaYUPIy^oy zF*9FW@ZL*rnu5t;HkSs>I#aA06oN6YBL}Jl#p!W?oun&Ud{H)Y!4y5A3b#}COcC`KVL%VZ5Bl3U!QjtGq#I)qlRTNixJqR@?}Jwtj8v z&%JxFq4N;q6qNlyNCJeQkRs?`y0D_rk9=UY3RU8(RWEW0&PqP`zyG(_4E8rCcN8;H zB@V|g#94s}mz9#D^jn;b{nGn0@oz>MUE&mi5$fnL5u$a*Qo09-o$Ee*I)3nh@jJeA zbmxN;#bSFd?qogbHrLeVqW=9)m+t=2X&fhxgtq)(?3!%o6Rs`Pmc0%ip=K`CgqWQ5 zRPZCM_!d+uoEaH1XeqGVFWX9PdQ>OvI#j3RZU}>I8)p?k_5P!A*|HocqrP131D%8K z3T<7o6*<#Gr#w2lmQ`QaK%DhvZmaJ@7#%ndzu1O(kYK|8w6|hhGUP^M67J z#I^ImM|M8=Fbvdtx;nc%I~j2R+cEM66-wnglTqdb>ns(aKmDoopZol=(eaAp7-vrD z{tuHJ2JA|3B+zfmzxW61%*MM?k51~>0^-qQqqX6Xxf9aSosZ335as6q4fTt~g%Cn4 zihOF>)ZXU)+23FH@BiD0v55)>9m|`keC)Z{g+<`3`~i^VERvw#&wOfqvD6a3sUX) z@%g8ont0ngH_y+X3Xzw~qy=OoXQF>vH#};QbsO4ckVFI`C@=-c6PD(9kQMHv}8Tex~|ZfS{=Tu6YgyZVZw!z0H| zj<5=&a2rCCxCtxjT!@@c?6!OeUcm{8bB1HC7?I!~IdQLrrjRE$p$|!>g#%9Yisgun zeYAuJEo(916M{WgrCO&-1=t^a4Xl14jM0HCe(EERV+g=S(x#c@whPkUFF zUf}s!#Ta+E<%fQ~hbn=Ssc8M0Rmh>S2{vC4e`|KG_{6@$Pd;eQ>$JPFxwKHUD3u_9-dA>B1WYA9^PCgj-Sz1@0J=o_V;e&Zz?ffs7 ze)jo4gg8?77Z%YtBPdT!P95BTXmVl_McAzA>FL6*mUf5T*4`oCT7OrE_aPTY8D#+Y ztO&3W82Agned5UR1u&7%<=cna+n2?Qm{CSq7!2>ZEKnHJpiz=*nxBs!e|#*LYe8E&rT@_n zj=kr7mwR83`Ln61>(NKXr>ASVrWO}D$()|9KCx?J+f`kq(v)_9tk)Lwcol?GW!(N} zp7j$O8lcj%rf!Z5ukC`Jh~Row^!Ki4RJ?XCw&BXlC?laSXM-H=ZiL#W3`vqH z6=_L143|vpXf36G$x+5DycC}}3Web$}2Usz%N^il9IJxx)-fd_L~(lOJ27 zW4o8jl@M?XNisAPxf|MjNCE@@#=qG3m){-#`gbRMkU68Fk`$a-tC>_s;$7@5Z|aXS z$|$1?NKh^5>+KTe1#tlF&RBB>6G)UU0$kIvWAktJS+`iKO-)rgI+`#`p;|82 zJUX&~vvaXptK?3cC|t9ncVS^V=s>t!#w9E!k@21{@E7%mgp!reCe=+GU{?0QZZfK*W3d(cGs!d`QLmq26%18lT*plvXM@}+ zTWIiFWnd9CPfkruO->&@atwMLl8+q(Kwk)cB|g4J_^Z}$P(g)jbqR3p`QL%jk5Fa< zdN_PMPlcFQ~9|p;$PR0=yIrhKa*tLW%Pgg_00(B#F{S9wT%{K2~I9LGF2Va48P ziz8R5Ib^yxhYC1coyXCPa%~{R$U)4K4v@BDUK`pms66!{73fWhlRG_sDv2@f1a-#7 zPGhB=9C6x_lQR#Sv<+?ZN~JtLcDl8>Rm5yT#$#l^iQE9^-uTWbqUhHKFn*0>;zPp2yMNp0AHA5k1@2A#ESuF7pzpZ~x%H z(CXD-^ov%jl!<;Vg^O-J9~$W1e#KfGV9uWp2=8k+9H?#*xN80Cp);K<1I!QhLx;B` zPH+@Vg7+Rg_J?2p;g|2YXW!uyv-3sjPC7o+YFd}G_L=WE{U--&I+~OlU$!jf(=8`w zEpx3B4!!ZKxO#NcFCbP9ZnNqxB^8*fA`Os=rG-NWk3915u16n!{LsO};-?lr3w^yk zg9Ckdu!(E=`1h||+1cH*7+tDXC7OTUNk2lF1o)B_1^?Y&UiF^04?MN6aM%4aIO}!$$7^2M4c>V2fw(gAlS8 z&98`a(5FKMW5AGP3*K-cc232^5v(ItlP-=O7zzWeYcX{31$!VeRp0iOo4)jw@6OE6Bc&%pB;jiezSa=8cD_*ZiJ)|B za^^=5JP|oJ*w?jjO(KL>5=3!?m=Wo%@;Bm}9cRSl>(!z&~w_UC9r zPC0PUzXf$los#8pENE1hwqOy18V5YI&CSkfWeNZU#GppBZsXjXHkvK1E$cRKSwzt; z_*&&Bko#to!4>C!?pI#xjyh^^# zbTU6^Z=Wb=Zdq~HUE{}&FG%bmDZgfW*Hu?FEtDo2yK=1y3%z&VIa;kS%&u?mh~Ieg zV68S%sT4W2HhK*z90ivo9E2GIKAoq>1~y{_xef9RQYv}&LZPF*JE*&6QF2zX9W6el zTSbc90&T;zzoJA%d>&4TxEN3Msf7!uEzNaaMH#}z_|cQ2Gc)t`=FE4oR;Qp?jsGQ=kGIxYCa(%pbe`E*HDY#93Dvb@ zdo~K@zs+Dh^14Sou0#^hg#a^M-7b#xH4^D&HF^8|Qtr6BJFkDqHm>WI35CSz+CzH} zP0h|Xx3(ZUl&lxr_{W1L8&a+}GdG{kj`^UVd%o%E4waK##?dU>wudJtR&?f-=Wvcd?@$ zht7`hdjs!D948TWyBxS=y#!90s58bM%r(l_9L%$u9ABRDyXl# z_Reiu-*)BYZ8yET2Vcm`c61I7G-taf8D*5Mzmr)pdUVe-Q!}&lf_df!Jaa1L$(!CV zbnUf$on0+)9CvoMzT*1+?bmcw%d>1ztCiY2N^g7nnxR$g;=g9)s`fX%d1Wp)SFM(m zcA4H@4-MDTHqL~cxN&J#&>WwY1(*%}pnZyJa&z-g=$n}>;EaXeG?H@6&LIfMG|tG! zS&}nzSSx~&9P(2$^HajiB{?&5^_p{YV5ZO<-fgK+s(+`*7mLLc$4~e`AC1e7vb}qf z;}flSsmcp;bMt^J^je4ikTPxEwD$TP+jeZ*JT%Y?Q(-BvVYim1XY-@HR36jL%Ij?P z;H)IjII%wWOY^#ddwaTvRmX2c@*SxVcF8s)YH*E(AN#W&`?rnXzSF0@zIlG_dNFWx9@)J%YXI2 zUq8C_0R%Hjdi~NevKe^?SOyhE@zf=UH~Cf{Lz(6Nd|P^sU=> zAj-FsLhpfo`4al)MG-m!z}XK8$?kL}W-#9ShUJxO%DI{s?Fb!DIC9)E;+CoE3d^Mu zq_T=$e`61wo$sS2x{u+tAPd z!n#{;Te)S6Unrff`3g#D!MaeIa&F=cZ|M5jpIh@YKey)fH+A?hUMNnOl_vXl>|VRc zq3=FjSSU>^*$y)cDNwd}5aeI@5wzJ~)4-P*5;ePONDHOtT=> zNn8N294TlD%ohqHBjX1T9^Je5nVk+{^cJ ze!hfNsdKz~a!yvOA`N!b;`SkqT|j;;+h1US>b<;CxmXOIBdL(~a~qbS3Uo#pWyBD1 zaE)_vbo@`hdFO3E{aS4QH~eEcAACv^UtL(32qmr6#;8Ss)gZFML6x(`4pjsSY0o%q zY2kjIR&H~u2{ny_G6Cj1DV&K9X}w14=o+ZPp|f*o$j}(%UPI`Evfy7+L zaX>uv=*~xHXJ%Vko1Kotu?#4q;cEFWW+%$7dP5u!dS?V<OkI&LPVBxgKi|>0=;;bB zuRd`5+wR->#61u1q6pRqY&l`(;<%|L2QZ8h;9fYb!8rut*m{%cx#IL(>Ezf9qja{n zHs|xrZTOqEGQ*Nxf_mCFGhAKy~$o4MS_z1VVhE-%{ax2%ItioC$%+ z7zwb81T;4Gu3#GCblao`>%B~!kdZU2w-WlG^0X)+ zpd}(s_aDWJ%So3qAr~TI<;ZDBOk$-p`0A9e(M3-{`sV37)YZvKD;j7U|F~(XV$UyD zRwV)R{OGCC1JCR)6bmTqXlq0EvYLJ~`oGho6NyveJDU72l$+D#vlMu#d$<(b{%RzI|C? zUlTOcdk>dRZS4S|Eu!-Bn(Mc3zjDi8+;P|F_!Q?b0%4;RBPp1|O7mL%DFr2wr@W^# zEmnu|Is`p}y|n>(Q!Z`>)NE}=RzBa-lz1;kDRQJ*E~!AT4cd7Fo^ZO0zyjR|C@7VE z2pCDJSjL(kdhwza??h!16&pQh{dsPw!Zf<2369F~+0+OoWbKyq#BRRfuHK%_Td!zo z&C{1;4KMCO5sZD~GRmA_JumvtMgq(#f&>K_3d)s-vR12~ePRL;loKp@1*+Z)>_onF zBFiD)2)2v29gh2-d!VhF_X()3I5oFW?@v4@x+qRE1CsPe09NAr2^5zgof@)JNsm}v zm002V1rtGJlun5a-w zVDMlIA9YQxQcY!s`6WONlH{sF`McukMrLp6P_KIw5@k)gIZV#F529i&UYM=dQQGy2 zB#B^U7?LF)tfPcts+H^uZ=?gK7~00~88%v2ZDgv;<%*-~^;k z6o93MFls#ix*DrkCs(sZmLrb|8WNp_Cl*!Tt){~Q`ZMo>QwdKbBCYZo;?f( z`h^5o_**)9Z|Us4c;@qRxe5zrFs*e@;7#Yl10t~C&b@~wXXlM$sJ6B|B<*xtfX^qM zK6KB+Pry3@HIBJFRnD<+YG@?5IAX2&X6e4s|O!wf8e!CDf;+lYXm-!|Qsr_K@c<=o!UvGKAkUEMv*3f`9& ziq-N0GBhPlu-=6iSIg2!=iw2$ge1Tj!MSmvSeq~U)SX4)eMpR8gLjdGx_(DnuD`!Y zqJSj2!F5J!@ddSc?;H)cOng1Y0V^Xy5+2{qj&?3z&h;@(^e@WbX++?RVGTnHNU<#P zAj*#FgV&4H(a~~Y!Iw(B5eD0|mIf#gWo+R0!GWeM64C{xj52!YvAuWvcqf=!ZhFNn zZ@B(~N5Y73#Lo5hbWTpq)f0*SSNXCORa0O0H$%-F{H%2;&gARv!hEF3A zIn_T&nQVsLLy zH~vZzum^Hr98c^!bkEKw>oC}9HxXo<`F4X8g%HOsj$=HLQA2?S&sXrFQcIq*ny=PR zKKPnE_0$R?$Dl2eLya9B0ZBilj`t`hyX!`ZnUxY)HM&nJH&=v|TTA&IFV zrP|Qa2l!)Kv1(|=${`;DjcRYl*meb!K4N4_4M$CB$?)9v;X)_YKKdoL z7~m_8mip#pt88aRmMq~n22IM93IK5Ioc3|$Xgi_IcPZ1=*Y+Xc3wdn!{L=@DPwy{| zO;nS+R|X6++Qsgi75plgjPOVs*XLipqx0%*?Q}++QAU?AWpRKRy$~W__%cSOaTr2| z`p&V7IT>+stf$1;zM8~jPQy9yWaPtIu%pgSeR2?74T@x-i zBwE}q=~4~ADS;9@5#DioR1HWzNgM!qt_p)NUfEd2aST7IfGhO0wcIJAz_-IQ6eCtP`@sfoa65odpPUoFry3r z@7Y)Q+PB7GTWfzY=%QUn^UA}s@*Pz#N4Q`dci%sa8ZX`6`I=XCy=;3YYIsi#I@IID zOxMxUztcEWG?ZQJkX5W(H7p>3eNOCg;ypK>mg}>5r3Ug1r(7_pPqxFn^slPhy;m6l zPPuwDw|9T>o8Oz*`%IDI8tP?WK%xZY)VMWh=Wi7W7R!hjeAj(bX!Ww|I$wW7&nvF$ zjFtgqlu_n{wk==xs)KcNabY1rx;QP>#L?@M)1gL%f=;RyfkNQmt=LF-ihy;D3NozY zn545VN6<`U9=P_ki)Afd(11cqoB|g=TE8wL7?#V#NH31ny7CHv_sCtzK;Z}!R{MIo z6WbY)Gh~z@Um=51(=(l;CV|&aou+bKoLd#%)updF7*9g-)sm}gc{+v!RvzQ{w2IiE z2{q$5G%r5>9)&7ws@E$MYjICdP9g?%;=)LySDX?pSqa?>yj>Oeqnlf7YcaGY>02jl zu5;P*rnl-+gu@6#0`4s4xsvd#NAL$>e1x| z*)mR4kfR(r$b}}Y0VF3rR{Wh{QP8oegBD(CGXU~B+>zZ{vPosiB7G}R9C_y=yh>}< zu3f!uEf{KPggW_h;#>eMZ&?a?|w zHFrAT6o2hWGoWlrBPj63`(l88>%gH@1N;L z%H&(4T=Dy=0JEHRC8AbkS*GJWYSnAzFrlxgEX{a1V{#VJd4yhFdEvZX$cYpp-gJe$u@m1S;@qU`ewRo>c%?y zdgC^dmfp%)HIb26$Lt z%s>5^kkPnYc5)#mXv3l}pb~P@J4vRDN!FoD+926@Ylc>@=^q&A?&;A#1oGpwP%4&+ zMQ|$U054|!OZzMWd@5xC7)s8+^TktE>T82cD35j~qN8MR&t3^4lv`0byRq@||M{a+ zkL~XGncEQ7Iu}%D!3QK;ngMxZXsiMEM(2UzgqjmQY9#A0xLU>kB&?C#iyNP){=Yvt zz3)J=p(y1X-FemTkb@T6Gd0sGflSac6tlsslGt(h-7lWn`S{!~-@X$5tD}rEx}+$J z0~|syYHShaIOt909e9DWvEX3q{siO%9xLl#dO#r@PBNuFF|b0p3dJhm3u;u-XYFo; zfLRrhQ^Eio{0#bbZRa{VlXmi{0c~Tzx)vL$HpZSgBAnJEW0GiLIZ;M!E-nTy{DO;G zjK`;R>1I$c&J?ADDl%kLzk&~CUq-@)Z%G_#qOK#wF*n+SAR16)dqHAc87IEk;1UQ&Dfk*OE%lzwgB(=KN`N!U z0Py#IF!{A_joE;@c0LDzAq+;sZgELrLl_zsYZ*OYdHNG+@YDO}-+$|hS6|=54J?3O zIF$fJ7m$F2aYSu(Yhk#l03QCq-IL$CW1>)^MtAJMFrv6@<e+M*?0H^yns_f&A5c zl++XTZcZysPb`Tv7#k43boECm zUFp-Ch+giPNl8h^)G9|fex{n`+KU=8d8Q4!Cc`q`mB#5zvxQ@xUW*aJF9*tqh^tuh zHdj0Uu$Hb&FguW4>Jes5Wd-1ukgqz4dBHp?VFY~v?K9M?0uvHkDMvpm7~uw#5CwqF z5jiLdsTRJvlKomV>FKJXyq5OGP0M!v*M45jUQ6J^7sR}L9!{_zq3Q1I=xYX{5aj1;c#sw8q2|GdBAVx+t9- z=Wx?mYd$}?VgNys2UZMX7XZ~5El+-+d@U491pr@o^r6TN)s`5PDLNhuSH zK7!-f&@a`;n9>e7Nr^fS%@VYTSoG5z+n^d1Hwwk@fB$6U8+VK&1>D=y1*cH?RP?Kb zrH7A~V5R&M9B7EENSmsyDe6EbKva26G4N*fn@aZ5#cap{)QT7}f?C^%Mc@9bP|=r^OE?&uNb z6}6_;kS>aI>MhjnK?0vg)>P1#F6%5Qw``6%=2>O`rlBHpDf>>Tq=xkTkQz*$F_55o za3e)=lrY=@lQk?M?si7vFK)&9A)ix^3%+1`x2?*x%{yg@m&+ zt#g6ZN%jfl77>%qA_Dsx6?CsoJ%ssu>xvZvo40J*zT+jYyXiGIzV?R8w_d(_&1%S` zMA{~OipY0za$;g)Y<_MQ=vS}Kc^}R-ItQiy5XYWB02yTf7;4WD|DLVK2(x0dGk>6- zf(sNTh|Zo8W%$70;9!wBaA={pkZW(tr-tVOaQ)s7CO-c=C;s855B|bOpZ-UmKKSX+ z9{JqokNpG(8lpKm`B$Gkf)3FwAaQgCb#yd+{6ic5-M`+tVxYyY7L~PyFjTzLE)W}m zG3{%3mg+;0#sdaN&l6>oQATT44PJlkHXLAHC<(w7n>TP_KszTjt2pEAnPivDdg5`y zr^F*k*J>lD!;ErGW|w93DW%rYPP;jfE?A$j;G`e>Lm|Bh=}!$gxRXi@%VnPf5#FW( z=pZdER3-rcFE;@|M%U*%e`8?XCprfgqHs@Bb=GMKsGvp{)NYC7YGe|SOVS=Rm3KFW zP9#Ti>RMJ>%q&fgdAhHlDsbvhHfXUG9lIs=x>#fr)K7k44-;(-=Rat zPfkqF!s(hzD0V^-!f{=(am{P4yYlv*e)Y$H_NPB``%k_5O|N|IORw6oZR47i{fIvB z?DIbjZJ4cZK>w7GoDNrzE?{+h=9yQId)(L8y=Lvum0K_0aqUZPy6H8qdF>6?UVF`! zEt^)X7=#yf{(uOS4I#`I=If|;baY~3yi%?phtGfDKpK|zAt)1>bpLBUW}c=C{|H_D zL}C3UjDGLFZ~E-&TD|#THDRa)t)D;4$<7C4im`l1J_AnDsI5J|{hh1c`sTq@+yLOVRXsA~>MBYHRx~Z|dE&F3(KTSH5xjE8jfr_`4Szr7&?48wqE@!b*oQMh5rE zv_e@h9!rEAmyA>Yga0}T;r9BR>55Pc;z%p^=KS^vQH`F zhc?CKwWNY>;%KGZ_~1pP8C!9L%;4oxU6L|9D~hgt)s6r56TbjEn>cpQuP)sF!^3wy zunP;I+irP{xR$s`C?he5{WlZClfH)J8Xv#2(xenbJzohveth0kLRqdGivo~(8<;Bz zmhe)lYyDp7r#W2(S`9*DUEPBDfmbr43n_PYHu0jC_5w}DRsj0lGt@2oFLey;XzLKO z=Vdkd!^O#Gbtc>L`OfyXUZ_Xs^SN9s5#6P~ zAZ(I_OGysgOwZ1hiVNlO$(d56GCNa&^+7;@L!@*7}Iy(HT@M7U81YZ0vqIcGV|-=3Ol<%`V#n%>Xd;Y$0hpdlf$AM#NZu1r_en3shdTMGpxRq#25Y z1$ks|THp4mk8fNt*kW{m@4A2Ldv{JzSNVd`#&!9(ys1~&-%{zi{2TxAARKokcbXGx zULE-`_zpE9UetRr8zqfODCqNCz2%G=(4#^4EM8$Tp2CI;m1DGH9B56UQ`jAV2BqM|IR(Ej%?2aM@TAtf&1+lgyGM)!ZzcF$;#^>#g(^8Nh1N~AIe9KMI#YUMY_SL!OleLN@pU(N0RdZ%1 zpF~%(LV@p%LBB@kYO^xvmS=Z#NWY9CPLB*^_?}I+#^E6*5;gHf??DF}1J9JT+ z>aL`rbsRUsP&-+Yg8_xG7<9nb*Q=0=LSTzlK7=|>7OY(7h4Bqc%OMfKljo?NsCiRZ z8`W7VNIGEYGH`aans{+8OC)Ocpbdfa!{qdr=X7DvCh&yDwgy{fv}|pF8Sw}(@9f`R zXWhz~rHRyW`q`Bz?(zyz(}?Hyy>sZ7e|8PguMFw4pFalt`9h&z6Ojl9hQv$^^&fwH z(|g~sir;~D`ylry+T9>;RQntbtw!#w)A=O{BY{->LZV;N)t9e}o+rvEqs$K$_O@N* z-ulK@zvlYw%$74#G+lD0F+ZimTK5^o1yKGROWp*uFSb zGD|ND9W~;f9Z$$fH98aUrnGOe*)#H~gCpXznGRUZ;bGkQ5Jc*f|@-kR^Vqp47*phH-axOd__gsD|8v$>st8c)T?yH5Y7nN2NhVJA}A)AVp1 zbRai5i6BP>*8{nR`l45wMmhw;(t!M{-yTD3qzjCGU-R;98&*G8_YxUplo2=bp+**3 zTV3Q{ef^GWuDbl#@aZS_9$ZMQuw;ff>h zQqbyY$VtdIGT2hr;+aaB?3-p_Qk#HQ#dTp<%6QDNZ&l`l2{CLedWE%yl}ZhpJ$7_< zb@%i@_8T|lzS~FxJi3X-z zz7Sd{S~|>Xx?EYh@+s|76vJ>VO%y|ug8m4qPg_G5I2v@Njn^0eGmD_y)FwmfT&Qk1 zHhOgZ3Q6|oa?8;CGH}&L(XCLhe+qsE3NnMP7Si0%GNxt-O2tNBz3KxXG5D#OAS(Bq z)DwMRkOSr7MH^ig$I=ICiYbnmBXeel2$wTG0vG#G{|7r~v39N@$NMts1Q~#5L;hS) zKCGf^>EL5Q8T1CVFW~f-!1{bDgIiK9fwH=cmLUM9to5$@X3pL8R}rVp7^U91Sac)e zSZshbE>pcc3JGy&N@gN{<(W^BNVp=avB2jq-`W=uF27|ZScjpnWVybM8DTx zw=KH(D5FvoKG;3@jj6F_AFUpp9XmbNA!K@)HY#(O@d@nZVAB5maLdsMdN3C zmGn&0BBWo{rUK9D<51nH*k??q$T3xQ(Ael$d$F{|yNQ*(mo>Ls-ke`<@Pqf;D*iJr2(N|Nt=&?*bgX^Zs)J-%ZV(J$4WFHZEUt#A=AiAu<#zy11G_vxQ8 zc@@2^yj-1v_bzhALuu?BIFOnI&%t9^hJG{3=*3EO3K0DK{CpjbGF-TJB0!O;qXLPr zB<(g<`;fNUnN~ehK2cc?%94%Vozoh7iHrN7#n0q~oYr_VFdiMKSQ(Om9F9Z^b$#Jg zF!@GB)^$2eEAIuQ+PdW6btS`lUznX1=c~&N{buyULgBMx$G|47c2ZyxB zPL4dh`{`1-Y$^w;L6SX_z8Fys0wT%k7{e zkn&uro9F8YVh#QbNLmj=>(VY-I&8yu>kZ?q!3gi+Q+Bu6TleJkViYac^kX5cL35|6*03-S!$;gz@!YuXF zOh_=!9ym1TV!30M8tg$(%>jgRsW3k?>3vO^s4XM(o6#NfQ^nxHJQSB_8qaFJwWUxh z?Rx6KsjKnm7Fi z+kjYKc;0?CGW> z7z&qc5G=KL=FHEJ0J3G)xq^8%Tq7M8@u%^nprIvsa%Ou}I#U@;a$M3tcLUPcI|LT! z`*n`8T;0y$mL9PiQR5mJB0K3h{2^Fp-ct(;-&B2Ir)<|6%_?4 z+XSb5D5$L(aX( zhtHtcMcy~!chl3J6o(MUj<2VgW&(dvm!$9hVB)>+7|hTw==(puZ}*eWq!#`B?eF-7 z+uv?7Gs@_|;S+cKcqf=!qUiEXYoZHFREH70HCRbO7kYj!G&MKp;#g)RxheVlWF6n&Kwc_{R-4vyqoSNL(M3WyGk{2yfjkEr z$gz;0n&Wn>HZ8V-2}#JTn{bKIwXc(L=ZLYy%Le^sbfQuwpLcGy5iA=KTuP<#zC*_* zCZ{)VT+`apY*nB^^gzCZ3bc(0$(KFFzEgO05w=aU3uYS`2fL&Q&JH0YoqFcmp=$A* zpUg^Z9H6=w%wrniWx3NB()2 z0E-kimy1_)caBWY8U^JPMP+{ZAn=l4J@dEMV3XXl{>|x%nU@gOD&6ZOg}uRCgnHXx z=*F4O#qlrlgrPDy>$?bi0r-mP>k|??4LXv+CoQ%A9bvQFew~PhOzy zBXn_627n)aeD196eof>as_FCP1+j%Jk3dcXI!^Z={or~X@Ar4Vbdu=zMTCL>;L9T) z`M@g1M*8Rn*Z!y9J}Un67|as9On6*!#c}LwwT3t+*59)V4HZ;~sdT#gz8L`E4E-)m zfBfZdb#%1d_O_d&i-t1Fh`KUHffC^lE6Tc640Tn~Q%}tYFP&)9EE5efC`d_A%Rt0Q z6Dj4jz)6<0Fb21Z2k}B_roSxIx$I9H1oMizb558#7*gWkh{ur3)-+Z3bqOt|8{srcSzYptb8_ z%|H$6MleR@QJMPAoaEWH*4PVHg)_xg(5ZaGg<#@Ua0#z+Rp*jqd#5li3l>ME+6$D{ z!w8`C*fuN<(hsUEJM^0oWAk)zHIm4I+gh8Oo57EaO+E7DGy9L8SSVKj2%6EOweyjOH)Tj zd#viTw&s`nQx`iI$NARg^(*?#RH{=>Aw7}Ps#T)XxHND=Rlu;GO>>fn0@q-Xq+<|z zYhMFKny8xT&#hCRx^FNXnRaty@$H$Bot%B=gku%`jAO@w zjFue$K5}ef=?WT*rA^I^e2K?S!GRClS`>Hc;C#a#V6eX#UZdE_o_z(lm5N@p^oM^w z0&`p@fBF5Z+uNOwDEtUM(S>%(m1EGZFZ8O^FlRx$bcTKn4XqgX)W<&{{QP`zWOTg2 z7yjtW-~RC5`^?+l|1lgN{={eg@;g5`)1vra{Q4JAD#zddXP-k3OMmbGeHqPh-1pGq zX#4&T{bSU@`S-r~mH9$})p#uwu^)4--~121BVA#5rYqJlW0neE_@7^*c{A%^V7wN` zd{I(HN~KUf=}95UvkMNU9E+H(I^?v%4%vh1&Nw%bK6SWYDGkEWeTXt;i8Rsw3#B0$!Mz)acfC#>KF2&AP?>u`lG94YT!hUhmV2Rzo& z-PNfvFqEHLTUz9)85y5?bkF|%M~7$Tifj^0WLCGd&9LR1=9dgjNBNuf@MwWr5dg;C|J->Z6|S?p&OUaUdt7qEm4S`&{G}I;QiUit=!kPpNr34)dfB4ijMlFiGJ?|Prd)elUPQs5v5D!Y_8)!h zse`A-CSj)F+_PHC20qvZ)v}&K3FMit!HC7Fx&ud!_4q;JMpRImdlp#>Cb2y&O{`08 z=gFxfhmQ^qpDGnga>MzS=JvKWxYssKJG*;0j^#>X1Dvb+aAImfe*Sd-eXkypsasI=B%qJ1Z$m_ z2jdRi%>PcmXDn}Uod1*B$BrDGo}T^FJMXL1syX1_*ny&qmZJpt_*udyK7nbjJ>%Fp z98S)WHu(aR9PDFop!ud(_vr{sRN{T{5^e$hsF-})n+5@cwKMk+xL;L2i?JSIE_j;h zo%5w9D$f`CCEfGz(_j3HA73O#^c+ZwTeoalhcf^nkf9`h<)41^-~QSsMNJx+fBEgj z53L+9*CL@6I{EqA-!64Pz`(ei6iGiQ!hrwVzyGxO^g=PsQJEZ{0qDTx!6^Kt!i0FkX_dYEB`hr2k}#!mX{Wgn6WF z0i;LH0g?^Ug}_mqwWMN6Upvyj9%QO*rRMnQlN+Wrvav3sUMO!F46%n!hVYzZzo0+) z`VT(!>%W~H7xIXnKY|wYs+EIQ0W}HM3K-nfl#^WOLLVL;d3^7oy$6qvPt5`eQyjpT zz@^C1!dXTya%l)QEq2nGz`)KDYAOkQ$A~!C&awnAE*|W2y(q&H!Vb%Nwih9@J-Gior8k&Ct>3CINnI z@8ReYAtK59zwkf5hywyr$W$d0*s`O&J#iL&KanJ$@Aj*=0xk-^y)yx>fRPZQiu8EP z#`P;#4BYU_Yk`DO4Tp3>+WwNQpZxd--h9)IIE#}lUIHRnB4ISdwch-O8$bE6Uv6OR zJBg(^LUi&Ax4+}R{ku=gctE?Je1@`X5Jrmwa2kHCfx2-E=rcjo$52Pc^LIXYyWH2m z`PEO-KX!BxQzik{9-}C-Gu4RP7h@jIrnoN$El=S1RcHlr6WUDoh9JQ!js z%x~GSX60Z%UmJo?(TIj7FJ!{}#h#rn9y)${*S;f99XxSrbaJjxG67MAR8nVJ&0#A} zw)Jf6Fr8!<&Y~JC0ai*C!2%d7=VQ$j3T%>U`|j@$vBqB%yT2Y&_UeP}Sjy5<+ zP0s(pj536Pr}Un??;SgR8qcRxzU#3)rE)dOX!!!*qF<^w5P;c5+*@kwDo+;JssBn3@7*X z4Ey0t5q>{gbf}E3xpK?T-g+|*FwqM^$^zE9@&L~|TD-|TihRs6!s)K8{~NcsKF|PE zFNL*9ZJLK=>6wxx?VW{HIg4?bl@h|2J*%YZ$H`T=!qKG6rqj0qXw#^9N0S`p>Ij_Y zXaigg3XqWd>-dG7gK+@P+Axs zorHz(?tMoNofsLNm?;6;1&bC4M^Y)(9}tNNE9kWd({M%t%nZ{f$!TDr-)8YnKRYu! zdV1{Wk>jUMot~PST3A?MN6_X)1Svp^=9Xrs8tbdHcXssj_3=u5h4R&>XSOWVex|Gc z@|M<%YCiAlYTvwO00)@pyb*Ry^k2BQt8;W>`Var&|3f5dE(U`Y<|;S(WT>qpyC8hx zB!fxqTt?2?gRK?cI;()7+JTG>F#9)xX9s%r$3Jk1tCK|F3ilf00WI@(j%Lo*mN+yj zA3bvH-oL)DSSa*#ckwGPmMgpWA30C@&-xL{0Pu^F0uCK)%z7%PXB1HIJ~(Z{u4aEK zqFuGELyLd!x^ITbOHT+~cLyB>ZfR=;^!wlb{l6jvrN!(YfBD-yC}IUJ#rZS;2c~ z*0(y(mWat6S9_M65f`hGxQ0t-)}h^7gCo%k%em35x4b6G=*3KZaqgWRy{~qyt-)1m zRr;Z9YHGUjicPQwRts(ODxyxVy|tyIEiVFL7T3I=nJWMc?>l<($pa@29UmQ;oS82! zAV2LfU&8-$04-H7=;7#W8;V$49;6C$`7RPZFu*I+n-Rhnmc6G>jUGFCVtDxU!~|A2 zh2TBAZOX;)m)+UXo@j|TSuCLj+tu6KJ20rTgRiZbDZPAZ;pMFz=COp06Gjc%Y|yu2B5e5AXll9e2;n)=RZ;R%&WuTYS<~MNi$@NLOmIObJw_ z$nFoaq0`L`IUDmEFGT#6v+r9CiIh|fGAeU(!50KMf~-}c7sFS!E!&{vkWrzP?< zymUfrjNdceqyTt)?gX7@M0FDNW(<#D`18O0C5^pNdge|2-4DJmIy>Tb{-Qfxga*LD zEDDU+M;ANQ%GhLukcJ%T(TS~|)sD;BBx~JFUYAop#l_UDq#Vi$a!EFVsZ&|B3~@?U ztg$`L)-{*Z*L|><<$<@uTb3S!u5O2W_M!kRvLR?PnLm5$8$bW6AIpvlc|^~J)bk3k zr`7g1t{DOfZf$LTHal2ay0+)@?fF(PaUAne!UsU_TybG!V&>5B=-$I8pFVv0@bEa2 z6SIXvsqDRX8iLwgG3V0pE-%fb3%aR&u2ZZJ(v>M3&K~y6_!XO)oEaGzJAQn4_{8ba z(Xm;0zAlz9V7+{SU#q$>yrT^yhQ9i1HJ@=D53U@7=Cj^s^VKRxM0~Z}s8XxBgz4$( zkS7NixW5P9iQT?~$A0IJzxkaXJ%BA0{TH?Rm?20!32te*@Csz%!dTMNwXd) z7&zL%xxBKO{X?qCPq03!v=c14f8-CCos(HvW%5#i<;f|8P$(9k+`Z?a2X;bBzqzSt zaG*ce@W%!#bm_VTEryJiEdYMqjonL>YF8rKJF%XkmFp3yL4(y0JDGXCyid@7-n6bw z#qTLbmmF!6=Bu}LKn@HhRvLkE94{^wW5*?#2+t{~VVtDY5DSLha&sT~=L-Yh^T^)) zM^3-k{XYY~3jar6`F2AXJ4omV!(AR?>x(n~U|0dbNfnf(k@I&y`2K(UtDgdv1`K9H zVU)SA5KM@{3%Xt}D4J4P3VVUZ4~S|sD=bO8D8_^HPrcy=z;Zaj`nL`HUIFBnZCuxo zDi`&A;TCXg#&|AD%E+Z>>XnLfbZrut1Q(PYt_E)kl%@h`>Xa#Aj~xp!wl+mJI?rY| z-jS7t7R)==r2Lte5#G5#eQfJo)OyV&DR0p_Nk65^_?ejALJBSuNk1V5{?o7j@WIFS zMj5>bDTGj|RD#-`SvlCZecNS21AXcB6(7eAqTsgH79e3@VSvLJS&`FEsrMeZcVeah z41DzT#52c6_8lELc53p(=+xNM98mFmp@a&RYE3KmYaKe1NmT1}Mlf}Z7XfiwRl}VE z8$iG~IXN>vK6&cY$nj&t$B&%^gCr1dskGpIkop?%z#%sDoIC5d7Y?39)!CBCYVYhE zTDzt-pVz^ge63nrn&&`+K2Gj?yRg9sa#P`_A|7erRU45U6Y! zymrQLhFb`yg|61#gsb-uxKU_`5rcUZZHlaAGg6bG=@ltMTpF`5(>Zpah|vi+cxh|< zweNuPaL&5$$F}E*r|!Ay-jgRzV$9G`z(OdeB5!qcb<2{wxKKV<32;X4()h|4#`e2} zZI(@b9 z#zO%|NJ81?yYaT8C{`I_*+JDiEANv5-tREO_x`?4m?`X#@O5o zFL&$P-*nqs--sbW8C#DT3_=8BoFXf}?QL&_*cl<35EV&X>ms6z#BE@?T>il$dt}2) zD~x%S#3%m+ok>19li_wGYsr}>_9Be7FqT!XzNS|lvbnjmn4ifng-D7_1>RKS5>hG^ z8qJg3z~Uucu+Y3P=(JLlbI!z&)W6z+-YcjO_#Zy`cOb}$&pjT-gO5G^r(gepkpsW- zx+|lLnlcg?Ry#2|3Dl`P^#J2F0m16+9JqQueC%YYTvma$?3R-@oOSHqhnklF4`(`D zSEuBk-ja&rx@s{9iRN64Jd8=oWNbmIYS--Qt*Jn`nq)()EyM8M1NVZ!C_7K-K{Zt) zlKT-Kxj^(dobm6a-%{PSkw)xas6FE>75SZGEE;w7b$4EW^)}pZXs@jLEA5T`L$U$OD3%QmbX8sx+d3M3{7CRIJn;>;$@ zl25Obs-|{D5!7#y?p`KX4@PC_vB@Ow**>|R)RZFD*Yh@$AZF|NUrrkO9z1Yxa$-uZ zkLR|xySt^OS;^``--;FMFS|l+_OjK3fB*e&gJk&ZXa0LzktGJmRqvt=|Bm;nk~N(aVk=erztfL}}+^a|FPzyRomerLi!JT^ulOX<~H+j*hqP7?T+7+B=MI1>ZENQJ;+3XAiNue=rlUO+*h zSztvN_u??R(_(N7c`xv%;AfVK%oga^m!_XA4Ix`9+kQG&LYmFhHF=AA1CC@$y*YO&+lr$k*6 zjU(O$!HVR$z_G~{WbVZUW~XPA3iLV4fpI1V7CA7^7dr;dD1@}U05xFW6lmNVIXBqX zJ=oVXGB$B^cx0hmRS?)JFdM^qfI0wIsota|4tqay|6013p2Gv}rR`|1m@uBBktD3JGd_w?YbUPTvzucO~ub%_|8 z%Zj|mmrCLM_a?00IAfj!9XkDG^ zfI>3qfA@^}zqC+1HGKN$(PNczMcT&Bb#!#V>Wx}cq*d!TBo&g1zJ}4|qKuXw0480v zB$P5wvzAnd4=2gw6C7MJ+2gEdYL98LMd?2mqDz#XdZwUUO12HHa7}Ss3nBSs5fzkJ zzPGsk10zXBO;H9%nZ zGc&W1qUDK!GYHIwwpytGnKZXFH8(XA?IJu9j+xo{VWNDYW@0_);ySo zK-w=)`}0f%`mBgRR~V8`dat4?MvccxoSKBF*60Dz1L!R3?|kY~4$boWpTB~>sY<1? z%mlKZ$~d3m`>I+MU`*wyK)(?ogmVYLnJ)C%66|s%5Yf=eeiPl71a)NzjASq*b&^Fz z8Fe5ohQL|%W3Pp-P|9mP$1&qaQ4eXUYh9F-QAh|X(7*UE{=)~~_cksSjM}i|C}m-l zN&V%9Fi9&Lvz+aurj*LrDHS#OV8 z!A&LrFQCYY(-V_ZGia++ppDZu#}xl-FT6IMQG@fr6Av@Yq?iWKUV-R>r_d1f#ZG}? z2Z|V9F-{Ur1Bzh!u=*xO0&E7$4&eW}qqC#4yBpUaPzgRXSFh+B z8t4gveq|;#lfTke7LvaajbEe|t8t39zelVV*%s0VtIDKLvlqD}tE)aWV=UQ&p8vtf z_W{r3Q{~!Ucy&On^z6~y`Q}mdtGt* znH`6&0Bj^{*a~B@!9GA8MFzIuj*|=$4Uiby5RC%9sjvfPK$2b>L z4h(XP&qju%rvMhcfEYL<1AwE9UYvB-{kwkrz%DR1y=uqnZ`cuCSgLss0Q{O?_|&^^ zdHqXYvX$1e%3{_j5K7hH;3ZFiN8O6+7i0Iuj<}pY18IBtX|w25+m(4wUg2_KY?5iF z*c)>Qp!Hzn!#xXYx1itqm~F z3II!HQ=DsQspDWeEGL|uo}E8EJ~cgCSSXimj4(ki1^`Q)B>*rpf*z~aDXYZ57m^9v z9j`||=>Hn+>H_v^uElCDcAcG_`F1$Q%CnI7P#5}E%XA;T6aan+Y=CnY)qH+>d}d@~ z7R<{2uAzbM^YQqVE0vvl4^GY&AT|d86TvT*i@?D951)t#fF1wK^HaACE-h4G(+wWf zc^If zTZ~!Hhj4CgetLQaxEEHwV&#s5{a~Z29)nsOvo%bNrHBu1|B96xFTXrAVkU=L6##h4 z+EoC+&CTf%yw1lXbO}(rJkhU#XVg-VbrGZ5){nnwI4^!3*vZl3rRb8TqsJD=i?FvQ zBJqadnY`V#TEIDuwHmoNk_p7RlFy{@=T4bl=!`P5R4gq_PR-%~^Md%{5&tIN`|$%O zp=?ibF0ck26pMhATEGO939BLlQ|ePMBax>bne^*awsX?T24EsANQpn;Okfrx4pW)T zbF3cfXUeG9kDQgj%jp5BnykQV8j`S2r>`xH>SK0h=IK3q`9o&cK$&0YOP7ivd}Ds< zF1Il2!qSm>fiwz*;@mt?ZpAsRmg#!CI=5|F_sZ>CcWm3d2Epgs@-{Rz(Ij7ovzQfZ zhI1yzu^;nhn1*Lb?Cb0r0kHM-_71IHwPE9izJY$YgqD|_-PD2a0`>$Xc+ygLJlvgs zpsVTOh53tZKCgKXjEMtG^n8<%9^tzZn?Vo)YTb6rO*g(`yN(|!JhwRDZ@eD?X8XFq zki)8Rw>*vYY-PagdCU620xUp;W=gHJxW|M=;N8Qg@5PHNruYvF1Xj8ilnlEjdC zUR*fSF|`T^z^l^jYZMZm_A!h3v~39pP&76+ap1t=UAy+&d(VT9JpA~9XAX^zjaL)& zD?bs4#nsu~z8Xq;{k{2oYwVm2OWep=y?(={ty>u}*|`v^WnSH<-{J*-gfakp@sm<) z3tAv-X6M*B!avdJRa%-px}<4zyrPYNv?N0&8ga!UN3G_y8wkl(g5>az7K2NA}m)twFK)em=iRrA{FPesn=Epb^psz3~58}Vg_47|I$d*!MX z8#b+9wR%-=AMi$=`%84IUICaZ6)WX3b)J`?(Tpl^3)8}y$Cdb?o~1?T1ZVX0PX2)Omcf#W~k z`PA2c^vE~vdhG7U_V3<*;=u7Sgx#uEy%N`R*OlZzIt3!Do?4xwVy_zy5g@Y%q{0`| zM5S7(!jNoaWc=X4qq}$Sec=8_AA0EVr}peSapKhU)O4*{({~5l+tt~LsFuLJU7a0` zh{VCXNTCt(ciZ+IYd3Cm>f5Z9ilQT}K}tp$06ts9MfA%jCl^Pt6WqIa)@EQ9A70Xg zT`K(>V!i_Iti?*k>%G(9kc@~oD`HNtK|-?K(f%?Y0R%&txzf~<&6>!$w7bswdb7=KK$s;M=RBe zETZ4-ZEd6J>OwQWj=7_U0+GDfOfS*THOIdS-5NdZtiX04g@2u=B0WgMD3F zH?4W;m0MnQ?Y3(!->`nwV1G|1R5Wex7Nzn+hFmxsR2x{vj9|-IyAPbWch`aM-223L?|I_B#}Dk>b9mq3Q-@BBo*tVXpPEBZT!L1LXH8%N>lKS> zj*GstxCI*sdILgCLz!ZHV(P@n(+3V6+xN_&M;_gC|NW2NfBz$oJo@CmeFuk!Pft(J z;z9bGqTG;+b5L^b>+4yyvW|Pf=W;HD6kP}{?H(K&+J61@-Mzi?b0@aJ)zUo9ffbjN zO>5=_`W%SxOf!7u8;ZLgNj!_yTHvOZI4*a>M*)mhfi6-4ye!CZ(=2X?cVx4y76oUK zEk3o9`3v}Fru&87v;X+2!QNcxDcHZR{D+cLP8BOw{3_k1yw5vfPpWaaH?J(jxoTi*<;PZU>g{F1l<(t+-7cXU` zLWSv^VB>i4k(-BJbbVbOx3)I7Hn+64G%bdRkq;N(SOBamxWQYDMkVtI>?2CKzS38Ob<}+19u)v3niJc z@r)x4C|kh;Unjr7zm2zC~qFJAI0&}H(mQ_f3q zPACQ=`TT0NN=yjij>QI`N(jsgh=K7d8D*4FM$eh3#S8#8J6CXwY3R5b5MGCt2*kk5 z6r9M)5)oJHfr-Bw!OcXE2}dEZ^g}Tz3*~YY-D*8&H7OobnL) zVD<5l<5cn#(NJSgV7@EC;MJAQo56ld4hopun(-& zAbXb`OcZS0yl(53^-nx~=-!8S!`+%QFgVa#Am{s#gt&68xfozrek-aT6q5MT9#1UL zuS}&*&#c1x2!G`1Y7xar4JXl>lx^_;&)!=A$&n-B!b(*&4Ug@y$GBd!_h5H#>6VZA z?*AV%Gcz+Y20RRY%*@Pm%**WEHQVE%2IW&%UVrgLXH<;CZ@n;6pWD?^Dkas-sMY!^ zmC6JowpfB0txj|xGkRR9;;Tk6J<~`lig-DDtP85REt9{rqf2bk8jIzD=*qHh* zSUK)&u)Q_(8x16=UspG12(UYUTv)DZCI@3{g848d3Q^4wxHJF<_LpH-V`irCr{1#< zo|sp?q8_Laz_*xtn-3Wey93Sx=fmMTJaQ#(M*@*EZvrXMz6tM?aF1Pf(uYeL%% zgj%MSM8u{?fkhb1mGq5*qoyJ$l2S4eZx}}!tE@QIR3&ndz3egp=KFkm_d;jhTiJe( zKK00lLxcA!cCb>aQ^NSBTB^F;ALLg~N|aVnjQMb@Rkp@FQzoA{34y=KXS$tyotx=m z`ve{&4TotsGNf_igQ0!s27`eHB~l~7>XyBK2Q$d|KvgLHUKi*^3?aJghhJ4D}J*RJb^~~9?e&^|DUw+;F zZaF1vVKzxw6jBI$dsV}5I7*r@z%s_^q)~)pQG=^0+;Gr~Df&OKm5EOF3ZTrO7IeBS z3#rZqDvMYYMH!=VfTijJAcKz7?b%Qb3yVv~PiE@7WSke@f5YsXzPSNS0vc-25a8?e z0VW%Tgfy{O28)ql8=gbp4@R17iZ+})-uW;8BkW>4c<&t2DQQrRwq)cpvDDJ`T_xnL zSG)h&B<~6bK5_U!euV}N8oYf#c#~`dF3a-T#%4-pi-dJI2zaa|qP+=DLopq!Rq$xv z(jrVwK?ixu8BD_VxL*~VSjd|;!8A;ph;xp~rn*xPXrCpBGk?h#l@Q{!S>kQSY&Jk4 zIJp%<*NXXGb23?N+KIEgxG+AzHYAgp?%O-Ne)#mQ`4t+x*P%O>>~K=EUBxmTJBdW>!lfA>=Bp)a(MVtHJcK z0r+p-@qg7((y4>FU+Byib09Zl>Gm;Caa{M-Sd| z^w8C{_5bsoXEF`8ebM*^zyuE&9AuzmkjmVuL0V-Dp%oCy-QqTnMw(PLRTkrsjptO^ zX)60M;tv%$!SR1-DLYoqNs(wnOJYUBtNZf~HP#^5DBkE3G4&XD^?`R^|8 z)}ydi_P3sTbP?G+gW#87PuGeVm7gP2FPZ%IV&v`6%!J?0^;v@k4LMdp2HL(e0QZnG}^`iAq~+M%;SV<*qhl7q9xcp7^{$t!`;JHu$BC(b&wJFKI%n!69zgicS(F9EMTev-A0pm8JZ8 zcOStF`h$E}RGz68=I4494YplB`PApnJbwRYp1A*&GiSg1%u6}+QI1E=gpP+0kzoQ< zT-50(B1I7*#a^Nr7%8iTQVyN1YFW(mC^ZSkj=}O*0;vdmD0TXDMc!OgmgT|KgZuXH zUtC-?4b11&VTbu(wvFL%z?+7o#^3&CEUhtw8UnoA4sPM0QcR9?iefG?3d2PZ!T$e{ z5(e4KO#JP??)V@4Q?G&p?7yPN2*D9!K-Sf6ht16g6{!gQwDxr{t&VT4H~?U z;SX)LH?b{|;IKGQKj&hwf+=1+(Kfm1;0P=y^Ippw=T9@<^23?j(21( zzqZ&udGt_z<>V`8&OP(enOELC_twSB5)`d5wPQMrE0aoPsaTq9T5g1+l=K;jPPJz3 zD#GSmg~XKEs?F6GmzNfoGUr`dSXux*7tHmVw(}11?d{R94|}+BL_k&VAz#OS8#Dx% zEs%H*@Z(RFOoAlEIU*WGjQE**a0uqpGHSI-CW=3JX5&Bqk1M<7WZ-!BT{GFZo#{P< zgTYWImT|04$%$I{_&Y2Bd8;$9Ti9=d1`RL`@HQDvS#AvnwTF_3QnL` zpECp>kfDc)xK2rZ;3eY_^%z>YM>CD-SSI%C#GU=uMuRV`Y_kd%KQ z<;Kw(myjckiRb6%GwHQgS(J*0MglTYIr@&VWv-aqv?Z0!isNx9-U8g9i39AZ7gj>N zhXH%=L~sC$WhIDMRkIHds?!vvwhI4_Uw2}6yngL3IrjNa?ql{ltN<%bF`4iz8)GHM z29T;y74f1(D}>#M1`Qe*OU>KcusEO#{8HI9OlW;X7F+)R(aTKAc8V8a({sh=!7Ns=AtsPcV4TTBiX;6R$Skg2rXfcI}Xq4di|d9>9IdkcsI z#N$LfPv$R#;c%G!eqVn5%@>0kXbzVeg5 z@Wi9{p1$Mw>cVXAy8k+YF~cJbcPS>QsjpgNLgTi%jK3HN-EL=PW&d5LZvV*r_dfaY zCmwwG!8`7}eP!i#rvNH^#OG( z0up6KZnBss=CS#Odr+v%emB&AF_y7ON zkN*50_vv5ylRx|8KmE}s@4x$=yRx--IfvsCKY}zU&HorCS~Em^j5`-E74yHZ7KG^T z!Grrx96xsI)E)QVfA7aX_Qd0lKXT8#A3lEk*z&&R(nzmx{68J^``6ai&YwSb>Egxp z^=m1OaGx+T!Ptx6xY}(w2xl5J1h~%pXe^gwJwhqU_$4G!+QA=1EVs4Q9}I>mrCt21 z8}Gx|+72=X_9o&|H+`JfK~3Brdd#`5gc zD}g}#FmQo8ZNAPzB_u)%0*#zdwzHx&5v?&$NzIC11R`|?U;tg9Endcjy4*`GMGd{?^{0FE}sFjs_nE3T{I6&3FcZ;$c~B3T2kr(W)hA@qUF(dSi1`i8X!=R96x;U&RdT^`{HYER^c_b;#vuD3YNH2PT+4BD1~jwXLm`FjTz3>&7{rcP`k$2N=29br+yJbacJ9jF#PpSD?IeCpVzcZMRns zEQ^Fa2xZeMgvhF8-Q4Gl#7K-%T3g?^y1o%qiz4U^(d+)iv1J;9KLM*2C?5-R^79we?M{O4rvn%&2P@4kl2RMXM<7hKn-) zD_U7J78YfzRD=XbmZUTK)$Yr_$#62ijE2Ll+r`@SLzNOxHB+!)*6$1q==rC6oCpiln4M z4B10f8-wuMf(8vXx3)L8`c(*`cCXtB?=W=yFQxSPPds||{6D{XZDVRbnuKTq5fgLT z+joSktD1<|FBL(`^P%9T7)nb9p3u~vr?bN*&zf^akyDCr!314BBQS|cmH91~CZ-%! z0wo$u)b939-g#$AqsHZAZ-%tUmm)bRwPle$(z5xQqull%(pYP`rCv4ARBn=!)viv zkrNc6H!8BML2mBZhi(YHFVJj(X3}VBfP(ZuEd*LTSq-bCQspsEt5)V;6N5}rq@M~x zZS&AH<%wJ+3eq~xW(~EjO^yU=#V9O<^0=<)uuw>7H%T8jW52jJ~y;@#R}lSZl2>HL)c|Fa)Dbz4wJkl7P# zlEr^sKyXl_y3Nej@AZUYKG1=^UvL|~@v2ZEbvHsqT!-M@MaT}$1>E!wXXY#I4zH@n z!qW0R4?R>A<#4cV3VUjrZ7_+VE%UwZW*Pr`In1v$(K-&RwFhLmEIYWfxE@kB@{yJ) z6$cIt%r(UH{j@NVQ1yXxVFB2`O4LE=P$he z#+xs`^6E>kzWVx^H_lzSaOLXNt*z>Qgx!M(!Z|8e%=3_10w?dNn(*er4WaiF8VhjE z;m;~&|q(`-VOf14H`6n>18nJw_4@m z{OlJ$_1K3_-~RRQ{P5K?XR8>Yel0APCeBM`!Wt@=ZNwRY9WZNy;W{er%(WZYV~I4j-Ncau(+sI)R{CK?m-K116%7yi7NV! z%E4t#S@=@aFK?Ig$|Gp{4Q2KFlfBS?vg+71Y`hTo;q2iy_XBDY+DwtCWxV;gL@CQ7bGLfUjEz_vA{}?_B;ZZv=kX~(5wCXGYjT4q5ut3S{rXT z(#w@PM>%b`#@m*YYP(g6{drW2veXJiE=rn_>>8B+saDfzhK}=t;ZRivgMo&8&GKQ*;iw^*HruhRko?Mw{F(EjxKr6Tw@UOvsbSp=sj0l{DC~1u3Z|t0J|cWKye=)UGMR z6zsnh@irI}!w78MvY(i}Sspb}o3C7KSt~*U9YBn_D4tZrTP(`5EFhB*`W89EI@(KU zV4s%CIZH0<$b@U6|Fkpw@^&$&Q`8mo5`tPPXqu|5N48eaaahp=)15n3<8#Wqc9kYJXMEFWb@Lhaofoah z3b75Ges8#IGjxmHj3$vd^`HUzz^>V(*PuZI5rj&&d$8CbikX1p{jJ{D2bsoao^AKrDep;ag_~)FwBZ8%2dr*0dPE=9c0>eKEQuXEDMIRIZ<}OnO*fNIuzV+y;HWuK<2bjTjPDrSf zxEvKF6ID{Of64>_F@7vDR<{DYg1~`Z748T@qG(X7Sj0lAlv-0_xiPFMklP~0BBLtF za?>abm2xzF)U8Ubg-WNG+*?3|l2j$h=3G^WAvdXra$Iuqixy(P;Mkl6*JVd*2%G)S z4I1n=_6uxpZLeKj8;z1z0F*)mu{lV%93q-yU^tFqHOY$X0t!c)7*P`>95STrUbqWP zT+UZlpon+qR5^oXQD!o`qNZ4D0Gq)T&C{=gdWV^0G#qYRyVBp@#7!pMb5m;re24#p z+2zcEA@580*X_~QTd6Kq3XNt+c7)>MA)G{xp*wd3LgL7^GbADlh-+W3e+#tM-P*NI z`M*x=n_|B|e`eplDhf!HG4|}(o9VU77`;a@6zcxCIyJxX24@$tRQNDg-TC2%xXu0y z5%1`Zl`5*CBP3*sh&wMBabFddw6~fur<{cS8H3jkX=O6AG(UISkwX$1G!|fI{qhyoZuD_%#2Q@f<`f6FG?zy^D7kdQJ=HRN=# z-8k4LofNS4m5sV-k|QaZWFf|VIZLlyryPBK0+lFDNoZ;yqi`AxN2AeTI2cSFStOyc z0Pj&A5+#JpfoGPxoATfL8z}mEnc5mYG>8}=>dsX2@NyRh$q8Ae$a;epvOB>o(oo-n zi51sFrJVphb?wTx4li!D3W%1Z_~|ptN6J=Zn%JZ47xPvt7KipNWFs)-?k~by6?ty`B=pDN@-G|7#(|fmRT*0`f zE8Tb3ZNY8AZ_pfqRT~V67%YuPBc+oxJHA30_TGt=13cL(Dy89hOTjQBI@Y9u*hScG zj2n)V`vlK4CTYwW3nmy1=wJvfB&Nwco~p(p+=`6@3%q=-`WRsEA&g67gb6o#GYC$IIvS1vrs!BAZ6Su#d0yckD=AXQq7JuU6_G;*YG|37 z@tPi4YE{_gv3EDuG)7>R7^CW!dW&6&|9<-# zO0NlaWBP?qeI#lWTrV8a!52M>yyi}PSeb7CUcf}bQ|=pw3}aySyBf>Pe)kn+wY@G% z*we(r_8uHwUVQVym0?OIaxvHyA>vX{X2{;N*Z;|;2rukFUeVOBiCRqsJvyLWG$vrr zE}HT5*@$)Ltf`Y@+GkC-9|KbB9L4Hl1289FnxDPz)a{=AHfX{i@gZ1VffD!vsQ_av z6zmlvSX{t>!$xStCj!v0rNvN%EUKOxvin;TLv z2Jli#Cs=)X^Rr3JTpTUb@wku~tOw>V4&8|a?=zPQZ!i08(4fKc(!%Yx9LcYo2=4|k z1F5}3jxwwkRK*8_plk4fSUkKYwW(GI{VCV*En|x1;~`A$H-=7H7H&$d)I(jUr%J@; zSvRXvhrF{|tr5trS>Aa>rk1^l2DWyHRk+Sib?1Nm?8=f9)n;9}HYYPWCbi-rQWI!uo6#+-U56*TMZPttcfo!9*~%H z{W#wNT7k*DCEco8+^|LjR(>if9QEMg51h_NKue4_fdIQ9w7XFJp5OC(_DryNhOmb! z$9t3tdR+@XF&k-0%6uCiNZ}}663uuEYOCZ1#&wNI16f*3($TrnMu|#32H>|Q1S^ID z)>1}~v2QAcfSrn}Ojg10Aq-+bk1;wQIn(zijlKPDzzrHSIJ$b^;rmYKS5Aa?0XiCv zUVQVMEpF;yML5b8iY|DGDlI$QqkV&-MbDGjhu3>NGTg~23||*KQ>;MA(B;8lD@3`G z9c~6{qRy1H!xSo?dF1}GDE4MVmInBmw^UDJW@{&l)~8#uhkCs%84O3NYQDke;#jk# zehaDxNgbr#v)7;Q$uvdlhPGZm7e|3kcXfl%5M-@WZnTTuFqx<<;;lzkA3d;gciDNW zGkb5l7h|m0FDwM_-T8c`+di-~mtQ#%ZW1Pk2+nrem#%H(G3GY=g68rRFFuX{8Bf3f z0a0kWzZoj>X%ONM7q9i)5hXbi%AJTGs_2mcktpus`o|>>n&o@1@9vhvhraa0!>yti z2Yo7IaT7)(521ztzfXBDry=2l_+XOkzg`b1iYO9oiB?_h#Fc2(a6SSKV6oEzKqVsw z1U6U|tILt}&3$ETCcUy|n3n#GjlSbH_S9)PA1IE$xIk0%*?d!ckbPl z_Gni+e^y%mD7CC^_v5n5E?0F|QHn0IiI}Xyl@V8lxie7yY^3CpsA=>ws@%CQq=sw# z$&APuPJ>>n!RDMJx1!pYga5c*(0_Tyj$1k(Yc-<~$9#&p;Uij>oL83oMsKbfI79ao zWqRLzhvaDDmaG~*qH%e}$wI0OC8H)cpYXjMHp!$h?K-bg5 zW%HZUQvgTO+o9rZBY5@Q$E*-vT=TVfFA^z7(A&?&QBzc#dSaF3q2((CT{@fl8kdGb zfp_~tUw0d)l>D+T+B3pA3zC4$>s4BK_;g-NJtN>If0v?O?#-P>btNS(jv_6g*i>8d zeNR#UEJ)J(6FcwgrF>%WmMY+Nyxp+PK22j~52gi50jK0lz;!%5W4+27&pe3yTLI(! z9JeW$Dd5yspR z;p8HvQ4P6ccC!2zYf=mEUk{Nt8*z>Q;&`_4O*J7ldP#H$yfP>QFf`f+%}>wYs!D1) z!{!7(lYXnxF4q#Rt*mTc%^ut%;tBpz_*2n|X&5dtA>5;>h-A$BhhliIAlc|~eO7qJ z6NFZ9F`g>HBhSz4b3BnT45~9NQ96!gd|!Jir?F{gg6z^L{w;p^k_0ZSj{YIwH3{89 zC3tg-N2^#I+N2bg!B;7lX(Av0< z&p0MOR;K{Qi6Z(~FuekNpdvFev$bnn?ug{RrB90~9m05SC)LO=OHjUg#~EegqLrpR zS~OHUOe)(qzgWVYvjBzY0s1{|0_=T+hgd3!g#O?qg`>=z6?1Kj0n$&Zq;4sMH~#bS9N+3v z$4H2qz(ZpXaiwec#;{(M-1`8^ASawmkdnAEiJ-;>42%g|%ls>-pEA{K*2CFs%XZj_P{+&UYbwogn_~oE%n)Ch^(3R^7(k}rc^vZW(psuA|VSf4t0lQx9V8TA)Rco zcyKnF7JPU-(_r*+6k0R}Yt(rMoMl$YN?KHx=x@Umt#*!VWcEz8lu5=Cn(!s56#ZEc z^r6#Kzo4w=BLq5s6BESa0T=%jM4b3IkV!=Tqab&oS!qh^Qld(&>H^+KRMKrLyGoPE*hZ^Z0rmUQ)k78?5QsMmr^xY z+-i@i0L=@j7-g18)~}UY4LVVlMSPu+*0A4gVSg&LpWh-$e$gYvG{dinD+`NeG0Xwa zJhou=*TilB*AgiePd~p4lYDM;c+x1_?-Cg;l~7pWY;~KSo99~H2Wj!$V43Utai8I= zTPt?nn!zgE7DB8tq;Gy#TNE6mQngGm3^S|5a_-5Ra4Nkh8QlP zy6r%>hTZ}|ld$znPzLqkmciXWzz448)M5D5Po_^Al>MN)@YZaHo7i#zWvn(N`X{Zo zpH}9bWJ;};fx4b2pPEi(rri<}3~|t-H!T25b_ATV-zB=@;{;v~ZdF1A3nd4HT_3@y z_Boh&pW|J#Ss)O8rfgSZ*q(zKcz^DkC1gLilBjc2#^#mUA%ALvBkW>jg|&ICHn8EXyr(NRKZOPn4V_R3^N<3c)zC8#1EcZ?LAED6sX zH@A9NJ6!C{@I}z~V}YS7qs9O225k5s8#a$a{NZR1C0yw!Ua#zw6PehYet{3|yvos8 z-G=KVoc6Gm)1D(jx4?T(YRongImk)~37c&`x;&pY4^Jwi?FxV2^Y$(j2=MQua%$OE zr7138@p3ZRbRlleT5!KG(F7ihR48w9A-j-^?3*XJj(F>sJo2}M(iyss4%b#|+W4gJ zK6W$CT6Lwg9`g;g`L!lArAK2P6VIjsOPieaT7OEMyE6*=;}2dXptvq*B1*(TV;?oW zpN^ERhbP2QCnHdmHVj%w)0~)0gyPv2WbtIDwk8foG2Log z(iY(%i{^XJ)M4jZaRv(9mSorGVfgYkztas{LhWVX=yY#|(DBz>U7!&M^;A;zw*=+@V9Wz7+IK({LP6t8>3Qx02*_J2qFK> z>Eogv6xNJ0T*(0UkS=>peG_H&r_MOFP>D%24Ygj-JQ1w&_$NBFcR>5o1X`}O1h?QE z6Vk*-EPSp9yeNSi1sUo*kLj5Ajz4d{lj9>->l+WtqRo@fg)>`Ha#?Cb@w_wlDKgYx zzjdl)H`DKb0t?B-`D3Ah_aSzsL$D%Y^7+;bf`24DM|ZefIeS|5Ykz$7AI zgmta)-e1jgD$L*yLT`S+bC1{?z~Nhf&WNV_r5j!O-)VyU0GRG8pyOc6<%d25ZU=5N9c4Xoxx*3)?-m8NZ`#-CsBiiSvR_{~d=bym0%S9%} zsfSB$Z}zUmpY(lJGtm%_V<<>CNx^Y4+`|OP`u^<{81i@$njdQJH4V%;LV?+~_vfjN zEmQ{6-w)5Vo>dLjn9S`k|7bYe4TgiAZTUa zyn{FKGS(1gl6oP^IqB82-mx+bwe{$MYZXC5dp5S5I8~knIkLxg=Q+y+kN}0xCOjt? zA8(^37Y+Nf{^lkq5!X&EmaH&S((ZSuR{oU2G*5@ zYQZ^`=I4?6qnK|U(%RX4QbMYK4l#~_Y8K=*iO_f6nwpDX7*4Dtft16w9TKwWL(~RY z`-dCfT<_1DQfc0nRN22V1hQjp!}OBvMB0pjgG?)d#_i8$fiLfDO!nxVCFJF+i}CrH zji6edJA+wK=;g|Gb|b@10f%v*Jg;{gE1?Pf;m0^+a8WvK>=bggOk+$J3}2(4ud&6S z7Wg4ynwZW$sq&0x63@tT6tcK-V*cl@ftDrm!b|Yp?OLz1n^V+;dc?wx#Jkvs>$8mC zjelEIx5TJnFBc*avq);0bF@0f*GNs^+KH0A`O1iIk#m_oIv58_G}F6W#*aDMqb#K+ z)SdJFV*i?0g?BROn7G?dfM$MPBpMP@!H}!3O{{`efZ-{MN&9`7=*~#JlnQht149t* z8Ue~O6n>{h(tOvgi4=6!3UFU%NK#hkyPa&b$9<}4oF@4Q6xmRNZ{aPB6N!Kqp}D%p z)=Le3&zyr$AzyH#z2b~Jiu#3z4%KbW%p*^8v$sftR0nn3>9CNduMO&9ZluU;fA?o@uMp@_pB} z7BcAWY1r^LsU?K*Pr5RbYZ`nNeY*biZzB@)It7>^=kwXn z^y{wfb5U#bGl$ss+Ko8yIQI#3>+)&VpyM?c+bDEB)ibKG#B*svI%nB9LP_Bo^zqM` zu7{4bMy6H1cQs=pYDq{Alw4j<%N>5;Jm~S~#J0bsKV7uVe4vXIVttvw#InxUg%@E_+gA&uHiviAO+is&>@Y)QEbkjumLfvP5Im@pkiAjlPJ^p5ZNH?A<`{ zdDZdqKGi;HHDfRy{f#bGN)xa(j>;jMC0V>n{cUxfn*~>XmE!rJZRSW>MlUqD%tmP4 z*a+@&63li^Ja|z&Ig%^Jt4|EVogI>=gB`YVZnLB3x)h|YZ*9jP?o?0k`%_|d52to4 zwS-El1cA}0Q$t+%hIsEbVT7_7=oX@5pT4?OM0ZCf&o`L-pu7;_B9$vt(j1RSgN6fb zDqdSx^7mjpj?0$Q*&-7t{}{y$ZoO0vtvcYlYiY^1 zw#T9EF`N~_8%Nf)8PNzZV2yUZnV?`szyegY5le+N*KQ7uK8Gx-dK%Jh9~PCST!#A; zZbTTQb@99}*=Vv@A=oY2Okp8+uc2%^<)l?bv-=%~v?{Xx7D2^3)ypUF5mA-Yr~EKM zISlL0WQB}Bj(OkMa&7%(DVe2Ew<_L+H+lJsdH=rrFx`pI^}6+2UwB?bI-&-{DcEBXG5|NPq-(%>6>O;;NYnhmh^OMFDhxz=v>dwp$xSD?B;Tjxp zM^1oQw8c#^uK3oLTNqwYyGA*C3$31Wl~0<4iD6adPA+f2b5iFOxBvN=e%%?Bv;5a5 ze_+K$Dqaxhp@Qv5D7(oL>ccb}gnL?g*XbWWVTxO;=KRN@!ZaqK&pD>I8==P67-{zv z4VBi3Q%E@<()f!upuhxk_i>2$W5!{_dNuMiF+Uy+PU#*rIIJW@lrfg^-d@(_QIiFe zjp1$xawV{nZ=@>i)ad$TVNmRYoco;?#59ke=?9WJ(F1Ld=Vh=;xrJ)_+K;B-@3r&SCw96?LC_9dhrc- zIJL^lc;osyI2{3476fz?u1JaAMvA4hs*2iedh)!YV#^qGmA&TAv*WWnlahwbj)f=1 zCwfHoK`r!hRNtlT0;uIo9fG6(QcOwm7~s{x%Y$q?UdYzx1EQK+>cq;dYL zAXxbXQ86c{k&UB~#EoBgPD|F*-fYV-();*~b;|4g<>BDgd8H^B0r^K&=4Cysx#6fZ zd3SojQJ751G)vEONIlFX!>^n$C25E?LqRXrt?6ka;C9e6M?WWf_e$;gTdDCWBkYYqo3Lz4L0zM-BfvdRb>SNq>TfG=biorohvpL zA|n>qoa7d;MQ-=Of^ivS1#66C=E`c@Uw${~@_Yd@3aJ?ZK?ml)z*<512$1$`)3v7G zU& z0Q5W)?jPenPG`Z9J6ct8`h=bjK)1$<#4?Z3L@bQ@VoL9bea!5Z2}1*4M}vhox5)q} zIQIY=j*)uvx+Eb2{`G;~f=-NQ@O|qs<|xL1mboF^dNGV?mk0ktEjPSQWmwHEyYLA- z6pg;5p0U%YzCsS=m{PIi$0=5*OsoMWY=!$=)T^01+5Q#a^Y)#y^f3Q>eoFyUuekmq%AAxf~p zOT%hP=`>m+*)ELEo#!0Fos`+5{{0(T>(Dp1^~s|0ahnJ&(Q~;FVXsgv=1yOR=KU}Z z-*ercLTO0MdjjsHeY10xJ&nco%M)_^#p=(**+T4@TDL7^hMESd5iRe$JY@K3oB)J; zsWfFZxHGpYNlG*-VJ=Zsr92XiIQE$iCS`YOmx&sK6n>0-)}Q0>98rjqKNZata5l!S zsB=RSMH4Fg(R;Q6>A5r~OVg6538!^GESYO*!^P4opGkx?V`%F;f40{?#%WA43fMjP z^D60e`?<)8<+>^kGNsX}qM(314zau4acZE3{?PtDr*o3XT9U?%sP znyhnR=iO~YZr*Q1Zhh}<;!FF8X?MI&BaSTT`y)+Vw7;LYjFTS;XIpeKV60O@tUXk)=~cbvWDKXM0L{!lZs04)_}jZ#^12tt`6i*$Z!% z|2U>O_4tSQUT(kXd-wG?;Zc6($LZ5sz)N|k+OR4-Xs!43U3ye=fSX7{l~P60-c!KR zS9ktXKf$8|!<{B$_I9`buW~00HD?qXZaeIv&weRwg_>xKvY8L+Mn#)w0HKK)Q%5uMY-Z1G^}87WP_7C*5kKLqCQj{k!jw$mod?Fh1c8zdMC0ae^n%d8PC(O!CwMJzk<*N@h-I_s?t zvuF3K6M*&662LqE?e;QqW2NKpcb3t+V}2aZ*Lg?HdSu||dO+sUf*c+bf199Q$~g8& zrz8Gxhkrr0#TKGgTNHhF`evt0M~5Td^WFBNflu9G>=3IS#dQ8hhZgn){H((dE#EW0 z_8$!Ea6%vMPD)oWX(VNV0#-SOPi0!Uc++@D(5FUI^lJ$ycblmW5$F}%2@R=xvOa2C z*{vgL-l|6IaZ7)N1p}Syok`NS^Cu@&K6k}+EfW@{^h_tbXQD-cp6>{uP~yd@j39X2 zsIS)UiiYCShT;kpg0A?M)!QR(JcXoNL!L<$bI_vPMM0|`#USLWH?FDRQn^HHRTJ`r z)#8UWtkRs%m;_50_7#3?Q`)uNv89-EuZX8x2(_1h8War-0;I^TY4X3Xg!uUQgoN1C zu&tSe;-(J>oS(vc9X!fD8Ea8XgWhz5pivPDT3do1_{$ z#c{#=!&dj~TcnDAuEk4t)kVC ztbEk7pz4d@3$nVeT!dpf)DJdPUvE(G(S?{%!6eN7tC6r5 zDH5EE@h>PAWezncCl@gRqiL!(jeWAf7=XfzmggAdVwid=f(*;!P^-tYAnwZ*jXsz= zVEd`VA}RRUcl-MDLYr?^sOeEcNss*eDVKO##5)(#PO$>Dhz{bJ&1g$aFU9+PaE)T- zB{5LwdX?!aU^5l~4~mt2^a>sX5Eq_8}GN2Iad5$*_dUM!DCu%<~t6DF4X?^6`EnD!i}b2&G-ty z-bRjPmBHDEhl2vvmR3!-LaF8Ou zDbjI`wRd!+zOW_f=MTePcSLHSEA%axOU@&S_m>2vbLY8M3yUZHyhgbhz~(Ov73?ez z{LN_Jw!xCYME>_A?V{(5>!@&4gzKs2GJH}Ui}k%b|8W9h?QOL8>g!U;XCfud!wJ9V zI!86fP4A4qus`tmOt3TH^Pa0)g`88&6$9Y=6d{5-G)f1d{kMn%m;p9@yVLtm4Bk}C zy;d;7A1Mm>W*{Gfs840AcgziY$klj%!iZM8!Y<&KesH#Mhe^BIxwCVKhm;*V5AsH^ zmfZssh^U0k?}pmH$NhMl%&bG-`9>Ir{s>~nlw<-zplx_KBQsmXR6W8@aNSYCQ{_~gt~@AV;YT2UqFNT6lo$j63fAnO!%9D zdavoYA0E|=p{(IU?DkdQSUdxAd*MMY@no5S>}^rd~{v{q*0ZyM#)|B31^NnWIEal6}a z)8DjKth%?qzKi#o*+Y?5VbnTSNyCxrrPiZug|7;1da#1DNq0)LQLHhm0+i#LM+jHliQ$bjSA zJ!c8=n%MLpJ*+-Y=iF9!YYKPP2F3N4wW*Ff>*Cj7Um^M)3eLSHK)-` zqff@7t&3WM({mE)QPYU2FEuriRimoF-v!ELmN|-rKwy;oS!)c|dDzAHa^YJFmz!Q` z?l1H~;lcQ5y`nT(N*WAvZ!s}-z;jawH`_CpWy1U&|{GZ*3(7ZZ=*O!DqP`aa)X=5)dLu9n>6!7bf+5v{N(8x}7(s zYcpE_aMfC2Y}GjjR{iF)5&;U9YQN9XUi&cgmobjP+96puuJt#f_;y~xyrEu zZgYce-F-CEnN=mPmsY)vZ!JvPz!a_b@vPgab?n3%JwK$kD$eTclS(u*^zWVCcCcJ_ z{{j$9ri|VX85^*{zsrR$bDMPf9(N2{-S)|Fg>21;BuzruYAP< zwRz_$_iHv~9voSFX~r?;m<-i=C2ucs3B@9Z@vAWM0z+verqJ*9Y2qRB1&k;X1e0mD zN_a3T@-uo7g%#`}I7~KwsgY*Kw-Rp8v=r<+!63M`6AdA#`he?EKU2V0ozZ)tT-X^? z@AWGkBU~m=-hJ{{&^zoH9X$5c9?@FBAm%jA!@<@0$II2@?xQU2y`i(mNBGfi8If<~ zEk19Ntvg?`zb+YVc<9n7DqUW&Afbj@^UD@4g?}`GeNV@*s;&rJ$DfHJK$04+IpXtu zygKJ08AyH{p}0^OHK{Nev{eACeZ@cjbgv#npe=4L|ANzaGb5ifMw_!ZcY&Cf@MBTR z9#{UvB&!|P-m1h7hM`LoM*e2@Ss%I{YR1M~wn_@}%kt3+eN0bq)VmJIEfTP`TSK}t zpQp|Idjk)d;$OB@Y{rN(`E#4_GZiU8RuwAdxr1#R0oPW&Cv98i%o-3vgFL7^eG$0@!wO zF>gU1C`Mp1%XWX5ZJL27Rp&;QHyY|_(uPNDckSehCU~kb^c3!a5&(X-swfKz>tc zSOsY^WzQ0(1h<{Iqn@*SFtK>9lqc3-lo>GV4;~iwiDpwXWu{Kdt@%d;1o~vgP%FuJ zI~|37d6>B!+348R>U)T0J$k`m76cXswwJnn8;DC6HfqyV)BelYopBdI~R&ghY zm!DZ(VgIS71gjpLJPha?{Y6XmXe~No4|{KW;{31o?(CuJw{iXsvuH=lx;3Aak5~<# zG?@E=jO(+GaIgV4tCT{b!hRJ+vH&j<%-H&!n?MQ$JGb+7Uqi0NUUDA>m~vnS6Rp~O zXE0R*?#J;;9x5Q?=$UrQ&Yqd}Ah>@He%-mo#Ie@V^UR{kP-KAgp z;R2#Wg`a)b@th%5?KkyJOA)R`J=Tcj$v+8sP=Oag=>#EX)Xa_$4P^ZxGFw8_ zO_-VWzx|t#0GR}ApPN82h%f|%CKt3c$L7xlO5KRIYQ!<`!vfHwx{n*kHwptBMKPG` zwRm7IUsVKWO&YRB>4zzDz=@@fu4Rz_7&E6>hM1mQz0Oiodb<8v8AZ?bD8H@7{(lXe zu@nwlaesY2#ei?}s^ug8cb1ZYoNi#xl9=Lp4==thPVh~T>*7TvCFwvItVtDRLP!-; zP~fZ6UcpP!)s%|QnNJsD`-Th=A=vl+XfgWT+-XTI4*UZfs6r&zyzJBaSfOO{cfOPp zOJudP_a!z(DCnJ<#)og@8t zcV=5f?Db_4x$<=O-+;@93g;|Frg*OD%T2k5fzy5zcL?^qZXKz1J!A4*zfg&r-mgVzc)8GlT&`#mt?1nc^q#s?6M?o9oiqf;S5aP zjz*GxE!x$sp>eW;%;nMMP&Ad3Z`H_lC3^|vRczY?Y+9EAs+-9`KtLd$t23Pn6Y;mzaeq2!vz~EzAXVR2_fM1{T zw*t@=<+3b8dfqe35%Z~Fov^Wa{#suf>#Iv4gwMch5)>VV+N5+r>}Ly zkSQS?Rcr^0&l*84H7$z^GIcsHb$k(nvLla6JMxf20V0D?V{Sq9lRw&LY(c9E5q z$+qZH*(^UhV}1%775Ku}Rl_a>BKJz1yE)i?Gm)8@mp2}N zRBmNSdk1Oq8FvID5Ev&+|HkC<9rE**cZK3*oiFUa-8sO*Wm)GC>|lGUVj;I zDa6}JXSKd>e$u(EWgfORn0nGF| zGu>f8n_tb&%Uu2^z)r1{zZ8TE6a+fh$#Sn zwBeJ|u@{ax2#G+kv?^BtS{OWw9;3?cq1~~!1&ILZMncIU{NyC_^xk^uu?htIS1rBI z=bhMW&+R}Jao6k2k((5S1Q{h0un6_~X?x`d+|&Slcz5mPtm@mxx$&ReoX*uwCB7tF zp6aUii18ZW(WrRp1~1J-f*ILShj%o?^jv^CI^qEEc|R`!hfxvseEiwvG-M&IwY0W* zzwK*nT{VT-QHtbUr%i8D>et-1wHZ`MoWA*p(-V*ABtT-s!9V3F9XZz7jOev0?=1_* z=H)6-2z45JQqBEfkx}BarHLy`iS9@4X6VU_7k=E~BJY>7BU#p0r*D1jdtI)-4feL= z-LA3ynql0%pFTVB=Vcx^f^h8FCH@SEb1?g%*cz4G0m6k9nbA};9VAYHLA74fEg;*G z-)oS9OW$RFBMG21wEy2Q;IF2k>jdkq^vZ7N4Od)@k4AE{mmSxC`CLj*I_b7G;z`FP z*tgdDJ$KB%zjDwOy;#U$N!;0K(pS;-x~?W$3w9ArGZ{2eXBl<6>KME{*a1cZzX%EE z-+@^fi(epD?R^9plMn*Wy4RQL^c%<*TWNvQcL&cHNR@*?K|q8-p@5f=I6#8&@0Hw` zz*?Zdfq+o=0m;8l`hTnZU-J3?>+OBL7t0O6et`6m1fJQPQ^$fp{L}6K6ZscY{zD@C zFE;*%1jQKm#{ZQ37qVxh{|WLx1O)QWegCgf{ogqEZ`}M3AqRm(mt8%D!6Bjp`wAi> Mp(tJ}Y8>)E0G}3;^8f$< literal 0 HcmV?d00001 diff --git a/docs/200-orm/050-overview/500-databases/images/embedded-replica-remote-read.png b/docs/200-orm/050-overview/500-databases/images/embedded-replica-remote-read.png new file mode 100644 index 0000000000000000000000000000000000000000..7762e8bfaa936d5284c8b19f4bb56fe289298e57 GIT binary patch literal 66251 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%0AZ{@h?MV%}BkT-4w5K@4hFJcPFzx)EU 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