From cbb595e1c9c46b83c443b3f3443f6e6138ce63fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Nov 2023 08:20:36 +0000 Subject: [PATCH 001/154] deps/terraform: bump hashicorp/kubernetes in /tests/terraform Bumps [hashicorp/kubernetes](https://github.com/hashicorp/terraform-provider-kubernetes) from 2.23.0 to 2.24.0. - [Release notes](https://github.com/hashicorp/terraform-provider-kubernetes/releases) - [Changelog](https://github.com/hashicorp/terraform-provider-kubernetes/blob/main/CHANGELOG.md) - [Commits](https://github.com/hashicorp/terraform-provider-kubernetes/compare/v2.23.0...v2.24.0) --- updated-dependencies: - dependency-name: hashicorp/kubernetes dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- tests/terraform/providers.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/terraform/providers.tf b/tests/terraform/providers.tf index 7f95ab487..746f0d728 100644 --- a/tests/terraform/providers.tf +++ b/tests/terraform/providers.tf @@ -10,7 +10,7 @@ terraform { } kubernetes = { source = "hashicorp/kubernetes" - version = "2.23.0" + version = "2.24.0" } } } \ No newline at end of file From e9737dcf4dbb658cc5d456333e6041c48635905b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Fri, 8 Dec 2023 08:34:30 +0100 Subject: [PATCH 002/154] Update API endpoint URL of anonymous report --- src/common/core/misc/jobs/anonymous-report.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/core/misc/jobs/anonymous-report.py b/src/common/core/misc/jobs/anonymous-report.py index f163f77b2..aa8c5978c 100644 --- a/src/common/core/misc/jobs/anonymous-report.py +++ b/src/common/core/misc/jobs/anonymous-report.py @@ -45,7 +45,7 @@ try: data["external_plugins"] = [plugin["id"] for plugin in db.get_plugins(external=True)] response = post( - "http://api:8080/data", + "https://api.bunkerweb.io/data", json=data, headers={"User-Agent": f"BunkerWeb/{data['version']}"}, allow_redirects=True, From cb76d1c093932953d8c4b28f17aa1fd19ff9b05f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Dec 2023 08:37:04 +0000 Subject: [PATCH 003/154] deps/gha: bump github/codeql-action from 2.22.8 to 2.22.9 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.22.8 to 2.22.9. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/407ffafae6a767df3e0230c3df91b6443ae8df75...c0d1daa7f7e14667747d73a7dbbe8c074bc8bfe2) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/scorecards-analysis.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index e638fcdcb..18df4ebbf 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -35,12 +35,12 @@ jobs: python -m pip install --no-cache-dir --require-hashes -r src/common/db/requirements.txt echo "CODEQL_PYTHON=$(which python)" >> $GITHUB_ENV - name: Initialize CodeQL - uses: github/codeql-action/init@407ffafae6a767df3e0230c3df91b6443ae8df75 # v2.22.8 + uses: github/codeql-action/init@c0d1daa7f7e14667747d73a7dbbe8c074bc8bfe2 # v2.22.9 with: languages: ${{ matrix.language }} config-file: ./.github/codeql.yml setup-python-dependencies: false - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@407ffafae6a767df3e0230c3df91b6443ae8df75 # v2.22.8 + uses: github/codeql-action/analyze@c0d1daa7f7e14667747d73a7dbbe8c074bc8bfe2 # v2.22.9 with: category: "/language:${{matrix.language}}" diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index 979021677..be1aa521d 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -25,6 +25,6 @@ jobs: results_format: sarif publish_results: true - name: "Upload SARIF results to code scanning" - uses: github/codeql-action/upload-sarif@407ffafae6a767df3e0230c3df91b6443ae8df75 # v2.22.8 + uses: github/codeql-action/upload-sarif@c0d1daa7f7e14667747d73a7dbbe8c074bc8bfe2 # v2.22.9 with: sarif_file: results.sarif From 5eb5625a273f47977f4a5d1a708cc4cf3d70db46 Mon Sep 17 00:00:00 2001 From: fl0ppy-d1sk Date: Fri, 8 Dec 2023 11:43:19 +0100 Subject: [PATCH 004/154] docs - add basic info about bw panel --- README.md | 51 +++++++++++++++++++++-------------- docs/index.md | 27 ++++++++++--------- docs/overrides/main.html | 4 +-- docs/professional-services.md | 29 ++++++++++++++++++++ mkdocs.yml | 1 + 5 files changed, 77 insertions(+), 35 deletions(-) create mode 100644 docs/professional-services.md diff --git a/README.md b/README.md index e4b3840c7..e2ab87983 100644 --- a/README.md +++ b/README.md @@ -18,11 +18,13 @@

- 🌐 Website + 🌐 Website | - πŸ““ Documentation + πŸ““ Documentation | - πŸ‘¨β€πŸ’» Demo + πŸ‘¨β€πŸ’» Demo + | + 🀝 Panel | πŸ›‘οΈ Examples | @@ -30,9 +32,9 @@ | πŸ“ Forum
- βš™οΈ Configurator + βš™οΈ Configurator | - πŸ—ΊοΈ Threatmap + πŸ—ΊοΈ Threatmap

> πŸ›‘οΈ Make security by default great again ! @@ -51,25 +53,26 @@ BunkerWeb contains primary [security features](https://docs.bunkerweb.io/1.5.4/s ## Why BunkerWeb ? -- **Easy integration into existing environments** : support for Linux, Docker, Swarm, Kubernetes, Ansible, Vagrant, ... -- **Highly customizable** : enable, disable and configure features easily to meet your use case -- **Secure by default** : offers out-of-the-box and hassle-free minimal security for your web services -- **Awesome web UI** : keep control of everything more efficiently without the need of the CLI -- **Plugin system** : extend BunkerWeb to meet your own use-cases -- **Free as in "freedom"** : licensed under the free [AGPLv3 license](https://www.gnu.org/licenses/agpl-3.0.en.html) +- **Easy integration into existing environments** : Seamlessly integrate BunkerWeb into various environments such as Linux, Docker, Swarm, Kubernetes and more. Enjoy a smooth transition and hassle-free implementation. +- **Highly customizable** : Tailor BunkerWeb to your specific requirements with ease. Enable, disable, and configure features effortlessly, allowing you to customize the security settings according to your unique use case. +- **Secure by default** : BunkerWeb provides out-of-the-box, hassle-free minimal security for your web services. Experience peace of mind and enhanced protection right from the start. +- **Awesome web UI** : Take control of BunkerWeb more efficiently with the exceptional web user interface (UI). Navigate settings and configurations effortlessly through a user-friendly graphical interface, eliminating the need for the command-line interface (CLI). +- **Plugin system** : Extend the capabilities of BunkerWeb to meet your own use cases. Seamlessly integrate additional security measures and customize the functionality of BunkerWeb according to your specific requirements. +- **Free as in "freedom"** : BunkerWeb is licensed under the free [AGPLv3 license](https://www.gnu.org/licenses/agpl-3.0.en.html), embracing the principles of freedom and openness. Enjoy the freedom to use, modify, and distribute the software, backed by a supportive community. +- **Professional services** : Get technical support, tailored consulting and custom development directly from the maintainers of BunkerWeb. Visit the [Bunker Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=github) for more information. ## Security features -A non-exhaustive list of security features : +Explore the impressive array of security features offered by BunkerWeb. While not exhaustive, here are some notable highlights: -- **HTTPS** support with transparent **Let's Encrypt** automation -- **State-of-the-art web security** : HTTP security headers, prevent leaks, TLS hardening, ... -- Integrated **ModSecurity WAF** with the **OWASP Core Rule Set** -- **Automatic ban** of strange behaviors based on HTTP status code -- Apply **connections and requests limit** for clients -- **Block bots** by asking them to solve a **challenge** (e.g. : cookie, javascript, captcha, hCaptcha or reCAPTCHA) -- **Block known bad IPs** with external blacklists and DNSBL -- And much more ... +- **HTTPS** support with transparent **Let's Encrypt** automation : Easily secure your web services with automated Let's Encrypt integration, ensuring encrypted communication between clients and your server. +- **State-of-the-art web security** : Benefit from cutting-edge web security measures, including comprehensive HTTP security headers, prevention of data leaks, and TLS hardening techniques. +- Integrated **ModSecurity WAF** with the **OWASP Core Rule Set** : Enjoy enhanced protection against web application attacks with the integration of ModSecurity, fortified by the renowned OWASP Core Rule Set. +- **Automatic ban** of strange behaviors based on HTTP status code : BunkerWeb intelligently identifies and blocks suspicious activities by automatically banning behaviors that trigger abnormal HTTP status codes. +- Apply **connections and requests limit** for clients : Set limits on the number of connections and requests from clients, preventing resource exhaustion and ensuring fair usage of server resources. +- **Block bots** with **challenge-based verification** : Keep malicious bots at bay by challenging them to solve puzzles such as cookies, JavaScript tests, captcha, hCaptcha, reCAPTCHA or Turnstile, effectively blocking unauthorized access. +- **Block known bad IPs** with external blacklists and DNSBL : Utilize external blacklists and DNS-based blackhole lists (DNSBL) to proactively block known malicious IP addresses, bolstering your defense against potential threats. +- **And much more...** : BunkerWeb is packed with a plethora of additional security features that go beyond this list, providing you with comprehensive protection and peace of mind. Learn more about the core security features in the [security tuning](https://docs.bunkerweb.io/1.5.4/security-tuning/) section of the documentation. @@ -81,6 +84,14 @@ Learn more about the core security features in the [security tuning](https://doc A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io). Feel free to visit it and perform some security tests. +## Professional services + +Get the most of BunkerWeb by getting professional services directly from the maintainers of the project. From technical support to tailored consulting and development, we are here to assist you in the security of your web services. + +You will find more information by visiting the [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=github), our dedicated platform for professional services. + +Don't hesitate to [contact us](https://panel.bunkerweb.io/contact.php?utm_campaign=self&utm_source=github) if you have any question, we will be more than happy to respond to your needs. + # Concepts

diff --git a/docs/index.md b/docs/index.md index c5014802b..d653b7980 100644 --- a/docs/index.md +++ b/docs/index.md @@ -7,24 +7,15 @@

Make your web services secure by default !
-Introducing BunkerWeb, the **cutting-edge** and **open-source Web Application Firewall** (WAF) that will revolutionize your web security experience. +BunkerWeb is a next-generation and open-source Web Application Firewall (WAF). -With BunkerWeb, your web services are safeguarded by default, providing you with peace of mind and enhanced protection. Powered by [NGINX](https://nginx.org/), this comprehensive web server combines advanced features seamlessly, ensuring your online assets remain secure. - -BunkerWeb effortlessly integrates into your existing environments, whether it's [Linux](integrations.md#linux), [Docker](integrations.md#docker), [Swarm](integrations.md#swarm), [Kubernetes](integrations.md#kubernetes), or more. Its versatility allows for easy configuration to suit your specific requirements. Don't worry if you prefer a user-friendly interfaceβ€”BunkerWeb offers an exceptional [web UI](web-ui.md) alongside the command-line interface (CLI), ensuring accessibility for all users. - -Experience the transformation in cybersecurity, where complexities and obstacles are a thing of the past. With BunkerWeb, fortifying your digital assets has never been more delightful and hassle-free. - -Furthermore, BunkerWeb boasts a comprehensive set of primary [security features](security-tuning.md) at its core. However, what sets it apart is its remarkable flexibility through an intuitive [plugin system](plugins.md). This ingenious design empowers you to effortlessly enhance BunkerWeb with additional security measures, ensuring a tailored and robust defense for your web applications. - -By seamlessly integrating new plugins into BunkerWeb, you can customize and expand its capabilities to address specific security requirements unique to your environment. Whether you need to strengthen authentication protocols, bolster threat detection, or implement specialized security measures, BunkerWeb's [plugin system](plugins.md) grants you the freedom to fortify your web infrastructure with ease. - -With BunkerWeb's dynamic [plugin system](plugins.md), security becomes an enjoyable journey of exploration and empowerment. Discover the endless possibilities and create a fortified web environment that perfectly aligns with your needs. +Being a full-featured web server (based on [NGINX](https://nginx.org/) under the hood), it will protect your web services to make them "secure by default". BunkerWeb integrates seamlessly into your existing environments ([Linux](integrations.md#linux), [Docker](integrations.md#docker), [Swarm](integrations.md#swarm), [Kubernetes](integrations.md#kubernetes), …) and is fully configurable (don't panic, there is an [awesome web UI](web-ui.md) if you don't like the CLI) to meet your own use-cases . In other words, cybersecurity is no more a hassle. +BunkerWeb contains primary [security features](security-tuning.md) as part of the core but can be easily extended with additional ones thanks to a [plugin system](plugins.md). ## Why BunkerWeb ? -- **Easy integration into existing environments** : Seamlessly integrate BunkerWeb into various environments such as Linux, Docker, Swarm, Kubernetes, Ansible, Vagrant, and more. Enjoy a smooth transition and hassle-free implementation. +- **Easy integration into existing environments** : Seamlessly integrate BunkerWeb into various environments such as Linux, Docker, Swarm, Kubernetes and more. Enjoy a smooth transition and hassle-free implementation. - **Highly customizable** : Tailor BunkerWeb to your specific requirements with ease. Enable, disable, and configure features effortlessly, allowing you to customize the security settings according to your unique use case. @@ -36,6 +27,8 @@ With BunkerWeb's dynamic [plugin system](plugins.md), security becomes an enjoya - **Free as in "freedom"** : BunkerWeb is licensed under the free [AGPLv3 license](https://www.gnu.org/licenses/agpl-3.0.en.html), embracing the principles of freedom and openness. Enjoy the freedom to use, modify, and distribute the software, backed by a supportive community. +- **Professional services** : Get technical support, tailored consulting and custom development directly from the maintainers of BunkerWeb. Visit the [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc) for more information. + ## Security features Explore the impressive array of security features offered by BunkerWeb. While not exhaustive, here are some notable highlights: @@ -65,3 +58,11 @@ To delve deeper into the core security features, we invite you to explore the [s

A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io). Feel free to visit it and perform some security tests. + +## Professional services + +Get the most of BunkerWeb by getting professional services directly from the maintainers of the project. From technical support to tailored consulting and development, we are here to assist you in the security of your web services. + +You will find more information by visiting the [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc), our dedicated platform for professional services. + +Don't hesitate to [contact us](https://panel.bunkerweb.io/contact.php?utm_campaign=self&utm_source=doc) if you have any question, we will be more than happy to respond to your needs. \ No newline at end of file diff --git a/docs/overrides/main.html b/docs/overrides/main.html index 1bec2b77c..f843612c6 100644 --- a/docs/overrides/main.html +++ b/docs/overrides/main.html @@ -8,8 +8,8 @@ {% endblock %} {% block announce %} - πŸ“’ Looking for tailored support, consulting or development for BunkerWeb ? - Contact us at contact@bunkerity.com for enterprise offers ! + πŸ“’ Looking for technical support, tailored consulting or custom development for BunkerWeb ? + Visit the BunkerWeb Panel for more information on our enterprise offers. {% endblock %} {% block libs %} diff --git a/docs/professional-services.md b/docs/professional-services.md new file mode 100644 index 000000000..bde5989c3 --- /dev/null +++ b/docs/professional-services.md @@ -0,0 +1,29 @@ +# Professional services + +## Why should I get professional services ? + +Since BunkerWeb is a free (as in freedom) software, you've the right to use it freely as long as you respect the [AGPLv3 license](https://www.gnu.org/licenses/agpl-3.0.en.html). + +But dedicating time to a specific technology may not be easy depending on your business priorities. Not mentioning that cybersecurity is complex domain where being both judge and jury is not recommended. + +Getting professional services in addition to the open-source solution is the ideal solution to cover your business needs. You can focus on your top priorities and rely on a trusted partner when it comes to web security. + +Please note that professionnal services are directly offered by [Bunkerity](https://www.bunkerity.com), the company maintaining the BunkerWeb project, through our [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc) online platform. + +## Which professional services do you offer ? + +We offer technical support around the BunkerWeb solution. By using this service, we will assist you on the technical issues (installation, configuration, false positive, ...). + +According to your needs you have the choice between "one time" and subscriptions offers. + +One important thing to note is that the support service is based on "credit" system where you pay for a number of support hours dedicated for you. Time passed on your requests will be deducted to your credit. In other words, you only pay for real time dedicated to your needs. + +In addition to the support service, we also offer custom services around the BunkerWeb solution to meet your specific needs : +- Consulting : a dedicated expert will give you advices on your project +- Development : if you need specific features in BunkerWeb, we can do it for you + +## How can I get more information ? + +You will find more information by visiting the [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc), our dedicated platform for professional services. + +Don't hesitate to [contact us](https://panel.bunkerweb.io/contact.php?utm_campaign=self&utm_source=doc) if you have any question, we will be more than happy to respond to your needs. diff --git a/mkdocs.yml b/mkdocs.yml index 34cc46cd3..df4fcd0bb 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -17,6 +17,7 @@ nav: - Web UI: 'web-ui.md' - Troubleshooting: 'troubleshooting.md' - Plugins: 'plugins.md' + - Professional services: 'professional-services.md' - About: 'about.md' theme: From 456b6a424486caa410210795a19d9317ea336bdb Mon Sep 17 00:00:00 2001 From: Jordan Blasenhauer Date: Fri, 8 Dec 2023 15:57:04 +0100 Subject: [PATCH 005/154] update utm readme --- README.md | 258 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 183 insertions(+), 75 deletions(-) diff --git a/README.md b/README.md index e2ab87983..f85a29af1 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- BunkerWeb logo + BunkerWeb logo

@@ -18,23 +18,39 @@

- 🌐 Website +<<<<<<< Updated upstream + 🌐 Website | - πŸ““ Documentation + πŸ““ Documentation | - πŸ‘¨β€πŸ’» Demo + πŸ‘¨β€πŸ’» Demo | - 🀝 Panel + πŸ›‘οΈ Examples +======= + 🌐 Website + | + πŸ““ Documentation + | + πŸ‘¨β€πŸ’» Demo + | + 🀝 Panel | πŸ›‘οΈ Examples +>>>>>>> Stashed changes | πŸ’¬ Chat | πŸ“ Forum
- βš™οΈ Configurator +<<<<<<< Updated upstream + βš™οΈ Configurator | - πŸ—ΊοΈ Threatmap + πŸ—ΊοΈ Threatmap +======= + βš™οΈ Configurator + | + πŸ—ΊοΈ Threatmap +>>>>>>> Stashed changes

> πŸ›‘οΈ Make security by default great again ! @@ -42,14 +58,28 @@ # BunkerWeb

- Overview banner + Overview banner

BunkerWeb is a next-generation and open-source Web Application Firewall (WAF). -Being a full-featured web server (based on [NGINX](https://nginx.org/) under the hood), it will protect your web services to make them "secure by default". BunkerWeb integrates seamlessly into your existing environments ([Linux](https://docs.bunkerweb.io/1.5.4/integrations/#linux), [Docker](https://docs.bunkerweb.io/1.5.4/integrations/#docker), [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/#swarm), [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/#kubernetes), …) and is fully configurable (don't panic, there is an [awesome web UI](https://docs.bunkerweb.io/1.5.4/web-ui/) if you don't like the CLI) to meet your own use-cases . In other words, cybersecurity is no more a hassle. +<<<<<<< Updated upstream +Being a full-featured web server (based on [NGINX](https://nginx.org/) under the hood), it will protect your web services to make them "secure by default". BunkerWeb integrates seamlessly into your existing environments ([Linux](https://docs.bunkerweb.io/1.5.3/integrations/#linux), [Docker](https://docs.bunkerweb.io/1.5.3/integrations/#docker), [Swarm](https://docs.bunkerweb.io/1.5.3/integrations/#swarm), [Kubernetes](https://docs.bunkerweb.io/1.5.3/integrations/#kubernetes), …) and is fully configurable (don't panic, there is an [awesome web UI](https://docs.bunkerweb.io/1.5.3/web-ui/) if you don't like the CLI) to meet your own use-cases . In other words, cybersecurity is no more a hassle. -BunkerWeb contains primary [security features](https://docs.bunkerweb.io/1.5.4/security-tuning/) as part of the core but can be easily extended with additional ones thanks to a [plugin system](https://docs.bunkerweb.io/1.5.4/plugins/). +BunkerWeb contains primary [security features](https://docs.bunkerweb.io/1.5.3/security-tuning/) as part of the core but can be easily extended with additional ones thanks to a [plugin system](https://docs.bunkerweb.io/1.5.3/plugins/). + +## Why BunkerWeb ? + +- **Easy integration into existing environments** : support for Linux, Docker, Swarm, Kubernetes, Ansible, Vagrant, ... +- **Highly customizable** : enable, disable and configure features easily to meet your use case +- **Secure by default** : offers out-of-the-box and hassle-free minimal security for your web services +- **Awesome web UI** : keep control of everything more efficiently without the need of the CLI +- **Plugin system** : extend BunkerWeb to meet your own use-cases +- **Free as in "freedom"** : licensed under the free [AGPLv3 license](https://www.gnu.org/licenses/agpl-3.0.en.html) +======= +Being a full-featured web server (based on [NGINX](https://nginx.org/) under the hood), it will protect your web services to make them "secure by default". BunkerWeb integrates seamlessly into your existing environments ([Linux](https://docs.bunkerweb.io/1.5.4/integrations/#linux?utm_campaign=self&utm_source=github), [Docker](https://docs.bunkerweb.io/1.5.4/integrations/#docker?utm_campaign=self&utm_source=github), [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/#swarm?utm_campaign=self&utm_source=github), [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/#kubernetes?utm_campaign=self&utm_source=github), …) and is fully configurable (don't panic, there is an [awesome web UI](https://docs.bunkerweb.io/1.5.4/web-ui?utm_campaign=self&utm_source=github) if you don't like the CLI) to meet your own use-cases . In other words, cybersecurity is no more a hassle. + +BunkerWeb contains primary [security features](https://docs.bunkerweb.io/1.5.4/security-tuning?utm_campaign=self&utm_source=github) as part of the core but can be easily extended with additional ones thanks to a [plugin system](https://docs.bunkerweb.io/1.5.4/plugins?utm_campaign=self&utm_source=github). ## Why BunkerWeb ? @@ -59,22 +89,27 @@ BunkerWeb contains primary [security features](https://docs.bunkerweb.io/1.5.4/s - **Awesome web UI** : Take control of BunkerWeb more efficiently with the exceptional web user interface (UI). Navigate settings and configurations effortlessly through a user-friendly graphical interface, eliminating the need for the command-line interface (CLI). - **Plugin system** : Extend the capabilities of BunkerWeb to meet your own use cases. Seamlessly integrate additional security measures and customize the functionality of BunkerWeb according to your specific requirements. - **Free as in "freedom"** : BunkerWeb is licensed under the free [AGPLv3 license](https://www.gnu.org/licenses/agpl-3.0.en.html), embracing the principles of freedom and openness. Enjoy the freedom to use, modify, and distribute the software, backed by a supportive community. -- **Professional services** : Get technical support, tailored consulting and custom development directly from the maintainers of BunkerWeb. Visit the [Bunker Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=github) for more information. +- **Professional services** : Get technical support, tailored consulting and custom development directly from the maintainers of BunkerWeb. Visit the [Bunker Panel](https://panel.bunkerweb.io?utm_campaign=self&utm_source=github) for more information. +>>>>>>> Stashed changes ## Security features -Explore the impressive array of security features offered by BunkerWeb. While not exhaustive, here are some notable highlights: +A non-exhaustive list of security features : -- **HTTPS** support with transparent **Let's Encrypt** automation : Easily secure your web services with automated Let's Encrypt integration, ensuring encrypted communication between clients and your server. -- **State-of-the-art web security** : Benefit from cutting-edge web security measures, including comprehensive HTTP security headers, prevention of data leaks, and TLS hardening techniques. -- Integrated **ModSecurity WAF** with the **OWASP Core Rule Set** : Enjoy enhanced protection against web application attacks with the integration of ModSecurity, fortified by the renowned OWASP Core Rule Set. -- **Automatic ban** of strange behaviors based on HTTP status code : BunkerWeb intelligently identifies and blocks suspicious activities by automatically banning behaviors that trigger abnormal HTTP status codes. -- Apply **connections and requests limit** for clients : Set limits on the number of connections and requests from clients, preventing resource exhaustion and ensuring fair usage of server resources. -- **Block bots** with **challenge-based verification** : Keep malicious bots at bay by challenging them to solve puzzles such as cookies, JavaScript tests, captcha, hCaptcha, reCAPTCHA or Turnstile, effectively blocking unauthorized access. -- **Block known bad IPs** with external blacklists and DNSBL : Utilize external blacklists and DNS-based blackhole lists (DNSBL) to proactively block known malicious IP addresses, bolstering your defense against potential threats. -- **And much more...** : BunkerWeb is packed with a plethora of additional security features that go beyond this list, providing you with comprehensive protection and peace of mind. +- **HTTPS** support with transparent **Let's Encrypt** automation +- **State-of-the-art web security** : HTTP security headers, prevent leaks, TLS hardening, ... +- Integrated **ModSecurity WAF** with the **OWASP Core Rule Set** +- **Automatic ban** of strange behaviors based on HTTP status code +- Apply **connections and requests limit** for clients +- **Block bots** by asking them to solve a **challenge** (e.g. : cookie, javascript, captcha, hCaptcha or reCAPTCHA) +- **Block known bad IPs** with external blacklists and DNSBL +- And much more ... -Learn more about the core security features in the [security tuning](https://docs.bunkerweb.io/1.5.4/security-tuning/) section of the documentation. +<<<<<<< Updated upstream +Learn more about the core security features in the [security tuning](https://docs.bunkerweb.io/1.5.3/security-tuning/) section of the documentation. +======= +Learn more about the core security features in the [security tuning](https://docs.bunkerweb.io/1.5.4/security-tuning?utm_campaign=self&utm_source=github) section of the documentation. +>>>>>>> Stashed changes ## Demo @@ -82,23 +117,30 @@ Learn more about the core security features in the [security tuning](https://doc BunkerWeb demo

-A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io). Feel free to visit it and perform some security tests. +A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io?utm_campaign=self&utm_source=github). Feel free to visit it and perform some security tests. +<<<<<<< Updated upstream +======= ## Professional services Get the most of BunkerWeb by getting professional services directly from the maintainers of the project. From technical support to tailored consulting and development, we are here to assist you in the security of your web services. -You will find more information by visiting the [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=github), our dedicated platform for professional services. +You will find more information by visiting the [BunkerWeb Panel](https://panel.bunkerweb.io?utm_campaign=self&utm_source=github), our dedicated platform for professional services. Don't hesitate to [contact us](https://panel.bunkerweb.io/contact.php?utm_campaign=self&utm_source=github) if you have any question, we will be more than happy to respond to your needs. +>>>>>>> Stashed changes # Concepts

- Concepts banner + Concepts banner

-You will find more information about the key concepts of BunkerWeb in the [documentation](https://docs.bunkerweb.io/1.5.4/concepts). +<<<<<<< Updated upstream +You will find more information about the key concepts of BunkerWeb in the [documentation](https://docs.bunkerweb.io/1.5.3/concepts). +======= +You will find more information about the key concepts of BunkerWeb in the [documentation](https://docs.bunkerweb.io/1.5.4/concepts?utm_campaign=self&utm_source=github). +>>>>>>> Stashed changes ## Integrations @@ -106,13 +148,23 @@ The first concept is the integration of BunkerWeb into the target environment. W The following integrations are officially supported : -- [Docker](https://docs.bunkerweb.io/1.5.4/integrations/#docker) -- [Docker autoconf](https://docs.bunkerweb.io/1.5.4/integrations/#docker-autoconf) -- [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/#swarm) -- [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/#kubernetes) -- [Linux](https://docs.bunkerweb.io/1.5.4/integrations/#linux) -- [Ansible](https://docs.bunkerweb.io/1.5.4/integrations/#ansible) -- [Vagrant](https://docs.bunkerweb.io/1.5.4/integrations/#vagrant) +<<<<<<< Updated upstream +- [Docker](https://docs.bunkerweb.io/1.5.3/integrations/#docker) +- [Docker autoconf](https://docs.bunkerweb.io/1.5.3/integrations/#docker-autoconf) +- [Swarm](https://docs.bunkerweb.io/1.5.3/integrations/#swarm) +- [Kubernetes](https://docs.bunkerweb.io/1.5.3/integrations/#kubernetes) +- [Linux](https://docs.bunkerweb.io/1.5.3/integrations/#linux) +- [Ansible](https://docs.bunkerweb.io/1.5.3/integrations/#ansible) +- [Vagrant](https://docs.bunkerweb.io/1.5.3/integrations/#vagrant) +======= +- [Docker](https://docs.bunkerweb.io/1.5.4/integrations/#docker?utm_campaign=self&utm_source=github) +- [Docker autoconf](https://docs.bunkerweb.io/1.5.4/integrations/#docker-autoconf?utm_campaign=self&utm_source=github) +- [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/#swarm?utm_campaign=self&utm_source=github) +- [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/#kubernetes?utm_campaign=self&utm_source=github) +- [Linux](https://docs.bunkerweb.io/1.5.4/integrations/#linux?utm_campaign=self&utm_source=github) +- [Ansible](https://docs.bunkerweb.io/1.5.4/integrations/#ansible?utm_campaign=self&utm_source=github) +- [Vagrant](https://docs.bunkerweb.io/1.5.4/integrations/#vagrant?utm_campaign=self&utm_source=github) +>>>>>>> Stashed changes ## Settings @@ -132,7 +184,7 @@ USE_GZIP=yes USE_BROTLI=no ``` -You will find an easy to use settings generator at [config.bunkerweb.io](https://config.bunkerweb.io). +You will find an easy to use settings generator at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=github). ## Multisite mode @@ -144,7 +196,11 @@ When multisite mode is enabled, BunkerWeb will serve and protect multiple web ap ## Custom configurations -Because meeting all the use cases only using the settings is not an option (even with [external plugins](https://docs.bunkerweb.io/1.5.4/plugins)), you can use custom configurations to solve your specific challenges. +<<<<<<< Updated upstream +Because meeting all the use cases only using the settings is not an option (even with [external plugins](https://docs.bunkerweb.io/1.5.3/plugins)), you can use custom configurations to solve your specific challenges. +======= +Because meeting all the use cases only using the settings is not an option (even with [external plugins](https://docs.bunkerweb.io/1.5.4/plugins?utm_campaign=self&utm_source=github)), you can use custom configurations to solve your specific challenges. +>>>>>>> Stashed changes Under the hood, BunkerWeb uses the notorious NGINX web server, that's why you can leverage its configuration system for your specific needs. Custom NGINX configurations can be included in different [contexts](https://docs.nginx.com/nginx/admin-guide/basic-functionality/managing-configuration-files/#contexts) like HTTP or server (all servers and/or specific server block). @@ -178,7 +234,7 @@ In other words, the scheduler is the brain of BunkerWeb. ## Docker

- Docker banner + Docker banner

We provide ready to use prebuilt images for x64, x86, armv7 and arm64 platforms on [Docker Hub](https://hub.docker.com/u/bunkerity). @@ -189,77 +245,103 @@ Docker integration key concepts are : - **Scheduler** container to store configuration and execute jobs - **Networks** to expose ports for clients and connect to upstream web services -You will find more information in the [Docker integration section](https://docs.bunkerweb.io/1.5.4/integrations/#docker) of the documentation. +<<<<<<< Updated upstream +You will find more information in the [Docker integration section](https://docs.bunkerweb.io/1.5.3/integrations/#docker) of the documentation. +======= +You will find more information in the [Docker integration section](https://docs.bunkerweb.io/1.5.4/integrations/#docker?utm_campaign=self&utm_source=github) of the documentation. +>>>>>>> Stashed changes ## Docker autoconf

- Docker autoconf banner + Docker autoconf banner

The downside of using environment variables is that the container needs to be recreated each time there is an update which is not very convenient. To counter that issue, you can use another image called **autoconf** which will listen for Docker events and automatically reconfigure BunkerWeb in real-time without recreating the container. Instead of defining environment variables for the BunkerWeb container, you simply add **labels** to your web applications containers and the **autoconf** will "automagically" take care of the rest. -You will find more information in the [Docker autoconf section](https://docs.bunkerweb.io/1.5.4/integrations/#docker-autoconf) of the documentation. +<<<<<<< Updated upstream +You will find more information in the [Docker autoconf section](https://docs.bunkerweb.io/1.5.3/integrations/#docker-autoconf) of the documentation. +======= +You will find more information in the [Docker autoconf section](https://docs.bunkerweb.io/1.5.4/integrations/#docker-autoconf?utm_campaign=self&utm_source=github) of the documentation. +>>>>>>> Stashed changes ## Swarm

- Swarm banner + Swarm banner

To automatically configure BunkerWeb instances, a special service, called **autoconf** will listen for Docker Swarm events like service creation or deletion and automatically configure the **BunkerWeb instances** in real-time without downtime. -Like the [Docker autoconf integration](https://docs.bunkerweb.io/1.5.4/integrations/#docker-autoconf), configuration for web services is defined using labels starting with the special **bunkerweb.** prefix. +<<<<<<< Updated upstream +Like the [Docker autoconf integration](https://docs.bunkerweb.io/1.5.3/integrations/#docker-autoconf), configuration for web services is defined using labels starting with the special **bunkerweb.** prefix. -You will find more information in the [Swarm section](https://docs.bunkerweb.io/1.5.4/integrations/#swarm) of the documentation. +You will find more information in the [Swarm section](https://docs.bunkerweb.io/1.5.3/integrations/#swarm) of the documentation. +======= +Like the [Docker autoconf integration](https://docs.bunkerweb.io/1.5.4/integrations/#docker-autoconf?utm_campaign=self&utm_source=github), configuration for web services is defined using labels starting with the special **bunkerweb.** prefix. + +You will find more information in the [Swarm section](https://docs.bunkerweb.io/1.5.4/integrations/#swarm?utm_campaign=self&utm_source=github) of the documentation. +>>>>>>> Stashed changes ## Kubernetes

- Kubernetes banner + Kubernetes banner

The autoconf acts as an [Ingress controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) and will configure the BunkerWeb instances according to the [Ingress resources](https://kubernetes.io/docs/concepts/services-networking/ingress/). It also monitors other Kubernetes objects like [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) for custom configurations. -You will find more information in the [Kubernetes section](https://docs.bunkerweb.io/1.5.4/integrations/#kubernetes) of the documentation. +<<<<<<< Updated upstream +You will find more information in the [Kubernetes section](https://docs.bunkerweb.io/1.5.3/integrations/#kubernetes) of the documentation. +======= +You will find more information in the [Kubernetes section](https://docs.bunkerweb.io/1.5.4/integrations/#kubernetes?utm_campaign=self&utm_source=github) of the documentation. +>>>>>>> Stashed changes ## Linux

- Linux banner + Linux banner

List of supported Linux distros : -- Debian 12 "Bookworm" +- Debian 11 "Bullseye" - Ubuntu 22.04 "Jammy" -- Fedora 39 -- RHEL 8.9 +- Fedora 38 +- RHEL 8.7 Repositories of Linux packages for BunkerWeb are available on [PackageCloud](https://packagecloud.io/bunkerity/bunkerweb), they provide a bash script to automatically add and trust the repository (but you can also follow the [manual installation](https://packagecloud.io/bunkerity/bunkerweb/install) instructions if you prefer). -You will find more information in the [Linux section](https://docs.bunkerweb.io/1.5.4/integrations/#linux) of the documentation. +<<<<<<< Updated upstream +You will find more information in the [Linux section](https://docs.bunkerweb.io/1.5.3/integrations/#linux) of the documentation. +======= +You will find more information in the [Linux section](https://docs.bunkerweb.io/1.5.4/integrations/#linux?utm_campaign=self&utm_source=github) of the documentation. +>>>>>>> Stashed changes ## Ansible

- Ansible banner + Ansible banner

List of supported Linux distros : -- Debian 12 "Bookworm" +- Debian 11 "Bullseye" - Ubuntu 22.04 "Jammy" -- Fedora 39 -- RHEL 8.9 +- Fedora 38 +- RHEL 8.7 [Ansible](https://www.ansible.com/) is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates. A specific BunkerWeb Ansible role is available on [Ansible Galaxy](https://galaxy.ansible.com/bunkerity/bunkerweb) (source code is available [here](https://github.com/bunkerity/bunkerweb-ansible)). -You will find more information in the [Ansible section](https://docs.bunkerweb.io/1.5.4/integrations/#ansible) of the documentation. +<<<<<<< Updated upstream +You will find more information in the [Ansible section](https://docs.bunkerweb.io/1.5.3/integrations/#ansible) of the documentation. +======= +You will find more information in the [Ansible section](https://docs.bunkerweb.io/1.5.4/integrations/#ansible?utm_campaign=self&utm_source=github) of the documentation. +>>>>>>> Stashed changes ## Vagrant @@ -268,11 +350,19 @@ We maintain ready to use Vagrant boxes hosted on Vagrant cloud for the following - virtualbox - libvirt -You will find more information in the [Vagrant section](https://docs.bunkerweb.io/1.5.4/integrations/#vagrant) of the documentation. +<<<<<<< Updated upstream +You will find more information in the [Vagrant section](https://docs.bunkerweb.io/1.5.3/integrations/#vagrant) of the documentation. # Quickstart guide -Once you have setup BunkerWeb with the integration of your choice, you can follow the [quickstart guide](https://docs.bunkerweb.io/1.5.4/quickstart-guide/) that will cover the following common use cases : +Once you have setup BunkerWeb with the integration of your choice, you can follow the [quickstart guide](https://docs.bunkerweb.io/1.5.3/quickstart-guide/) that will cover the following common use cases : +======= +You will find more information in the [Vagrant section](https://docs.bunkerweb.io/1.5.4/integrations/#vagrant?utm_campaign=self&utm_source=github) of the documentation. + +# Quickstart guide + +Once you have setup BunkerWeb with the integration of your choice, you can follow the [quickstart guide](https://docs.bunkerweb.io/1.5.4/quickstart-guide?utm_campaign=self&utm_source=github) that will cover the following common use cases : +>>>>>>> Stashed changes - Protecting a single HTTP application - Protecting multiple HTTP application @@ -283,25 +373,35 @@ Once you have setup BunkerWeb with the integration of your choice, you can follo # Security tuning -BunkerWeb offers many security features that you can configure with [settings](https://docs.bunkerweb.io/1.5.4/settings). Even if the default values of settings ensure a minimal "security by default", we strongly recommend you to tune them. By doing so you will be able to ensure a security level of your choice but also manage false positives. +<<<<<<< Updated upstream +BunkerWeb offers many security features that you can configure with [settings](https://docs.bunkerweb.io/1.5.3/settings). Even if the default values of settings ensure a minimal "security by default", we strongly recommend you to tune them. By doing so you will be able to ensure a security level of your choice but also manage false positives. -You will find more information in the [security tuning section](https://docs.bunkerweb.io/1.5.4/security-tuning) of the documentation. +You will find more information in the [security tuning section](https://docs.bunkerweb.io/1.5.3/security-tuning) of the documentation. +======= +BunkerWeb offers many security features that you can configure with [settings](https://docs.bunkerweb.io/1.5.4/settings?utm_campaign=self&utm_source=github). Even if the default values of settings ensure a minimal "security by default", we strongly recommend you to tune them. By doing so you will be able to ensure a security level of your choice but also manage false positives. + +You will find more information in the [security tuning section](https://docs.bunkerweb.io/1.5.4/security-tuning?utm_campaign=self&utm_source=github) of the documentation. +>>>>>>> Stashed changes # Settings -To help you tuning BunkerWeb we have made an easy to use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io). +To help you tuning BunkerWeb we have made an easy to use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=github). As a general rule when multisite mode is enabled, if you want to apply settings with multisite context to a specific server you will need to add the primary (first) server name as a prefix like `www.example.com_USE_ANTIBOT=captcha` or `myapp.example.com_USE_GZIP=yes` for example. When settings are considered as "multiple", it means that you can have multiple groups of settings for the same feature by adding numbers as suffix like `REVERSE_PROXY_URL_1=/subdir`, `REVERSE_PROXY_HOST_1=http://myhost1`, `REVERSE_PROXY_URL_2=/anotherdir`, `REVERSE_PROXY_HOST_2=http://myhost2`, ... for example. -Check the [settings section](https://docs.bunkerweb.io/1.5.4/settings) of the documentation to get the full list. +<<<<<<< Updated upstream +Check the [settings section](https://docs.bunkerweb.io/1.5.3/settings) of the documentation to get the full list. +======= +Check the [settings section](https://docs.bunkerweb.io/1.5.4/settings?utm_campaign=self&utm_source=github) of the documentation to get the full list. +>>>>>>> Stashed changes # Web UI

- +

@@ -315,13 +415,17 @@ The "Web UI" is a web application that helps you manage your BunkerWeb instance - Monitor jobs execution - View the logs and search pattern -You will find more information in the [Web UI section](https://docs.bunkerweb.io/1.5.4/web-ui) of the documentation. +<<<<<<< Updated upstream +You will find more information in the [Web UI section](https://docs.bunkerweb.io/1.5.3/web-ui) of the documentation. +======= +You will find more information in the [Web UI section](https://docs.bunkerweb.io/1.5.4/web-ui?utm_campaign=self&utm_source=github) of the documentation. +>>>>>>> Stashed changes # Plugins BunkerWeb comes with a plugin system to make it possible to easily add new features. Once a plugin is installed, you can manage it using additional settings defined by the plugin. -Here is the list of "official" plugins that we maintain (see the [bunkerweb-plugins](https://github.com/bunkerity/bunkerweb-plugins) repository for more information) : +Here is the list of "official" plugins that we maintain (see the [bunkerweb-plugins](https://github.com/bunkerity/bunkerweb-plugins?utm_campaign=self&utm_source=github) repository for more information) : | Name | Version | Description | Link | | :------------: | :-----: | :------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------: | @@ -331,9 +435,13 @@ Here is the list of "official" plugins that we maintain (see the [bunkerweb-plug | **Discord** | 1.2 | Send security notifications to a Discord channel using a Webhook. | [bunkerweb-plugins/discord](https://github.com/bunkerity/bunkerweb-plugins/tree/main/discord) | | **Slack** | 1.2 | Send security notifications to a Slack channel using a Webhook. | [bunkerweb-plugins/slack](https://github.com/bunkerity/bunkerweb-plugins/tree/main/slack) | | **VirusTotal** | 1.2 | Automatically scans uploaded files with the VirusTotal API and denies the request when a file is detected as malicious. | [bunkerweb-plugins/virustotal](https://github.com/bunkerity/bunkerweb-plugins/tree/main/virustotal) | -| **WebHook** | 1.2 | Send security notifications to a custom HTTP endpoint using a Webhook. | [bunkerweb-plugins/slack](https://github.com/bunkerity/bunkerweb-plugins/tree/main/webhook) | +| **WebHook** | 1.2 | Send security notifications to a custom HTTP endpoint using a Webhook. | [bunkerweb-plugins/slack](https://github.com/bunkerity/bunkerweb-plugins/tree/main/webhook) | -You will find more information in the [plugins section](https://docs.bunkerweb.io/1.5.4/plugins) of the documentation. +<<<<<<< Updated upstream +You will find more information in the [plugins section](https://docs.bunkerweb.io/1.5.3/plugins) of the documentation. +======= +You will find more information in the [plugins section](https://docs.bunkerweb.io/1.5.4/plugins?utm_campaign=self&utm_source=github) of the documentation. +>>>>>>> Stashed changes # Support @@ -341,10 +449,10 @@ You will find more information in the [plugins section](https://docs.bunkerweb.i We offer professional services related to BunkerWeb like : -* Consulting -* Support -* Custom development -* Partnership +- Consulting +- Support +- Custom development +- Partnership Please contact us at [contact@bunkerity.com](mailto:contact@bunkerity.com) if you are interested. @@ -352,24 +460,24 @@ Please contact us at [contact@bunkerity.com](mailto:contact@bunkerity.com) if yo To get free community support you can use the following media : -* The #help channel of BunkerWeb in the [Discord server](https://discord.com/invite/fTf46FmtyD) -* The help category of [GitHub discussions](https://github.com/bunkerity/bunkerweb/discussions) -* The [/r/BunkerWeb](https://www.reddit.com/r/BunkerWeb) subreddit -* The [Server Fault](https://serverfault.com/) and [Super User](https://superuser.com/) forums +- The #help channel of BunkerWeb in the [Discord server](https://discord.com/invite/fTf46FmtyD) +- The help category of [GitHub discussions](https://github.com/bunkerity/bunkerweb/discussions) +- The [/r/BunkerWeb](https://www.reddit.com/r/BunkerWeb) subreddit +- The [Server Fault](https://serverfault.com/) and [Super User](https://superuser.com/) forums Please don't use [GitHub issues](https://github.com/bunkerity/bunkerweb/issues) to ask for help, use it only for bug reports and feature requests. # License -This project is licensed under the terms of the [GNU Affero General Public License (AGPL) version 3](https://github.com/bunkerity/bunkerweb/raw/v1.5.4/LICENSE.md). +This project is licensed under the terms of the [GNU Affero General Public License (AGPL) version 3](https://github.com/bunkerity/bunkerweb/raw/v1.5.3/LICENSE.md). # Contribute -If you would like to contribute to the plugins you can read the [contributing guidelines](https://github.com/bunkerity/bunkerweb/raw/v1.5.4/CONTRIBUTING.md) to get started. +If you would like to contribute to the plugins you can read the [contributing guidelines](https://github.com/bunkerity/bunkerweb/raw/v1.5.3/CONTRIBUTING.md) to get started. # Security policy -We take security bugs as serious issues and encourage responsible disclosure, see our [security policy](https://github.com/bunkerity/bunkerweb/raw/v1.5.4/SECURITY.md) for more information. +We take security bugs as serious issues and encourage responsible disclosure, see our [security policy](https://github.com/bunkerity/bunkerweb/raw/v1.5.3/SECURITY.md) for more information. # Stargazers over time From 10f0ee7eef6d01dce41eb3efd76994516baa25b6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 08:08:31 +0000 Subject: [PATCH 006/154] deps/gha: bump rickstaa/action-create-tag from 1.7.1 to 1.7.2 Bumps [rickstaa/action-create-tag](https://github.com/rickstaa/action-create-tag) from 1.7.1 to 1.7.2. - [Release notes](https://github.com/rickstaa/action-create-tag/releases) - [Commits](https://github.com/rickstaa/action-create-tag/compare/861755f3fcbce1b21a65c17bad10e7d35c27b6d9...a1c7777fcb2fee4f19b0f283ba888afa11678b72) --- updated-dependencies: - dependency-name: rickstaa/action-create-tag dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/push-github.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/push-github.yml b/.github/workflows/push-github.yml index 43a92ba11..e463a7799 100644 --- a/.github/workflows/push-github.yml +++ b/.github/workflows/push-github.yml @@ -23,7 +23,7 @@ jobs: with: name: BunkerWeb_documentation_v${{ inputs.VERSION }}.pdf # Create tag - - uses: rickstaa/action-create-tag@861755f3fcbce1b21a65c17bad10e7d35c27b6d9 # v1.7.1 + - uses: rickstaa/action-create-tag@a1c7777fcb2fee4f19b0f283ba888afa11678b72 # v1.7.2 name: Create tag if: inputs.VERSION != 'testing' with: @@ -31,7 +31,7 @@ jobs: message: "v${{ inputs.VERSION }}" force_push_tag: true # Create tag - - uses: rickstaa/action-create-tag@861755f3fcbce1b21a65c17bad10e7d35c27b6d9 # v1.7.1 + - uses: rickstaa/action-create-tag@a1c7777fcb2fee4f19b0f283ba888afa11678b72 # v1.7.2 name: Create tag if: inputs.VERSION == 'testing' with: From de30a734f999c9cd21dc0034e35c544b417d86d0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 08:37:14 +0000 Subject: [PATCH 007/154] deps/ui: bump python in /src/ui Bumps python from 3.12.0-alpine3.18 to 3.12.1-alpine3.18. --- updated-dependencies: - dependency-name: python dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/ui/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/Dockerfile b/src/ui/Dockerfile index 299b06be3..64b15011e 100644 --- a/src/ui/Dockerfile +++ b/src/ui/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8 AS builder +FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8 AS builder # Install python dependencies RUN apk add --no-cache --virtual .build-deps g++ gcc musl-dev jpeg-dev zlib-dev libffi-dev cairo-dev pango-dev gdk-pixbuf-dev openssl-dev cargo postgresql-dev file make @@ -36,7 +36,7 @@ COPY src/common/helpers helpers COPY src/ui ui COPY src/VERSION VERSION -FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8 +FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8 # Set default umask to prevent huge recursive chmod increasing the final image size RUN umask 027 From 0f2bf17a586db21f3425924f8dc317e81b5c15c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 08:39:56 +0000 Subject: [PATCH 008/154] deps/scheduler: bump python in /src/scheduler Bumps python from 3.12.0-alpine3.18 to 3.12.1-alpine3.18. --- updated-dependencies: - dependency-name: python dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/scheduler/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scheduler/Dockerfile b/src/scheduler/Dockerfile index 97e576f45..9d9d48e58 100644 --- a/src/scheduler/Dockerfile +++ b/src/scheduler/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8 AS builder +FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8 AS builder # Install python dependencies RUN apk add --no-cache --virtual .build-deps g++ gcc musl-dev jpeg-dev zlib-dev libffi-dev cairo-dev pango-dev gdk-pixbuf-dev openssl-dev cargo postgresql-dev @@ -38,7 +38,7 @@ COPY src/common/utils utils COPY src/scheduler scheduler COPY src/VERSION VERSION -FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8 +FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8 # Set default umask to prevent huge recursive chmod increasing the final image size RUN umask 027 From 8eff772fefba85818ea8cb8740b95777d5211c2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 08:44:02 +0000 Subject: [PATCH 009/154] deps/autoconf: bump python in /src/autoconf Bumps python from 3.12.0-alpine3.18 to 3.12.1-alpine3.18. --- updated-dependencies: - dependency-name: python dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- src/autoconf/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/autoconf/Dockerfile b/src/autoconf/Dockerfile index b757f9031..65330ff4b 100644 --- a/src/autoconf/Dockerfile +++ b/src/autoconf/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8 AS builder +FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8 AS builder # Copy python requirements COPY src/deps/requirements.txt /tmp/requirements-deps.txt @@ -34,7 +34,7 @@ COPY src/common/helpers helpers COPY src/common/settings.json settings.json COPY src/common/utils utils -FROM python:3.12.0-alpine3.18@sha256:f1d0d03700fb2d4480e89fb807e7346c14b88952f7bd58d56de54a24817cc2e8 +FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8 # Set default umask to prevent huge recursive chmod increasing the final image size RUN umask 027 From e6c5df12dc7923b9711ad2b779c31fa7e34ea59a Mon Sep 17 00:00:00 2001 From: Jordan Blasenhauer Date: Mon, 11 Dec 2023 17:36:26 +0100 Subject: [PATCH 010/154] add utm --- docs/about.md | 2 +- docs/concepts.md | 2 +- docs/index.md | 4 ++-- docs/json2md.py | 2 +- docs/professional-services.md | 3 ++- docs/settings.md | 2 +- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/about.md b/docs/about.md index 91483092e..f972313a2 100644 --- a/docs/about.md +++ b/docs/about.md @@ -2,7 +2,7 @@ ## Who maintains BunkerWeb ? -BunkerWeb is maintained by [Bunkerity](https://www.bunkerity.com), a French πŸ‡«πŸ‡· company specialized in Cybersecurity πŸ›‘οΈ. +BunkerWeb is maintained by [Bunkerity](https://www.bunkerity.com?utm_campaign=self&utm_source=doc), a French πŸ‡«πŸ‡· company specialized in Cybersecurity πŸ›‘οΈ. ## Do you offer professional services ? diff --git a/docs/concepts.md b/docs/concepts.md index d2ee98d4e..52252820e 100644 --- a/docs/concepts.md +++ b/docs/concepts.md @@ -48,7 +48,7 @@ USE_BROTLI=no !!! info "Settings generator tool" - To help you tune BunkerWeb, we offer an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io). + To help you tune BunkerWeb, we offer an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=doc). ## Multisite mode diff --git a/docs/index.md b/docs/index.md index d653b7980..a09e870fb 100644 --- a/docs/index.md +++ b/docs/index.md @@ -57,7 +57,7 @@ To delve deeper into the core security features, we invite you to explore the [s

-A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io). Feel free to visit it and perform some security tests. +A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io?utm_campaign=self&utm_source=doc). Feel free to visit it and perform some security tests. ## Professional services @@ -65,4 +65,4 @@ Get the most of BunkerWeb by getting professional services directly from the mai You will find more information by visiting the [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc), our dedicated platform for professional services. -Don't hesitate to [contact us](https://panel.bunkerweb.io/contact.php?utm_campaign=self&utm_source=doc) if you have any question, we will be more than happy to respond to your needs. \ No newline at end of file +Don't hesitate to [contact us](https://panel.bunkerweb.io/contact.php?utm_campaign=self&utm_source=doc) if you have any question, we will be more than happy to respond to your needs. diff --git a/docs/json2md.py b/docs/json2md.py index 2a0fa478e..daf052292 100755 --- a/docs/json2md.py +++ b/docs/json2md.py @@ -39,7 +39,7 @@ doc = StringIO() print("# Settings\n", file=doc) print( - '!!! info "Settings generator tool"\n\n To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io).\n', + '!!! info "Settings generator tool"\n\n To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=doc).\n', file=doc, ) print( diff --git a/docs/professional-services.md b/docs/professional-services.md index bde5989c3..a5fde998c 100644 --- a/docs/professional-services.md +++ b/docs/professional-services.md @@ -8,7 +8,7 @@ But dedicating time to a specific technology may not be easy depending on your b Getting professional services in addition to the open-source solution is the ideal solution to cover your business needs. You can focus on your top priorities and rely on a trusted partner when it comes to web security. -Please note that professionnal services are directly offered by [Bunkerity](https://www.bunkerity.com), the company maintaining the BunkerWeb project, through our [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc) online platform. +Please note that professionnal services are directly offered by [Bunkerity](https://www.bunkerity.com?utm_campaign=self&utm_source=doc), the company maintaining the BunkerWeb project, through our [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc) online platform. ## Which professional services do you offer ? @@ -19,6 +19,7 @@ According to your needs you have the choice between "one time" and subscriptions One important thing to note is that the support service is based on "credit" system where you pay for a number of support hours dedicated for you. Time passed on your requests will be deducted to your credit. In other words, you only pay for real time dedicated to your needs. In addition to the support service, we also offer custom services around the BunkerWeb solution to meet your specific needs : + - Consulting : a dedicated expert will give you advices on your project - Development : if you need specific features in BunkerWeb, we can do it for you diff --git a/docs/settings.md b/docs/settings.md index 95693794d..236421be1 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -2,7 +2,7 @@ !!! info "Settings generator tool" - To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io). + To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=doc). This section contains the full list of settings supported by BunkerWeb. If you are not yet familiar with BunkerWeb, you should first read the [concepts](concepts.md) section of the documentation. Please follow the instructions for your own [integration](integrations.md) on how to apply the settings. From 6ef1513d7c9bfbd53f7a5ca7aefa2bc5291b4895 Mon Sep 17 00:00:00 2001 From: Jordan Blasenhauer Date: Mon, 11 Dec 2023 18:44:39 +0100 Subject: [PATCH 011/154] start adding banner --- docker-compose.dev.yml | 54 ++++++++++++++++++++++++++++++ src/ui/static/js/global.js | 64 +++++++++++++++++++++++++++++++++--- src/ui/templates/banner.html | 64 ++++++++++++++++++++++++++++++++++++ src/ui/templates/base.html | 4 +-- 4 files changed, 179 insertions(+), 7 deletions(-) create mode 100644 docker-compose.dev.yml create mode 100644 src/ui/templates/banner.html diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 000000000..230e5f453 --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,54 @@ +version: "3.5" + +services: + bunkerweb: + image: bunkerity/bunkerweb:1.5.4 + ports: + - 80:8080 + - 443:8443 + labels: + - "bunkerweb.INSTANCE=yes" + environment: + - SERVER_NAME=www.example.com + - API_WHITELIST_IP=127.0.0.0/8 10.20.30.0/24 + networks: + - bw-universe + - bw-services + + bw-scheduler: + image: bunkerity/bunkerweb-scheduler:1.5.4 + depends_on: + - bunkerweb + - bw-docker + volumes: + - bw-data:/data + environment: + - DOCKER_HOST=tcp://bw-docker:2375 + networks: + - bw-universe + - bw-docker + + bw-docker: + image: tecnativa/docker-socket-proxy:nightly + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + environment: + - CONTAINERS=1 + - LOG_LEVEL=warning + networks: + - bw-docker + +volumes: + bw-data: + +networks: + bw-universe: + name: bw-universe + ipam: + driver: default + config: + - subnet: 10.20.30.0/24 + bw-services: + name: bw-services + bw-docker: + name: bw-docker diff --git a/src/ui/static/js/global.js b/src/ui/static/js/global.js index a7b3df707..0c4353207 100644 --- a/src/ui/static/js/global.js +++ b/src/ui/static/js/global.js @@ -72,7 +72,7 @@ class News { excerpt, tags, date, - lastUpdate, + lastUpdate ); let cleanHTML = DOMPurify.sanitize(cardHTML); //add to DOM @@ -191,7 +191,7 @@ class darkMode { }; const send = await fetch( `${location.href.split("/").slice(0, -1).join("/")}/darkmode`, - data, + data ); } } @@ -231,7 +231,7 @@ class FlashMsg { flashEl.remove(); //update count this.flashCount.textContent = document.querySelectorAll( - "[data-flash-message]", + "[data-flash-message]" ).length; } } catch (err) {} @@ -295,12 +295,64 @@ class Loader { } } +class Banner { + constructor() { + this.bannerEl = document.getElementById("banner"); + this.bannerItems = this.bannerEl.querySelectorAll('[role="listitem"]'); + this.nextDelay = 9000; + this.transDuration = 700; + this.init(); + } + + init() { + setInterval(() => { + // Get current visible + let visibleEl; + this.bannerItems.forEach((item) => { + if (item.getAttribute("aria-hidden") === "false") { + visibleEl = item; + } + }); + + // Get next one to show (next index or first one) + let nextEl = + this.bannerEl.querySelector( + `[role="listitem"][data-id="${ + +visibleEl.getAttribute("data-id") + 1 + }"]` + ) || this.bannerEl.querySelector(`[role="listitem"][data-id="0"]`); + + // Hide current one + visibleEl.classList.add("-left-full"); + visibleEl.classList.remove("left-0"); + visibleEl.setAttribute("aria-hidden", "true"); + setTimeout(() => { + visibleEl.classList.remove("transition-all"); + }, this.transDuration + 10); + setTimeout(() => { + visibleEl.classList.add("opacity-0"); + }, this.transDuration + 20); + setTimeout(() => { + visibleEl.classList.remove("-left-full"); + visibleEl.classList.add("left-full"); + }, this.transDuration * 2); + + // Show next one + nextEl.classList.remove("opacity-0"); + nextEl.classList.add("transition-all"); + nextEl.classList.add("left-0"); + nextEl.classList.remove("left-full"); + nextEl.setAttribute("aria-hidden", "false"); + }, this.nextDelay); + } +} + const setLoader = new Loader(); const setMenu = new Menu(); const setNewsSidebar = new Sidebar( "[data-sidebar-info]", "[data-sidebar-info-open]", - "[data-sidebar-info-close]", + "[data-sidebar-info-close]" ); const setCheckbox = new Checkbox(); @@ -311,8 +363,10 @@ const setDisabledPop = new DisabledPop(); const setFlashSidebar = new Sidebar( "[data-flash-sidebar]", "[data-flash-sidebar-open]", - "[data-flash-sidebar-close]", + "[data-flash-sidebar-close]" ); const setNews = new News(); const setDarkM = new darkMode(); const setFlash = new FlashMsg(); + +const setBanner = new Banner(); diff --git a/src/ui/templates/banner.html b/src/ui/templates/banner.html new file mode 100644 index 000000000..c14ddfbcc --- /dev/null +++ b/src/ui/templates/banner.html @@ -0,0 +1,64 @@ + diff --git a/src/ui/templates/base.html b/src/ui/templates/base.html index b13077f68..e813bf662 100644 --- a/src/ui/templates/base.html +++ b/src/ui/templates/base.html @@ -16,13 +16,13 @@ main logo {% include "menu.html" %} {% include "news.html" %} {% include "flashs.html" - %} + %} {% include "banner.html" %}
From ea45f3c119158ff858a08f545dadc2c29702bc21 Mon Sep 17 00:00:00 2001 From: fl0ppy-d1sk Date: Mon, 11 Dec 2023 18:48:08 +0100 Subject: [PATCH 012/154] docs - update logos --- README.md | 67 ++++++++---------- docs/about.md | 2 +- docs/assets/logo.png | Bin 4050 -> 4626 bytes docs/concepts.md | 2 +- docs/index.md | 2 +- docs/json2md.py | 2 +- docs/professional-services.md | 2 +- docs/settings.md | 2 +- .../images/BUNKERWEB-print-hd-blanc.png | Bin 30346 -> 49316 bytes src/ui/static/images/BUNKERWEB-print-hd.png | Bin 39964 -> 54105 bytes src/ui/static/images/favicon-white.ico | Bin src/ui/static/images/favicon.ico | Bin src/ui/static/images/logo-menu-2.png | Bin 30346 -> 49316 bytes src/ui/static/images/logo-menu.png | Bin 39964 -> 54105 bytes 14 files changed, 37 insertions(+), 42 deletions(-) mode change 100755 => 100644 src/ui/static/images/favicon-white.ico mode change 100755 => 100644 src/ui/static/images/favicon.ico diff --git a/README.md b/README.md index e2ab87983..db928b743 100644 --- a/README.md +++ b/README.md @@ -47,9 +47,9 @@ BunkerWeb is a next-generation and open-source Web Application Firewall (WAF). -Being a full-featured web server (based on [NGINX](https://nginx.org/) under the hood), it will protect your web services to make them "secure by default". BunkerWeb integrates seamlessly into your existing environments ([Linux](https://docs.bunkerweb.io/1.5.4/integrations/#linux), [Docker](https://docs.bunkerweb.io/1.5.4/integrations/#docker), [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/#swarm), [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/#kubernetes), …) and is fully configurable (don't panic, there is an [awesome web UI](https://docs.bunkerweb.io/1.5.4/web-ui/) if you don't like the CLI) to meet your own use-cases . In other words, cybersecurity is no more a hassle. +Being a full-featured web server (based on [NGINX](https://nginx.org/) under the hood), it will protect your web services to make them "secure by default". BunkerWeb integrates seamlessly into your existing environments ([Linux](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#linux), [Docker](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker), [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#swarm), [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#kubernetes), …) and is fully configurable (don't panic, there is an [awesome web UI](https://docs.bunkerweb.io/1.5.4/web-ui/?utm_campaign=self&utm_source=github) if you don't like the CLI) to meet your own use-cases . In other words, cybersecurity is no more a hassle. -BunkerWeb contains primary [security features](https://docs.bunkerweb.io/1.5.4/security-tuning/) as part of the core but can be easily extended with additional ones thanks to a [plugin system](https://docs.bunkerweb.io/1.5.4/plugins/). +BunkerWeb contains primary [security features](https://docs.bunkerweb.io/1.5.4/security-tuning/?utm_campaign=self&utm_source=github) as part of the core but can be easily extended with additional ones thanks to a [plugin system](https://docs.bunkerweb.io/1.5.4/plugins/?utm_campaign=self&utm_source=github). ## Why BunkerWeb ? @@ -74,7 +74,7 @@ Explore the impressive array of security features offered by BunkerWeb. While no - **Block known bad IPs** with external blacklists and DNSBL : Utilize external blacklists and DNS-based blackhole lists (DNSBL) to proactively block known malicious IP addresses, bolstering your defense against potential threats. - **And much more...** : BunkerWeb is packed with a plethora of additional security features that go beyond this list, providing you with comprehensive protection and peace of mind. -Learn more about the core security features in the [security tuning](https://docs.bunkerweb.io/1.5.4/security-tuning/) section of the documentation. +Learn more about the core security features in the [security tuning](https://docs.bunkerweb.io/1.5.4/security-tuning/?utm_campaign=self&utm_source=github) section of the documentation. ## Demo @@ -82,7 +82,7 @@ Learn more about the core security features in the [security tuning](https://doc BunkerWeb demo

-A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io). Feel free to visit it and perform some security tests. +A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io/?utm_campaign=self&utm_source=github). Feel free to visit it and perform some security tests. ## Professional services @@ -98,7 +98,7 @@ Don't hesitate to [contact us](https://panel.bunkerweb.io/contact.php?utm_campai Concepts banner

-You will find more information about the key concepts of BunkerWeb in the [documentation](https://docs.bunkerweb.io/1.5.4/concepts). +You will find more information about the key concepts of BunkerWeb in the [documentation](https://docs.bunkerweb.io/1.5.4/concepts/?utm_campaign=self&utm_source=github). ## Integrations @@ -106,13 +106,13 @@ The first concept is the integration of BunkerWeb into the target environment. W The following integrations are officially supported : -- [Docker](https://docs.bunkerweb.io/1.5.4/integrations/#docker) -- [Docker autoconf](https://docs.bunkerweb.io/1.5.4/integrations/#docker-autoconf) -- [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/#swarm) -- [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/#kubernetes) -- [Linux](https://docs.bunkerweb.io/1.5.4/integrations/#linux) -- [Ansible](https://docs.bunkerweb.io/1.5.4/integrations/#ansible) -- [Vagrant](https://docs.bunkerweb.io/1.5.4/integrations/#vagrant) +- [Docker](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker) +- [Docker autoconf](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker-autoconf) +- [Swarm](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#swarm) +- [Kubernetes](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#kubernetes) +- [Linux](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#linux) +- [Ansible](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#ansible) +- [Vagrant](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#vagrant) ## Settings @@ -132,7 +132,7 @@ USE_GZIP=yes USE_BROTLI=no ``` -You will find an easy to use settings generator at [config.bunkerweb.io](https://config.bunkerweb.io). +You will find an easy to use settings generator at [config.bunkerweb.io](https://config.bunkerweb.io/?utm_campaign=self&utm_source=github). ## Multisite mode @@ -144,7 +144,7 @@ When multisite mode is enabled, BunkerWeb will serve and protect multiple web ap ## Custom configurations -Because meeting all the use cases only using the settings is not an option (even with [external plugins](https://docs.bunkerweb.io/1.5.4/plugins)), you can use custom configurations to solve your specific challenges. +Because meeting all the use cases only using the settings is not an option (even with [external plugins](https://docs.bunkerweb.io/1.5.4/plugins/?utm_campaign=self&utm_source=github)), you can use custom configurations to solve your specific challenges. Under the hood, BunkerWeb uses the notorious NGINX web server, that's why you can leverage its configuration system for your specific needs. Custom NGINX configurations can be included in different [contexts](https://docs.nginx.com/nginx/admin-guide/basic-functionality/managing-configuration-files/#contexts) like HTTP or server (all servers and/or specific server block). @@ -189,7 +189,7 @@ Docker integration key concepts are : - **Scheduler** container to store configuration and execute jobs - **Networks** to expose ports for clients and connect to upstream web services -You will find more information in the [Docker integration section](https://docs.bunkerweb.io/1.5.4/integrations/#docker) of the documentation. +You will find more information in the [Docker integration section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker) of the documentation. ## Docker autoconf @@ -201,7 +201,7 @@ The downside of using environment variables is that the container needs to be re Instead of defining environment variables for the BunkerWeb container, you simply add **labels** to your web applications containers and the **autoconf** will "automagically" take care of the rest. -You will find more information in the [Docker autoconf section](https://docs.bunkerweb.io/1.5.4/integrations/#docker-autoconf) of the documentation. +You will find more information in the [Docker autoconf section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker-autoconf) of the documentation. ## Swarm @@ -211,9 +211,9 @@ You will find more information in the [Docker autoconf section](https://docs.bun To automatically configure BunkerWeb instances, a special service, called **autoconf** will listen for Docker Swarm events like service creation or deletion and automatically configure the **BunkerWeb instances** in real-time without downtime. -Like the [Docker autoconf integration](https://docs.bunkerweb.io/1.5.4/integrations/#docker-autoconf), configuration for web services is defined using labels starting with the special **bunkerweb.** prefix. +Like the [Docker autoconf integration](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#docker-autoconf), configuration for web services is defined using labels starting with the special **bunkerweb.** prefix. -You will find more information in the [Swarm section](https://docs.bunkerweb.io/1.5.4/integrations/#swarm) of the documentation. +You will find more information in the [Swarm section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#swarm) of the documentation. ## Kubernetes @@ -223,7 +223,7 @@ You will find more information in the [Swarm section](https://docs.bunkerweb.io/ The autoconf acts as an [Ingress controller](https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/) and will configure the BunkerWeb instances according to the [Ingress resources](https://kubernetes.io/docs/concepts/services-networking/ingress/). It also monitors other Kubernetes objects like [ConfigMap](https://kubernetes.io/docs/concepts/configuration/configmap/) for custom configurations. -You will find more information in the [Kubernetes section](https://docs.bunkerweb.io/1.5.4/integrations/#kubernetes) of the documentation. +You will find more information in the [Kubernetes section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#kubernetes) of the documentation. ## Linux @@ -240,7 +240,7 @@ List of supported Linux distros : Repositories of Linux packages for BunkerWeb are available on [PackageCloud](https://packagecloud.io/bunkerity/bunkerweb), they provide a bash script to automatically add and trust the repository (but you can also follow the [manual installation](https://packagecloud.io/bunkerity/bunkerweb/install) instructions if you prefer). -You will find more information in the [Linux section](https://docs.bunkerweb.io/1.5.4/integrations/#linux) of the documentation. +You will find more information in the [Linux section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#linux) of the documentation. ## Ansible @@ -259,7 +259,7 @@ List of supported Linux distros : A specific BunkerWeb Ansible role is available on [Ansible Galaxy](https://galaxy.ansible.com/bunkerity/bunkerweb) (source code is available [here](https://github.com/bunkerity/bunkerweb-ansible)). -You will find more information in the [Ansible section](https://docs.bunkerweb.io/1.5.4/integrations/#ansible) of the documentation. +You will find more information in the [Ansible section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#ansible) of the documentation. ## Vagrant @@ -268,11 +268,11 @@ We maintain ready to use Vagrant boxes hosted on Vagrant cloud for the following - virtualbox - libvirt -You will find more information in the [Vagrant section](https://docs.bunkerweb.io/1.5.4/integrations/#vagrant) of the documentation. +You will find more information in the [Vagrant section](https://docs.bunkerweb.io/1.5.4/integrations/?utm_campaign=self&utm_source=github#vagrant) of the documentation. # Quickstart guide -Once you have setup BunkerWeb with the integration of your choice, you can follow the [quickstart guide](https://docs.bunkerweb.io/1.5.4/quickstart-guide/) that will cover the following common use cases : +Once you have setup BunkerWeb with the integration of your choice, you can follow the [quickstart guide](https://docs.bunkerweb.io/1.5.4/quickstart-guide/?utm_campaign=self&utm_source=github) that will cover the following common use cases : - Protecting a single HTTP application - Protecting multiple HTTP application @@ -283,19 +283,19 @@ Once you have setup BunkerWeb with the integration of your choice, you can follo # Security tuning -BunkerWeb offers many security features that you can configure with [settings](https://docs.bunkerweb.io/1.5.4/settings). Even if the default values of settings ensure a minimal "security by default", we strongly recommend you to tune them. By doing so you will be able to ensure a security level of your choice but also manage false positives. +BunkerWeb offers many security features that you can configure with [settings](https://docs.bunkerweb.io/1.5.4/settings/?utm_campaign=self&utm_source=github). Even if the default values of settings ensure a minimal "security by default", we strongly recommend you to tune them. By doing so you will be able to ensure a security level of your choice but also manage false positives. -You will find more information in the [security tuning section](https://docs.bunkerweb.io/1.5.4/security-tuning) of the documentation. +You will find more information in the [security tuning section](https://docs.bunkerweb.io/1.5.4/security-tuning/?utm_campaign=self&utm_source=github) of the documentation. # Settings -To help you tuning BunkerWeb we have made an easy to use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io). +To help you tuning BunkerWeb we have made an easy to use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io/?utm_campaign=self&utm_source=github). As a general rule when multisite mode is enabled, if you want to apply settings with multisite context to a specific server you will need to add the primary (first) server name as a prefix like `www.example.com_USE_ANTIBOT=captcha` or `myapp.example.com_USE_GZIP=yes` for example. When settings are considered as "multiple", it means that you can have multiple groups of settings for the same feature by adding numbers as suffix like `REVERSE_PROXY_URL_1=/subdir`, `REVERSE_PROXY_HOST_1=http://myhost1`, `REVERSE_PROXY_URL_2=/anotherdir`, `REVERSE_PROXY_HOST_2=http://myhost2`, ... for example. -Check the [settings section](https://docs.bunkerweb.io/1.5.4/settings) of the documentation to get the full list. +Check the [settings section](https://docs.bunkerweb.io/1.5.4/settings/?utm_campaign=self&utm_source=github) of the documentation to get the full list. # Web UI @@ -315,7 +315,7 @@ The "Web UI" is a web application that helps you manage your BunkerWeb instance - Monitor jobs execution - View the logs and search pattern -You will find more information in the [Web UI section](https://docs.bunkerweb.io/1.5.4/web-ui) of the documentation. +You will find more information in the [Web UI section](https://docs.bunkerweb.io/1.5.4/web-ui/?utm_campaign=self&utm_source=github) of the documentation. # Plugins @@ -333,20 +333,15 @@ Here is the list of "official" plugins that we maintain (see the [bunkerweb-plug | **VirusTotal** | 1.2 | Automatically scans uploaded files with the VirusTotal API and denies the request when a file is detected as malicious. | [bunkerweb-plugins/virustotal](https://github.com/bunkerity/bunkerweb-plugins/tree/main/virustotal) | | **WebHook** | 1.2 | Send security notifications to a custom HTTP endpoint using a Webhook. | [bunkerweb-plugins/slack](https://github.com/bunkerity/bunkerweb-plugins/tree/main/webhook) | -You will find more information in the [plugins section](https://docs.bunkerweb.io/1.5.4/plugins) of the documentation. +You will find more information in the [plugins section](https://docs.bunkerweb.io/1.5.4/plugins/?utm_campaign=self&utm_source=github) of the documentation. # Support ## Professional -We offer professional services related to BunkerWeb like : +Get technical support directly from the BunkerWeb maintainers. You will find more information by visiting the [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=github), our dedicated platform for professional services. -* Consulting -* Support -* Custom development -* Partnership - -Please contact us at [contact@bunkerity.com](mailto:contact@bunkerity.com) if you are interested. +Don't hesitate to [contact us](https://panel.bunkerweb.io/contact.php?utm_campaign=self&utm_source=github) if you have any question, we will be more than happy to respond to your needs. ## Community diff --git a/docs/about.md b/docs/about.md index f972313a2..63f4199e2 100644 --- a/docs/about.md +++ b/docs/about.md @@ -2,7 +2,7 @@ ## Who maintains BunkerWeb ? -BunkerWeb is maintained by [Bunkerity](https://www.bunkerity.com?utm_campaign=self&utm_source=doc), a French πŸ‡«πŸ‡· company specialized in Cybersecurity πŸ›‘οΈ. +BunkerWeb is maintained by [Bunkerity](https://www.bunkerity.com/?utm_campaign=self&utm_source=doc), a French πŸ‡«πŸ‡· company specialized in Cybersecurity πŸ›‘οΈ. ## Do you offer professional services ? diff --git a/docs/assets/logo.png b/docs/assets/logo.png index 2b7bcf430f54ed1d12e2e5c4893cd629e8083733..b209e8c0a7e7db7eb7530e5e484ef4b627212d6d 100644 GIT binary patch literal 4626 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 IM6N<$g5Q$@GXMYp literal 4050 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 Eg8F8W6951J diff --git a/docs/concepts.md b/docs/concepts.md index 52252820e..ce25ca3d2 100644 --- a/docs/concepts.md +++ b/docs/concepts.md @@ -48,7 +48,7 @@ USE_BROTLI=no !!! info "Settings generator tool" - To help you tune BunkerWeb, we offer an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=doc). + To help you tune BunkerWeb, we offer an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io/?utm_campaign=self&utm_source=doc). ## Multisite mode diff --git a/docs/index.md b/docs/index.md index a09e870fb..945c8838a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -57,7 +57,7 @@ To delve deeper into the core security features, we invite you to explore the [s

-A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io?utm_campaign=self&utm_source=doc). Feel free to visit it and perform some security tests. +A demo website protected with BunkerWeb is available at [demo.bunkerweb.io](https://demo.bunkerweb.io/?utm_campaign=self&utm_source=doc). Feel free to visit it and perform some security tests. ## Professional services diff --git a/docs/json2md.py b/docs/json2md.py index daf052292..7ea963260 100755 --- a/docs/json2md.py +++ b/docs/json2md.py @@ -39,7 +39,7 @@ doc = StringIO() print("# Settings\n", file=doc) print( - '!!! info "Settings generator tool"\n\n To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=doc).\n', + '!!! info "Settings generator tool"\n\n To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io/?utm_campaign=self&utm_source=doc).\n', file=doc, ) print( diff --git a/docs/professional-services.md b/docs/professional-services.md index a5fde998c..4f190c418 100644 --- a/docs/professional-services.md +++ b/docs/professional-services.md @@ -8,7 +8,7 @@ But dedicating time to a specific technology may not be easy depending on your b Getting professional services in addition to the open-source solution is the ideal solution to cover your business needs. You can focus on your top priorities and rely on a trusted partner when it comes to web security. -Please note that professionnal services are directly offered by [Bunkerity](https://www.bunkerity.com?utm_campaign=self&utm_source=doc), the company maintaining the BunkerWeb project, through our [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc) online platform. +Please note that professionnal services are directly offered by [Bunkerity](https://www.bunkerity.com/?utm_campaign=self&utm_source=doc), the company maintaining the BunkerWeb project, through our [BunkerWeb Panel](https://panel.bunkerweb.io/?utm_campaign=self&utm_source=doc) online platform. ## Which professional services do you offer ? diff --git a/docs/settings.md b/docs/settings.md index 236421be1..6754f2af9 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -2,7 +2,7 @@ !!! info "Settings generator tool" - To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io?utm_campaign=self&utm_source=doc). + To help you tune BunkerWeb, we have made an easy-to-use settings generator tool available at [config.bunkerweb.io](https://config.bunkerweb.io/?utm_campaign=self&utm_source=doc). This section contains the full list of settings supported by BunkerWeb. If you are not yet familiar with BunkerWeb, you should first read the [concepts](concepts.md) section of the documentation. Please follow the instructions for your own [integration](integrations.md) on how to apply the settings. diff --git a/src/ui/static/images/BUNKERWEB-print-hd-blanc.png b/src/ui/static/images/BUNKERWEB-print-hd-blanc.png index 44f08f1f86ee8fe38ab0ddf42b426c6e22cef95c..7fca33ef3d28e141c9979b1664a5a880f2ce4fb7 100644 GIT binary patch literal 49316 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 VPR#c`ZNV>aR1`Gi3vZhE{~rzoN@xH8 literal 30346 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 K2S%ml`NdBqU9NZckF~d97imQKwNQmXmTH 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 diff --git a/src/ui/static/images/BUNKERWEB-print-hd.png b/src/ui/static/images/BUNKERWEB-print-hd.png index 9fc5c37e254eb42677b90ef0436f5aa42c69f901..18d95f3d714f2a04829b35335576781368fa0749 100644 GIT binary patch literal 54105 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∨pA{t)@x1-Fvchji`8x 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 aKPM9Dk?Gv>^206gPgGb+s7OHD^Zx?9Z?6>q literal 39964 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 diff --git a/src/ui/static/images/favicon-white.ico b/src/ui/static/images/favicon-white.ico old mode 100755 new mode 100644 diff --git a/src/ui/static/images/favicon.ico b/src/ui/static/images/favicon.ico old mode 100755 new mode 100644 diff --git a/src/ui/static/images/logo-menu-2.png b/src/ui/static/images/logo-menu-2.png index 44f08f1f86ee8fe38ab0ddf42b426c6e22cef95c..7fca33ef3d28e141c9979b1664a5a880f2ce4fb7 100644 GIT binary patch literal 49316 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 VPR#c`ZNV>aR1`Gi3vZhE{~rzoN@xH8 literal 30346 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 K2S%ml`NdBqU9NZckF~d97imQKwNQmXmTH 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 diff --git a/src/ui/static/images/logo-menu.png b/src/ui/static/images/logo-menu.png index 9fc5c37e254eb42677b90ef0436f5aa42c69f901..18d95f3d714f2a04829b35335576781368fa0749 100644 GIT binary patch literal 54105 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∨pA{t)@x1-Fvchji`8x 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 aKPM9Dk?Gv>^206gPgGb+s7OHD^Zx?9Z?6>q literal 39964 zcmX_IbyQSuw7oM7jdV$OhbTyQN~a)Q($XLx-5{OPt(0^~4}z3*H$zE^fOPpTzqj67 z{J~ndWWIauiM{vPA5rS6@=q|xFaQ8}@=8HQ698b&000p~LjixXO|fGJenT-=l9vJg zJ$~hPd`SiX8sL?Tq_$V~;flAf;kF0=@tSwlYi_+$l(g7dz7UmXmaGgTlMSlU$yPzc zADB2^p}o?-oMI|2q1B_G>ipYeN)8>7ntTaM;%%pe&nH+FjZBVzel^9w@T3t5mvVA9tOx2vX z{)+x~aW#aK%r;BmQBewFxi*l#nR8aBK>`p4f)hYo<|mK2)GK3}QfOQy=aN}O@hIPLo-#~VPJ769w6tJ!2N5R(ww+aY^!?4O&I|LFpk z9VE}na+oqAyyIa~6_U-tL0s)tM*uO5JtzQH+(RpMuo*z(q76@m`G^d4iL`n51f=sD zf*)93XA6~QEzxG+R9u~R*eB1*th1pE=Jg7nT2~?n8$mIC(d$(BX)o{{Frxf@7GjkK z!RjUkP!fm(sbJPYrKr!4B#;94fJ}fF=@Sa#Y(HTW$b}qRK)Pl;G^Q>SRF|Fy+!RDH z3Rgk5xd6XT*R1jNEZ!Dw^jTd<$IXh~*%+rLv&{jm_Y+G2M4mLs zjdU5gwL}J}34>Pz;`*#5DXvNc0$^k?n&>hdcPpr~kDmBgcPBH2EMw7HX^u1WDr07t z!L2Zd2?wwMmHceR?|ZnmbOM-Lypg;?Hr)zRCFm0N-|`kP(Huw+7mjlhuq~IsgOHz&OpqgroTXz)yvP>@q!2f?4k5$$qos^Q^ng7ZF*iHjMdTPWti&6{Tp}O_~qJ2}Ih%PUY}-q@B3{?!#|GTj^)c z9%Itvx#+?P_z7Ng9^ygoBPbQ-WsWDRhQqtuI*v{&oE(2{x961JHL>o%1VkLR3v=Qt z*GN1$zSyf(bp;)?fknS z@Axmi2FayNbmAlcmV_-F7g@u=^=F}deTj=CmQi>%@Ki9}{&hxM8~?j2g?Y)CsA}W3 zU~~USG#w;jGh7MkKrytq;9aD790h8Ye#nOyxtrKjvEch>B9?B4Cn#!SE9dho3pF9S zimc~Q6$DF(c2vh*2fqq6g@Z$FO})Yt)S1}U02mHVB$l?Norew$*w-DGs$XDUZPx!f zd)SEjaP$VlriF{<@`j{GIbF0{4cS-h0 z;>h9e1J72>^_f(m%M88DZ7-efN{ZBMHPej#PP9BY--{!i-nddVOPyV{^eGKBx@oZf zNGc0JI{93)8JXX>lJ#TVUN0Zn`kjKdBV6NauS8W5qE+wtdG#!RK;3=fl4q-)fWp%Do^8we;d^ASw`K7< z1&bZ6hkgKlq|^_IATarrc)eeUK~{0#Z=k4!M5+X3ml4)bG|?dG0o3ntwC1D4nNHaO zGb7aj7X`w(Y<4B?iw#aA4^a+-tFVxZ#B??9^$|h~rxK_=4A4LgoU*1#Q#iNSx-B9J zHr6}SEY^khzc)&kV4a!96pVJ;87C;EV#IYK*A7kwy#N8ka=}&ENFYOrNlCrZVvoWBFZ{ydCtw^jloR z6pll)EBNDw0XM)fGSzr4+UBC<`64hCnTyBb%;Kc1eayzuiuW98-9~W$)wc^$D-#W1 zhwO%}5By_|=r8w$?J^FVvG1N&if&B_i;PtKS;>5LNpj=OR-(=N*x7YX7P-{avSy#1 zF%x#KC6VN{%J{5@8}ntzZu~r%$#H9YS^ZCj6&u&2;P4K0S0BFPAb9e4^Il32lQ^{Ae!vL2P)`6YX+I^Z?7+gzb<{g zS-#j>e1ozOKz|&q*-I<|3g#&n-k^T?&!gRn&ptFYVlmmCdv9>rpX1OJqekEmC{zv%!`7WDhQqA*&#m7_ zP$03+*%xw($G7l9KeXqx2%P>$~fM7O(Q?fjEg8 z65?AL0lEbG*Ur7;M~&b8`ZgkU$LN>1J~dJAHE>=se@-cP$b@Ss>J+E4PkFTMVEe}< z;7sohHsPKQmgrX9Ph7}5{Y$No9W!aXh$Z$)tvI&}reQi0!$BCCMLcI5EJig~oi~#q zb7`t5kuhy}!#STEBAoO4MkjKsCL8o|?34?zYhGR4LVs!jF zgoTdnD(5AJ;;VmN*|XTTx;4K zWk}@sSO(||Zon{-;J=10A)BzS%JHT+iILa^Zv4{ottUWWFMAwCMi%Ti@Z-76VV3F$ zy1Eu!@7fRD_jkq1OC2QT2mCu&{Y{}_t_&NyTv=r=oS}GV=UKJCPtSO1KInYn(FXLf z{w<~Cz1`AG7gyv{28PM+1tR!cBqo$-VYM>l zE8iHMl^X9 zRrbKyMBTdD#1Zayd-&!KSr_*J4&aKGfCOBI2q@4;^!AJ4{R^}m5dAl-`$vdyW2abK zWeSY=Tl|2fC$av2-|UcvgoTRAhrTm^ONERHWItK=RbK>#Q73pkKaWi{U2S7NnMq~@ zHUKfH4f{{2s8A>Hjk#8>YCm#pjXkDXd zapPIPy!8fBU75vE^TiHn=zf}s7uaCV$Vh#K7aZR_i#I`M;b@R;n6afP*R}#8k?^Un zfA9Xx1HLCRsegx4I||gd?o7k2f%tJ zC%H;N-Y|o3F2eLA%*bhXVvfvRv4aFr=(C=n0WquR0womh*n6{JzjjV$%3?qIkpH_l z>7Qzuq@JdXZb6r@0G}YitLIc0@FeWOEe(17@v=&?Yy#$iv29KPif*N*7psL#sPf^Ii$;!_m5@N-xO#t(cR(_ z-q8?CjE9q;j5XdsCFH&^4$QN*$~1Bp1O<1k^6`I|h_<}R{F-s5J`Yjp+prhb=V1t- z@TAaSq~mt0#SRh!>WwOOrdaZ#tBCOz?(RN!+MrMz~cgIirfzS>7vwoM_T;HqsZUCx^-4iLO|-C?FX z(l6ze#Etx3gD*fwJf}19;REZ|zUdMBR@6w32dCif=$xG^>=QN(Hl4qnGa&yE4w!O; zqR8Wn4fYX~nc$rsJBQo{zdkC}FJvZAgy^~YwX&w|UR4xD>>LuBzJN0XUes)|32yub z|HpkrP0uI7k89|{p)5saAG5;7cPuH9B}R8lUrxT$rm!v0^ww)O*x41-1@OWrrHIr% z`;!Ojk@i>7#ET@iyi=o9YpAI=L@go=l!I17ysYmNM3!<7+g~0Arm&HSW~lRV=kDt5 zoxcr09#}Ii?yc{8Mr6`>)MzHpLrb3?PAQdw{$ucnwTM%Dh^SlV#Bx8xECNr0KtOW0 z3L1esHlwe@T1?EQPiZWIC)wTe(aew1v{KPAF2N*ls_hq!d3ub};rXMz;B1wg{p@Fe@(gYRuo^FOvjy}knUY=G{_ zpA?)!qCDc^HJCF$*FH?05g^sIF86B zPQB>!u}5}2;gg=E$CTic@CMpOTW7E{SoMD+_gg--oqav63K`S&<_ zI)CfE{n2!%wf2X>8YB(m!Yml}E75D`>Os=K$EWO$o$gC>eN=b0OLT&D*Gc28NE;}eERTHz@b$3f>A;i|Z8G|R}DMxD;g2jA>R-$Yz$e_wt@^bVZme5|?3 zj0!fVzj)~kkq|v*{fY5tsy1c{fJ-tQGVz6ZiIGMx&Hh*nl}6w1Mn<)36|$UGWD8|h zN8{9{n`@(V)AqPweMtZKCQweFg1C;AFEPXF6E%wZnQ#BwIbZiG@#SNhKz_A#TTVb9 z%~0fYm5p1uW(+-!D%ZjyYT6$VhAgPKlEjEG*Njd0w9Uhfu#?rw6+t{VlMTYF9}IM& zdc0UrV`5J%Nrkg;O6lH~GC1BI!SBB;srKfBqkr73X9HLdB~Z=*dd#^%5Jiod8vXZU6ghs$(KGi zRva}+X|MHu|BC?0Og^cDuLNJ2w#9ZCShaXccY}Ge6q+qrX)_~S)?iTkE0UVc*tcAh23iBCHY=5?T>0j zWdecn&m0CT6Guq8;gs?+89vG;Sf&Q^K{4`?#yKGZK~G zpmJ;zxzA+DHcZqHB9L)MQC-00uttu<^^NZ=fvv~4Q7s&QG}q-xAoi2jcxy#wJzORq z6f$995K)DMw^!~Cr~r$S4blRxvvNToOUfj#_vc7lluo3Sa%BEyWZGol+-80M+lV`_ ziDa+g$+eq0G6;jpSp^3oWPZ;7EfS~3Q$eUVgxN{;u?qzuN#^}>Qgr;$(AV7t3GM6< z2+B6@MR68Dk_XfR8lW}4ZR(B8LIJw)l5HVlM*Pg+W^8fFpf_Bz8g>{CS_i9ACTg%P z6QNip3aY>#Qd}s|#&jZkAqFeTK1`P<64!)5H@v1#-Bw=W6bbCoG7 z5(p64$UYaPKge_7F((_n6UKZwr7*SY6n}ku`^Cbi>q0ROxBE{RrF4on{>s-@^t1gi zt7o-MyDQo@@A4ual+wv)sUsPM{&jqqx+z2nC02q7s?2X&Q;xz5uz9c4x ziDa<1tzJ5~Ht2mU@<_?7L<&1PBkbBw^SpWZQH2zpkAjwlUV{a|pcrNXnj-{C#dW|% zOrwp4Lp;QXWtVnd=g@&ehe8D*1D~`P8oQ{|LrV+;NDR8AAUn`Ws2RJ!^9c%2zTylS zp6&KJ?l)2~p1wyEI9BQ=0dde>q;Z^XyxMtNSx<~_1mAP|=5vrdz2rl!^9kQx6Y-A? zLrB1+DNg*`gH20KzdQ4WlHmBh5cMg!WZuJzbky!H@qgu60T+kT??s5raTleCBn%xj zioulD7}5$N2zY*}=x%y(*QbxYoJ&mW8Mi?@OZ% zx?FQJLZOa1ZC3=g?y2qxEUUV<1uZxpd|RRTv-ajtM2-l|Y%DY10&b z6Cp^5?*v)I354(d9?Aa^Q6KIuf>&3VK=j__VVDMaoAoEeH}1}SPcThs-B6m5Z3rt@ zhJAAUdg%<(`86yTsyHU+;Bhl#Y_l^)4&dhtq==A(3Yt%^<1BPo4xWy!sOC&#Q0N%L zE(z}p*Pnm+fb*Jj6q$zvQ2~*Vk-*(R$`(VamDxuNq>}J~?H0^a>7PwQMBjC&jDZrA z{+MVq2#8SA4D%ez56C0CKYe0c42zT`MPdx+Twr`=Lz+b)c43mBQMLMxew-=cy%gYe z9?7UV7Bw(tb4@LFoI{z#FGA^=pv5#Tc8H!a@EYMIQLSo#X;pHCLGi0tjoBjw&qc${ z;vyNC4R!T>SAfCfXpQ)$U%~b&!?OV2n0lL_=J=%cU4}uku%Y@`hxQwEm2Pwj+C{@Y z%^rP-A@n$D3YFs)@EjSz?#HJT2KG=UWF`3nxs=>zat_z3W`qf*V51D2ZNG}#1gCNT zc6;JQ1;tE!@}#xc9pftgG*S1w{Wx!5NL)|Zl?PTK3e?V&84>!f1ZK4s-$o2r_Wjw7 z#>JP`x!`kAEi??Wn8#cRXZxfuflk3b`Nfaw?PWhGI&^tB>Hjlr!Qtqw@ox+f=pdw1*LInK6 zV;MEu0Czm!$?-dAc-OAfT$AFrSq>5vM9eFu4o2fc!{iq{>k3JI!8~{kA(7WTpZHEy zUf#T8+Boeq+{Vjhhex1YtH+$|WbAsu6D~d8b^6)Q7i>$9i8D<9-Jyv&#@$@^Ih(}^ zqm=DUlx21%v%SU4y!#T}JJxKHdL#R&anReH{kUEr-|aqY?aRl&T-An5Nh5_xKZt;_ZkxajdaR) z!LIS{P}ASH)ISUolm4dA-hQj@g-H|`HVW0?;sd_n24jZ#a+|{UUZ9u{PRECy(ktEO zeRaeB_o1LIUMI7>4L6!u>u+!23O_!iGUbpxMC6;j zs;9ij#L0=AZEJHj3BBZ_LMHENW5tlaUt1ncNp-b&j%s+Gy4kN`8pzMh& zx5}a8Z6q{sxCYfT0DCUjo-NHNSNrfflAdU8U}VqFb~j6$9r*-SUbS$y8YWcQPY4&3 zFIS#m+7;-7QGVJ>F?Uj$WQ*eRwEL$F48+uX@r+vHwAZ3|zSW?xL{d6Qk{_*%XfVpn zec54a^OQ49<68{E73qzf>C-6Uq4{OWk>OCen$UzX?8U==5YhZw>L^_Qsqm#IPg3bH zjE2~g6z}D25}*BkQD!%BetISxUDF+EtxcWJ%tL#v_kr%b=Mj>=i3`CSj_TC?wNnR; z7!TN|DRC?)Y_Bdp&=r8Z^k`Xi(dLg=rzMqglOz&|wVB?}8hVM;`xe@Q1p}kt59xa1 zV?xf$+|?}nH!7$G$(?Z$J$qYsZTY2$0~cY4XMrv1w_tdfgl81vaG48l!oG5~4pKLM zf=SG~kyV1giJk*JA~^f+}oVJMJiPM^Z#FEN?J%?pF5dKaCh`l%H2X%pO*+GjkiJ z&)OA;!h=>a&eo-JSrWo-R`hj7X}6GYZ-Y=?=0q|J{|l?h;HWdHKC@KaMbDm3$uRRjlpT0w&&yz z748wH3_C`$VdHz0j4BA&iDEtG%;^@VlH1vuIw-cvm>A9aH}WbeDcR2I*!fBk8wSx6 zW1dsg|KgzeHcN7?$B}r09o6>XrIQyH-q@9zU{DdK+EAh#{v}9jKelq&-PyFDP>?&v zzjlVb;GIxGp!u9vko1mVQP5BBc%DVDsZ&Owl9()=3_VH=#e}Hiw0#6FHz8p7X!=r$ zq5aJd=R#saMfPXQ8^7&&$L!+^VBIO4=`CFR@HClZnV<2pi0ycemub4G@acByCnAp|GCtU^&|%8(BR7y z)0O@8pQ4P0Mj&FZ4E_8`1HBb96&m<0AR|EQWH zqBN&aphzRtGAM<*3SooCL-3Trht* z)Bd=rnOSHytq5UC$1Rkh_c;1Q6K_ap#nEZb5ZYhYQ`>ed#f^sOMO?;2djRaTQ!p&} z3;fU2*qxay9ZnbzpmOEf+7KWU_ABUdxopIxI3K+vR$rOjqz)2Yg{p^7AhIdkiX929 z^lY(8UEsIBSg%gKz?~*$(|LVf%FPnwwxw_Y1#&l?wLLQE?NLvW|IZ7M5c|d|0F+It z&|V~HF%y7Fkk;BjUku=c{(?qliREevRNHzOMI(1#ZxBQ}K>Mo+R1nG%;VKhu&Me?7 zdDScX#G!L)I|-$*O&!@~UP`t@0IlJ}4~{SB*(kgw=sDd<>9~2+9c4P-Eq1xI%PT+S z7&liZFh@I$dQirctHQWwPR43w`uWqDo!*eiVST|D04G!nLBjh`yiiSUscRYEnbx^9 zhih}D={Z2sJ%V&B*L(MwJBAGnkN-(X%-2zP6dU9pN7~`H$r+z%;_|vjn*IFHmtRqH z>C5TQpobkLKU^t;QtdaCt0yJylJyO}H6tF+$`=QPUC)|(3Ccz%h}-LUfEwPGBR)V( zdlZSCD1VgfR^o%}yH`iqM1lpK#KSgiBBGp!G<`38n$?prB`aSev_*$V(yH{|=YA}a z;SC~CHYgqH-2*lsClV7p%c$zj+s@VV0m|+9X-W2cZ9yV`f9^sefpXj_v}Mn;<80dmJM>idUIB#(|s&ptPirkfC63Zh$gx=*O)8 zbK^P7c@3&hGRuwXl4JGI$f=7m!_f~oXKTXTX+B;&ffJH>s@9&YM3u*XKiGRdOg>vgFclGQBrFBrYTF$6}|4;{7TLaYAt1HNgx1js$qEMR<-te z?+VHZ<=_GOo+I)*#I1o%>MHP=mm7NxOisa(ZLqk=j!{s|voRg#z0(rJmazvV?4jt- zpZv6ZMsqY_Z^GD)+10T?$DjX*^W$j8Ov$Yh2@Ssh7Z%a=fN+#%~GiKd$(%r=_ebdVf!|Jvfl#} ze*ZA?uKQgn2a9GvD){;{9OIVJKy4TmaVS@-X?>;O@N+ywsY;E%MSonPc}pi%;);jR zE5iG3+daXBCdv^rwYCtHC5eBG!Jn>Ft(>cC=txPeQkkrrl$VLc2Pa`KR(P4`FgUwf zkGWht=#(rss7H-@3@aVi=Z-Yrx5vmo642KTEy1I|WB=?CZUd@m4L!iIj_;z|{d`xUOS&AWUb{S-NeI{J&SdRd*G;J{&X zx`~V1L_OOR+9e~IV(qetPX{?)OG09p@mFARGsNXIbU#2|20&I6+b7Y|p12;@C;NHb zmdEKLoz7~87t2}3KLy8{*T%TU9@~-^QN0B2CfG~VVrznz+2@#x^qX1;s zo!L?hNtB8mGj=t8CLIueACMmZ`ZYw*u3#wB7JSl3Z2eN1_jyAh3AfE4R5#Js5-P9m2X*aElyiKRJ0t7jBIDCrBLbE*7>I`RExWzyj-0{GEb*~T8rdJk#QbCJt z0lo@CyQb?MIKTrywK4suJW<)__u#0#-=Yax4R7c?TeJsnuYhiKRGleDd06><`Sf$# zYEL4SMxKVtaA!R*zHhaLy*r2=*(^QR=Gjvd4)^!vLKa)B{8^T4IzG?`NT7VQQ3N7a z!HT)C$Y106ihk#BIc6uhat2lV^P~+&DWa7f9%@lE|wKm<)eD`YZb8HvKrJ3zK-HoiqTRPboIo!ms zaeFfz|2a@VYkrS(@cBk&b1v#Nq7=h?6&p2`Hup%1uRtg(){=ZC`Et!03YP#EO!F~P zFK)g}Jr&R?z=mhhp6&pSw8xG>W_t#d$Fb?nC8})wsATkloJh{gqO~PE!_SpHAN$cf zB5T>`6TcgjqOF7}hA|SEtXx->i48jZ+rQZN zfDVdmWP=kWi~skIQMd+1O`Lvdv7|KumiYaBfqtvU?g(xN@N;t>ZYtdpK@tykADx#n z8d=F4?!=LrTJ(ggbGe2ePPB7*edHsT6!8)@88xhRiQ8n-oBgPPt}D~>bnfTehon%O zNx?ub581Kq2@Hx70FR$jJ2v+R)H!BYJ@~(xbJIF$4gttpus%6e)8g9db;YNCN7<&vb?r+}WLFz#(KQuw$N3`x?Qr zZ4+7hXAgIi21?javL9{f6E5*E?jfSnlm0Qf zpx7!9ND7`#N06o3y&bAdYUO{`5UmVVOf#IH&sQCRyvrl^NTP&JGEm%J&9l?uc|0Y!&ICVy zh}N)^F2mFLI}^xF30H{OCWy;TUq`DVNZG;t!jJ~CYDkkhGF?rbXp84Q5&2doeyA2D zsqy(p(!cIEflQoVN~wGA3GXt9yfFvY=xg-hIC#ngR~&MlX7>ev8j=8+Yx@N4)w<2w z`{_Kpg((VY(OVnnL;2!v4!8w!tq;B`)W&mT|)&#b6AOiI*4Z-5cNKKQP ziZLje#?>sX1o&G4~S-{!llhLAhK;O3s z!Td2Bb4A)vw*R|f$mJX$Mtqhp1nkOPUXX5t0GUI08Ja&%zs42}z~Ug6yGou3yG`oo z;}s@tfTk}pcDH}WvNqqC1}0G~=|t^ycPJ&;CjRY%-oaTJoY?9kFCy6^PI*0|{hw_w z@<`Es?+!QGKt_uXn>+9Cf5)#rR7mBvgAU5?0|J4sbW*rGn~G*Ew;k|?30yma1W|*% zi9a#JZ6^EU82#Aj(3#=?Jt*w6_erL^zXZ(S90CFg;OqyfR zPm{#26~km@%zso#4mggqqMCxaS^C&VZ3+q%@`|2#rIZ`Su{k?n_f6S{MtMnzktr1m z8CYHV??3v{{0HeLZ3&iy+$jguq^&Er7;~wA9h-Z3e3o4kV{%`PZg#ybA|HAgan^$R zk_zGsqvzBM+5j6X-pI&b-|Ehh5Yc}9rl&kRxDEuS5P5tt%x9V_TDlwKf3Nvq)Dn2i ze+l1|rbF4x_hZ(L0Dta3NUFEzTI1k40T)IrtS4LM2dHYM|Mz z-BlU4gI9+0kc7!XqR}8vE}{7=H6t_mbt$2D?}1yMQ#^r1nq1`(3)NBLkTBR7-lJ6j zc&<4j%@vscM8d6;5A7~qLTn=EO@R2aZ}J|OHe061183kG*`I1vMrV$z1{<9Ga@=Ag z^+U4Qo`+n+kR7^gJI4PPd9nwi&-N>H5;hDDmSMCU(q0--Y7AaQGsXBQv z9Ma?y33LxcPzQ+QU<${$l7CGTM5A&3aQo4aK?yVKo|jGBJqVmIxN zLXIiadSLqer6zOmFIhrAsicbZ&Kp{iZWf)ENQ&BEaF} zQEM7?kO{b8OgXo76h}dj%JqFn8BP%N=JFk>tk^9aFoAl#g6?RG{sB;$AT`@qie+?! zMnOox^TEM;zKYS0TNK$V?9PONR?eq*#5r)=wWZ>vNOnd?AHJ`V7iwimFLFD;(Ggfn z%$6D-G)L`;g)y)o^e#_xLau%LuENoOaJgBFneef?X=>`*HCT0Oel`7^nu<0G1=}h^ zL!vT*CZ{Qo0$n&}z_lj!%EtTstR%0Z4%fkFXoMUpq7to`*#O zl;TQD3Dz#f+<#Gb?uJUi(VJ7X*x1N2RRwkpN?9 zI*28K*U$bNj!Fs41xb;yGM zTsm}~FVyr1fJ0El!I*2u?}g{KN@9n`>-(+c8hUlRB(nX8leF5kc9x*Ok6tC%uF*Rk zTAPnm&q|$Yz*jF7br=-}hT^9;Go^N^WV4VC--v$eE5zeeE1{LJ3@6D0F>dl-HlK5G zTay)+H}gT$nU6+bU=&>#yM#&U6LZiD#idehSsIlI^z3&e%1byjJ2csLL<_JuJ&?f- zVt)Xa6fq!PY8=%-j(Y?}WMgA?zwdWyLIhTJ9a*24^=q)g^w{XuVi~p8-l=&SlehWg zybeo|T#<03HEhUa*I^26Cn{R2_t?BU*8==2+G$ydlH3>R5*KkKP%~nkK{Fs^SYtKW+OFDR}AV zUQbXYYRP#BnsIi656d8JYFl~9OtJsFV zU+p)Nc!H~$10~Q$JHL8o+pL%^I&7YuR~)$5}ed; z5T60bvLQ>O5jan-4T^k=EZ%Jx7=`3NAB5oFysTX;`3Er-;?knfSVAS_{J8`BIn1L7 z0SZVBPB4A`A@Vmh8u>~@WWkDk*lo-YJo}n9X1Ckgaj^=tli2JEeu&Nwo?nfCaVDI0 zn|1e9csXD$%KTLgx}qo&d1cH%ATa!jTLe6dQZcx*tMw}+>MIYADl#gKA(B=JXNy4d zZDy{oWj_??EBNa)R81stFtEKeaDXL=29cs6R0n8rm5Og5M@YkeVV9USIB*E`1C6VM z>E)ca=UVXn6t>8NS8Jv`)^4nUj*CJIA>5Dq6=FKdTS#6!G$AFEY_gS&das6d2 z7Z0F;pt%a-wEcQ?o}fSu!%Wxo-r{t3Ke+S#%CaNx}i)BI4Wk60v z6j_bZml0I|PIhH++P|9z2o*+~p!26v%)Alk=|zssm9UuhD^pa35AB zR3ZT(B>5SE1EwGgGZDW6P3+%JIV-oZH6a7i?9S!#1c9Eozb#(1B>sIHEEPyUm^+{5 zKpZvw7x#!#Avbm9c5}1P*dNy$qFdXLr#-|EwmyZ~jyhlsexGV+x11 zmx7@6)0;zR1K1DkvWwpJn#mFf3=tj7Eq&<0rsD>oJYV#wKG_2UD9b-PR3DWAkAcD1 z+1n>tkdG*HMJ<{pq+B{FIm`bTrl$s0b)roZ$gx2taZMzS)F1L#X)h0)$z4ja5nYet zHLj*;pkKWKDxXu8+q+{CHCoYwZ8Hu)6VAs@OvMnf`%9fhWeObx?(EbX z`ypfqy?GtgK|3Q(tP13PK7;pL2`x8Kky?C-vW`qV4P zrYDS+_vW_$8zlhu?4)PK^mzkJ&b@`{J}N2lV7KOU=px20&HUwn5=YA4C{o_{JB#mj zpcxD=8uC}O{(L%HV%G}`Kn&lLM&h0>zwqTqCZYZrI7vFz6!Kul)J4<)jneBcY2@7p zSXTzc-jtyv@DVE-X`queCBpP7L)9GO{T?;m1Y{ zQt-mg z++GRdAQ%ZdQBu~3OnnAibg_JXrE|@_fajKfV156^|D=(Ub4;}6L}5NC`xUHX=920# z{Ot*Pc0aY+4!9Pj31mX0W!0(2+STB;)4_vXU0ldJE)YN_2{R zU8bcNpJh6{{!t?_4ayz~8#~oy`;47g<$ZKICQ$ij8n@cra@8$V6!#K$@A!E=ZM=(kx35G#d@l{^x~k)U|6Wgz&wBe&Y%9M)$@2# z23{f!-13#bNhy5z+HaJ!OrME95dYu{EPcn`RF)ej4|@?5>6!u0*s_p>O~Pd$iP3ppzyhD_-Ca z+qw%|M*4fb1Rh8080~_4sg`ofZA8zfMTgT_1 zFGK>6(3oE|7WUx&Nh)-P8@#+^ct}UL>xLJjNi+x|pFn+`3Jhj1rqiB}5W_kv717Tx z0iBsoR$3%J&{h#w&xV^mpW_j;AnyJ%}ZQIPYoD}4>HXQI3i3_}|ycEuWfnpvlVNRfWb^Vpp( z68fd&iYWzksI|N4UU3sr1uZch|9dC>0G$Pt*3VN-p#QARbel8KF+&-#*4mjQcI0E! zr2z_J(Kg7Vyw#n*0+@ma5?DK9qaVl4r$06**fAjfHXp_i4jinR1*hXs{5-iQS}nU% zCTc#>765Z9p;}xwt^lT0Nu)k1hI_ksG%6|e%miIU@J6(7Z zyCo3?_}5=FIokZZdn9er_yc8JQHFMNC{}iaaCih!-5$lRa;qp8KBNe6q!Yyn;0#(K zGeF+pMKKZKql*WHw6?nSU>7jlIq1&QrUYNL!~!Vb)h}}tCI!SUMYaaR_3F{^4R_en z-g=ys6T%;zMDW^Yn`jdg-QD5Usg~RBi_m$Kq{fOs8gNP#VMkC(SYCtv541{$1Wt46R(zk{8&{OvolDm z09-^`?g)7onI{D>p4@UD0BJ!9qy}#betYl!u|;#@WqEtyf)t-3>eC(CK5h^-G^v-7 z{c`?kkP}oCEyex^O*s73I0gk#V1X_|FQ1G+Kxa$%TQ zKn#tE9f*x zuVHaK;698k5WNF5G_W}oB$bny`Z5K4+e0mF^;^S~&lf)q{cZ={35;x~#=HA$`}|1& z5@Hbi0P-OcpXbfux45-GR@#w-WLx2j1Dm>CB2BlQw-~y;nEHV3DXZe1ks5O zKR1SO98ED8OaBy>2K5EDN_ee~QBeJ+{az8wGZeJCqd9XNhZce`m}~l&xDHx%Fys)q zH5+U2VviQjm*G%g$P)M5)qXJE9NgrbX8Aoj>CI4isPwe@p$q zAeE?~Q{ByIj-c#?fsee+=zoPyAwib|yGV(z<;DfpPDcFYCGJYAnTa&G;k;Y|H0~)P&0GYv58l z>UZ|4h+&$ycUO=sRh)7FWDxZ3V6S98JBu{uA()=WzDJmtTpzV>w4Yet{KE0 z;&zy+LqF|HF*~3UntswTtU6-7dO6+7dO=8vDn~NszVu|&7{ZZ*yT%h|l-eg}E(I;? zgSUS~G~z63JB`_$gF$bIGD3pg8A`Y&B@2?mMsQuK-JonQv-u~KQpO*ws%?+D1NOa5 zGn7Y!zzIKlX2AmKDmgzMtqEZfm8-*~!75%6c7gWKnj&K-E@Zv}ooju?#Z$y^db0=( zy7>3+I)9UI3(e3I0NNJg!2Y@lu12v5HUP);Gi$`HV$=3vo<1|McvleKC?e%&TQ%<7Zf+@$o z6HXcIR`~$Kj=8?Ck&eWGV2l5qX~S0e1b=GFSRS-DYXSRL|LDRtdtdtu{DT4i`*#5% zc!(a=9pG4b-sPJN;v^wl!5&PzC`(M8o&+%Y%}>xN0&2khX1Qn7&gU>i5SzD1Z{&ck z)Ce%7E*hjapP(2Owb4a(JNcawt3;kK4as9$pfqc_XJiUUPk)|Yiu=*JC$0dO&=Zp} z>AfX}CWeOA4JF1}LXCv>wfwZ9DLd-BXt#6P*Igyr^kB!0kIWV{o)shX37(I~RC|5{NvW zZB$GR2f?u-8qx@YMLyKG2i&V%94QMuce`C|#vX>ntSV@1;(r_`5CAG1QLqCsA%+5{ z58t)+Sl8#Pk#V6=J$zh9I62~pHAql>fqqGf5Ckm9AMXr(i_}&P_jACO&oC9eazMuz zYOcS#^qY!R*3~uW^m|a5gaCK_}P2{AgqDFETuN3eG>f<@S}#pk-q2~c4PC-9sd==aXo^r+*>T1Yz; zKx>{I0(5;y;~0|cfwdIlHe?Dk0-WeD^ZA|wh@n;$Vo~?YD)#Y^D`hpl-h3W3*+K9b zUkbe7lOiR`GN~uPh4+mndy_0DDA@!QxLOHxjC(x%xD*#Xu;a>KZP<{oMccd$c8#u? zSX4DE{p+M{+&7P=jmRehJqLUHAl|1=-;{VsLFJWy^o)rD-nSm+C4T`|0RL~=pdSat6zOx>e-u%V9P_i`DCo$Vcxp7ngXAro zG&rE`IWsXwS*mT^nX1n2Z2YjA^%;pim8l#pc&raU$BBKL7Bp8`UpK4)&YrCCT0#Ez zTlepC0jB?9?JtAkdY<)^#CFr`hlxx9pXcc949fYOR9 zbrpaEW#X=SJ78T?R6G=4Yn(c1?o)GRd2{VxA;8>rjsfi4&`%%DFl0N_#B#Oj20~H5 zzYj|i%Cm;a#Q~7zIQCtLi5hSitr4Z$>mdH|c?0A;%7V-w_Kv0fw|Ib|)biuI!=eUCKp;p+CYTYA@hsY_No+cA zdRM)B9&HatH#VyG@4`A)Rx^fF6Ghq&1u?&lyQj+O%47M4qC?br1B~(SV)x4{EOe%G zmbujowLFbU%_ZNWeKeE+V+)+pr0fi zzIWqk&UN6*^7hqez{=qz+lHK1xl3i9Uc1@ai7w;^CL19~!%n+XPG(*D^zmj|*m#jky#lpqxj2%RcGB?3SLrMoM8TrNsQh%&_}iOF8p{e??a}b}$lD{o>h9xaeU9VddL)@rTQl zZ-VNGcM2lKUNM1d@0Vi0$_U+=psz&b)#}Ljp_rNK(mHyEAv%thJt~c&I%c9F*>imS zvxfwg6yb7mnQZZTMgH3_BsYPg_D#K#37?lG#pDmOd?oZq1~CUmM-@v&+aN;Q z?>BQNC+!Z?g3%ektgyk4_BX4tsHo8tIt6Uq9hi08DtPpXgN=5 zwc!0FC7@=ON_l|K&s+KQZ)V>=fF`@0}0$?-? zRN_c*mm=-)4vgmMu> z+0b`|B#1N^2qoDjIg@?`YuwvO_oO$QO5AzmIw(4Kdrm38Ts=d7v z#r(pY=FH?A-(>tC3cCyVhbg64y9zYBw?5d3t56m3fd%>KKG*;!0+SjduV|rt5;KF! z3j5}fYo5;gtJ3hyMq0$xq&bj0lqUGEvDv@U=HrT)Yp#5>B%(%ZC3<2gBQSZ6Tcs60 zD}stht8x%#hhec&Ie7c?RSB=8m$L1eN}ApN?9KLmTy0=|_UUz^xMv6ZryCkZ>oFh+ zY7VwF`vzIc%3Yjn+HB1tZfxJXJeK0a1M!hq0keU?s4eFpY@{|$ImeA0{Gg5i!R_SE@n^92LZrU(NDW8dKW_KrMi%Ri zoL!#0g_~igwTHe&)J6_}noj-2G3FR4&xo79m;sBMJYANob8J}d^vs&+BmdV@QRAl| z*Dl*}=w_5!Vg*bzt*>WqX@scD&BzH7=Y7My(8`pPPzVY=o;s zGoX`~_HyrEM-at&ij%fe!jXJ>AiCnk;>M>2V?M&FuMwKk;5&z@`=9sidDRuzFA#$q z_42d}q88I#(u>Bw#KUwPu^;MMga~}@ z*spJC66+4at_a!5T1j=f1Ox4hEKt>>Nc1_!$LP6t>Xkg2zSg}Mesv3xEuUfZZO2$) z3D=N0tI)h39ct)O1hwIq@rM5B42g)R*%RFQ8H}!#k}F0iGj|A$`Q|w$L+505kGh;1 z`JF^CwQPn|CS;wP8gbxlAiQpi-mnB8Qkk~DVSPjf9Mg7Y3A^H zQlDSe(wxGQL>$Q>9+{79+>Ia}osW#QUzQIEkJ{=3H)>+E>S@#g=jZESaGH{xK**VP z0l(fq%3XhTN@YSPT|S_sfF?QD9hA!gdtH-QQog^J7r73px!|&b_+z^(A)Jh6V5Kb$ z9aJ)9r&^>?TpLt%_9dSs)l-ud6;pj3Jgy!rYHWzz*o81Z$J?c%As-~@YUGE(7n6$v zl+fzogWiE{`JS-7g_{8+qXU>sAL4HBa#_57>tWH`zljZyt#Gak!+5I2qK=rY%>HNj z;wAE2-cX8dpb%|}WzdEkg9p(xwQU^#kS1l#I3|cy){|P76^R0$eow|X%WS>J@HI~W z&tv_`XEIf?&ItP9C`2=0573+%$2h`@*whP8wwR0aW77+;=x?d6+SqeZ(&0nneZrzk zHw)Wojn?NJVj!6bv==5NZ%J7&0pZGdC#@;ey(CCJV|>I*HF9KwFXjtk3hh^#>oBfJ zoJyKr#}EqSA``eVaJefD7LY-ZsHuu|ROLO#=d~JYBC9n4mqzx3_ud=iTO z(4%@M10ShAdY5s#(u3#kVTo{$-LOGj_D+#97{<|ZS8j?SSh4oSRXYg8_oJqJUsCTl z^(aWUe|kI#c~Cs8DC#en9xLpI%I{cBR6&4NT)AUEIR+V%dX2!6(_!;0c57Der%Cx+ z&DH$y8VMRAv67PC8J4|ig0RZ6i_M$K)Gu$Mgzi?&sPv?xVt|_kkPU_!QN2BtPvflB zf)$fvX*%^65{c$6coaCLdT07IYL)>O>y<;ld(fX$xrxVcvxJm2O*8%>GX>_1{a1}F9d+a%O0scE z^x0t}Uwrz1wk>LiArBb%Fmtb7N??>!nb2rBw}kjDe(L>LU)AX}M?DSPbt7XHx5_|Z zy%x<@v5l6h17@Sy+t6BPqx^W$29)?9A2UHG`d?;Hwg)-6@^IU#BIYodgqIH~ZYInc zyir5Nj`iQJZ2gJ?@RTz14$A1>%yDXlfHYdJ3aLJkyA4_*1}BW`YeF`_4djoLsz+*D zsaUcMUDN&(o$P7H8q%S9BYgBuHH1G*E|QTFuO#Hd5V1!~0ra>mdceaJJp9f#7cTZk zIq!m7DJpis$+QUQUnM$TEO@}Ip#KmAE)P22^L-$NIu(2?{`h-*psM0iJIbJTNjHP7 zGIU+_32PaC)cgmeO3l*$ybSGm!n+%3*FHI(lyK}iI2QH@3+qMQ~>aR4`#SkN?mNHO~5!>hYQh7Y;|;$@5xk-k`I zq(kkId#PpUuO3pWbi1t1&cxHG&AT_oArN>f4<+&4!}dT&vF_lf38uYT%w%Fz$YByre0&m!N{3bU*Q zqd({&5b|T9i>2Qf001vC!n24?f0*^t;;Y5drVq|ze&ZF*3r)&B&B8a609#17BeiVF zsdq#n$%0p}i3und1&81vR`v+zrv|X^L>MeCQKs4}AgP@xB@H@JE^A8^6tT*HW6$W6 zR|qE_^f4g*`3>@HP%O+cTrn0ov|O4LP|R)=_1C&9p-wIW>uxC#@#uw*LKXjBuZD=d z27(j3aUTG0Yi1NK=IAR%l0rXCXJAo>R_VT&rc4yq4eKF;aI%mF`LO{dUENcqPDUnr zmuV`ZqDpD+ppX5D7A_;WjUBUxd{Gc$`_)6OSTwiN#$KaO2k+h05kH<~86a&62Ub&H zOxIvhznf&;L0Bma{Hna&t8_A904OqFTa9_p~zZo^)_9FW4AQ@ADD+x@K8S^nzx(l=ypyf+g#Xn zueZqC!gs|5+-KA4cON-`Ac;w?4!E=1GOxs(s z;uZVb!YXyHFF`;S!~$v*hFqHlQHob;1X#4(mzI4K5Erf7m)6Q>&ehd)0zi5QgY@3! zJp2ZTa}ya9ecwS*U+1OYaP)52@bHfAN6EsAdKr$YBKJ_Nsr1NH`M&}bH|P~Em1E^;dG2gj0FtEV zIBVD@edWQ^jj>bTY*qyIa@5HuS$6~vfO54F*unjpO1-I-E*8IPC#=qJk9kjiVT5XY zRq4idaM(ZO>%E%a?sfLV53Q~?)Gvzri8ClHnHeaG!bB6}g^_%&UNs#zJL)jaKKJv{ zVO<@J4xLb`_i#En&@|edr4_2xRQ#;d3DOUn$`eG6*Kknd3TQ5F2rdGD&oOGGC>{0! zQQro^&>A$YmBM_Kp1IakSA`hSCuKQwa1kvaD<38?G&FJ$+E#pvAgP2GfQTw7#ZHbs z27Vgk1gyq3T3SI6@8J$`EEywmgiVJdxb`!D*RNCQyRRoti0*kxiEF#-PzQjM?m_*{ z)Nhl=`LUKhy*`z$aM;fypJD6$@Httef!>OC>cd3xzgSNky4m^Pi)e{aUl^2Q zNHI_O}w{F|B-hfLgL>tP4GKKh4rQZtNI~V-tgaGLeK*hI|ib(t|E#2Qg z^!=qr%GE>A@bv4(%Yu#2l7H$VQEbOv@^BCrz=#G~nb@eXP%v_uj#E-1X-Xb7hLg;P ziSc;nkyv4)n+B+Ou)?(R7Vimdna=HPDJyQ0ea~GIi0~EJB~D=?8>}~#)B%XxZMECn z)Q#J^6R`00JW!&pqMPyJkN^zENV1dLLMrYS@BG zeIE;UHvHa4G3r8JZEK82Dl28&UovEv)TBYrAgTz>05OwG-t(F)DA`~2uKgWi)Ae111i^r2*CFyQSFr6BR`E4=jLF`f3i&B{-!GVe7%90}zU_Av?o&uHT5fpeMts9Hr?SPtx%5fnqtYN9b!`RAAdQq)$J#-d5t-s zYAKKYe%c@cM?E}{foKQzhYS7$A{coSDbXTxHzY*69vpo8JR*}J@ zivWcpy)_4`BF=V3-PW;kW%U9dOy)hxo6dBpKF7!~l$86ckNmYKHXAD=<01X7_G_G0 zc+z?8L$fUq1Yg4U8O*}Va{nn>DO$^!P6v)9_8*F06es{=L=_PyR6@d5E4!5~%iD?? zdHJ)&q3RC^TFJ@u(HM2Kc$Mq0w7S9+x$i5Fg8XLFk7u1;fm$!nrR@(iTE#6viOuc! zhGlK!D?Wn-l+Zg6LN!WU8W|nbP-*Ae(9#f$9%}DWXH#5@^>PkM0td(g*SfTqFR;Q*BL51II+oBu-gf$XJ>Rl2E9_^+ zIWPLifw3@2cT=!#nNa2*{kFcuX;fv>yJW=VLdQi3n=G=4PC~)EUU&9C0>muv| zf@b+fC*wM+oQN>nWLGy)Fz~x2(go?NM06kV!sFA`HS1$nUqrX zMwU7&Zu(d43$CT_6Pzr;1Hd(rD%hl;bVkl4gVub^YL8%LptgF2mBUIIU`zvN!fSH3 zeti_^%kYYE|7JSfRxCDAyOPj%+EHMqE<_E24TkAsy=J$+l0rv^>ja}~%Dl9_4gZ5) zq=5w8ljV|6B<45vJ1ykP0KD^=-zPXyXnHCa+R?Yq0op6+aIuIr6I8s0(F7?>vn0cP z^4jZ^6-r(Yn533jQ^fwnxQHTiyZ>x>q~0|TGu(;|%sBj_f}=oGq(*;sa~5rMNpo;K zH-d?=gAF!W_OS$%9z38$UpT)4uLMFJjw7~4Fr$0Ch2blUKhH!zkx}HhR2m*luIM2^ zGC&yX7!!!%^woVC``|$R-ozSQLg!pbtg? zzZw1!r}g#==RV!vD3$I6{g~`8Xu;q{^#B5Zv?tNlut8+Iys{WFC=FiR4~otf^Ei1l z8Qw@x;ukb;nw3RudK0UEq`I?>uxm*=bsfa5shHfm+`3uUSB{$z-4sLmcknNE)b*{` zZE)kI`yO!tgK?Op5&<9wpBOrujyI`vLe7HC9^)y}N&ZymV1pQ4@YQ0A5od z9f#XDQA*J#J8IHV@XsiCAR)GAx#i`?o+UD_7o1UypD*78YADRboZJ>m6J7#KZ7~Qb z1unrW_S~zIdFbSow}M{13R@zKWfZ5B@o3-`!p-Tv!);cto99Xvb!k6r2r_X!Py*YY z`qeql)G)UqrHa>?tPSym36}7fOxj+kDkJGxWGjucYogkbhJK%TkA>(pE&?(TccYA3igBcEnlBa z1CU?d(u>gwdF#@FcI3}kpE&j$Q1L(%IW!@&CvlbtW#t+Rtm;UBLMass?<5}Nc8K!0 zStlY+xwcm3+1Kl-T=riT7)uci)k)ddaMRh_6RlVWE6#HAIq)Of=0h@R)zqVvlt3~_ z*53UdA1%SQK=@t`;OYTT#~w^c-j5I=y|f}XwM#Jj^V0GPh;N2l0$ij`^jddW!yYgL zMYot0gT>fhnel~8<(apbhE3fa`J_B46Y_^snd!nW?p`Bac?lxYcgt-Lxbl1-8*4W| z=?bMS;&3ACTzM(G5cMS)Jp0`K_xD30&3#E6E__@S5wo5EwD6Opl;{O1$;_?-3mlS} zuM+Jp?QY!HW;k7n4o^{Fr$8AKW_w2K89=4;CBpQKEby5{V9RVjOOo#I*+*))^fk>Z zLbuIE?>%Td0lvY%0imTDI1)(f?N@;E&wd%|{=M=J3luWy!GXum+UR+B)i-&OZBmxL z4&#!q`53kIXXha?=o5tC&6os!lOt$}QHGm@JgjpZJSHPvf<+CoQ{!4h8kAG-mrJEH z#=zI^Wr^xy=qH;7*u|1pC53tDwTp+)xEQ8Y9e!njL;F5mjlGYBFNY36KIp9EjD+Zk z#G-zkud0W3d?<;bo5k&hZ@Av>*n$#SV7jWb)+(qy@=by@zu$AYLC6Z*FdmjZ>fe-- z8)mQ&vckA9?sCFBh8xh=73JaP{iANhV76bx-CVJv3Dy8DT@v>&^u8VI{bnAVaOg%} zqfoU}NuABXBydWN5VS#!7rje|(y{ZLy0wf?r)8q7K4$546wD+~+f{Apf(s={j1*rh zQQKmV+r)V`kW9SGX8eI949JtqcoeRQGJfj@qy8nldP4TV!HO29pLzar?ixse6 z8Gb!gQ>TXEnAGmkrQ4o)!B>bmW!TX@x0W>4s`M|*N6|C@*a)_M9D+y1KPbNWL@NHY1o^-wtlZH z2dw=5pA?{$^nA`mPoH&#IGVv2LKSD4puq0Qo_Fl#Bg zDu|Z`Hy{2(GiMS=1noffZicKBMl-Oo2>`!PCR(C-pToXbdNUz9QuhAy=ADBzINB&> zu@qVEZI~bi5+3JK-KYL2>`Y?Z)rA&|p_c9F&HzY3^%I3uUuoCW+FZ9LfJz3M+qZ2C zV@l5)8&hM01^_AHTTQycu0MDsuNN|#4&Jf{Z%zBlQ?>*+TEv>liDkh5@M@AmOWqOQ z2!$2_jvSs2cT1tj{j?uVV1OEoa4$AjKJW_~ts#3f#4Lr{Cknz;t--bgi&I4YK|pF= z<3rb2&uo8GTCsiGYdB-V)Vr31O&n=t*jaJ-W0Nk1ZoII1HMxlFIjAMaC}l7a!$d`8 zZ0BylQ~`h?DQJRW-^JV(UBY;P^#E@VX5D|30vvRzieDytKD)`e@f!?ifh5qU=2MQ zHH4E2*9v6((cN8*kt&CS_z<8udK%vqlmhfZhCDa}Kt=!+BBA&0yR>`0It^1IAD|DI zifzsXU{GyBIo(7y5mfkhkVqV;AxT?n+{({aBazn{HL;zy{^6Us2M_O3s(zauiYZJy zKb*zpm>Kr50Ep{IJZ+R+{i~+ltBX zzzVBm_fDkn+8wy&nt0CU&zsu!3`B1rPYP`%I_^PCd?hghJFT2$Z6$Uh83Q4=07+hd ztmReAQf-^q#Q3fcLFf@l`2*Mx(9x$Hbl70$EsY|QJ98MZh(7=r^V?TO;YjL1ya>{o zOI)aO#ylMxPmKEmZnG?N zPtsCY4w!s?vBC6k)!>8ey%CRB55(aEOG^<^*@|1fJJL+FqW5?xARLMTfIqg=jgUaz zIV6hx(R~LEHR+V&pa)RMB!(MWVx+F(uUnwDppcaqdcT{sGnN$n-5>SclciHpM~=Vs z$Hn7oAPg55kYXgowH5|7$BdxR2Rr|hMa4@ZDuM6u@a}tD?r!-m>88_>B5Esc$2E^- zn?&#b0sD0SClw7RmNoVar94X$K!i+X>R)_&N)Rg|xqV@I{)-a&X~9CRO2w+{k)5}G{O3m%$r2Ji(nqMvrL~TU2IP8wEG=7EqMbHWt zHoBoH^}7cUyP>H8G#Nvre0O7pTe&a1rXBgG%xh;|ho{izP3g7>ax`#H#KJbh0L!d1 zVxN>ttt8N~$o;OkTQyogOfJl-X-UefWtQ~SVq zH4fc-jD>qV2A!v@D(1!p0)GC20_VR6S$E$hsVKPeVIc9bhr|Tk8D9Z(jkg;Tpzkkncrv3>H$S0tgjWklxGR7q6 zM7I;puL{sG%#g5GKX9!a*Bfk+?i*I!P;%k~^`0>RX(;TDhRB9dj(e(5$>4qh8S;_9 z$HL>c&-1u-H{&!%XOaM@T2(5Z2?rc8=t^R6E+GpGwYD$PE7qMgF7Ns{%6G48cLb!- zmajTg{^hK#h=UN{g~%u;16x~_O1_@>V?5rgH@dJk-sS9j zS+L)^1|~50GN(>9THRPZ8TrB|Q32wJtJE9{6qx~8JP-oN230TV#)LcTlCT$>KfsfM zp6FemazP5zd1)B}p@4j_=Jt5y;KTB7_d+5)tdv#k?i8oIAo@O$!SIRjkw3zOdQNKB z5$=Yx!G0SDC31Zdxq93XEL{cI2e9!UADkCOnSNAhNVSo1OXG{#c7s*rdQb5pd>)Is z*8dpgg&PYjH6orv2IWe}(PI8*@WE;%7BC&zC3bQybX*uH9XVJeR;;SFhNUF8*+w;H9HS?Wjy@2W{FA~J z6t12~L;+0CcL~aNvdZ3qH;%ZmZ3WG4_T7gv-x$pd5z62Ma@q9}b#0XnFnvi_a-ULY zPkF&5^mPz&{&^b=+t*>BBKGD1^WRe;Q^|PrT_Tg&%RK8@qmT1CxPS(p%6r@d3GLsT zQsd@Nui3@PGM6o88;!jiA}c3;sd@|VP7ZeZtB$I!0u1NHvE3^Rd-{*8Pcv^p6!aOK z5Ii9Jf<_zPD2$gQ)b2*MJvU(25vNqB{QbL;npF<4(M2)J0b(-Je(GL*;8 zxNdGJ4XlK+^S%QnZMK!66;ORW)s8XQ|Hvk|Hhm+))^)*3m|ajmo2_T zP+-6FX49q1r;=(dZSDM}GK`gPX?7cu4GSicsaak7@cGP~f6Bv<>hsFJ5A!wf(^*Jz zjoemAr5%=r>r@IJ#8Z>Li>tk=rWjp^cZq$LIpFK0bom`1E|_htSAIfs@-^s5rl`6P zKKtd?yw@~nutEVcij$#T!QCJ6xvViw)EKxgGB-kvkXR*XUTJAUAA;K|IR6GR=Nh~mYa@M?9o&Hb9EGs3O=BJI@$ z`zA65++Kjz&^EJwKl2S&(8Qrk_R|~HpX7TM^?q@Jl-XfRhv`O>NL_Tg=TnTO4lYJS zt}49}%PT)v>dqoz(4abyG!o*Lz%=j9q(%H;=8#^!#3GnRCST+6R6ihU%;P>FDk|3~ zi2xn&KiFWm=V2ZK#|L(Xuh&j?*pF-9JG!F4+TZUJ=0w62qeC(s`U zhL9RxOangY4Jaf>`!aG8V|Y|Be@B+z!2F`qmOzYk{70XFq5}60GmS7e9X<^q(}Ax< zX2zs$?}yG+yZ&MA+u3E0R@c}vwM$-CRQsNCaj))~-l_(; zj9{<=LQ5hJhPW@}$uSDt%}6+qgnyedu>ys-2E~F(q1Pb;M@ffk?jV-tdtB!O@~&?- zLLun*Y?U2AaFeOuP~_0n9YUDgy0(X&g(@ptG;EDJi>0~Y4Hf!9!6+6q$TH4>x;pk3 z>{Z3|@)9iIbhJY%8VTeZt65+qbLZc+= z5iW1m6J0=Kxpzs_o&vFFO{;D=#ZO#J`vNgIRG)|mi9Qmh6h93E5h%slJBWcOFw$fv z`9XXPq>RtBD00v|9R)M<6d3hmv!?2+^=~#ZTl}^99?fDN@m|Y?qz;|pbh+wk?R!5L z`jKwK{=3{0z{m7FKm-{tS-7{zzksyEWwUu3=6drUFuusn_C_Zo znN*!Op_zYL3z~)xL)jGzHL$JB0ZWBg%@+GAT=#b?b6+ZeV>l{ER>2kN!#obEEi;nm ziwVpZbfMlc7f6$s3gq<4AVs7vC{V1KFB}Wjr4waQ^K5b6dVh56N|Z{mKdOVF3(Lfg z5^q^mg{*S4#M12@)m}KL3*D8rxU6mPZFvv`ancK}xqS6MV*h9F{L9JPto(Tc<9S6;eZgWij7*mp^2t@qO*wLmzr;UcHaIe z|2a~7?491P8z!bo8WmRx;?VmdUymPkhQ(Y}9z^h6PWMK2f+^}*yF>bbp4$@0f69Uy zvuwU3952k1s`w)R%b`Am^q->|m&D%XYF12~A~1u3p<}r>9(v1fAh;APQDr^aQJ;En z6vNIiVtR4xI6_rQ35EMA36xMniAqVfj~5DuPQG>AsOEJXlpN=lFDTFv_XRBDypJL} z7^&~mE5Lt0Y?_@|I!&f;Skfya2F{+8M1ZugslAZzc-w9VGpi|Tesy8Fd-XS{a`NCh&78?Fy4sKEm-Uo4@h1*(i5hnAJ?D=2-AEN@rq)&pLL@sQ)zLSFi|9Arw zX+Jd(X#OUQ$*BD3R zrDJ_+DrS(}8}}*j1=>jZzcylnu%4PXN%(&q-{U-uK%5vjtphxp*Z`@hy7sgNvH$N4 zXYjxV6!;%3r2oA`!uS94!U9g0`OQlk(*IB3zqW|~M(N4=zjvO7 z2mZhL#3E_X1Oz%KzmNa{V_|%jsS5ZAABi9)#!`&Wg^Wf~=E(x7(UyGlyDDtS0y@wI zAL{6jipdSJNq~&_|LdZe{u!iezNf_8VIHc=MH4af)sj!#AhwjSt5%6pB_4w$PD(Jc zT9+s&vpX!8X>QR2BcK)E{LOD9CujpMO^|W$qn?qaMDN@h$>^6!;BdqAd?}>}s&Ef$ zQMrYHirfT}Y0Bi;P)PLs9L!0=#KE;cs%UZC@j~nw6(DBu|5VsLlmU&0+K5frB;^rU`s^F2s!289BH-@$W+=Uqrem*BOTpeRmD8c4Te>F$>%qF}(pH8?lx(<#!?5^7|6}j&SL} zeq>|R4&g27pyP0=2~zMw!bQGUg!sCKrkHGN_S>IRVr653yXkjLc4xkH9g~|sT)nSt-3Prs@TbN<@c(AU z`NAoQaLhdB*m2-j-$40l;`b=E5z)%{)JRKxK4+=wyc4uL^D)6I`~5>0yWez5du)uI z-G2sVP(hHBbxnHovB?oL!L2U2$!k=xZsRKWhxb2k>m=12LosC0yn0a7do~PX!8M|` z>6LhNpU0VcNi>g#7>B@%zv9z4S?h*4AiicNt_SPa+%DMYJix5p6nOR$BiQj69XbBY+jT>Y2d+F#5 zQsBG>8>e@gZbl#}Cdy&%&C9zxFVj!YMbE`eDT z5G}d?i-yfyz5ixV|NC!Gf6-!HyCbhR?P?P8khf>C|9FlHqZI{vG9S<*KaU8J&TzlE zO`m+WWT5}+s-*8x8a+9mgD6+^AF(S}8d)o@0BeG_{_x(Wf8%IvJ~zVE|IEwR z%aD0nTNGIzzJ+i<*l&BWV-FZD_UICKF5jm*?&on>ymLE!D~d4IsTnM{CrA zc~05Cc*~0jz@Xm#R)x?+JhmWGDD$|yzBCdi{SBhkpf!pvW-|OPh1MoS(s#{N?zVO1 z*W|v`7T?kFQ)>1rr_Bdi9p!4p+|W+#jj&s z(SI%vxS5GAUV#Tr2Y;mA-F*JnJ7T*WnrW^>O*6NY_OI(=w7tn^k#55C$4s3Ux&W7U zRNv0(yHmwktFt?k@Aw*jP2aCJN+#4F7=9Ra!&4bnwLGn(nG1A6r(L*b#^HwnN^K~rr``s76*KoT(Sf} z0a(D1pOukucsMQO?pL(Jkp~dae_Ts;e=-vj6DryMiw2aGQDbAlHCv}4OD6>0-Ur`} zYdF(-J92yGmV@YPL`z)wd*P)Y*N_{$N7(a1S;!xxe>!6SegN%juzsB^j;;RD=&ZA0 z!Bpq8GLo((m6X!hzP^APu{ezPP= z*El+)+CQLkK;otacE8cswpS;Xrl&7;xc!3D%$s^OnodMI6tKz`hHELjayV`FKvQMg zHz})A$N_+QV`uCAGXc`O>jyXQjZ(G?+{<7`$~)hSI(t< zYUJM(Q4YZbQ>R;|2iHY90hc#F)5=&Mnsz9k`Qde+e)51_O*OLNR5El)Y32{spxp+@7feM-ReT~K;!1ft{sa@-X(7YtE&j@ zVxorRcO2=ZlTcm{8^EG8Rb2nR+MIfY?wm)Zr5(0)DwU%3HRd+}5$>2M1p=--xw3pt zLx-~3m!pp|b~aZ60X9sD z<$p#@v1aastsHjVaNaMPqB<}0?s-;UZ(G2aCIP9Q=|S$xaLay zKoXT~#mP!KfH8FcdhTH->Edrg+2Hw?`pC~U@6JEaZre~YE-oe}4);IIB;_D(VJyiH zEMLF8qAzuVPvJ`xK}hA!&r0c*kwr6D;rhm`*yB6EYCGjk0r%xgn?CS&boyE6qfHji z^cs(J_Ww3*p&Ih6IXEqcux@bf1P}HMy0a0;Cty76hil;Ji=FLukk{HBZl@tn5??GT1q^-qe<*CT2zQ`iezcc;8H)3iGvY)GMH1?*#TX zs9=MFTW?+U?}jyy(^U7>+1&OQ=+<4)O&Wp{8NzSG=(+$wcarWE1vf!RrDnSDtKEb$f2Vfa@mLozBdnQ;iQ0?`@GkqVJE^bfaQ{KvV_F@-K8L zWNGC0lU#Z}&)$uNl5*tbdda;karEn|{!;;%)w|SH>YY^-S-)cTi z=FDww1g1F&`~2fzp>*?&WXlM zeGXTn>0G1tHyaH=z~ifJ~cc2Zqk8=l+Q%~ zA%8dRONA$E^53-PwY&G;FqhZ9gI&~?(JF3qJXuh78fQP}_GmUuHNYoPm6%!v+!ris ztOEe;`TGI;q<;ZO2@Dk+Z4ds5hq^kq ztzO)0eyj6c{PH`10@(ee0>yW+K%ml4v%`nSnxvmAE^I5G=J@>$aJcB}f$|%yJ`IDA z_o;vGLgxTnE@!s>EO z={)6EPE*64iOZ=twz#z+FLE1T3dkFv8ZeF#O>7-Mxk;F+>5^-GbddO!4TOgz|1BsO zk;Y`m9o^6(jBe}ug<5pXAoRl=`GyG1vN*zCyji@_J!)&?)*o*}^Q3g+_AMnHRivm! zV8X#UAROKDpD%26O=V-MYgttPdVF}U+pH%my%+R+n-2bD+f4YDwKpP5I|j`i^0{BM zk8r~N?0RTEi@RtQsq+-tPU^$}eEdrEAh5+g0BkrA?t=bqBYsixPc;~@(7lOoHG>03 zHlEzzz$NNmjr3h`EHe-Q)dq=^@YlLdk9NM zAT_vB1aw&U$#jg;N{yTxpVP9yWGxVC#60zF#hQ1eTMQcON0Uj0!H$cCrwv07BW6QZ zXrn9t-Hh}Plhf;EJ z!%m&T=|X+-Z%_d3laHq-yVx>Go`4Lv@6sVmWi%hK0|=h37Q?)9dlAu}7qaRq_CvSo0f>C)Cd7vG3GR1; z;M`TY^d(8S_4c8utvbpCkmIl{e-ab0PO|@-L>ZxZ9D&@|QnWpc)`@@lxwLJv;I%}b z2&#WEt_f1KBK3RAW#@>LdE)fJYbSu$d;JN1*zml_~YNQwTp&o|SUxIZP0x#ibe=zqaEby_HSa7VD*b&UAy zS2C*y>BI0Oqp#-@RW=9%d`kyrIP6c#b-t8hNV1b;qUWIG-}Mh$Rzk5R_1p z`WZhpJ?9;SDo_2x4Kn~oLu-N4MF2M?Ekv^%=g8LHu)48>lNa`Z!f(W`*&_6!Z02^> z?Dn`Fzz=eIeP4oq*JQvjfe0=+`w}hmd$h*)z`%_O=kczn0;rYBAL!44+g~Ir{MRSh zzr8G8YRPvukgCkH<0?2m<{+8rdNyrs5UVI|wKt~xMdKllST??O8!CNZ3jr+lhMW*E z+wA|FZGzSp{dJm{<FE#=^ zR#vOQw)b_;Vl^36Yb>*D4mmnv$U9f#vLwtK7AtHpG?k@;KMgKyTxi}^AFbCYhP(Ma zzsBusas%8O-hXTp*vfE+*7MBktw~na0R2YTLP_piCmDw%Km2MeAg|Hcu`VkwCDyL= z3C2uYhtk3G+ooK?7vNhQ|3oH{C}Fd@^C1-ux}TQy!K@Vm0d-4A}Wk1yw+ql zNQH^)yX^atP>8bcjBPa82a_!!yDZ6)br@^5@6h{Q-}hYe=UnqV=RWs+|CV!}GyYni z!xB7J?repxNpkXPDl5DFH<%DakcLWEy1Zrq+tPO7VBGVm5$91icvl*qNh;yQmNqRi z-f-G&w3pN=h~b8M`|~;_)gigux3=`IwEtS_vPXKcQvF{>bd<#iWhNFZ#AVtZ>;tM& za(iw&S9SOHi-XBd8!Ly!QAo#naQ5vVlukKl?tDpS%Tb<$3*qc^eR~p=Pd}=s`f|d5 zmX;B}*3Gp%OR+EP8wk*UNb-K)FP@(RvH?(Tv6USm!0ey?8cQDGoJQA9Tl~W9mc4o= ze*GYoD#f}%k*J4L;Roons_6M@vof#9x*~3K-YXm6?U~==x_)6ZsoR~&D%VnRA6^1t zfP^6)Dl0SI1YAbRNTWMBTQ*6&Dud=_dmZt3{%-m2z0uhzD*!rd1o%$oJLjGKD5u3_ zN_z%*w^e!>w>1Rvw>rNzr|^!87JqI}HFv3sS{2$nkSCJ??5*utL!yYsb1;JqobY=9 zBESj|XgvYHHTh9BRWy>=yzS3Y`IXdhYb%*9Y+sV3uwilAZU`VU=4;ME_O6+YqqL2j z`#BzQxDdU^1vq*{ZuX6G2Yek#zFZR7^(i^U%016B4Cx+m$@Q|h+Vm^5FmkSNy?$5# zPD&%nDbT6CM4_(9`|iwpgq~9%@_z^W4Z6v`PF|;EdldY@38iuPec9K}zF7Dyp)wT@ z;oV*Di}_8`^+{}NdpBo+Fjxic#>i>MN6Z6a>3Zjk>SGO4hWwYGBW4+cLuOOrfO29u_x<0kY4 zJehzfAlD~D%;G4A)|ba$9C+xr^IT{fG`v9ieVT~DzNj{`rENeoIgU%qwMqx*9s6@1 zm+?+H39ZOe51& zsbfs+Dw)svztuOxUr+Ri2zOeX{*PoqpEGqOf*DOo>2#bxSD# z2Nk@s1q2as%~W2@bL4zawApDWC|xnu;K{`Gc3nzyRK455TY}j0`BcMO>`4jK-F9Y~ zcgTs#VGbeB#NFqw@;S;&e}kld;x4i1t4)-8)5O#{3*GW;eU~hocb{cG;1k>W&Aa1WMmyS*bN$V6r}4*=ijB003el z*0@Qn(dD}=D8V>x_Hl}$W=*PJG{k*2f- z?S8Q9PiBq_Cel$*m{W3MYuxH^7-D$fh_SsS`7yg3XbMRNVb1LxH-gtN*M!sz-2l>P zqOpBzv(gb#4)xB!^+Q}q{b?BInsCq#Qwv}>@(myUn*_v3$hjMz6)--D!tTDwlMSlY zHdWX?0`<76m3d3I>)~8Ez9L~7vs>#%<<_# zq?|GCYqpewo+Z_6*Cxw&qc9J}^H2>`{emsYVh9%MblJ0QYuqM#(E|7|AZQqhYh-B# z3JS%#BZ2FcqRuzvb&#HG5yy77V}Tj}ztri8bnz3-TwfB~59gp|{R2~-=PM3W#r1L; zy(`-KqEx7V)tYcjkukVhTc)5yy&<>SxGRA`D9kx2OT=TIJv!tFw3?DW)~Frf?8_1Z zv@A65bb9JNrK)G9JJD&Q_fvOQJKoYu@#OdKAwq)hz@%6UTB7-pkis81P7fzL$l0Op z18(ey&umO(QEB z&W8~aXQsNgnA#!Nk7EMfDR-+b*PhM@)ecKeGYJnB}p5U~DU!8exULTVvl>W#3Vr&+3j!KOA7!HX|k zxFSq%Dl5OKI0wN|2z^K~2He>)P_rmoY!_0WU+qnneH5 z-#a+7kn77lV3N`F<m)8;-KCfSw{LkY$nN9G#UUTJ=5PnX-ZJ$ zU$ttf)}PJVE%d|L%)*QRji5LsY0j%3w`&yE5(za*J(-5YO-I#6Og(O=Q&Vi%R&@L` z8EMPs%iQ?+7gRJhTscyA3+27(>&yW+{#qW5Q+h#%EcOv#d};U-P2_w3!)j|w`NQX%d?nqb%o$DJxA-Rgv><16UAg0& zO{X8aWYH#?h5Z~GGIl`rl`_}9g++Xe{HYYwg^j*QBP*cQG~YEcpLHPZG@#&G0|NBz z3Bx1uwd+43djn+^BZM{5q7OPhjqpq(1cTW+23HFwh12;Nw1(4?XUo;wgQEIOkZq#f zA*^T1v=QgaVp%f$-D2#xB($pj6Q6|Uv8Ou7%w=c8engrnNI2R*iu4%{U8h-M2sPM? z515QcyR*MBnb>t#p^OLd_}hftfF#BUK5*OH3v2s3p^KZ#7e6&3kipqOm~A(sP_oGSvsOn_udd z3DoJ(qr`WbLiv>e>ZfU(CS|$&Qu5xAj zG6*F_YdyaDIm_@nJgKz1xw1rOHf&jYkL(Y5@t3(4(QeQBsm)h-lN*J2kNF@Ei&<0W z;g=FnFIV~#%u(@v|CVZec6Yj4qs%cgBWtAPO?uRf= zdCDdWkIseqq>-N1Pe%0y(7R?YwcurhKzP zw+UeS$kf59?`Zd9<3Zx|YBR>E{A9gReGHA3!R=rPhnKBhIG(R%P82zi9-ar!;^KG|qg@autyN*f#q;hJB zSo=sgg(wc%w2G_RIVG>*v1}-Wdt|C*hH!yA4x{X|1i@T#H?(5SH3T!|Z&Jr>E;xQU zUB#sVv=PMuf8MSH4VI_jn|dlSpkg|;c7MJr;xJ4z=B+=C+e*&nD~5>F)W4eE@n^)3 zC0tgcul;HqXPRqFTKkYV)8V!E>d^zoeG}~%@W@E}b6U$A{-@tV>-OHX<&-?1jxbe;7iy~Iv9ilu;T7(dg=kM_kF-58E zD|@qrn9~cXZJiI*+vk#K5feu{9=XStHH}xWw6`v(y{@=|rtoiEdSJ-f%2$%NskwTv zuQDpX8;%2tK$_)mmIfC%sQq$e9M8{-_T+O!?$aCCrYT{Xya!%8a#P@5`|Nn*D@6L|`zZz)2ZsRT3Tip}Et;_c$z-cs6iKmj&wT^RGLlaj z5Vno&jOM5mKVFkDjxxO%V*kf4X$=u zH0i}YMY+!XXiSumaAcm#=w!o@5Ow6ZOg^qSuY;d&j^fP-n~vg*{~3jjz)ZZddqm_i~Noo$un-$BrF5xSv1u<-Hv8uOccmXAVJjD$pI+wJQ_OX;v? zE%v=^WVJ&_-@jX+a}Zy%ZWX_6xv+DHH#sh@lb8xoWuAsslayR9y)Z2((z;%G=xABZ zw5XcuWSPUnk$8NUA@ZGCp<%pE0LbK$o5|R8)IZBNL*==aZUtx79HolC0Jb6G9OBe3 z(^zrT-A3P9@?B%_U1EgXj(uaL#DYhklq<2^`>c7@{sZ-|9!CbZ^ph)%wo{y2Gl+&; zRA<$?PEZs{nGV{GP=LsUivD7M)h|$#i)GVrt2<(f&d^#6U zZ|*FsD$)qPVz7_W;TdhvJZdrGa{RXOMtSrOQ%`|6iB|e4TP(_zOFa0*5J6`YA zqawEvdO0krg7;7Wz<1q`E^X|-55{f8bb04cu>FEQbIo?xA1<^-6}v#!g-xIp?HX#K zQcP^)-@`jxy1eL42ezjxWK^&IF#$VE&Q~9@f_1nM*9Np7Y=ceG_}S($@GnMvLRx>U z=(Val<2U_Ix$yqU1P_ZA(|x1Oyb1~m+-vjX&3;Gjso%1(iNjIaFXn%{8uo8gWHrY# zBrK|3;jy;ol=B;?#t2qHXt!Y6*moa zl(A1Mm0n)c)zvf-K@6hxysR%DPa z>}oVYaOpJ+b_FvlWJa%Mpu-M^T)~%5pTu@Cp-dxUiO^6CiM>aT0Trc;58N;kin?>#Ye>`_|3AF5OXs zr!9a5#-Hzw5V-4UWByJ53!^tT5<0ak8;bUdy&D*u#mE4HsGa^g&c|13iw6Gdcg+2f zJOO0#R;M3GaTy+trz-!pwUjtuP cc3M9rjv}w!60ILlAp)10il%beJ&VBq0oy@MT>t<8 From 47350f5f07eb39ac8a9af51591d038ea914c91e0 Mon Sep 17 00:00:00 2001 From: Jordan Blasenhauer Date: Mon, 11 Dec 2023 18:57:35 +0100 Subject: [PATCH 013/154] update compose to test ui --- docker-compose.dev.yml | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 230e5f453..6888663d4 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -9,8 +9,10 @@ services: labels: - "bunkerweb.INSTANCE=yes" environment: - - SERVER_NAME=www.example.com + - SERVER_NAME= + - MULTISITE=yes - API_WHITELIST_IP=127.0.0.0/8 10.20.30.0/24 + - UI_HOST=http://bw-ui:7000 # Change it if needed networks: - bw-universe - bw-services @@ -20,9 +22,8 @@ services: depends_on: - bunkerweb - bw-docker - volumes: - - bw-data:/data environment: + - DATABASE_URI=mariadb+pymysql://bunkerweb:changeme@bw-db:3306/db # Remember to set a stronger password for the database - DOCKER_HOST=tcp://bw-docker:2375 networks: - bw-universe @@ -38,6 +39,29 @@ services: networks: - bw-docker + bw-ui: + image: bunkerity/bunkerweb-ui:1.5.4 + depends_on: + - bw-docker + environment: + - DATABASE_URI=mariadb+pymysql://bunkerweb:changeme@bw-db:3306/db # Remember to set a stronger password for the database + - DOCKER_HOST=tcp://bw-docker:2375 + networks: + - bw-universe + - bw-docker + + bw-db: + image: mariadb:10.10 + environment: + - MYSQL_RANDOM_ROOT_PASSWORD=yes + - MYSQL_DATABASE=db + - MYSQL_USER=bunkerweb + - MYSQL_PASSWORD=changeme # Remember to set a stronger password for the database + volumes: + - bw-data:/var/lib/mysql + networks: + - bw-docker + volumes: bw-data: @@ -51,4 +75,4 @@ networks: bw-services: name: bw-services bw-docker: - name: bw-docker + name: bw-docker \ No newline at end of file From 716e69027a607f2aa3b8aa0006aaae003bc7e3ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Dec 2023 08:14:06 +0000 Subject: [PATCH 014/154] deps/gha: bump ruby/setup-ruby from 1.161.0 to 1.162.0 Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.161.0 to 1.162.0. - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Commits](https://github.com/ruby/setup-ruby/compare/8575951200e472d5f2d95c625da0c7bec8217c42...af848b40be8bb463a751551a1180d74782ba8a72) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/push-packagecloud.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-packagecloud.yml b/.github/workflows/push-packagecloud.yml index fe7912ea4..1a8f3eaed 100644 --- a/.github/workflows/push-packagecloud.yml +++ b/.github/workflows/push-packagecloud.yml @@ -42,7 +42,7 @@ jobs: - name: Check out repository code uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Install ruby - uses: ruby/setup-ruby@8575951200e472d5f2d95c625da0c7bec8217c42 # v1.161.0 + uses: ruby/setup-ruby@af848b40be8bb463a751551a1180d74782ba8a72 # v1.162.0 with: ruby-version: "3.0" - name: Install packagecloud From 02d6c4111a209a5fb32f0faa151013ac3204b303 Mon Sep 17 00:00:00 2001 From: Jordan Blasenhauer Date: Tue, 12 Dec 2023 09:16:10 +0100 Subject: [PATCH 015/154] add utm --- src/ui/templates/footer.html | 6 +++--- src/ui/templates/menu.html | 2 +- src/ui/templates/navbar.html | 2 +- src/ui/templates/news.html | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ui/templates/footer.html b/src/ui/templates/footer.html index 37576d330..936f38e25 100644 --- a/src/ui/templates/footer.html +++ b/src/ui/templates/footer.html @@ -21,7 +21,7 @@ >
diff --git a/src/ui/templates/base.html b/src/ui/templates/base.html index e813bf662..3dc3e38c9 100644 --- a/src/ui/templates/base.html +++ b/src/ui/templates/base.html @@ -31,11 +31,10 @@
{% block content %} {% endblock %}
diff --git a/src/ui/templates/flashs.html b/src/ui/templates/flashs.html index 058f24fd0..1a9f0c8d7 100644 --- a/src/ui/templates/flashs.html +++ b/src/ui/templates/flashs.html @@ -1,7 +1,8 @@ {% with messages = get_flashed_messages(with_categories=true) %}
+ +
+ + + + +
+
EDIT PROFILE
+
+ + + +
+
+ Username +
+ + +
+ + +
+
+ New password +
+ + +
+ + +
+
+ + +
+
+ Confirm New Password +
+ + +
+ + +
+ Value does not match password + +
+ +
+ +
+
+
+{% endblock %} From 056eb0375bae4c8a8717361a2a847f9ec4e379a1 Mon Sep 17 00:00:00 2001 From: Jordan Blasenhauer Date: Thu, 14 Dec 2023 17:57:44 +0100 Subject: [PATCH 030/154] fix some style --- src/ui/static/css/dashboard.css | 2 +- src/ui/templates/profile.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/static/css/dashboard.css b/src/ui/static/css/dashboard.css index 860c5a28a..635e78acf 100644 --- a/src/ui/static/css/dashboard.css +++ b/src/ui/static/css/dashboard.css @@ -1 +1 @@ -/*! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e9ecef}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Open Sans;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#ced4da}input::placeholder,textarea::placeholder{opacity:1;color:#ced4da}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#5e72e480;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.\!container{width:100%!important;margin-right:auto!important;margin-left:auto!important;padding-right:1.5rem!important;padding-left:1.5rem!important}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:1.5rem;padding-left:1.5rem}@media (min-width:340px){.\!container{max-width:340px!important}.container{max-width:340px}}@media (min-width:576px){.\!container{max-width:576px!important}.container{max-width:576px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:992px){.\!container{max-width:992px!important}.container{max-width:992px}}@media (min-width:1200px){.\!container{max-width:1200px!important}.container{max-width:1200px}}@media (min-width:1320px){.\!container{max-width:1320px!important}.container{max-width:1320px}}@media (min-width:1920px){.\!container{max-width:1920px!important}.container{max-width:1920px}}a{letter-spacing:-.025rem}hr{margin:1rem 0;border:0;opacity:.25}img{max-width:none}label{display:inline-block}p{line-height:1.625;font-weight:400;margin-bottom:1rem}small{font-size:.875em}svg{display:inline}table{border-collapse:inherit}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;color:#344767}h1,h2,h3,h4{letter-spacing:-.05rem}h1,h2,h3{font-weight:700}h4,h5,h6{font-weight:600}h1{font-size:3rem;line-height:1.25}h2{font-size:2.25rem;line-height:1.3}h3{font-size:1.875rem}h3,h4{line-height:1.375}h4{font-size:1.5rem}h5{font-size:1.25rem;line-height:1.375}h6{font-size:1rem;line-height:1.625}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.-left-full{left:-100%}.-right-0{right:0}.-right-1{right:-.25rem}.bottom-0{bottom:0}.left-0{left:0}.left-3{left:.75rem}.left-auto{left:auto}.left-full{left:100%}.right-0{right:0}.right-2{right:.5rem}.right-20{right:5rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-7{right:1.75rem}.right-8{right:2rem}.top-0{top:0}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-16{top:4rem}.top-2{top:.5rem}.top-4{top:1rem}.top-5{top:1.25rem}.top-\[4\.5rem\]{top:4.5rem}.top-\[43\%\]{top:43%}.top-\[60\%\]{top:60%}.top-\[8\.2rem\]{top:8.2rem}.-z-10{z-index:-10}.z-10{z-index:10}.z-100{z-index:100}.z-110{z-index:110}.z-20{z-index:20}.z-50{z-index:50}.z-990{z-index:990}.z-\[10000\]{z-index:10000}.z-\[1000\]{z-index:1000}.z-\[1001\]{z-index:1001}.z-\[20\]{z-index:20}.z-sticky{z-index:1020}.order-1{order:1}.order-2{order:2}.col-span-1{grid-column:span 1/span 1}.col-span-12{grid-column:span 12/span 12}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-6{grid-column:span 6/span 6}.col-span-9{grid-column:span 9/span 9}.float-right{float:right}.float-left{float:left}.m-0{margin:0}.m-2{margin:.5rem}.m-4{margin:1rem}.mx-0{margin-left:0;margin-right:0}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-2\.5{margin-left:.625rem;margin-right:.625rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-7{margin-bottom:1.75rem}.mb-8{margin-bottom:2rem}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-12{margin-left:3rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-12{margin-right:3rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-6{margin-right:1.5rem}.mr-7{margin-right:1.75rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[4\.5rem\]{margin-top:4.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1\/3{height:33.333333%}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-19{height:4.75rem}.h-24{height:6rem}.h-3{height:.75rem}.h-4{height:1rem}.h-4\.5{height:1.125rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\.5{height:1.375rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[3\.5rem\]{height:3.5rem}.h-\[4rem\]{height:4rem}.h-\[90vh\]{height:90vh}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-sidenav{height:calc(100vh - 360px)}.max-h-100{max-height:25rem}.max-h-135{max-height:33.75rem}.max-h-30{max-height:7.5rem}.max-h-80{max-height:20rem}.max-h-90{max-height:22.5rem}.max-h-screen{max-height:100vh}.min-h-12{min-height:3rem}.min-h-20{min-height:5rem}.min-h-50-screen{min-height:50vh}.min-h-52{min-height:13rem}.min-h-6{min-height:1.5rem}.min-h-\[100px\]{min-height:100px}.min-h-\[350px\]{min-height:350px}.min-h-\[55vh\]{min-height:55vh}.min-h-\[75px\]{min-height:75px}.min-h-\[80vh\]{min-height:80vh}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-10{width:2.5rem}.w-11\/12{width:91.666667%}.w-12{width:3rem}.w-28{width:7rem}.w-3{width:.75rem}.w-4{width:1rem}.w-4\.5{width:1.125rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\.5{width:1.375rem}.w-50{width:12.5rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-8{width:2rem}.w-80{width:20rem}.w-90{width:22.5rem}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[900px\]{min-width:900px}.max-w-180{max-width:45rem}.max-w-40{max-width:10rem}.max-w-60{max-width:15rem}.max-w-64{max-width:16rem}.max-w-\[1920px\]{max-width:1920px}.max-w-\[300px\]{max-width:300px}.max-w-\[400px\]{max-width:400px}.max-w-\[550px\]{max-width:550px}.max-w-full{max-width:100%}.flex-auto{flex:1 1 auto}.grow{flex-grow:1}.basis-full{flex-basis:100%}.border-collapse{border-collapse:collapse}.-translate-x-1{--tw-translate-x:-0.25rem}.-translate-x-1,.-translate-x-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\.5{--tw-translate-x:-0.375rem}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0{--tw-translate-y:-0px}.-translate-y-0\.4{--tw-translate-y:-0.1rem}.-translate-y-0\.4,.-translate-y-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0\.5{--tw-translate-y:-0.125rem}.-translate-y-1{--tw-translate-y:-0.25rem}.-translate-y-1,.-translate-y-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\.5{--tw-translate-y:-0.375rem}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0\.5{--tw-translate-x:0.125rem}.translate-x-1{--tw-translate-x:0.25rem}.translate-x-1,.translate-x-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-2{--tw-translate-x:0.5rem}.translate-x-90{--tw-translate-x:22.5rem}.translate-x-90,.translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y:0px}.translate-y-0\.5{--tw-translate-y:0.125rem}.translate-y-0\.5,.translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y:0.25rem}.translate-y-16{--tw-translate-y:4rem}.translate-y-16,.translate-y-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y:0.5rem}.-rotate-12{--tw-rotate:-12deg}.-rotate-12,.rotate-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-12{--tw-rotate:12deg}.rotate-180{--tw-rotate:180deg}.rotate-180,.scale-105{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.scale-110,.scale-50{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-50{--tw-scale-x:.5;--tw-scale-y:.5}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-2{row-gap:.5rem}.gap-y-4{row-gap:1rem}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded,.rounded-1{border-radius:.25rem}.rounded-1\.4{border-radius:.35rem}.rounded-10{border-radius:2.5rem}.rounded-2xl{border-radius:1rem}.rounded-circle{border-radius:50%}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-xl{border-radius:.75rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-lg{border-bottom-left-radius:.5rem}.rounded-b-lg,.rounded-r-lg{border-bottom-right-radius:.5rem}.rounded-r-lg{border-top-right-radius:.5rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-gray-200{--tw-border-opacity:1;border-color:rgb(233 236 239/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.border-primary{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.bg-gray-600\/50{background-color:#6c757d80}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(251 99 64/var(--tw-bg-opacity))}.bg-primary{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.bg-primary\/20{background-color:#0b557733}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity))}.bg-secondary{--tw-bg-opacity:1;background-color:rgb(46 172 104/var(--tw-bg-opacity))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.bg-slate-800\/10{background-color:#3a416f1a}.bg-transparent{background-color:initial}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-black\/40{--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#0006 var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.bg-150{background-size:150%}.bg-contain{background-size:contain}.bg-clip-border{background-clip:initial}.bg-clip-padding{background-clip:padding-box}.bg-center{background-position:50%}.bg-left{background-position:0}.bg-x-25{background-position:25% 0}.bg-no-repeat{background-repeat:no-repeat}.fill-amber-500{fill:#f59e0b}.fill-blue-500{fill:#5e72e4}.fill-gray-500{fill:#adb5bd}.fill-gray-600{fill:#6c757d}.fill-green-500{fill:#22c55e}.fill-primary{fill:#0b5577}.fill-red-500{fill:#f53939}.fill-sky-500{fill:#0ea5e9}.fill-slate-800{fill:#3a416f}.fill-white{fill:#fff}.fill-yellow-500{fill:#fbb140}.stroke-blue-400{stroke:#60a5fa}.stroke-blue-500{stroke:#5e72e4}.stroke-emerald-600{stroke:#059669}.stroke-gray-100{stroke:#ebeff4}.stroke-gray-600{stroke:#6c757d}.stroke-green-700{stroke:#15803d}.stroke-orange-500{stroke:#fb6340}.stroke-pink-600{stroke:#db2777}.stroke-red-500{stroke:#f53939}.stroke-sky-500{stroke:#0ea5e9}.stroke-teal-600{stroke:#0d9488}.stroke-yellow-500{stroke:#fbb140}.stroke-0{stroke-width:0}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pb-8{padding-bottom:2rem}.pl-0{padding-left:0}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-6{padding-left:1.5rem}.pr-0{padding-right:0}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-20{padding-top:5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-sans{font-family:Open Sans}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-5{line-height:1.25rem}.leading-5\.6{line-height:1.4rem}.leading-6{line-height:1.5rem}.leading-8{line-height:2rem}.leading-default{line-height:1.6}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-tight{line-height:1.25}.tracking-tight-rem{letter-spacing:-.025rem}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-blue-500{--tw-text-opacity:1;color:rgb(94 114 228/var(--tw-text-opacity))}.text-emerald-500{--tw-text-opacity:1;color:rgb(45 206 137/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.text-gray-600\/90{color:#6c757de6}.text-gray-700{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.text-gray-700\/80{color:#495057cc}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}.text-secondary{--tw-text-opacity:1;color:rgb(46 172 104/var(--tw-text-opacity))}.text-sky-600{--tw-text-opacity:1;color:rgb(62 161 236/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(103 116 142/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(52 71 103/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(251 177 64/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-3xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-3xl{--tw-shadow:0 8px 26px -4px #14141426,0 8px 9px -5px #1414140f;--tw-shadow-colored:0 8px 26px -4px var(--tw-shadow-color),0 8px 9px -5px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.shadow-md,.shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-sm{--tw-shadow:0 .25rem .375rem -.0625rem #1414141f,0 .125rem .25rem -.0625rem #14141412;--tw-shadow-colored:0 .25rem .375rem -.0625rem var(--tw-shadow-color),0 .125rem .25rem -.0625rem var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color)}.shadow-xs{--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.outline{outline-style:solid}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:ease;transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:ease;transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-250{transition-duration:.25s}.duration-300{transition-duration:.3s}.duration-700{transition-duration:.7s}.ease-in{transition-timing-function:ease-in}.ease-in-out{transition-timing-function:ease-in-out}.flex-wrap-inherit{flex-wrap:inherit}@font-face{font-family:Open Sans;src:url(../webfonts/OpenSans.ttf)}*{font-family:Open Sans,sans-serif!important}.ace_content,.ace_editor,.ace_editor div{font-family:Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace!important;font-size:16px!important;font-weight:400!important}.close-btn{display:inline-block;cursor:pointer;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.close-btn,.close-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.close-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.close-btn:focus,.close-btn:hover{background-color:#fffc}.close-btn:active{opacity:.85}:is(.dark .close-btn){--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity));--tw-brightness:brightness(.9)}:is(.dark .close-btn),:is(.dark .close-btn:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .close-btn:hover){--tw-brightness:brightness(.75)}.valid-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.valid-btn,.valid-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.valid-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.valid-btn:focus,.valid-btn:hover{background-color:#22c55ecc}.valid-btn:active{opacity:.85}:is(.dark .valid-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.delete-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.delete-btn,.delete-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.delete-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.delete-btn:focus,.delete-btn:hover{background-color:#f53939cc}.delete-btn:active{opacity:.85}:is(.dark .delete-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.edit-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.edit-btn,.edit-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.edit-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.edit-btn:focus,.edit-btn:hover{background-color:#fbb140cc}.edit-btn:active{opacity:.85}:is(.dark .edit-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.info-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.info-btn,.info-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.info-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.info-btn:focus,.info-btn:hover{background-color:#0ea5e9cc}.info-btn:active{opacity:.85}:is(.dark .info-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.checkbox{position:relative;z-index:10;float:left;margin-top:.25rem;height:1.25rem;width:1.25rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.35rem;border-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-size:contain;background-position:50%;background-repeat:no-repeat;vertical-align:top;font-size:1rem;line-height:1.5rem;transition-property:all;transition-timing-function:ease;transition-duration:.25s}.checkbox,.checkbox:disabled{--tw-border-opacity:1;--tw-bg-opacity:1}.checkbox:disabled{cursor:default;border-color:rgb(206 212 218/var(--tw-border-opacity));background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.checkbox[aria-checked=true]{z-index:0;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checkbox:disabled[aria-checked=true]{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}:is(.dark .checkbox){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .checkbox[aria-checked=true]){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled[aria-checked=true]){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.custom-select-btn{display:flex;width:100%;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;border-style:solid;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;text-align:left;vertical-align:middle;font-size:.875rem;font-weight:400;line-height:1.4rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}.custom-select-btn::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.custom-select-btn:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .custom-select-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .custom-select-btn),:is(.dark .custom-select-btn:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .custom-select-btn:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.custom-select-btn{padding:.5rem .75rem}}.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity))}.active.custom-dropdown-btn,:is(.dark .custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.active.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));color:rgb(210 214 218/var(--tw-text-opacity))}.regular-input,:is(.dark .active.custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1}.regular-input{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.5rem;border-width:1px;border-style:solid;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;font-size:.875rem;font-weight:400;line-height:1.4rem;color:rgb(73 80 87/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.regular-input::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input:focus{border-color:#d2d6da00;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.regular-input:valid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.regular-input:invalid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))}.regular-input:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .regular-input){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .regular-input),:is(.dark .regular-input:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .regular-input:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.regular-input{padding:.5rem .75rem}}.input-title{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .input-title){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.popover-settings-container{position:absolute;left:0;bottom:0;z-index:50;--tw-translate-y:-1.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:all;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.5s}:is(.dark .popover-settings-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.popover-settings-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .popover-settings-text){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity));opacity:.9}.popover-settings-svg{margin-left:.5rem;height:1.25rem;width:1.25rem;cursor:pointer;fill:#5e72e4}.popover-settings-svg:hover{--tw-brightness:brightness(.75);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.active.settings-tabs-tab-btn{position:relative;z-index:10;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .active.settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .active.settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-tab-btn{position:relative;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-name{padding-left:.75rem;padding-right:.5rem;--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-name){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.settings-tabs-popover-container{position:absolute;top:60px;left:0;z-index:50;min-width:150px;border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}:is(.dark .settings-tabs-popover-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-popover-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.settings-tabs-mobile-btn{margin-top:.25rem;margin-bottom:.25rem;display:flex;width:100%;cursor:pointer;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-mobile-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-mobile-btn:hover){--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-mobile-btn-text{--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-mobile-btn-text){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.active.settings-tabs-mobile-dropdown-btn{position:relative;z-index:1000;margin-top:0;margin-bottom:0;cursor:pointer;border-radius:0;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .active.settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first.settings-tabs-mobile-dropdown-btn{border-top-left-radius:.25rem;border-top-right-radius:.25rem;border-width:1px}.settings-tabs-mobile-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;display:flex;cursor:pointer;justify-content:space-between;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first-letter\:absolute:first-letter{position:absolute}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.before\:float-left:before{content:var(--tw-content);float:left}.before\:pr-2:before{content:var(--tw-content);padding-right:.5rem}.before\:text-white:before{content:var(--tw-content);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.before\:content-\[\'\/\'\]:before{--tw-content:"/";content:var(--tw-content)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-px:after{content:var(--tw-content);top:1px}.after\:float-right:after{content:var(--tw-content);float:right}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:translate-x-px:after{content:var(--tw-content);--tw-translate-x:1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:rounded-circle:after{content:var(--tw-content);border-radius:50%}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.after\:pl-2:after{content:var(--tw-content);padding-left:.5rem}.after\:text-gray-600:after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.after\:shadow-2xl:after{content:var(--tw-content);--tw-shadow:0 .3125rem .625rem 0 #0000001f;--tw-shadow-colored:0 .3125rem .625rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.after\:duration-300:after{content:var(--tw-content);transition-duration:.3s}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.after\:content-\[\'\/\'\]:after{--tw-content:"/";content:var(--tw-content)}.checked\:z-0:checked{z-index:0}.checked\:border-primary:checked{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.checked\:bg-primary:checked{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checked\:bg-none:checked{background-image:none}.checked\:bg-right:checked{background-position:100%}.checked\:after\:translate-x-5:checked:after{--tw-translate-x:1.25rem}.checked\:after\:translate-x-5:checked:after,.checked\:after\:translate-x-5\.3:checked:after{content:var(--tw-content);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.checked\:after\:translate-x-5\.3:checked:after{--tw-translate-x:1.3rem}.valid\:\!border-red-500:valid{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.hover\:-translate-y-0:hover{--tw-translate-y:-0px}.hover\:-translate-y-0:hover,.hover\:-translate-y-0\.4:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:-translate-y-0\.4:hover{--tw-translate-y:-0.1rem}.hover\:-translate-y-px:hover{--tw-translate-y:-1px}.hover\:-translate-y-px:hover,.hover\:scale-102:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-102:hover{--tw-scale-x:1.02;--tw-scale-y:1.02}.hover\:rounded-lg:hover{border-radius:.5rem}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.hover\:bg-green-500\/80:hover{background-color:#22c55ecc}.hover\:bg-primary\/30:hover{background-color:#0b55774d}.hover\:bg-primary\/5:hover{background-color:#0b55770d}.hover\:bg-primary\/80:hover{background-color:#0b5577cc}.hover\:bg-red-500\/80:hover{background-color:#f53939cc}.hover\:bg-sky-500\/80:hover{background-color:#0ea5e9cc}.hover\:bg-yellow-500\/80:hover{background-color:#fbb140cc}.hover\:italic:hover{font-style:italic}.hover\:no-underline:hover{text-decoration-line:none}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:brightness-75:hover{--tw-brightness:brightness(.75)}.hover\:brightness-75:hover,.hover\:brightness-90:hover{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.hover\:brightness-90:hover{--tw-brightness:brightness(.9)}.hover\:brightness-95:hover{--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:\!border-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:border-green-500:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:border-primary:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.focus\:bg-green-500\/80:focus{background-color:#22c55ecc}.focus\:bg-primary\/80:focus{background-color:#0b5577cc}.focus\:bg-red-500\/80:focus{background-color:#f53939cc}.focus\:bg-sky-500\/80:focus{background-color:#0ea5e9cc}.focus\:bg-yellow-500\/80:focus{background-color:#fbb140cc}.focus\:valid\:\!border-red-500:valid:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:valid\:border-green-500:valid:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:invalid\:border-red-500:invalid:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.focus\:file\:invalid\:border-red-500:invalid::file-selector-button:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.active\:\!border-red-500:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.active\:opacity-85:active{opacity:.85}.active\:valid\:\!border-red-500:valid:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-gray-400:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.disabled\:bg-gray-400:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.disabled\:text-gray-700:disabled{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.disabled\:opacity-75:disabled{opacity:.75}.disabled\:hover\:translate-y-0:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .dark\:inline){display:inline}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1;border-color:rgb(73 80 87/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-600){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-800){--tw-border-opacity:1;border-color:rgb(58 65 111/var(--tw-border-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:bg-green-500\/90){background-color:#22c55ee6}:is(.dark .dark\:bg-primary){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:bg-primary\/50){background-color:#0b557780}:is(.dark .dark\:bg-slate-700){--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-700\/50){background-color:#34476780}:is(.dark .dark\:bg-slate-850){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900){--tw-bg-opacity:1;background-color:rgb(5 17 57/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900\/30){background-color:#0511394d}:is(.dark .dark\:bg-gradient-to-r){background-image:linear-gradient(to right,var(--tw-gradient-stops))}:is(.dark .dark\:from-transparent){--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}:is(.dark .dark\:via-white){--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#fff var(--tw-gradient-via-position),var(--tw-gradient-to)}:is(.dark .dark\:to-transparent){--tw-gradient-to:#0000 var(--tw-gradient-to-position)}:is(.dark .dark\:fill-gray-300){fill:#d2d6da}:is(.dark .dark\:fill-gray-500){fill:#adb5bd}:is(.dark .dark\:fill-gray-600){fill:#6c757d}:is(.dark .dark\:stroke-gray-600){stroke:#6c757d}:is(.dark .dark\:text-gray-100){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-500){--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:text-red-500){--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}:is(.dark .dark\:text-white){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .dark\:text-white\/80){color:#fffc}:is(.dark .dark\:text-white\/90){color:#ffffffe6}:is(.dark .dark\:opacity-60){opacity:.6}:is(.dark .dark\:opacity-75){opacity:.75}:is(.dark .dark\:opacity-80){opacity:.8}:is(.dark .dark\:opacity-90){opacity:.9}:is(.dark .dark\:shadow-dark-xl){--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color)}:is(.dark .dark\:shadow-dark-xl),:is(.dark .dark\:shadow-none){box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-none){--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}:is(.dark .dark\:brightness-110){--tw-brightness:brightness(1.1)}:is(.dark .dark\:brightness-110),:is(.dark .dark\:brightness-125){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-125){--tw-brightness:brightness(1.25)}:is(.dark .dark\:brightness-150){--tw-brightness:brightness(1.5)}:is(.dark .dark\:brightness-150),:is(.dark .dark\:brightness-90){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-90){--tw-brightness:brightness(.9)}:is(.dark .dark\:brightness-95){--tw-brightness:brightness(.95)}:is(.dark .dark\:brightness-95),:is(.dark .dark\:brightness-\[0\.885\]){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-\[0\.885\]){--tw-brightness:brightness(0.885)}:is(.dark .dark\:after\:text-gray-500):after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:checked\:border-primary:checked){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}:is(.dark .dark\:checked\:bg-primary:checked){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-primary\/20:hover){background-color:#0b557733}:is(.dark .dark\:hover\:bg-primary\/60:hover){background-color:#0b557799}:is(.dark .dark\:hover\:bg-slate-700\/50:hover){background-color:#34476780}:is(.dark .dark\:hover\:bg-slate-800:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:brightness-100:hover){--tw-brightness:brightness(1)}:is(.dark .dark\:hover\:brightness-100:hover),:is(.dark .dark\:hover\:brightness-105:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:hover\:brightness-105:hover){--tw-brightness:brightness(1.05)}:is(.dark .dark\:hover\:brightness-90:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:disabled\:border-gray-800:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity))}:is(.dark .dark\:disabled\:bg-gray-800:disabled){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:disabled\:text-gray-300:disabled){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}@media (min-width:576px){.sm\:right-24{right:6rem}.sm\:right-40{right:10rem}.sm\:right-6{right:1.5rem}.sm\:top-2{top:.5rem}.sm\:top-\[4\.5rem\]{top:4.5rem}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-start-5{grid-column-start:5}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:ml-1{margin-left:.25rem}.sm\:mr-16{margin-right:4rem}.sm\:h-10{height:2.5rem}.sm\:h-14{height:3.5rem}.sm\:h-7{height:1.75rem}.sm\:max-h-125{max-height:31.25rem}.sm\:max-h-28{max-height:7rem}.sm\:w-36{width:9rem}.sm\:w-50{width:12.5rem}.sm\:w-7{width:1.75rem}.sm\:min-w-\[500px\]{min-width:500px}.sm\:scale-100{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:justify-items-start{justify-items:start}.sm\:gap-4{gap:1rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-0{padding-top:0;padding-bottom:0}.sm\:pt-6{padding-top:1.5rem}.sm\:text-left{text-align:left}}@media (min-width:768px){.md\:top-11{top:2.75rem}.md\:top-\[45\%\]{top:45%}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-7{grid-column:span 7/span 7}.md\:col-span-8{grid-column:span 8/span 8}.md\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.md\:my-3{margin-top:.75rem;margin-bottom:.75rem}.md\:mb-0{margin-bottom:0}.md\:mb-3{margin-bottom:.75rem}.md\:mb-8{margin-bottom:2rem}.md\:mr-3{margin-right:.75rem}.md\:mt-0{margin-top:0}.md\:mt-6{margin-top:1.5rem}.md\:block{display:block}.md\:hidden{display:none}.md\:h-16{height:4rem}.md\:max-h-160{max-height:40rem}.md\:min-h-75-screen{min-height:75vh}.md\:w-1\/2{width:50%}.md\:w-60{width:15rem}.md\:justify-end{justify-content:flex-end}.md\:gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:py-4{padding-top:1rem;padding-bottom:1rem}.md\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:992px){.lg\:relative{position:relative}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:my-3{margin-top:.75rem;margin-bottom:.75rem}.lg\:mt-0{margin-top:0}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:h-24{height:6rem}.lg\:h-9{height:2.25rem}.lg\:w-80{width:20rem}.lg\:w-9{width:2.25rem}.lg\:flex-row{flex-direction:row}.lg\:flex-nowrap{flex-wrap:nowrap}.lg\:justify-start{justify-content:flex-start}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:gap-6{gap:1.5rem}.lg\:bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:pb-1{padding-bottom:.25rem}.lg\:text-left{text-align:left}}@media (min-width:1200px){.xl\:left-0{left:0}.xl\:right-24{right:6rem}.xl\:right-6{right:1.5rem}.xl\:ml-6{margin-left:1.5rem}.xl\:ml-68{margin-left:17rem}.xl\:hidden{display:none}.xl\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.xl\:p-1{padding:.25rem}.xl\:p-1\.5{padding:.375rem}.xl\:pl-75{padding-left:18.75rem}}@media (min-width:1320px){.\32xl\:col-span-4{grid-column:span 4/span 4}.\32xl\:col-span-6{grid-column:span 6/span 6}.\32xl\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.\32xl\:my-3{margin-top:.75rem;margin-bottom:.75rem}}@media (min-width:1920px){.\33xl\:col-span-3{grid-column:span 3/span 3}.\33xl\:col-span-4{grid-column:span 4/span 4}.\33xl\:col-span-5{grid-column:span 5/span 5}}@media (min-width:340px){.xs\:flex{display:flex}.xs\:flex-row{flex-direction:row}.xs\:items-center{align-items:center}.xs\:justify-start{justify-content:flex-start}.xs\:pl-2{padding-left:.5rem}.xs\:text-sm{font-size:.875rem;line-height:1.5rem}}.\[\&\>\*\]\:bg-primary>*{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))} \ No newline at end of file +/*! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e9ecef}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Open Sans;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#ced4da}input::placeholder,textarea::placeholder{opacity:1;color:#ced4da}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#5e72e480;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.\!container{width:100%!important;margin-right:auto!important;margin-left:auto!important;padding-right:1.5rem!important;padding-left:1.5rem!important}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:1.5rem;padding-left:1.5rem}@media (min-width:340px){.\!container{max-width:340px!important}.container{max-width:340px}}@media (min-width:576px){.\!container{max-width:576px!important}.container{max-width:576px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:992px){.\!container{max-width:992px!important}.container{max-width:992px}}@media (min-width:1200px){.\!container{max-width:1200px!important}.container{max-width:1200px}}@media (min-width:1320px){.\!container{max-width:1320px!important}.container{max-width:1320px}}@media (min-width:1920px){.\!container{max-width:1920px!important}.container{max-width:1920px}}a{letter-spacing:-.025rem}hr{margin:1rem 0;border:0;opacity:.25}img{max-width:none}label{display:inline-block}p{line-height:1.625;font-weight:400;margin-bottom:1rem}small{font-size:.875em}svg{display:inline}table{border-collapse:inherit}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;color:#344767}h1,h2,h3,h4{letter-spacing:-.05rem}h1,h2,h3{font-weight:700}h4,h5,h6{font-weight:600}h1{font-size:3rem;line-height:1.25}h2{font-size:2.25rem;line-height:1.3}h3{font-size:1.875rem}h3,h4{line-height:1.375}h4{font-size:1.5rem}h5{font-size:1.25rem;line-height:1.375}h6{font-size:1rem;line-height:1.625}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.-left-full{left:-100%}.-right-0{right:0}.-right-1{right:-.25rem}.bottom-0{bottom:0}.left-0{left:0}.left-3{left:.75rem}.left-auto{left:auto}.left-full{left:100%}.right-0{right:0}.right-2{right:.5rem}.right-20{right:5rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-7{right:1.75rem}.right-8{right:2rem}.top-0{top:0}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-16{top:4rem}.top-2{top:.5rem}.top-4{top:1rem}.top-5{top:1.25rem}.top-\[4\.5rem\]{top:4.5rem}.top-\[43\%\]{top:43%}.top-\[60\%\]{top:60%}.top-\[8\.2rem\]{top:8.2rem}.-z-10{z-index:-10}.z-10{z-index:10}.z-100{z-index:100}.z-110{z-index:110}.z-20{z-index:20}.z-50{z-index:50}.z-990{z-index:990}.z-\[10000\]{z-index:10000}.z-\[1000\]{z-index:1000}.z-\[1001\]{z-index:1001}.z-\[20\]{z-index:20}.z-sticky{z-index:1020}.order-1{order:1}.order-2{order:2}.col-span-1{grid-column:span 1/span 1}.col-span-12{grid-column:span 12/span 12}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-6{grid-column:span 6/span 6}.col-span-9{grid-column:span 9/span 9}.float-right{float:right}.float-left{float:left}.m-0{margin:0}.m-2{margin:.5rem}.m-4{margin:1rem}.mx-0{margin-left:0;margin-right:0}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-2\.5{margin-left:.625rem;margin-right:.625rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-7{margin-bottom:1.75rem}.mb-8{margin-bottom:2rem}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-12{margin-left:3rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-12{margin-right:3rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-6{margin-right:1.5rem}.mr-7{margin-right:1.75rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[4\.5rem\]{margin-top:4.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1\/3{height:33.333333%}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-19{height:4.75rem}.h-24{height:6rem}.h-3{height:.75rem}.h-4{height:1rem}.h-4\.5{height:1.125rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\.5{height:1.375rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[3\.5rem\]{height:3.5rem}.h-\[4rem\]{height:4rem}.h-\[90vh\]{height:90vh}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-sidenav{height:calc(100vh - 360px)}.max-h-100{max-height:25rem}.max-h-135{max-height:33.75rem}.max-h-30{max-height:7.5rem}.max-h-80{max-height:20rem}.max-h-90{max-height:22.5rem}.max-h-screen{max-height:100vh}.min-h-12{min-height:3rem}.min-h-20{min-height:5rem}.min-h-50-screen{min-height:50vh}.min-h-52{min-height:13rem}.min-h-6{min-height:1.5rem}.min-h-\[100px\]{min-height:100px}.min-h-\[350px\]{min-height:350px}.min-h-\[55vh\]{min-height:55vh}.min-h-\[75px\]{min-height:75px}.min-h-\[80vh\]{min-height:80vh}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-10{width:2.5rem}.w-11\/12{width:91.666667%}.w-12{width:3rem}.w-28{width:7rem}.w-3{width:.75rem}.w-4{width:1rem}.w-4\.5{width:1.125rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\.5{width:1.375rem}.w-50{width:12.5rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-8{width:2rem}.w-80{width:20rem}.w-90{width:22.5rem}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[900px\]{min-width:900px}.max-w-180{max-width:45rem}.max-w-40{max-width:10rem}.max-w-60{max-width:15rem}.max-w-64{max-width:16rem}.max-w-\[1920px\]{max-width:1920px}.max-w-\[300px\]{max-width:300px}.max-w-\[400px\]{max-width:400px}.max-w-\[550px\]{max-width:550px}.max-w-full{max-width:100%}.flex-auto{flex:1 1 auto}.grow{flex-grow:1}.basis-full{flex-basis:100%}.border-collapse{border-collapse:collapse}.-translate-x-1{--tw-translate-x:-0.25rem}.-translate-x-1,.-translate-x-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\.5{--tw-translate-x:-0.375rem}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0{--tw-translate-y:-0px}.-translate-y-0\.4{--tw-translate-y:-0.1rem}.-translate-y-0\.4,.-translate-y-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0\.5{--tw-translate-y:-0.125rem}.-translate-y-1{--tw-translate-y:-0.25rem}.-translate-y-1,.-translate-y-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\.5{--tw-translate-y:-0.375rem}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0\.5{--tw-translate-x:0.125rem}.translate-x-1{--tw-translate-x:0.25rem}.translate-x-1,.translate-x-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-2{--tw-translate-x:0.5rem}.translate-x-90{--tw-translate-x:22.5rem}.translate-x-90,.translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y:0px}.translate-y-0\.5{--tw-translate-y:0.125rem}.translate-y-0\.5,.translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y:0.25rem}.translate-y-16{--tw-translate-y:4rem}.translate-y-16,.translate-y-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y:0.5rem}.-rotate-12{--tw-rotate:-12deg}.-rotate-12,.rotate-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-12{--tw-rotate:12deg}.rotate-180{--tw-rotate:180deg}.rotate-180,.scale-105{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.scale-110,.scale-50{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-50{--tw-scale-x:.5;--tw-scale-y:.5}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-2{row-gap:.5rem}.gap-y-4{row-gap:1rem}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded,.rounded-1{border-radius:.25rem}.rounded-1\.4{border-radius:.35rem}.rounded-10{border-radius:2.5rem}.rounded-2xl{border-radius:1rem}.rounded-circle{border-radius:50%}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-xl{border-radius:.75rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-lg{border-bottom-left-radius:.5rem}.rounded-b-lg,.rounded-r-lg{border-bottom-right-radius:.5rem}.rounded-r-lg{border-top-right-radius:.5rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-gray-200{--tw-border-opacity:1;border-color:rgb(233 236 239/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.border-primary{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.bg-gray-600\/50{background-color:#6c757d80}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(251 99 64/var(--tw-bg-opacity))}.bg-primary{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.bg-primary\/20{background-color:#0b557733}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity))}.bg-secondary{--tw-bg-opacity:1;background-color:rgb(46 172 104/var(--tw-bg-opacity))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.bg-slate-800\/10{background-color:#3a416f1a}.bg-transparent{background-color:initial}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-black\/40{--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#0006 var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.bg-150{background-size:150%}.bg-contain{background-size:contain}.bg-clip-border{background-clip:initial}.bg-clip-padding{background-clip:padding-box}.bg-center{background-position:50%}.bg-left{background-position:0}.bg-x-25{background-position:25% 0}.bg-no-repeat{background-repeat:no-repeat}.fill-amber-500{fill:#f59e0b}.fill-blue-500{fill:#5e72e4}.fill-gray-500{fill:#adb5bd}.fill-gray-600{fill:#6c757d}.fill-green-500{fill:#22c55e}.fill-primary{fill:#0b5577}.fill-red-500{fill:#f53939}.fill-sky-500{fill:#0ea5e9}.fill-slate-800{fill:#3a416f}.fill-white{fill:#fff}.fill-yellow-500{fill:#fbb140}.stroke-blue-400{stroke:#60a5fa}.stroke-blue-500{stroke:#5e72e4}.stroke-emerald-600{stroke:#059669}.stroke-gray-100{stroke:#ebeff4}.stroke-gray-600{stroke:#6c757d}.stroke-green-700{stroke:#15803d}.stroke-orange-500{stroke:#fb6340}.stroke-pink-600{stroke:#db2777}.stroke-red-500{stroke:#f53939}.stroke-sky-500{stroke:#0ea5e9}.stroke-teal-600{stroke:#0d9488}.stroke-yellow-500{stroke:#fbb140}.stroke-0{stroke-width:0}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pb-8{padding-bottom:2rem}.pl-0{padding-left:0}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-6{padding-left:1.5rem}.pr-0{padding-right:0}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-20{padding-top:5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-sans{font-family:Open Sans}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-5{line-height:1.25rem}.leading-5\.6{line-height:1.4rem}.leading-6{line-height:1.5rem}.leading-8{line-height:2rem}.leading-default{line-height:1.6}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-tight{line-height:1.25}.tracking-tight-rem{letter-spacing:-.025rem}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-blue-500{--tw-text-opacity:1;color:rgb(94 114 228/var(--tw-text-opacity))}.text-emerald-500{--tw-text-opacity:1;color:rgb(45 206 137/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.text-gray-600\/90{color:#6c757de6}.text-gray-700{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.text-gray-700\/80{color:#495057cc}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}.text-secondary{--tw-text-opacity:1;color:rgb(46 172 104/var(--tw-text-opacity))}.text-sky-600{--tw-text-opacity:1;color:rgb(62 161 236/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(103 116 142/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(52 71 103/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(251 177 64/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-3xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-3xl{--tw-shadow:0 8px 26px -4px #14141426,0 8px 9px -5px #1414140f;--tw-shadow-colored:0 8px 26px -4px var(--tw-shadow-color),0 8px 9px -5px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.shadow-md,.shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-sm{--tw-shadow:0 .25rem .375rem -.0625rem #1414141f,0 .125rem .25rem -.0625rem #14141412;--tw-shadow-colored:0 .25rem .375rem -.0625rem var(--tw-shadow-color),0 .125rem .25rem -.0625rem var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color)}.shadow-xs{--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.outline{outline-style:solid}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:ease;transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:ease;transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-250{transition-duration:.25s}.duration-300{transition-duration:.3s}.duration-700{transition-duration:.7s}.ease-in{transition-timing-function:ease-in}.ease-in-out{transition-timing-function:ease-in-out}.flex-wrap-inherit{flex-wrap:inherit}@font-face{font-family:Open Sans;src:url(../webfonts/OpenSans.ttf)}*{font-family:Open Sans,sans-serif!important}.ace_content,.ace_editor,.ace_editor div{font-family:Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace!important;font-size:16px!important;font-weight:400!important}.close-btn{display:inline-block;cursor:pointer;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.close-btn,.close-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.close-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.close-btn:focus,.close-btn:hover{background-color:#fffc}.close-btn:active{opacity:.85}:is(.dark .close-btn){--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity));--tw-brightness:brightness(.9)}:is(.dark .close-btn),:is(.dark .close-btn:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .close-btn:hover){--tw-brightness:brightness(.75)}.valid-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.valid-btn,.valid-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.valid-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.valid-btn:focus,.valid-btn:hover{background-color:#22c55ecc}.valid-btn:active{opacity:.85}:is(.dark .valid-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.delete-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.delete-btn,.delete-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.delete-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.delete-btn:focus,.delete-btn:hover{background-color:#f53939cc}.delete-btn:active{opacity:.85}:is(.dark .delete-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.edit-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.edit-btn,.edit-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.edit-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.edit-btn:focus,.edit-btn:hover{background-color:#fbb140cc}.edit-btn:active{opacity:.85}:is(.dark .edit-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.info-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.info-btn,.info-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.info-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.info-btn:focus,.info-btn:hover{background-color:#0ea5e9cc}.info-btn:active{opacity:.85}:is(.dark .info-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.checkbox{position:relative;z-index:10;float:left;margin-top:.25rem;height:1.25rem;width:1.25rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.35rem;border-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-size:contain;background-position:50%;background-repeat:no-repeat;vertical-align:top;font-size:1rem;line-height:1.5rem;transition-property:all;transition-timing-function:ease;transition-duration:.25s}.checkbox,.checkbox:disabled{--tw-border-opacity:1;--tw-bg-opacity:1}.checkbox:disabled{cursor:default;border-color:rgb(206 212 218/var(--tw-border-opacity));background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.checkbox[aria-checked=true]{z-index:0;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checkbox:disabled[aria-checked=true]{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}:is(.dark .checkbox){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .checkbox[aria-checked=true]){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled[aria-checked=true]){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.custom-select-btn{display:flex;width:100%;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;border-style:solid;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;text-align:left;vertical-align:middle;font-size:.875rem;font-weight:400;line-height:1.4rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}.custom-select-btn::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.custom-select-btn:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .custom-select-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .custom-select-btn),:is(.dark .custom-select-btn:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .custom-select-btn:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.custom-select-btn{padding:.5rem .75rem}}.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity))}.active.custom-dropdown-btn,:is(.dark .custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.active.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));color:rgb(210 214 218/var(--tw-text-opacity))}.regular-input,:is(.dark .active.custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1}.regular-input{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.5rem;border-width:1px;border-style:solid;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;font-size:.875rem;font-weight:400;line-height:1.4rem;color:rgb(73 80 87/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.regular-input::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input:focus{border-color:#d2d6da00;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.regular-input:valid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.regular-input:invalid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))}.regular-input:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .regular-input){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .regular-input),:is(.dark .regular-input:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .regular-input:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.regular-input{padding:.5rem .75rem}}.input-title{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .input-title){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.popover-settings-container{position:absolute;left:0;bottom:0;z-index:50;--tw-translate-y:-1.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:all;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.5s}:is(.dark .popover-settings-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.popover-settings-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .popover-settings-text){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity));opacity:.9}.popover-settings-svg{margin-left:.5rem;height:1.25rem;width:1.25rem;cursor:pointer;fill:#5e72e4}.popover-settings-svg:hover{--tw-brightness:brightness(.75);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.active.settings-tabs-tab-btn{position:relative;z-index:10;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .active.settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .active.settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-tab-btn{position:relative;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-name{padding-left:.75rem;padding-right:.5rem;--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-name){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.settings-tabs-popover-container{position:absolute;top:60px;left:0;z-index:50;min-width:150px;border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}:is(.dark .settings-tabs-popover-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-popover-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.settings-tabs-mobile-btn{margin-top:.25rem;margin-bottom:.25rem;display:flex;width:100%;cursor:pointer;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-mobile-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-mobile-btn:hover){--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-mobile-btn-text{--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-mobile-btn-text){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.active.settings-tabs-mobile-dropdown-btn{position:relative;z-index:1000;margin-top:0;margin-bottom:0;cursor:pointer;border-radius:0;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .active.settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first.settings-tabs-mobile-dropdown-btn{border-top-left-radius:.25rem;border-top-right-radius:.25rem;border-width:1px}.settings-tabs-mobile-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;display:flex;cursor:pointer;justify-content:space-between;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first-letter\:absolute:first-letter{position:absolute}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.before\:float-left:before{content:var(--tw-content);float:left}.before\:pr-2:before{content:var(--tw-content);padding-right:.5rem}.before\:text-white:before{content:var(--tw-content);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.before\:content-\[\'\/\'\]:before{--tw-content:"/";content:var(--tw-content)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-px:after{content:var(--tw-content);top:1px}.after\:float-right:after{content:var(--tw-content);float:right}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:translate-x-px:after{content:var(--tw-content);--tw-translate-x:1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:rounded-circle:after{content:var(--tw-content);border-radius:50%}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.after\:pl-2:after{content:var(--tw-content);padding-left:.5rem}.after\:text-gray-600:after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.after\:shadow-2xl:after{content:var(--tw-content);--tw-shadow:0 .3125rem .625rem 0 #0000001f;--tw-shadow-colored:0 .3125rem .625rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.after\:duration-300:after{content:var(--tw-content);transition-duration:.3s}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.after\:content-\[\'\/\'\]:after{--tw-content:"/";content:var(--tw-content)}.checked\:z-0:checked{z-index:0}.checked\:border-primary:checked{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.checked\:bg-primary:checked{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checked\:bg-none:checked{background-image:none}.checked\:bg-right:checked{background-position:100%}.checked\:after\:translate-x-5:checked:after{--tw-translate-x:1.25rem}.checked\:after\:translate-x-5:checked:after,.checked\:after\:translate-x-5\.3:checked:after{content:var(--tw-content);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.checked\:after\:translate-x-5\.3:checked:after{--tw-translate-x:1.3rem}.valid\:\!border-red-500:valid{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.hover\:-translate-y-0:hover{--tw-translate-y:-0px}.hover\:-translate-y-0:hover,.hover\:-translate-y-0\.4:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:-translate-y-0\.4:hover{--tw-translate-y:-0.1rem}.hover\:-translate-y-px:hover{--tw-translate-y:-1px}.hover\:-translate-y-px:hover,.hover\:scale-102:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-102:hover{--tw-scale-x:1.02;--tw-scale-y:1.02}.hover\:rounded-lg:hover{border-radius:.5rem}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.hover\:bg-green-500\/80:hover{background-color:#22c55ecc}.hover\:bg-primary\/30:hover{background-color:#0b55774d}.hover\:bg-primary\/5:hover{background-color:#0b55770d}.hover\:bg-primary\/80:hover{background-color:#0b5577cc}.hover\:bg-red-500\/80:hover{background-color:#f53939cc}.hover\:bg-sky-500\/80:hover{background-color:#0ea5e9cc}.hover\:bg-yellow-500\/80:hover{background-color:#fbb140cc}.hover\:italic:hover{font-style:italic}.hover\:no-underline:hover{text-decoration-line:none}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:brightness-75:hover{--tw-brightness:brightness(.75)}.hover\:brightness-75:hover,.hover\:brightness-90:hover{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.hover\:brightness-90:hover{--tw-brightness:brightness(.9)}.hover\:brightness-95:hover{--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:\!border-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:border-green-500:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:border-primary:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.focus\:bg-green-500\/80:focus{background-color:#22c55ecc}.focus\:bg-primary\/80:focus{background-color:#0b5577cc}.focus\:bg-red-500\/80:focus{background-color:#f53939cc}.focus\:bg-sky-500\/80:focus{background-color:#0ea5e9cc}.focus\:bg-yellow-500\/80:focus{background-color:#fbb140cc}.focus\:valid\:\!border-red-500:valid:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:valid\:border-green-500:valid:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:invalid\:border-red-500:invalid:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.focus\:file\:invalid\:border-red-500:invalid::file-selector-button:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.active\:\!border-red-500:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.active\:opacity-85:active{opacity:.85}.active\:valid\:\!border-red-500:valid:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-gray-400:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.disabled\:bg-gray-400:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.disabled\:text-gray-700:disabled{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.disabled\:opacity-75:disabled{opacity:.75}.disabled\:hover\:translate-y-0:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .dark\:inline){display:inline}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1;border-color:rgb(73 80 87/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-600){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-800){--tw-border-opacity:1;border-color:rgb(58 65 111/var(--tw-border-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:bg-green-500\/90){background-color:#22c55ee6}:is(.dark .dark\:bg-primary){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:bg-primary\/50){background-color:#0b557780}:is(.dark .dark\:bg-slate-700){--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-700\/50){background-color:#34476780}:is(.dark .dark\:bg-slate-850){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900){--tw-bg-opacity:1;background-color:rgb(5 17 57/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900\/30){background-color:#0511394d}:is(.dark .dark\:bg-gradient-to-r){background-image:linear-gradient(to right,var(--tw-gradient-stops))}:is(.dark .dark\:from-transparent){--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}:is(.dark .dark\:via-white){--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#fff var(--tw-gradient-via-position),var(--tw-gradient-to)}:is(.dark .dark\:to-transparent){--tw-gradient-to:#0000 var(--tw-gradient-to-position)}:is(.dark .dark\:fill-gray-300){fill:#d2d6da}:is(.dark .dark\:fill-gray-500){fill:#adb5bd}:is(.dark .dark\:fill-gray-600){fill:#6c757d}:is(.dark .dark\:stroke-gray-600){stroke:#6c757d}:is(.dark .dark\:text-gray-100){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-500){--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:text-red-500){--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}:is(.dark .dark\:text-white){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .dark\:text-white\/80){color:#fffc}:is(.dark .dark\:text-white\/90){color:#ffffffe6}:is(.dark .dark\:opacity-60){opacity:.6}:is(.dark .dark\:opacity-75){opacity:.75}:is(.dark .dark\:opacity-80){opacity:.8}:is(.dark .dark\:opacity-90){opacity:.9}:is(.dark .dark\:shadow-dark-xl){--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color)}:is(.dark .dark\:shadow-dark-xl),:is(.dark .dark\:shadow-none){box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-none){--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}:is(.dark .dark\:brightness-110){--tw-brightness:brightness(1.1)}:is(.dark .dark\:brightness-110),:is(.dark .dark\:brightness-125){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-125){--tw-brightness:brightness(1.25)}:is(.dark .dark\:brightness-150){--tw-brightness:brightness(1.5)}:is(.dark .dark\:brightness-150),:is(.dark .dark\:brightness-90){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-90){--tw-brightness:brightness(.9)}:is(.dark .dark\:brightness-95){--tw-brightness:brightness(.95)}:is(.dark .dark\:brightness-95),:is(.dark .dark\:brightness-\[0\.885\]){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-\[0\.885\]){--tw-brightness:brightness(0.885)}:is(.dark .dark\:after\:text-gray-500):after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:checked\:border-primary:checked){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}:is(.dark .dark\:checked\:bg-primary:checked){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-primary\/20:hover){background-color:#0b557733}:is(.dark .dark\:hover\:bg-primary\/60:hover){background-color:#0b557799}:is(.dark .dark\:hover\:bg-slate-700\/50:hover){background-color:#34476780}:is(.dark .dark\:hover\:bg-slate-800:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:brightness-100:hover){--tw-brightness:brightness(1)}:is(.dark .dark\:hover\:brightness-100:hover),:is(.dark .dark\:hover\:brightness-105:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:hover\:brightness-105:hover){--tw-brightness:brightness(1.05)}:is(.dark .dark\:hover\:brightness-90:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:disabled\:border-gray-800:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity))}:is(.dark .dark\:disabled\:bg-gray-800:disabled){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:disabled\:text-gray-300:disabled){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}@media (min-width:576px){.sm\:right-24{right:6rem}.sm\:right-40{right:10rem}.sm\:right-6{right:1.5rem}.sm\:top-2{top:.5rem}.sm\:top-\[4\.5rem\]{top:4.5rem}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-start-5{grid-column-start:5}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:ml-1{margin-left:.25rem}.sm\:mr-16{margin-right:4rem}.sm\:h-10{height:2.5rem}.sm\:h-14{height:3.5rem}.sm\:h-7{height:1.75rem}.sm\:max-h-125{max-height:31.25rem}.sm\:max-h-28{max-height:7rem}.sm\:w-36{width:9rem}.sm\:w-50{width:12.5rem}.sm\:w-7{width:1.75rem}.sm\:min-w-\[500px\]{min-width:500px}.sm\:scale-100{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:justify-items-start{justify-items:start}.sm\:gap-4{gap:1rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-0{padding-top:0;padding-bottom:0}.sm\:pt-6{padding-top:1.5rem}.sm\:text-left{text-align:left}}@media (min-width:768px){.md\:top-11{top:2.75rem}.md\:top-\[45\%\]{top:45%}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-7{grid-column:span 7/span 7}.md\:col-span-8{grid-column:span 8/span 8}.md\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.md\:my-3{margin-top:.75rem;margin-bottom:.75rem}.md\:mb-0{margin-bottom:0}.md\:mb-3{margin-bottom:.75rem}.md\:mb-8{margin-bottom:2rem}.md\:mr-3{margin-right:.75rem}.md\:mt-0{margin-top:0}.md\:mt-6{margin-top:1.5rem}.md\:block{display:block}.md\:hidden{display:none}.md\:h-16{height:4rem}.md\:max-h-160{max-height:40rem}.md\:min-h-75-screen{min-height:75vh}.md\:w-1\/2{width:50%}.md\:w-60{width:15rem}.md\:justify-end{justify-content:flex-end}.md\:gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:py-4{padding-top:1rem;padding-bottom:1rem}.md\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:992px){.lg\:relative{position:relative}.lg\:top-11{top:2.75rem}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:my-3{margin-top:.75rem;margin-bottom:.75rem}.lg\:mt-0{margin-top:0}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:h-24{height:6rem}.lg\:h-9{height:2.25rem}.lg\:w-80{width:20rem}.lg\:w-9{width:2.25rem}.lg\:flex-row{flex-direction:row}.lg\:flex-nowrap{flex-wrap:nowrap}.lg\:justify-start{justify-content:flex-start}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:gap-6{gap:1.5rem}.lg\:bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:pb-1{padding-bottom:.25rem}.lg\:text-left{text-align:left}}@media (min-width:1200px){.xl\:left-0{left:0}.xl\:right-24{right:6rem}.xl\:right-6{right:1.5rem}.xl\:ml-6{margin-left:1.5rem}.xl\:ml-68{margin-left:17rem}.xl\:hidden{display:none}.xl\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.xl\:p-1{padding:.25rem}.xl\:p-1\.5{padding:.375rem}.xl\:pl-75{padding-left:18.75rem}}@media (min-width:1320px){.\32xl\:col-span-4{grid-column:span 4/span 4}.\32xl\:col-span-6{grid-column:span 6/span 6}.\32xl\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.\32xl\:my-3{margin-top:.75rem;margin-bottom:.75rem}}@media (min-width:1920px){.\33xl\:col-span-3{grid-column:span 3/span 3}.\33xl\:col-span-4{grid-column:span 4/span 4}.\33xl\:col-span-5{grid-column:span 5/span 5}}@media (min-width:340px){.xs\:flex{display:flex}.xs\:flex-row{flex-direction:row}.xs\:items-center{align-items:center}.xs\:justify-start{justify-content:flex-start}.xs\:pl-2{padding-left:.5rem}.xs\:text-sm{font-size:.875rem;line-height:1.5rem}}.\[\&\>\*\]\:bg-primary>*{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))} \ No newline at end of file diff --git a/src/ui/templates/profile.html b/src/ui/templates/profile.html index 68d6fcd56..d7a5c3416 100644 --- a/src/ui/templates/profile.html +++ b/src/ui/templates/profile.html @@ -150,7 +150,7 @@ url_for(request.endpoint)[1:].split("/")[-1].strip() %} />
@@ -479,7 +483,10 @@
+ +
+
+ Current password +
+ + +
+ + +
+
+
New password - +
{%endif%} @@ -93,7 +93,7 @@ data-plugin-item="{{plugin['id']}}" id="{{setting}}" name="{{setting}}" data-setting-select-default="{{value['id']}}" data-type="form-select" id="{{setting}}" name="{{setting}}" class="hidden"> {% for item in value['select'] %} - + {% endfor %} @@ -104,7 +104,7 @@ data-plugin-item="{{plugin['id']}}" {% if global_config[setting]['method'] != 'ui' and global_config[setting]['method'] != 'default' %} disabled {% endif %} data-setting-select="{{value['id']}}" data-default-value="{{global_config[setting]['value']}}" data-default-method="{{global_config[setting]['method']}}" - aria-controls="{{settings}}-dropdown" + aria-controls="{{value['id']}}-dropdown" class="custom-select-btn" > {% for item in value['select'] %} {% if global_config[setting]['value'] and @@ -115,7 +115,7 @@ data-plugin-item="{{plugin['id']}}" >{{global_config[setting]['value']}} {% elif not global_config[setting]['value'] and value['default'] == item %} - {{value['default']}} {%endif%} @@ -308,7 +308,7 @@ data-plugin-item="{{plugin['id']}}" id="{{setting}}_SCHEMA" name="{{setting}}_SCHEMA" data-select-default="{{value['id']}}" data-type="form-select" id="{{setting}}" name="{{setting}}" class="hidden"> {% for item in value['select'] %} - + {% endfor %} @@ -318,11 +318,11 @@ data-plugin-item="{{plugin['id']}}" - {% endfor %} - {% endif %} {% endwith %} + {% endif %}
+{% endwith %} diff --git a/src/ui/templates/setup.html b/src/ui/templates/setup.html index d4741164f..896e27e02 100644 --- a/src/ui/templates/setup.html +++ b/src/ui/templates/setup.html @@ -1158,6 +1158,45 @@

+ {% with messages = get_flashed_messages(with_categories=true) %} + {% if messages %} + + {% for category, message in messages %} + + {% endfor %} + + {% endif %} + {% endwith %}
{ + console.log(res); if (res.status === 200) { setTimeout(() => { window.open(`${api}/login`, "_self"); @@ -1720,6 +1761,9 @@ this.stopLoader(); this.showErrMsg(); }, 400); + setTimeout(() => { + location.reload(); + }, 2500); }); }); } From 33211902dc4ec2092ac5278df47c9b8d7ca9397d Mon Sep 17 00:00:00 2001 From: Jordan Blasenhauer Date: Tue, 26 Dec 2023 15:21:24 +0100 Subject: [PATCH 064/154] fix ui height + select auto submit *remove useless scroll on UI due to footer and absolute
*add type="button" to aria-controls role="listbox" to avoid auto submit on click --- src/ui/templates/base.html | 2 +- src/ui/templates/settings_plugins.html | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ui/templates/base.html b/src/ui/templates/base.html index c8e66b1a9..3c0c1347b 100644 --- a/src/ui/templates/base.html +++ b/src/ui/templates/base.html @@ -31,7 +31,7 @@
{% for item in value['select'] %} {% if global_config[setting]['value'] and @@ -319,6 +320,7 @@ data-plugin-item="{{plugin['id']}}" data-setting-select="{{value['id']}}" data-default-value="{{value['default']}}" aria-controls="{{value['id']}}-dropdown" + type="button" class="custom-select-btn" > {% for item in value['select'] %} {% if value['default'] == item %} From 38eb98c395c48e09496023d3834c4d80378ac8d0 Mon Sep 17 00:00:00 2001 From: Jordan Blasenhauer Date: Tue, 26 Dec 2023 15:54:35 +0100 Subject: [PATCH 065/154] update setup.html and popover *add opacity delay animation for popover to avoid seeing them if not wanted on mouse move *add missing setup.html css for flash message *add flash message script --- .../confs/server-http/lets-encrypt.conf | 2 +- .../core/misc/jobs/default-server-cert.py | 1 - src/ui/static/css/dashboard.css | 2 +- src/ui/static/js/utils/settings.js | 5 + src/ui/templates/setup.html | 1165 +---------------- 5 files changed, 46 insertions(+), 1129 deletions(-) diff --git a/src/common/core/letsencrypt/confs/server-http/lets-encrypt.conf b/src/common/core/letsencrypt/confs/server-http/lets-encrypt.conf index b7e879315..bdb359431 100644 --- a/src/common/core/letsencrypt/confs/server-http/lets-encrypt.conf +++ b/src/common/core/letsencrypt/confs/server-http/lets-encrypt.conf @@ -2,4 +2,4 @@ location ~ ^/.well-known/acme-challenge/ { root /var/tmp/bunkerweb/lets-encrypt; auth_basic off; -} \ No newline at end of file +} diff --git a/src/common/core/misc/jobs/default-server-cert.py b/src/common/core/misc/jobs/default-server-cert.py index d5c34928c..846e1a1cb 100644 --- a/src/common/core/misc/jobs/default-server-cert.py +++ b/src/common/core/misc/jobs/default-server-cert.py @@ -26,7 +26,6 @@ logger = setup_logger("DEFAULT-SERVER-CERT", getenv("LOG_LEVEL", "INFO")) status = 0 try: - cert_path = Path(sep, "var", "cache", "bunkerweb", "default-server-cert") cert_path.mkdir(parents=True, exist_ok=True) if not cert_path.joinpath("cert.pem").is_file(): diff --git a/src/ui/static/css/dashboard.css b/src/ui/static/css/dashboard.css index a1da09d4b..ed395b698 100644 --- a/src/ui/static/css/dashboard.css +++ b/src/ui/static/css/dashboard.css @@ -1 +1 @@ -/*! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e9ecef}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Open Sans;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#ced4da}input::placeholder,textarea::placeholder{opacity:1;color:#ced4da}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#5e72e480;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.\!container{width:100%!important;margin-right:auto!important;margin-left:auto!important;padding-right:1.5rem!important;padding-left:1.5rem!important}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:1.5rem;padding-left:1.5rem}@media (min-width:340px){.\!container{max-width:340px!important}.container{max-width:340px}}@media (min-width:576px){.\!container{max-width:576px!important}.container{max-width:576px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:992px){.\!container{max-width:992px!important}.container{max-width:992px}}@media (min-width:1200px){.\!container{max-width:1200px!important}.container{max-width:1200px}}@media (min-width:1320px){.\!container{max-width:1320px!important}.container{max-width:1320px}}@media (min-width:1920px){.\!container{max-width:1920px!important}.container{max-width:1920px}}a{letter-spacing:-.025rem}hr{margin:1rem 0;border:0;opacity:.25}img{max-width:none}label{display:inline-block}p{line-height:1.625;font-weight:400;margin-bottom:1rem}small{font-size:.875em}svg{display:inline}table{border-collapse:inherit}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;color:#344767}h1,h2,h3,h4{letter-spacing:-.05rem}h1,h2,h3{font-weight:700}h4,h5,h6{font-weight:600}h1{font-size:3rem;line-height:1.25}h2{font-size:2.25rem;line-height:1.3}h3{font-size:1.875rem}h3,h4{line-height:1.375}h4{font-size:1.5rem}h5{font-size:1.25rem;line-height:1.375}h6{font-size:1rem;line-height:1.625}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.-left-full{left:-100%}.-right-0{right:0}.-right-1{right:-.25rem}.bottom-0{bottom:0}.left-0{left:0}.left-auto{left:auto}.left-full{left:100%}.right-0{right:0}.right-2{right:.5rem}.right-20{right:5rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-7{right:1.75rem}.right-8{right:2rem}.top-0{top:0}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-16{top:4rem}.top-2{top:.5rem}.top-4{top:1rem}.top-\[4\.5rem\]{top:4.5rem}.top-\[43\%\]{top:43%}.top-\[60\%\]{top:60%}.top-\[8\.2rem\]{top:8.2rem}.-z-10{z-index:-10}.z-10{z-index:10}.z-100{z-index:100}.z-110{z-index:110}.z-20{z-index:20}.z-50{z-index:50}.z-990{z-index:990}.z-\[10000\]{z-index:10000}.z-\[1000\]{z-index:1000}.z-\[1001\]{z-index:1001}.z-\[20\]{z-index:20}.z-sticky{z-index:1020}.order-1{order:1}.order-2{order:2}.col-span-1{grid-column:span 1/span 1}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-6{grid-column:span 6/span 6}.col-span-9{grid-column:span 9/span 9}.float-right{float:right}.float-left{float:left}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-4{margin:1rem}.mx-0{margin-left:0;margin-right:0}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-2\.5{margin-left:.625rem;margin-right:.625rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-7{margin-bottom:1.75rem}.mb-8{margin-bottom:2rem}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-12{margin-left:3rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-12{margin-right:3rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-6{margin-right:1.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[4\.5rem\]{margin-top:4.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1\/3{height:33.333333%}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-19{height:4.75rem}.h-24{height:6rem}.h-3{height:.75rem}.h-4{height:1rem}.h-4\.5{height:1.125rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\.5{height:1.375rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[2\.5rem\]{height:2.5rem}.h-\[3\.5rem\]{height:3.5rem}.h-\[4rem\]{height:4rem}.h-\[90vh\]{height:90vh}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-sidenav{height:calc(100vh - 360px)}.max-h-100{max-height:25rem}.max-h-135{max-height:33.75rem}.max-h-30{max-height:7.5rem}.max-h-80{max-height:20rem}.max-h-90{max-height:22.5rem}.max-h-screen{max-height:100vh}.min-h-12{min-height:3rem}.min-h-20{min-height:5rem}.min-h-50-screen{min-height:50vh}.min-h-52{min-height:13rem}.min-h-6{min-height:1.5rem}.min-h-\[100px\]{min-height:100px}.min-h-\[350px\]{min-height:350px}.min-h-\[55vh\]{min-height:55vh}.min-h-\[75px\]{min-height:75px}.min-h-\[80vh\]{min-height:80vh}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-10{width:2.5rem}.w-11\/12{width:91.666667%}.w-12{width:3rem}.w-28{width:7rem}.w-3{width:.75rem}.w-4{width:1rem}.w-4\.5{width:1.125rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\.5{width:1.375rem}.w-50{width:12.5rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-8{width:2rem}.w-80{width:20rem}.w-90{width:22.5rem}.w-\[2\.5rem\]{width:2.5rem}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[900px\]{min-width:900px}.max-w-180{max-width:45rem}.max-w-40{max-width:10rem}.max-w-60{max-width:15rem}.max-w-64{max-width:16rem}.max-w-\[1920px\]{max-width:1920px}.max-w-\[300px\]{max-width:300px}.max-w-\[400px\]{max-width:400px}.max-w-\[550px\]{max-width:550px}.max-w-full{max-width:100%}.flex-auto{flex:1 1 auto}.grow{flex-grow:1}.basis-full{flex-basis:100%}.border-collapse{border-collapse:collapse}.-translate-x-1{--tw-translate-x:-0.25rem}.-translate-x-1,.-translate-x-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\.5{--tw-translate-x:-0.375rem}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0{--tw-translate-y:-0px}.-translate-y-0\.4{--tw-translate-y:-0.1rem}.-translate-y-0\.4,.-translate-y-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0\.5{--tw-translate-y:-0.125rem}.-translate-y-1{--tw-translate-y:-0.25rem}.-translate-y-1,.-translate-y-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\.5{--tw-translate-y:-0.375rem}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0\.5{--tw-translate-x:0.125rem}.translate-x-1{--tw-translate-x:0.25rem}.translate-x-1,.translate-x-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-2{--tw-translate-x:0.5rem}.translate-x-90{--tw-translate-x:22.5rem}.translate-x-90,.translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y:0px}.translate-y-0\.5{--tw-translate-y:0.125rem}.translate-y-0\.5,.translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y:0.25rem}.translate-y-16{--tw-translate-y:4rem}.translate-y-16,.translate-y-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y:0.5rem}.-rotate-12{--tw-rotate:-12deg}.-rotate-12,.rotate-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-12{--tw-rotate:12deg}.rotate-180{--tw-rotate:180deg}.rotate-180,.scale-105{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.scale-110,.scale-50{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-50{--tw-scale-x:.5;--tw-scale-y:.5}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-y-2{row-gap:.5rem}.gap-y-4{row-gap:1rem}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded,.rounded-1{border-radius:.25rem}.rounded-1\.4{border-radius:.35rem}.rounded-10{border-radius:2.5rem}.rounded-2xl{border-radius:1rem}.rounded-circle{border-radius:50%}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-xl{border-radius:.75rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-lg{border-bottom-left-radius:.5rem}.rounded-b-lg,.rounded-r-lg{border-bottom-right-radius:.5rem}.rounded-r-lg{border-top-right-radius:.5rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-gray-200{--tw-border-opacity:1;border-color:rgb(233 236 239/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.border-primary{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.bg-gray-600\/50{background-color:#6c757d80}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(251 99 64/var(--tw-bg-opacity))}.bg-primary{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.bg-primary\/20{background-color:#0b557733}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity))}.bg-secondary{--tw-bg-opacity:1;background-color:rgb(46 172 104/var(--tw-bg-opacity))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.bg-slate-800\/10{background-color:#3a416f1a}.bg-transparent{background-color:initial}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-black\/40{--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#0006 var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.bg-150{background-size:150%}.bg-contain{background-size:contain}.bg-clip-border{background-clip:initial}.bg-clip-padding{background-clip:padding-box}.bg-center{background-position:50%}.bg-left{background-position:0}.bg-x-25{background-position:25% 0}.bg-no-repeat{background-repeat:no-repeat}.fill-amber-500{fill:#f59e0b}.fill-blue-500{fill:#5e72e4}.fill-gray-500{fill:#adb5bd}.fill-gray-600{fill:#6c757d}.fill-green-500{fill:#22c55e}.fill-primary{fill:#0b5577}.fill-red-500{fill:#f53939}.fill-sky-500{fill:#0ea5e9}.fill-slate-800{fill:#3a416f}.fill-white{fill:#fff}.fill-yellow-500{fill:#fbb140}.stroke-blue-400{stroke:#60a5fa}.stroke-blue-500{stroke:#5e72e4}.stroke-emerald-600{stroke:#059669}.stroke-gray-100{stroke:#ebeff4}.stroke-gray-600{stroke:#6c757d}.stroke-green-700{stroke:#15803d}.stroke-orange-500{stroke:#fb6340}.stroke-pink-600{stroke:#db2777}.stroke-red-500{stroke:#f53939}.stroke-sky-500{stroke:#0ea5e9}.stroke-teal-600{stroke:#0d9488}.stroke-yellow-500{stroke:#fbb140}.stroke-0{stroke-width:0}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pb-8{padding-bottom:2rem}.pl-0{padding-left:0}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-6{padding-left:1.5rem}.pr-0{padding-right:0}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-20{padding-top:5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-sans{font-family:Open Sans}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-5{line-height:1.25rem}.leading-5\.6{line-height:1.4rem}.leading-6{line-height:1.5rem}.leading-8{line-height:2rem}.leading-default{line-height:1.6}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-tight{line-height:1.25}.tracking-tight-rem{letter-spacing:-.025rem}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-blue-500{--tw-text-opacity:1;color:rgb(94 114 228/var(--tw-text-opacity))}.text-emerald-500{--tw-text-opacity:1;color:rgb(45 206 137/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.text-gray-600\/90{color:#6c757de6}.text-gray-700{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.text-gray-700\/80{color:#495057cc}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}.text-secondary{--tw-text-opacity:1;color:rgb(46 172 104/var(--tw-text-opacity))}.text-sky-600{--tw-text-opacity:1;color:rgb(62 161 236/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(103 116 142/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(52 71 103/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(251 177 64/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-3xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-3xl{--tw-shadow:0 8px 26px -4px #14141426,0 8px 9px -5px #1414140f;--tw-shadow-colored:0 8px 26px -4px var(--tw-shadow-color),0 8px 9px -5px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.shadow-md,.shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-sm{--tw-shadow:0 .25rem .375rem -.0625rem #1414141f,0 .125rem .25rem -.0625rem #14141412;--tw-shadow-colored:0 .25rem .375rem -.0625rem var(--tw-shadow-color),0 .125rem .25rem -.0625rem var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color)}.shadow-xs{--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.outline{outline-style:solid}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:ease;transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:ease;transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-250{transition-duration:.25s}.duration-300{transition-duration:.3s}.duration-700{transition-duration:.7s}.ease-in{transition-timing-function:ease-in}.ease-in-out{transition-timing-function:ease-in-out}.flex-wrap-inherit{flex-wrap:inherit}@font-face{font-family:Open Sans;src:url(../webfonts/OpenSans.ttf)}*{font-family:Open Sans,sans-serif!important}.ace_content,.ace_editor,.ace_editor div{font-family:Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace!important;font-size:16px!important;font-weight:400!important}.close-btn{display:inline-block;cursor:pointer;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.close-btn,.close-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.close-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.close-btn:focus,.close-btn:hover{background-color:#fffc}.close-btn:active{opacity:.85}:is(.dark .close-btn){--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity));--tw-brightness:brightness(.9)}:is(.dark .close-btn),:is(.dark .close-btn:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .close-btn:hover){--tw-brightness:brightness(.75)}.valid-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.valid-btn,.valid-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.valid-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.valid-btn:focus,.valid-btn:hover{background-color:#22c55ecc}.valid-btn:active{opacity:.85}:is(.dark .valid-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.delete-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.delete-btn,.delete-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.delete-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.delete-btn:focus,.delete-btn:hover{background-color:#f53939cc}.delete-btn:active{opacity:.85}:is(.dark .delete-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.edit-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.edit-btn,.edit-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.edit-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.edit-btn:focus,.edit-btn:hover{background-color:#fbb140cc}.edit-btn:active{opacity:.85}:is(.dark .edit-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.info-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.info-btn,.info-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.info-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.info-btn:focus,.info-btn:hover{background-color:#0ea5e9cc}.info-btn:active{opacity:.85}:is(.dark .info-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.checkbox{position:relative;z-index:10;float:left;margin-top:.25rem;height:1.25rem;width:1.25rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.35rem;border-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-size:contain;background-position:50%;background-repeat:no-repeat;vertical-align:top;font-size:1rem;line-height:1.5rem;transition-property:all;transition-timing-function:ease;transition-duration:.25s}.checkbox,.checkbox:disabled{--tw-border-opacity:1;--tw-bg-opacity:1}.checkbox:disabled{cursor:default;border-color:rgb(206 212 218/var(--tw-border-opacity));background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.checkbox[data-checked=true]{z-index:0;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checkbox:disabled[data-checked=true]{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}:is(.dark .checkbox){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .checkbox[data-checked=true]){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled[data-checked=true]){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.custom-select-btn{display:flex;width:100%;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;border-style:solid;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;text-align:left;vertical-align:middle;font-size:.875rem;font-weight:400;line-height:1.4rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}.custom-select-btn::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.custom-select-btn:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .custom-select-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .custom-select-btn),:is(.dark .custom-select-btn:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .custom-select-btn:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.custom-select-btn{padding:.5rem .75rem}}.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity))}.active.custom-dropdown-btn,:is(.dark .custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.active.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));color:rgb(210 214 218/var(--tw-text-opacity))}.regular-input,:is(.dark .active.custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1}.regular-input{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.5rem;border-width:1px;border-style:solid;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;font-size:.875rem;font-weight:400;line-height:1.4rem;color:rgb(73 80 87/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.regular-input::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input:focus{border-color:#d2d6da00;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.regular-input:valid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.regular-input:invalid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))}.regular-input:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .regular-input){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .regular-input),:is(.dark .regular-input:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .regular-input:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.regular-input{padding:.5rem .75rem}}.input-title{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .input-title){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.popover-settings-container{position:absolute;left:0;bottom:0;z-index:50;--tw-translate-y:-1.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:all;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.5s}:is(.dark .popover-settings-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.popover-settings-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .popover-settings-text){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity));opacity:.9}.popover-settings-svg{margin-left:.5rem;height:1.25rem;width:1.25rem;cursor:pointer;fill:#5e72e4}.popover-settings-svg:hover{--tw-brightness:brightness(.75);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.active.settings-tabs-tab-btn{position:relative;z-index:10;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .active.settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .active.settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-tab-btn{position:relative;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-name{padding-left:.75rem;padding-right:.5rem;--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-name){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.settings-tabs-popover-container{position:absolute;top:60px;left:0;z-index:50;min-width:150px;border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}:is(.dark .settings-tabs-popover-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-popover-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.settings-tabs-mobile-btn{margin-top:.25rem;margin-bottom:.25rem;display:flex;width:100%;cursor:pointer;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-mobile-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-mobile-btn:hover){--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-mobile-btn-text{--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-mobile-btn-text){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.active.settings-tabs-mobile-dropdown-btn{position:relative;z-index:1000;margin-top:0;margin-bottom:0;cursor:pointer;border-radius:0;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .active.settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first.settings-tabs-mobile-dropdown-btn{border-top-left-radius:.25rem;border-top-right-radius:.25rem;border-width:1px}.settings-tabs-mobile-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;display:flex;cursor:pointer;justify-content:space-between;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first-letter\:absolute:first-letter{position:absolute}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.before\:float-left:before{content:var(--tw-content);float:left}.before\:pr-2:before{content:var(--tw-content);padding-right:.5rem}.before\:text-white:before{content:var(--tw-content);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.before\:content-\[\'\/\'\]:before{--tw-content:"/";content:var(--tw-content)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-px:after{content:var(--tw-content);top:1px}.after\:float-right:after{content:var(--tw-content);float:right}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:translate-x-px:after{content:var(--tw-content);--tw-translate-x:1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:rounded-circle:after{content:var(--tw-content);border-radius:50%}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.after\:pl-2:after{content:var(--tw-content);padding-left:.5rem}.after\:text-gray-600:after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.after\:shadow-2xl:after{content:var(--tw-content);--tw-shadow:0 .3125rem .625rem 0 #0000001f;--tw-shadow-colored:0 .3125rem .625rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.after\:duration-300:after{content:var(--tw-content);transition-duration:.3s}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.after\:content-\[\'\/\'\]:after{--tw-content:"/";content:var(--tw-content)}.checked\:z-0:checked{z-index:0}.checked\:border-primary:checked{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.checked\:bg-primary:checked{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checked\:bg-none:checked{background-image:none}.checked\:bg-right:checked{background-position:100%}.checked\:after\:translate-x-5:checked:after{--tw-translate-x:1.25rem}.checked\:after\:translate-x-5:checked:after,.checked\:after\:translate-x-5\.3:checked:after{content:var(--tw-content);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.checked\:after\:translate-x-5\.3:checked:after{--tw-translate-x:1.3rem}.valid\:\!border-red-500:valid{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.hover\:-translate-y-0:hover{--tw-translate-y:-0px}.hover\:-translate-y-0:hover,.hover\:-translate-y-0\.4:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:-translate-y-0\.4:hover{--tw-translate-y:-0.1rem}.hover\:-translate-y-px:hover{--tw-translate-y:-1px}.hover\:-translate-y-px:hover,.hover\:scale-102:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-102:hover{--tw-scale-x:1.02;--tw-scale-y:1.02}.hover\:rounded-lg:hover{border-radius:.5rem}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.hover\:bg-green-500\/80:hover{background-color:#22c55ecc}.hover\:bg-primary\/30:hover{background-color:#0b55774d}.hover\:bg-primary\/5:hover{background-color:#0b55770d}.hover\:bg-primary\/80:hover{background-color:#0b5577cc}.hover\:bg-red-500\/80:hover{background-color:#f53939cc}.hover\:bg-sky-500\/80:hover{background-color:#0ea5e9cc}.hover\:bg-yellow-500\/80:hover{background-color:#fbb140cc}.hover\:italic:hover{font-style:italic}.hover\:no-underline:hover{text-decoration-line:none}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:brightness-75:hover{--tw-brightness:brightness(.75)}.hover\:brightness-75:hover,.hover\:brightness-90:hover{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.hover\:brightness-90:hover{--tw-brightness:brightness(.9)}.hover\:brightness-95:hover{--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:\!border-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:border-green-500:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:border-primary:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.focus\:bg-green-500\/80:focus{background-color:#22c55ecc}.focus\:bg-primary\/80:focus{background-color:#0b5577cc}.focus\:bg-red-500\/80:focus{background-color:#f53939cc}.focus\:bg-sky-500\/80:focus{background-color:#0ea5e9cc}.focus\:bg-yellow-500\/80:focus{background-color:#fbb140cc}.focus\:valid\:\!border-red-500:valid:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:valid\:border-green-500:valid:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:invalid\:border-red-500:invalid:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.focus\:file\:invalid\:border-red-500:invalid::file-selector-button:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.active\:\!border-red-500:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.active\:opacity-85:active{opacity:.85}.active\:valid\:\!border-red-500:valid:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-gray-400:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.disabled\:bg-gray-400:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.disabled\:text-gray-700:disabled{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.disabled\:opacity-75:disabled{opacity:.75}.disabled\:hover\:translate-y-0:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .dark\:inline){display:inline}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1;border-color:rgb(73 80 87/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-600){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-800){--tw-border-opacity:1;border-color:rgb(58 65 111/var(--tw-border-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:bg-green-500\/90){background-color:#22c55ee6}:is(.dark .dark\:bg-primary){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:bg-primary\/50){background-color:#0b557780}:is(.dark .dark\:bg-slate-700){--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-700\/50){background-color:#34476780}:is(.dark .dark\:bg-slate-850){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900){--tw-bg-opacity:1;background-color:rgb(5 17 57/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900\/30){background-color:#0511394d}:is(.dark .dark\:bg-gradient-to-r){background-image:linear-gradient(to right,var(--tw-gradient-stops))}:is(.dark .dark\:from-transparent){--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}:is(.dark .dark\:via-white){--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#fff var(--tw-gradient-via-position),var(--tw-gradient-to)}:is(.dark .dark\:to-transparent){--tw-gradient-to:#0000 var(--tw-gradient-to-position)}:is(.dark .dark\:fill-blue-500){fill:#5e72e4}:is(.dark .dark\:fill-gray-300){fill:#d2d6da}:is(.dark .dark\:fill-gray-500){fill:#adb5bd}:is(.dark .dark\:fill-gray-600){fill:#6c757d}:is(.dark .dark\:stroke-gray-600){stroke:#6c757d}:is(.dark .dark\:text-gray-100){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-500){--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:text-red-500){--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}:is(.dark .dark\:text-white){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .dark\:text-white\/80){color:#fffc}:is(.dark .dark\:text-white\/90){color:#ffffffe6}:is(.dark .dark\:opacity-60){opacity:.6}:is(.dark .dark\:opacity-75){opacity:.75}:is(.dark .dark\:opacity-80){opacity:.8}:is(.dark .dark\:opacity-90){opacity:.9}:is(.dark .dark\:shadow-dark-xl){--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color)}:is(.dark .dark\:shadow-dark-xl),:is(.dark .dark\:shadow-none){box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-none){--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}:is(.dark .dark\:brightness-110){--tw-brightness:brightness(1.1)}:is(.dark .dark\:brightness-110),:is(.dark .dark\:brightness-125){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-125){--tw-brightness:brightness(1.25)}:is(.dark .dark\:brightness-150){--tw-brightness:brightness(1.5)}:is(.dark .dark\:brightness-150),:is(.dark .dark\:brightness-90){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-90){--tw-brightness:brightness(.9)}:is(.dark .dark\:brightness-95){--tw-brightness:brightness(.95)}:is(.dark .dark\:brightness-95),:is(.dark .dark\:brightness-\[0\.885\]){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-\[0\.885\]){--tw-brightness:brightness(0.885)}:is(.dark .dark\:after\:text-gray-500):after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:checked\:border-primary:checked){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}:is(.dark .dark\:checked\:bg-primary:checked){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-primary\/20:hover){background-color:#0b557733}:is(.dark .dark\:hover\:bg-primary\/60:hover){background-color:#0b557799}:is(.dark .dark\:hover\:bg-slate-700\/50:hover){background-color:#34476780}:is(.dark .dark\:hover\:bg-slate-800:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:brightness-100:hover){--tw-brightness:brightness(1)}:is(.dark .dark\:hover\:brightness-100:hover),:is(.dark .dark\:hover\:brightness-105:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:hover\:brightness-105:hover){--tw-brightness:brightness(1.05)}:is(.dark .dark\:hover\:brightness-90:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:disabled\:border-gray-800:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity))}:is(.dark .dark\:disabled\:bg-gray-800:disabled){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:disabled\:text-gray-300:disabled){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}@media (min-width:576px){.sm\:right-24{right:6rem}.sm\:right-40{right:10rem}.sm\:right-6{right:1.5rem}.sm\:top-2{top:.5rem}.sm\:top-\[4\.5rem\]{top:4.5rem}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-start-5{grid-column-start:5}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:ml-1{margin-left:.25rem}.sm\:mr-16{margin-right:4rem}.sm\:h-10{height:2.5rem}.sm\:h-14{height:3.5rem}.sm\:h-7{height:1.75rem}.sm\:max-h-125{max-height:31.25rem}.sm\:max-h-28{max-height:7rem}.sm\:w-36{width:9rem}.sm\:w-50{width:12.5rem}.sm\:w-7{width:1.75rem}.sm\:min-w-\[500px\]{min-width:500px}.sm\:scale-100{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:justify-items-start{justify-items:start}.sm\:gap-4{gap:1rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-0{padding-top:0;padding-bottom:0}.sm\:pt-6{padding-top:1.5rem}.sm\:text-left{text-align:left}}@media (min-width:768px){.md\:top-\[45\%\]{top:45%}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-7{grid-column:span 7/span 7}.md\:col-span-8{grid-column:span 8/span 8}.md\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.md\:my-3{margin-top:.75rem;margin-bottom:.75rem}.md\:mb-0{margin-bottom:0}.md\:mb-3{margin-bottom:.75rem}.md\:mb-8{margin-bottom:2rem}.md\:mr-3{margin-right:.75rem}.md\:mt-0{margin-top:0}.md\:mt-6{margin-top:1.5rem}.md\:block{display:block}.md\:hidden{display:none}.md\:h-16{height:4rem}.md\:max-h-160{max-height:40rem}.md\:min-h-75-screen{min-height:75vh}.md\:w-1\/2{width:50%}.md\:w-60{width:15rem}.md\:justify-end{justify-content:flex-end}.md\:gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:py-4{padding-top:1rem;padding-bottom:1rem}.md\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:992px){.lg\:relative{position:relative}.lg\:top-11{top:2.75rem}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:my-3{margin-top:.75rem;margin-bottom:.75rem}.lg\:mt-0{margin-top:0}.lg\:mt-4{margin-top:1rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:h-24{height:6rem}.lg\:h-9{height:2.25rem}.lg\:w-80{width:20rem}.lg\:w-9{width:2.25rem}.lg\:flex-row{flex-direction:row}.lg\:flex-nowrap{flex-wrap:nowrap}.lg\:justify-start{justify-content:flex-start}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:gap-6{gap:1.5rem}.lg\:bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:pb-1{padding-bottom:.25rem}.lg\:text-left{text-align:left}}@media (min-width:1200px){.xl\:left-0{left:0}.xl\:right-24{right:6rem}.xl\:right-6{right:1.5rem}.xl\:ml-6{margin-left:1.5rem}.xl\:ml-68{margin-left:17rem}.xl\:hidden{display:none}.xl\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.xl\:p-1{padding:.25rem}.xl\:p-1\.5{padding:.375rem}.xl\:pl-75{padding-left:18.75rem}.xl\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:1320px){.\32xl\:col-span-4{grid-column:span 4/span 4}.\32xl\:col-span-6{grid-column:span 6/span 6}.\32xl\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.\32xl\:my-3{margin-top:.75rem;margin-bottom:.75rem}}@media (min-width:1920px){.\33xl\:col-span-3{grid-column:span 3/span 3}.\33xl\:col-span-4{grid-column:span 4/span 4}.\33xl\:col-span-5{grid-column:span 5/span 5}}@media (min-width:340px){.xs\:flex{display:flex}.xs\:flex-row{flex-direction:row}.xs\:items-center{align-items:center}.xs\:justify-start{justify-content:flex-start}.xs\:pl-2{padding-left:.5rem}.xs\:text-sm{font-size:.875rem;line-height:1.5rem}}.\[\&\>\*\]\:bg-primary>*{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))} \ No newline at end of file +/*! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e9ecef}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Open Sans;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#ced4da}input::placeholder,textarea::placeholder{opacity:1;color:#ced4da}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#5e72e480;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.\!container{width:100%!important;margin-right:auto!important;margin-left:auto!important;padding-right:1.5rem!important;padding-left:1.5rem!important}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:1.5rem;padding-left:1.5rem}@media (min-width:340px){.\!container{max-width:340px!important}.container{max-width:340px}}@media (min-width:576px){.\!container{max-width:576px!important}.container{max-width:576px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:992px){.\!container{max-width:992px!important}.container{max-width:992px}}@media (min-width:1200px){.\!container{max-width:1200px!important}.container{max-width:1200px}}@media (min-width:1320px){.\!container{max-width:1320px!important}.container{max-width:1320px}}@media (min-width:1920px){.\!container{max-width:1920px!important}.container{max-width:1920px}}a{letter-spacing:-.025rem}hr{margin:1rem 0;border:0;opacity:.25}img{max-width:none}label{display:inline-block}p{line-height:1.625;font-weight:400;margin-bottom:1rem}small{font-size:.875em}svg{display:inline}table{border-collapse:inherit}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;color:#344767}h1,h2,h3,h4{letter-spacing:-.05rem}h1,h2,h3{font-weight:700}h4,h5,h6{font-weight:600}h1{font-size:3rem;line-height:1.25}h2{font-size:2.25rem;line-height:1.3}h3{font-size:1.875rem}h3,h4{line-height:1.375}h4{font-size:1.5rem}h5{font-size:1.25rem;line-height:1.375}h6{font-size:1rem;line-height:1.625}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.-left-full{left:-100%}.-right-0{right:0}.-right-1{right:-.25rem}.bottom-0{bottom:0}.left-0{left:0}.left-auto{left:auto}.left-full{left:100%}.right-0{right:0}.right-2{right:.5rem}.right-20{right:5rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-7{right:1.75rem}.right-8{right:2rem}.top-0{top:0}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-16{top:4rem}.top-2{top:.5rem}.top-4{top:1rem}.top-\[4\.5rem\]{top:4.5rem}.top-\[43\%\]{top:43%}.top-\[60\%\]{top:60%}.top-\[8\.2rem\]{top:8.2rem}.-z-10{z-index:-10}.z-10{z-index:10}.z-100{z-index:100}.z-110{z-index:110}.z-20{z-index:20}.z-50{z-index:50}.z-990{z-index:990}.z-\[10000\]{z-index:10000}.z-\[1000\]{z-index:1000}.z-\[1001\]{z-index:1001}.z-\[20\]{z-index:20}.z-sticky{z-index:1020}.order-1{order:1}.order-2{order:2}.col-span-1{grid-column:span 1/span 1}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-9{grid-column:span 9/span 9}.float-right{float:right}.float-left{float:left}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-4{margin:1rem}.mx-0{margin-left:0;margin-right:0}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-2\.5{margin-left:.625rem;margin-right:.625rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-7{margin-bottom:1.75rem}.mb-8{margin-bottom:2rem}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-12{margin-left:3rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-12{margin-right:3rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-6{margin-right:1.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[4\.5rem\]{margin-top:4.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1\/3{height:33.333333%}.h-12{height:3rem}.h-14{height:3.5rem}.h-19{height:4.75rem}.h-3{height:.75rem}.h-4{height:1rem}.h-4\.5{height:1.125rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\.5{height:1.375rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[2\.5rem\]{height:2.5rem}.h-\[3\.5rem\]{height:3.5rem}.h-\[4rem\]{height:4rem}.h-\[90vh\]{height:90vh}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-sidenav{height:calc(100vh - 360px)}.max-h-100{max-height:25rem}.max-h-135{max-height:33.75rem}.max-h-30{max-height:7.5rem}.max-h-80{max-height:20rem}.max-h-90{max-height:22.5rem}.max-h-screen{max-height:100vh}.min-h-12{min-height:3rem}.min-h-20{min-height:5rem}.min-h-50-screen{min-height:50vh}.min-h-52{min-height:13rem}.min-h-6{min-height:1.5rem}.min-h-\[100px\]{min-height:100px}.min-h-\[350px\]{min-height:350px}.min-h-\[55vh\]{min-height:55vh}.min-h-\[75px\]{min-height:75px}.min-h-\[80vh\]{min-height:80vh}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-10{width:2.5rem}.w-11\/12{width:91.666667%}.w-12{width:3rem}.w-28{width:7rem}.w-3{width:.75rem}.w-4{width:1rem}.w-4\.5{width:1.125rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\.5{width:1.375rem}.w-50{width:12.5rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-80{width:20rem}.w-90{width:22.5rem}.w-\[2\.5rem\]{width:2.5rem}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[900px\]{min-width:900px}.max-w-180{max-width:45rem}.max-w-40{max-width:10rem}.max-w-60{max-width:15rem}.max-w-64{max-width:16rem}.max-w-\[1920px\]{max-width:1920px}.max-w-\[300px\]{max-width:300px}.max-w-\[400px\]{max-width:400px}.max-w-\[550px\]{max-width:550px}.max-w-full{max-width:100%}.flex-auto{flex:1 1 auto}.grow{flex-grow:1}.basis-full{flex-basis:100%}.-translate-x-1{--tw-translate-x:-0.25rem}.-translate-x-1,.-translate-x-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\.5{--tw-translate-x:-0.375rem}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0{--tw-translate-y:-0px}.-translate-y-0\.4{--tw-translate-y:-0.1rem}.-translate-y-0\.4,.-translate-y-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0\.5{--tw-translate-y:-0.125rem}.-translate-y-1{--tw-translate-y:-0.25rem}.-translate-y-1,.-translate-y-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\.5{--tw-translate-y:-0.375rem}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0\.5{--tw-translate-x:0.125rem}.translate-x-1{--tw-translate-x:0.25rem}.translate-x-1,.translate-x-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-2{--tw-translate-x:0.5rem}.translate-x-90{--tw-translate-x:22.5rem}.translate-x-90,.translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y:0px}.translate-y-0\.5{--tw-translate-y:0.125rem}.translate-y-0\.5,.translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y:0.25rem}.translate-y-16{--tw-translate-y:4rem}.translate-y-16,.translate-y-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y:0.5rem}.-rotate-12{--tw-rotate:-12deg}.-rotate-12,.rotate-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-12{--tw-rotate:12deg}.rotate-180{--tw-rotate:180deg}.rotate-180,.scale-105{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.scale-110,.scale-50{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-50{--tw-scale-x:.5;--tw-scale-y:.5}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-2{row-gap:.5rem}.gap-y-4{row-gap:1rem}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded,.rounded-1{border-radius:.25rem}.rounded-1\.4{border-radius:.35rem}.rounded-10{border-radius:2.5rem}.rounded-2xl{border-radius:1rem}.rounded-circle{border-radius:50%}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-xl{border-radius:.75rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-lg{border-bottom-left-radius:.5rem}.rounded-b-lg,.rounded-r-lg{border-bottom-right-radius:.5rem}.rounded-r-lg{border-top-right-radius:.5rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-gray-200{--tw-border-opacity:1;border-color:rgb(233 236 239/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.border-primary{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.bg-gray-600\/50{background-color:#6c757d80}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(251 99 64/var(--tw-bg-opacity))}.bg-primary{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.bg-primary\/20{background-color:#0b557733}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity))}.bg-secondary{--tw-bg-opacity:1;background-color:rgb(46 172 104/var(--tw-bg-opacity))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.bg-slate-800\/10{background-color:#3a416f1a}.bg-transparent{background-color:initial}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-black\/40{--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#0006 var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.bg-150{background-size:150%}.bg-contain{background-size:contain}.bg-clip-border{background-clip:initial}.bg-clip-padding{background-clip:padding-box}.bg-center{background-position:50%}.bg-left{background-position:0}.bg-x-25{background-position:25% 0}.bg-no-repeat{background-repeat:no-repeat}.fill-amber-500{fill:#f59e0b}.fill-blue-500{fill:#5e72e4}.fill-gray-500{fill:#adb5bd}.fill-gray-600{fill:#6c757d}.fill-green-500{fill:#22c55e}.fill-primary{fill:#0b5577}.fill-red-500{fill:#f53939}.fill-sky-500{fill:#0ea5e9}.fill-slate-800{fill:#3a416f}.fill-white{fill:#fff}.fill-yellow-500{fill:#fbb140}.stroke-blue-400{stroke:#60a5fa}.stroke-blue-500{stroke:#5e72e4}.stroke-emerald-600{stroke:#059669}.stroke-gray-100{stroke:#ebeff4}.stroke-gray-600{stroke:#6c757d}.stroke-green-700{stroke:#15803d}.stroke-orange-500{stroke:#fb6340}.stroke-pink-600{stroke:#db2777}.stroke-red-500{stroke:#f53939}.stroke-sky-500{stroke:#0ea5e9}.stroke-teal-600{stroke:#0d9488}.stroke-yellow-500{stroke:#fbb140}.stroke-0{stroke-width:0}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pb-8{padding-bottom:2rem}.pl-0{padding-left:0}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-6{padding-left:1.5rem}.pr-0{padding-right:0}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-20{padding-top:5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-sans{font-family:Open Sans}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-5{line-height:1.25rem}.leading-5\.6{line-height:1.4rem}.leading-6{line-height:1.5rem}.leading-8{line-height:2rem}.leading-default{line-height:1.6}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-tight{line-height:1.25}.tracking-tight-rem{letter-spacing:-.025rem}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-blue-500{--tw-text-opacity:1;color:rgb(94 114 228/var(--tw-text-opacity))}.text-emerald-500{--tw-text-opacity:1;color:rgb(45 206 137/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.text-gray-600\/90{color:#6c757de6}.text-gray-700{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.text-gray-700\/80{color:#495057cc}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}.text-sky-600{--tw-text-opacity:1;color:rgb(62 161 236/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(103 116 142/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(52 71 103/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(251 177 64/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-3xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-3xl{--tw-shadow:0 8px 26px -4px #14141426,0 8px 9px -5px #1414140f;--tw-shadow-colored:0 8px 26px -4px var(--tw-shadow-color),0 8px 9px -5px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.shadow-md,.shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-sm{--tw-shadow:0 .25rem .375rem -.0625rem #1414141f,0 .125rem .25rem -.0625rem #14141412;--tw-shadow-colored:0 .25rem .375rem -.0625rem var(--tw-shadow-color),0 .125rem .25rem -.0625rem var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color)}.shadow-xs{--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:ease;transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:ease;transition-duration:.15s}.delay-200{transition-delay:.2s}.duration-200{transition-duration:.2s}.duration-250{transition-duration:.25s}.duration-300{transition-duration:.3s}.duration-700{transition-duration:.7s}.ease-in{transition-timing-function:ease-in}.ease-in-out{transition-timing-function:ease-in-out}.flex-wrap-inherit{flex-wrap:inherit}@font-face{font-family:Open Sans;src:url(../webfonts/OpenSans.ttf)}*{font-family:Open Sans,sans-serif!important}.ace_content,.ace_editor,.ace_editor div{font-family:Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace!important;font-size:16px!important;font-weight:400!important}.close-btn{display:inline-block;cursor:pointer;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.close-btn,.close-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.close-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.close-btn:focus,.close-btn:hover{background-color:#fffc}.close-btn:active{opacity:.85}:is(.dark .close-btn){--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity));--tw-brightness:brightness(.9)}:is(.dark .close-btn),:is(.dark .close-btn:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .close-btn:hover){--tw-brightness:brightness(.75)}.valid-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.valid-btn,.valid-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.valid-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.valid-btn:focus,.valid-btn:hover{background-color:#22c55ecc}.valid-btn:active{opacity:.85}:is(.dark .valid-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.delete-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.delete-btn,.delete-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.delete-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.delete-btn:focus,.delete-btn:hover{background-color:#f53939cc}.delete-btn:active{opacity:.85}:is(.dark .delete-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.edit-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.edit-btn,.edit-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.edit-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.edit-btn:focus,.edit-btn:hover{background-color:#fbb140cc}.edit-btn:active{opacity:.85}:is(.dark .edit-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.info-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.info-btn,.info-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.info-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.info-btn:focus,.info-btn:hover{background-color:#0ea5e9cc}.info-btn:active{opacity:.85}:is(.dark .info-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.checkbox{position:relative;z-index:10;float:left;margin-top:.25rem;height:1.25rem;width:1.25rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.35rem;border-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-size:contain;background-position:50%;background-repeat:no-repeat;vertical-align:top;font-size:1rem;line-height:1.5rem;transition-property:all;transition-timing-function:ease;transition-duration:.25s}.checkbox,.checkbox:disabled{--tw-border-opacity:1;--tw-bg-opacity:1}.checkbox:disabled{cursor:default;border-color:rgb(206 212 218/var(--tw-border-opacity));background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.checkbox[data-checked=true]{z-index:0;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checkbox:disabled[data-checked=true]{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}:is(.dark .checkbox){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .checkbox[data-checked=true]){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled[data-checked=true]){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.custom-select-btn{display:flex;width:100%;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;border-style:solid;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;text-align:left;vertical-align:middle;font-size:.875rem;font-weight:400;line-height:1.4rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}.custom-select-btn::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.custom-select-btn:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .custom-select-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .custom-select-btn),:is(.dark .custom-select-btn:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .custom-select-btn:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.custom-select-btn{padding:.5rem .75rem}}.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity))}.active.custom-dropdown-btn,:is(.dark .custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.active.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));color:rgb(210 214 218/var(--tw-text-opacity))}.regular-input,:is(.dark .active.custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1}.regular-input{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.5rem;border-width:1px;border-style:solid;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;font-size:.875rem;font-weight:400;line-height:1.4rem;color:rgb(73 80 87/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.regular-input::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input:focus{border-color:#d2d6da00;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.regular-input:valid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.regular-input:invalid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))}.regular-input:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .regular-input){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .regular-input),:is(.dark .regular-input:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .regular-input:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.regular-input{padding:.5rem .75rem}}.input-title{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .input-title){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.popover-settings-container{position:absolute;left:0;bottom:0;z-index:50;--tw-translate-y:-1.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:all;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.5s}:is(.dark .popover-settings-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.popover-settings-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .popover-settings-text){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity));opacity:.9}.popover-settings-svg{margin-left:.5rem;height:1.25rem;width:1.25rem;cursor:pointer;fill:#5e72e4}.popover-settings-svg:hover{--tw-brightness:brightness(.75);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.active.settings-tabs-tab-btn{position:relative;z-index:10;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .active.settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .active.settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-tab-btn{position:relative;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-name{padding-left:.75rem;padding-right:.5rem;--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-name){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.settings-tabs-popover-container{position:absolute;top:60px;left:0;z-index:50;min-width:150px;border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}:is(.dark .settings-tabs-popover-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-popover-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.settings-tabs-mobile-btn{margin-top:.25rem;margin-bottom:.25rem;display:flex;width:100%;cursor:pointer;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-mobile-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-mobile-btn:hover){--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-mobile-btn-text{--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-mobile-btn-text){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.active.settings-tabs-mobile-dropdown-btn{position:relative;z-index:1000;margin-top:0;margin-bottom:0;cursor:pointer;border-radius:0;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .active.settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first.settings-tabs-mobile-dropdown-btn{border-top-left-radius:.25rem;border-top-right-radius:.25rem;border-width:1px}.settings-tabs-mobile-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;display:flex;cursor:pointer;justify-content:space-between;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first-letter\:absolute:first-letter{position:absolute}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.before\:float-left:before{content:var(--tw-content);float:left}.before\:pr-2:before{content:var(--tw-content);padding-right:.5rem}.before\:text-white:before{content:var(--tw-content);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.before\:content-\[\'\/\'\]:before{--tw-content:"/";content:var(--tw-content)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-px:after{content:var(--tw-content);top:1px}.after\:float-right:after{content:var(--tw-content);float:right}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:translate-x-px:after{content:var(--tw-content);--tw-translate-x:1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:rounded-circle:after{content:var(--tw-content);border-radius:50%}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.after\:pl-2:after{content:var(--tw-content);padding-left:.5rem}.after\:text-gray-600:after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.after\:shadow-2xl:after{content:var(--tw-content);--tw-shadow:0 .3125rem .625rem 0 #0000001f;--tw-shadow-colored:0 .3125rem .625rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.after\:duration-300:after{content:var(--tw-content);transition-duration:.3s}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.after\:content-\[\'\/\'\]:after{--tw-content:"/";content:var(--tw-content)}.checked\:z-0:checked{z-index:0}.checked\:border-primary:checked{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.checked\:bg-primary:checked{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checked\:bg-none:checked{background-image:none}.checked\:bg-right:checked{background-position:100%}.checked\:after\:translate-x-5:checked:after{--tw-translate-x:1.25rem}.checked\:after\:translate-x-5:checked:after,.checked\:after\:translate-x-5\.3:checked:after{content:var(--tw-content);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.checked\:after\:translate-x-5\.3:checked:after{--tw-translate-x:1.3rem}.valid\:\!border-red-500:valid{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.hover\:-translate-y-0:hover{--tw-translate-y:-0px}.hover\:-translate-y-0:hover,.hover\:-translate-y-0\.4:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:-translate-y-0\.4:hover{--tw-translate-y:-0.1rem}.hover\:-translate-y-px:hover{--tw-translate-y:-1px}.hover\:-translate-y-px:hover,.hover\:scale-102:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-102:hover{--tw-scale-x:1.02;--tw-scale-y:1.02}.hover\:rounded-lg:hover{border-radius:.5rem}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.hover\:bg-green-500\/80:hover{background-color:#22c55ecc}.hover\:bg-primary\/30:hover{background-color:#0b55774d}.hover\:bg-primary\/5:hover{background-color:#0b55770d}.hover\:bg-primary\/80:hover{background-color:#0b5577cc}.hover\:bg-red-500\/80:hover{background-color:#f53939cc}.hover\:bg-sky-500\/80:hover{background-color:#0ea5e9cc}.hover\:bg-yellow-500\/80:hover{background-color:#fbb140cc}.hover\:italic:hover{font-style:italic}.hover\:no-underline:hover{text-decoration-line:none}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:brightness-75:hover{--tw-brightness:brightness(.75)}.hover\:brightness-75:hover,.hover\:brightness-90:hover{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.hover\:brightness-90:hover{--tw-brightness:brightness(.9)}.hover\:brightness-95:hover{--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:\!border-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:border-green-500:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:border-primary:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.focus\:bg-green-500\/80:focus{background-color:#22c55ecc}.focus\:bg-primary\/80:focus{background-color:#0b5577cc}.focus\:bg-red-500\/80:focus{background-color:#f53939cc}.focus\:bg-sky-500\/80:focus{background-color:#0ea5e9cc}.focus\:bg-yellow-500\/80:focus{background-color:#fbb140cc}.focus\:valid\:\!border-red-500:valid:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:valid\:border-green-500:valid:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:invalid\:border-red-500:invalid:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.focus\:file\:invalid\:border-red-500:invalid::file-selector-button:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.active\:\!border-red-500:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.active\:opacity-85:active{opacity:.85}.active\:valid\:\!border-red-500:valid:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-gray-400:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.disabled\:bg-gray-400:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.disabled\:text-gray-700:disabled{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.disabled\:opacity-75:disabled{opacity:.75}.disabled\:hover\:translate-y-0:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .dark\:inline){display:inline}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1;border-color:rgb(73 80 87/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-600){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-800){--tw-border-opacity:1;border-color:rgb(58 65 111/var(--tw-border-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:bg-green-500\/90){background-color:#22c55ee6}:is(.dark .dark\:bg-primary){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:bg-primary\/50){background-color:#0b557780}:is(.dark .dark\:bg-slate-700){--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-700\/50){background-color:#34476780}:is(.dark .dark\:bg-slate-850){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900){--tw-bg-opacity:1;background-color:rgb(5 17 57/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900\/30){background-color:#0511394d}:is(.dark .dark\:bg-gradient-to-r){background-image:linear-gradient(to right,var(--tw-gradient-stops))}:is(.dark .dark\:from-transparent){--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}:is(.dark .dark\:via-white){--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#fff var(--tw-gradient-via-position),var(--tw-gradient-to)}:is(.dark .dark\:to-transparent){--tw-gradient-to:#0000 var(--tw-gradient-to-position)}:is(.dark .dark\:fill-blue-500){fill:#5e72e4}:is(.dark .dark\:fill-gray-300){fill:#d2d6da}:is(.dark .dark\:fill-gray-500){fill:#adb5bd}:is(.dark .dark\:fill-gray-600){fill:#6c757d}:is(.dark .dark\:stroke-gray-600){stroke:#6c757d}:is(.dark .dark\:text-gray-100){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-500){--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:text-red-500){--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}:is(.dark .dark\:text-white){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .dark\:text-white\/80){color:#fffc}:is(.dark .dark\:text-white\/90){color:#ffffffe6}:is(.dark .dark\:opacity-60){opacity:.6}:is(.dark .dark\:opacity-75){opacity:.75}:is(.dark .dark\:opacity-80){opacity:.8}:is(.dark .dark\:opacity-90){opacity:.9}:is(.dark .dark\:shadow-dark-xl){--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color)}:is(.dark .dark\:shadow-dark-xl),:is(.dark .dark\:shadow-none){box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-none){--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}:is(.dark .dark\:brightness-110){--tw-brightness:brightness(1.1)}:is(.dark .dark\:brightness-110),:is(.dark .dark\:brightness-125){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-125){--tw-brightness:brightness(1.25)}:is(.dark .dark\:brightness-150){--tw-brightness:brightness(1.5)}:is(.dark .dark\:brightness-150),:is(.dark .dark\:brightness-90){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-90){--tw-brightness:brightness(.9)}:is(.dark .dark\:brightness-95){--tw-brightness:brightness(.95)}:is(.dark .dark\:brightness-95),:is(.dark .dark\:brightness-\[0\.885\]){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-\[0\.885\]){--tw-brightness:brightness(0.885)}:is(.dark .dark\:after\:text-gray-500):after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:checked\:border-primary:checked){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}:is(.dark .dark\:checked\:bg-primary:checked){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-primary\/20:hover){background-color:#0b557733}:is(.dark .dark\:hover\:bg-primary\/60:hover){background-color:#0b557799}:is(.dark .dark\:hover\:bg-slate-700\/50:hover){background-color:#34476780}:is(.dark .dark\:hover\:bg-slate-800:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:brightness-100:hover){--tw-brightness:brightness(1)}:is(.dark .dark\:hover\:brightness-100:hover),:is(.dark .dark\:hover\:brightness-105:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:hover\:brightness-105:hover){--tw-brightness:brightness(1.05)}:is(.dark .dark\:hover\:brightness-90:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:disabled\:border-gray-800:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity))}:is(.dark .dark\:disabled\:bg-gray-800:disabled){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:disabled\:text-gray-300:disabled){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}@media (min-width:576px){.sm\:right-24{right:6rem}.sm\:right-40{right:10rem}.sm\:right-6{right:1.5rem}.sm\:top-2{top:.5rem}.sm\:top-\[4\.5rem\]{top:4.5rem}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-start-5{grid-column-start:5}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:ml-1{margin-left:.25rem}.sm\:mr-16{margin-right:4rem}.sm\:h-10{height:2.5rem}.sm\:h-14{height:3.5rem}.sm\:h-7{height:1.75rem}.sm\:max-h-125{max-height:31.25rem}.sm\:max-h-28{max-height:7rem}.sm\:w-36{width:9rem}.sm\:w-50{width:12.5rem}.sm\:w-7{width:1.75rem}.sm\:min-w-\[500px\]{min-width:500px}.sm\:scale-100{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:justify-items-start{justify-items:start}.sm\:gap-4{gap:1rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-0{padding-top:0;padding-bottom:0}.sm\:pt-6{padding-top:1.5rem}.sm\:text-left{text-align:left}}@media (min-width:768px){.md\:top-\[45\%\]{top:45%}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-7{grid-column:span 7/span 7}.md\:col-span-8{grid-column:span 8/span 8}.md\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.md\:my-3{margin-top:.75rem;margin-bottom:.75rem}.md\:mb-0{margin-bottom:0}.md\:mb-3{margin-bottom:.75rem}.md\:mb-8{margin-bottom:2rem}.md\:mr-3{margin-right:.75rem}.md\:mt-0{margin-top:0}.md\:mt-6{margin-top:1.5rem}.md\:block{display:block}.md\:hidden{display:none}.md\:h-16{height:4rem}.md\:max-h-160{max-height:40rem}.md\:min-h-75-screen{min-height:75vh}.md\:w-1\/2{width:50%}.md\:w-60{width:15rem}.md\:justify-end{justify-content:flex-end}.md\:gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:py-4{padding-top:1rem;padding-bottom:1rem}.md\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:992px){.lg\:relative{position:relative}.lg\:top-11{top:2.75rem}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:my-3{margin-top:.75rem;margin-bottom:.75rem}.lg\:mt-0{margin-top:0}.lg\:mt-4{margin-top:1rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:h-24{height:6rem}.lg\:h-9{height:2.25rem}.lg\:w-80{width:20rem}.lg\:w-9{width:2.25rem}.lg\:flex-row{flex-direction:row}.lg\:flex-nowrap{flex-wrap:nowrap}.lg\:justify-start{justify-content:flex-start}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:gap-6{gap:1.5rem}.lg\:bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:pb-1{padding-bottom:.25rem}.lg\:text-left{text-align:left}}@media (min-width:1200px){.xl\:left-0{left:0}.xl\:right-24{right:6rem}.xl\:right-6{right:1.5rem}.xl\:ml-6{margin-left:1.5rem}.xl\:ml-68{margin-left:17rem}.xl\:hidden{display:none}.xl\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.xl\:p-1{padding:.25rem}.xl\:p-1\.5{padding:.375rem}.xl\:pl-75{padding-left:18.75rem}.xl\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:1320px){.\32xl\:col-span-4{grid-column:span 4/span 4}.\32xl\:col-span-6{grid-column:span 6/span 6}.\32xl\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.\32xl\:my-3{margin-top:.75rem;margin-bottom:.75rem}}@media (min-width:1920px){.\33xl\:col-span-3{grid-column:span 3/span 3}.\33xl\:col-span-4{grid-column:span 4/span 4}.\33xl\:col-span-5{grid-column:span 5/span 5}}@media (min-width:340px){.xs\:flex{display:flex}.xs\:flex-row{flex-direction:row}.xs\:items-center{align-items:center}.xs\:justify-start{justify-content:flex-start}.xs\:pl-2{padding-left:.5rem}.xs\:text-sm{font-size:.875rem;line-height:1.5rem}}.\[\&\>\*\]\:bg-primary>*{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))} \ No newline at end of file diff --git a/src/ui/static/js/utils/settings.js b/src/ui/static/js/utils/settings.js index b7d8c2c63..f73279014 100644 --- a/src/ui/static/js/utils/settings.js +++ b/src/ui/static/js/utils/settings.js @@ -27,7 +27,11 @@ class Popover { const btn = el.closest("svg"); //toggle curr popover const popover = btn.parentElement.querySelector(`[data-popover-content]`); + popover.classList.add("transition-all", "delay-200", "opacity-0"); popover.classList.remove("hidden"); + setTimeout(() => { + popover.classList.remove("opacity-0"); + }, 10); } hidePopover(el) { @@ -35,6 +39,7 @@ class Popover { //toggle curr popover const popover = btn.parentElement.querySelector(`[data-popover-content]`); popover.classList.add("hidden"); + popover.classList.remove("transition-all", "delay-200"); } } diff --git a/src/ui/templates/setup.html b/src/ui/templates/setup.html index 896e27e02..261ccfa3c 100644 --- a/src/ui/templates/setup.html +++ b/src/ui/templates/setup.html @@ -19,1124 +19,10 @@ format("truetype"); } - + diff --git a/src/ui/templates/totp.html b/src/ui/templates/totp.html index 18e106aaa..7a7dbe911 100644 --- a/src/ui/templates/totp.html +++ b/src/ui/templates/totp.html @@ -126,6 +126,82 @@
+ diff --git a/src/ui/utils.py b/src/ui/utils.py index 2c93a4f35..6df92c1cb 100644 --- a/src/ui/utils.py +++ b/src/ui/utils.py @@ -1,8 +1,12 @@ #!/usr/bin/python3 +from base64 import b64encode +from io import BytesIO from os.path import join from typing import List, Optional +from qrcode.main import QRCode + def path_to_dict( path: str, @@ -130,3 +134,13 @@ def path_to_dict( def check_settings(settings: dict, check: str) -> bool: return any(setting["context"] == check for setting in settings.values()) + + +def get_b64encoded_qr_image(data: str): + qr = QRCode(version=1, box_size=10, border=5) + qr.add_data(data) + qr.make(fit=True) + img = qr.make_image(fill_color="#0b5577", back_color="white") + buffered = BytesIO() + img.save(buffered) + return b64encode(buffered.getvalue()).decode("utf-8") From 556fc69365b31d5acdeb99ecd247e347402a15f5 Mon Sep 17 00:00:00 2001 From: Jordan Blasenhauer Date: Wed, 27 Dec 2023 19:04:32 +0100 Subject: [PATCH 074/154] update totp and profile style --- src/ui/static/css/dashboard.css | 2 +- src/ui/static/js/profile.js | 14 ++- src/ui/templates/base.html | 2 +- src/ui/templates/head.html | 2 +- src/ui/templates/profile.html | 193 ++++++++++++++++++++++++++------ src/ui/templates/totp.html | 14 +++ 6 files changed, 184 insertions(+), 43 deletions(-) diff --git a/src/ui/static/css/dashboard.css b/src/ui/static/css/dashboard.css index ed395b698..32f4f91b4 100644 --- a/src/ui/static/css/dashboard.css +++ b/src/ui/static/css/dashboard.css @@ -1 +1 @@ -/*! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e9ecef}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Open Sans;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#ced4da}input::placeholder,textarea::placeholder{opacity:1;color:#ced4da}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#5e72e480;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.\!container{width:100%!important;margin-right:auto!important;margin-left:auto!important;padding-right:1.5rem!important;padding-left:1.5rem!important}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:1.5rem;padding-left:1.5rem}@media (min-width:340px){.\!container{max-width:340px!important}.container{max-width:340px}}@media (min-width:576px){.\!container{max-width:576px!important}.container{max-width:576px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:992px){.\!container{max-width:992px!important}.container{max-width:992px}}@media (min-width:1200px){.\!container{max-width:1200px!important}.container{max-width:1200px}}@media (min-width:1320px){.\!container{max-width:1320px!important}.container{max-width:1320px}}@media (min-width:1920px){.\!container{max-width:1920px!important}.container{max-width:1920px}}a{letter-spacing:-.025rem}hr{margin:1rem 0;border:0;opacity:.25}img{max-width:none}label{display:inline-block}p{line-height:1.625;font-weight:400;margin-bottom:1rem}small{font-size:.875em}svg{display:inline}table{border-collapse:inherit}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;color:#344767}h1,h2,h3,h4{letter-spacing:-.05rem}h1,h2,h3{font-weight:700}h4,h5,h6{font-weight:600}h1{font-size:3rem;line-height:1.25}h2{font-size:2.25rem;line-height:1.3}h3{font-size:1.875rem}h3,h4{line-height:1.375}h4{font-size:1.5rem}h5{font-size:1.25rem;line-height:1.375}h6{font-size:1rem;line-height:1.625}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.-left-full{left:-100%}.-right-0{right:0}.-right-1{right:-.25rem}.bottom-0{bottom:0}.left-0{left:0}.left-auto{left:auto}.left-full{left:100%}.right-0{right:0}.right-2{right:.5rem}.right-20{right:5rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-7{right:1.75rem}.right-8{right:2rem}.top-0{top:0}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-16{top:4rem}.top-2{top:.5rem}.top-4{top:1rem}.top-\[4\.5rem\]{top:4.5rem}.top-\[43\%\]{top:43%}.top-\[60\%\]{top:60%}.top-\[8\.2rem\]{top:8.2rem}.-z-10{z-index:-10}.z-10{z-index:10}.z-100{z-index:100}.z-110{z-index:110}.z-20{z-index:20}.z-50{z-index:50}.z-990{z-index:990}.z-\[10000\]{z-index:10000}.z-\[1000\]{z-index:1000}.z-\[1001\]{z-index:1001}.z-\[20\]{z-index:20}.z-sticky{z-index:1020}.order-1{order:1}.order-2{order:2}.col-span-1{grid-column:span 1/span 1}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-9{grid-column:span 9/span 9}.float-right{float:right}.float-left{float:left}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-4{margin:1rem}.mx-0{margin-left:0;margin-right:0}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-2\.5{margin-left:.625rem;margin-right:.625rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-7{margin-bottom:1.75rem}.mb-8{margin-bottom:2rem}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-12{margin-left:3rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-12{margin-right:3rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-6{margin-right:1.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[4\.5rem\]{margin-top:4.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1\/3{height:33.333333%}.h-12{height:3rem}.h-14{height:3.5rem}.h-19{height:4.75rem}.h-3{height:.75rem}.h-4{height:1rem}.h-4\.5{height:1.125rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\.5{height:1.375rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[2\.5rem\]{height:2.5rem}.h-\[3\.5rem\]{height:3.5rem}.h-\[4rem\]{height:4rem}.h-\[90vh\]{height:90vh}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-sidenav{height:calc(100vh - 360px)}.max-h-100{max-height:25rem}.max-h-135{max-height:33.75rem}.max-h-30{max-height:7.5rem}.max-h-80{max-height:20rem}.max-h-90{max-height:22.5rem}.max-h-screen{max-height:100vh}.min-h-12{min-height:3rem}.min-h-20{min-height:5rem}.min-h-50-screen{min-height:50vh}.min-h-52{min-height:13rem}.min-h-6{min-height:1.5rem}.min-h-\[100px\]{min-height:100px}.min-h-\[350px\]{min-height:350px}.min-h-\[55vh\]{min-height:55vh}.min-h-\[75px\]{min-height:75px}.min-h-\[80vh\]{min-height:80vh}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-10{width:2.5rem}.w-11\/12{width:91.666667%}.w-12{width:3rem}.w-28{width:7rem}.w-3{width:.75rem}.w-4{width:1rem}.w-4\.5{width:1.125rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\.5{width:1.375rem}.w-50{width:12.5rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-80{width:20rem}.w-90{width:22.5rem}.w-\[2\.5rem\]{width:2.5rem}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[900px\]{min-width:900px}.max-w-180{max-width:45rem}.max-w-40{max-width:10rem}.max-w-60{max-width:15rem}.max-w-64{max-width:16rem}.max-w-\[1920px\]{max-width:1920px}.max-w-\[300px\]{max-width:300px}.max-w-\[400px\]{max-width:400px}.max-w-\[550px\]{max-width:550px}.max-w-full{max-width:100%}.flex-auto{flex:1 1 auto}.grow{flex-grow:1}.basis-full{flex-basis:100%}.-translate-x-1{--tw-translate-x:-0.25rem}.-translate-x-1,.-translate-x-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\.5{--tw-translate-x:-0.375rem}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0{--tw-translate-y:-0px}.-translate-y-0\.4{--tw-translate-y:-0.1rem}.-translate-y-0\.4,.-translate-y-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0\.5{--tw-translate-y:-0.125rem}.-translate-y-1{--tw-translate-y:-0.25rem}.-translate-y-1,.-translate-y-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\.5{--tw-translate-y:-0.375rem}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0\.5{--tw-translate-x:0.125rem}.translate-x-1{--tw-translate-x:0.25rem}.translate-x-1,.translate-x-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-2{--tw-translate-x:0.5rem}.translate-x-90{--tw-translate-x:22.5rem}.translate-x-90,.translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y:0px}.translate-y-0\.5{--tw-translate-y:0.125rem}.translate-y-0\.5,.translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y:0.25rem}.translate-y-16{--tw-translate-y:4rem}.translate-y-16,.translate-y-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y:0.5rem}.-rotate-12{--tw-rotate:-12deg}.-rotate-12,.rotate-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-12{--tw-rotate:12deg}.rotate-180{--tw-rotate:180deg}.rotate-180,.scale-105{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.scale-110,.scale-50{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-50{--tw-scale-x:.5;--tw-scale-y:.5}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-2{row-gap:.5rem}.gap-y-4{row-gap:1rem}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded,.rounded-1{border-radius:.25rem}.rounded-1\.4{border-radius:.35rem}.rounded-10{border-radius:2.5rem}.rounded-2xl{border-radius:1rem}.rounded-circle{border-radius:50%}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-xl{border-radius:.75rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-lg{border-bottom-left-radius:.5rem}.rounded-b-lg,.rounded-r-lg{border-bottom-right-radius:.5rem}.rounded-r-lg{border-top-right-radius:.5rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-gray-200{--tw-border-opacity:1;border-color:rgb(233 236 239/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.border-primary{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.bg-gray-600\/50{background-color:#6c757d80}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(251 99 64/var(--tw-bg-opacity))}.bg-primary{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.bg-primary\/20{background-color:#0b557733}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity))}.bg-secondary{--tw-bg-opacity:1;background-color:rgb(46 172 104/var(--tw-bg-opacity))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.bg-slate-800\/10{background-color:#3a416f1a}.bg-transparent{background-color:initial}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-black\/40{--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#0006 var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.bg-150{background-size:150%}.bg-contain{background-size:contain}.bg-clip-border{background-clip:initial}.bg-clip-padding{background-clip:padding-box}.bg-center{background-position:50%}.bg-left{background-position:0}.bg-x-25{background-position:25% 0}.bg-no-repeat{background-repeat:no-repeat}.fill-amber-500{fill:#f59e0b}.fill-blue-500{fill:#5e72e4}.fill-gray-500{fill:#adb5bd}.fill-gray-600{fill:#6c757d}.fill-green-500{fill:#22c55e}.fill-primary{fill:#0b5577}.fill-red-500{fill:#f53939}.fill-sky-500{fill:#0ea5e9}.fill-slate-800{fill:#3a416f}.fill-white{fill:#fff}.fill-yellow-500{fill:#fbb140}.stroke-blue-400{stroke:#60a5fa}.stroke-blue-500{stroke:#5e72e4}.stroke-emerald-600{stroke:#059669}.stroke-gray-100{stroke:#ebeff4}.stroke-gray-600{stroke:#6c757d}.stroke-green-700{stroke:#15803d}.stroke-orange-500{stroke:#fb6340}.stroke-pink-600{stroke:#db2777}.stroke-red-500{stroke:#f53939}.stroke-sky-500{stroke:#0ea5e9}.stroke-teal-600{stroke:#0d9488}.stroke-yellow-500{stroke:#fbb140}.stroke-0{stroke-width:0}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pb-8{padding-bottom:2rem}.pl-0{padding-left:0}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-6{padding-left:1.5rem}.pr-0{padding-right:0}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-20{padding-top:5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-sans{font-family:Open Sans}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-5{line-height:1.25rem}.leading-5\.6{line-height:1.4rem}.leading-6{line-height:1.5rem}.leading-8{line-height:2rem}.leading-default{line-height:1.6}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-tight{line-height:1.25}.tracking-tight-rem{letter-spacing:-.025rem}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-blue-500{--tw-text-opacity:1;color:rgb(94 114 228/var(--tw-text-opacity))}.text-emerald-500{--tw-text-opacity:1;color:rgb(45 206 137/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.text-gray-600\/90{color:#6c757de6}.text-gray-700{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.text-gray-700\/80{color:#495057cc}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}.text-sky-600{--tw-text-opacity:1;color:rgb(62 161 236/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(103 116 142/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(52 71 103/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(251 177 64/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-3xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-3xl{--tw-shadow:0 8px 26px -4px #14141426,0 8px 9px -5px #1414140f;--tw-shadow-colored:0 8px 26px -4px var(--tw-shadow-color),0 8px 9px -5px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.shadow-md,.shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-sm{--tw-shadow:0 .25rem .375rem -.0625rem #1414141f,0 .125rem .25rem -.0625rem #14141412;--tw-shadow-colored:0 .25rem .375rem -.0625rem var(--tw-shadow-color),0 .125rem .25rem -.0625rem var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color)}.shadow-xs{--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:ease;transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:ease;transition-duration:.15s}.delay-200{transition-delay:.2s}.duration-200{transition-duration:.2s}.duration-250{transition-duration:.25s}.duration-300{transition-duration:.3s}.duration-700{transition-duration:.7s}.ease-in{transition-timing-function:ease-in}.ease-in-out{transition-timing-function:ease-in-out}.flex-wrap-inherit{flex-wrap:inherit}@font-face{font-family:Open Sans;src:url(../webfonts/OpenSans.ttf)}*{font-family:Open Sans,sans-serif!important}.ace_content,.ace_editor,.ace_editor div{font-family:Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace!important;font-size:16px!important;font-weight:400!important}.close-btn{display:inline-block;cursor:pointer;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.close-btn,.close-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.close-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.close-btn:focus,.close-btn:hover{background-color:#fffc}.close-btn:active{opacity:.85}:is(.dark .close-btn){--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity));--tw-brightness:brightness(.9)}:is(.dark .close-btn),:is(.dark .close-btn:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .close-btn:hover){--tw-brightness:brightness(.75)}.valid-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.valid-btn,.valid-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.valid-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.valid-btn:focus,.valid-btn:hover{background-color:#22c55ecc}.valid-btn:active{opacity:.85}:is(.dark .valid-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.delete-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.delete-btn,.delete-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.delete-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.delete-btn:focus,.delete-btn:hover{background-color:#f53939cc}.delete-btn:active{opacity:.85}:is(.dark .delete-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.edit-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.edit-btn,.edit-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.edit-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.edit-btn:focus,.edit-btn:hover{background-color:#fbb140cc}.edit-btn:active{opacity:.85}:is(.dark .edit-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.info-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.info-btn,.info-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.info-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.info-btn:focus,.info-btn:hover{background-color:#0ea5e9cc}.info-btn:active{opacity:.85}:is(.dark .info-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.checkbox{position:relative;z-index:10;float:left;margin-top:.25rem;height:1.25rem;width:1.25rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.35rem;border-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-size:contain;background-position:50%;background-repeat:no-repeat;vertical-align:top;font-size:1rem;line-height:1.5rem;transition-property:all;transition-timing-function:ease;transition-duration:.25s}.checkbox,.checkbox:disabled{--tw-border-opacity:1;--tw-bg-opacity:1}.checkbox:disabled{cursor:default;border-color:rgb(206 212 218/var(--tw-border-opacity));background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.checkbox[data-checked=true]{z-index:0;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checkbox:disabled[data-checked=true]{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}:is(.dark .checkbox){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .checkbox[data-checked=true]){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled[data-checked=true]){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.custom-select-btn{display:flex;width:100%;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;border-style:solid;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;text-align:left;vertical-align:middle;font-size:.875rem;font-weight:400;line-height:1.4rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}.custom-select-btn::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.custom-select-btn:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .custom-select-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .custom-select-btn),:is(.dark .custom-select-btn:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .custom-select-btn:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.custom-select-btn{padding:.5rem .75rem}}.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity))}.active.custom-dropdown-btn,:is(.dark .custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.active.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));color:rgb(210 214 218/var(--tw-text-opacity))}.regular-input,:is(.dark .active.custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1}.regular-input{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.5rem;border-width:1px;border-style:solid;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;font-size:.875rem;font-weight:400;line-height:1.4rem;color:rgb(73 80 87/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.regular-input::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input:focus{border-color:#d2d6da00;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.regular-input:valid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.regular-input:invalid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))}.regular-input:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .regular-input){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .regular-input),:is(.dark .regular-input:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .regular-input:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.regular-input{padding:.5rem .75rem}}.input-title{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .input-title){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.popover-settings-container{position:absolute;left:0;bottom:0;z-index:50;--tw-translate-y:-1.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:all;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.5s}:is(.dark .popover-settings-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.popover-settings-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .popover-settings-text){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity));opacity:.9}.popover-settings-svg{margin-left:.5rem;height:1.25rem;width:1.25rem;cursor:pointer;fill:#5e72e4}.popover-settings-svg:hover{--tw-brightness:brightness(.75);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.active.settings-tabs-tab-btn{position:relative;z-index:10;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .active.settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .active.settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-tab-btn{position:relative;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-name{padding-left:.75rem;padding-right:.5rem;--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-name){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.settings-tabs-popover-container{position:absolute;top:60px;left:0;z-index:50;min-width:150px;border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}:is(.dark .settings-tabs-popover-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-popover-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.settings-tabs-mobile-btn{margin-top:.25rem;margin-bottom:.25rem;display:flex;width:100%;cursor:pointer;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-mobile-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-mobile-btn:hover){--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-mobile-btn-text{--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-mobile-btn-text){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.active.settings-tabs-mobile-dropdown-btn{position:relative;z-index:1000;margin-top:0;margin-bottom:0;cursor:pointer;border-radius:0;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .active.settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first.settings-tabs-mobile-dropdown-btn{border-top-left-radius:.25rem;border-top-right-radius:.25rem;border-width:1px}.settings-tabs-mobile-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;display:flex;cursor:pointer;justify-content:space-between;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first-letter\:absolute:first-letter{position:absolute}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.before\:float-left:before{content:var(--tw-content);float:left}.before\:pr-2:before{content:var(--tw-content);padding-right:.5rem}.before\:text-white:before{content:var(--tw-content);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.before\:content-\[\'\/\'\]:before{--tw-content:"/";content:var(--tw-content)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-px:after{content:var(--tw-content);top:1px}.after\:float-right:after{content:var(--tw-content);float:right}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:translate-x-px:after{content:var(--tw-content);--tw-translate-x:1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:rounded-circle:after{content:var(--tw-content);border-radius:50%}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.after\:pl-2:after{content:var(--tw-content);padding-left:.5rem}.after\:text-gray-600:after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.after\:shadow-2xl:after{content:var(--tw-content);--tw-shadow:0 .3125rem .625rem 0 #0000001f;--tw-shadow-colored:0 .3125rem .625rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.after\:duration-300:after{content:var(--tw-content);transition-duration:.3s}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.after\:content-\[\'\/\'\]:after{--tw-content:"/";content:var(--tw-content)}.checked\:z-0:checked{z-index:0}.checked\:border-primary:checked{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.checked\:bg-primary:checked{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checked\:bg-none:checked{background-image:none}.checked\:bg-right:checked{background-position:100%}.checked\:after\:translate-x-5:checked:after{--tw-translate-x:1.25rem}.checked\:after\:translate-x-5:checked:after,.checked\:after\:translate-x-5\.3:checked:after{content:var(--tw-content);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.checked\:after\:translate-x-5\.3:checked:after{--tw-translate-x:1.3rem}.valid\:\!border-red-500:valid{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.hover\:-translate-y-0:hover{--tw-translate-y:-0px}.hover\:-translate-y-0:hover,.hover\:-translate-y-0\.4:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:-translate-y-0\.4:hover{--tw-translate-y:-0.1rem}.hover\:-translate-y-px:hover{--tw-translate-y:-1px}.hover\:-translate-y-px:hover,.hover\:scale-102:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-102:hover{--tw-scale-x:1.02;--tw-scale-y:1.02}.hover\:rounded-lg:hover{border-radius:.5rem}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.hover\:bg-green-500\/80:hover{background-color:#22c55ecc}.hover\:bg-primary\/30:hover{background-color:#0b55774d}.hover\:bg-primary\/5:hover{background-color:#0b55770d}.hover\:bg-primary\/80:hover{background-color:#0b5577cc}.hover\:bg-red-500\/80:hover{background-color:#f53939cc}.hover\:bg-sky-500\/80:hover{background-color:#0ea5e9cc}.hover\:bg-yellow-500\/80:hover{background-color:#fbb140cc}.hover\:italic:hover{font-style:italic}.hover\:no-underline:hover{text-decoration-line:none}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:brightness-75:hover{--tw-brightness:brightness(.75)}.hover\:brightness-75:hover,.hover\:brightness-90:hover{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.hover\:brightness-90:hover{--tw-brightness:brightness(.9)}.hover\:brightness-95:hover{--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:\!border-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:border-green-500:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:border-primary:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.focus\:bg-green-500\/80:focus{background-color:#22c55ecc}.focus\:bg-primary\/80:focus{background-color:#0b5577cc}.focus\:bg-red-500\/80:focus{background-color:#f53939cc}.focus\:bg-sky-500\/80:focus{background-color:#0ea5e9cc}.focus\:bg-yellow-500\/80:focus{background-color:#fbb140cc}.focus\:valid\:\!border-red-500:valid:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:valid\:border-green-500:valid:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:invalid\:border-red-500:invalid:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.focus\:file\:invalid\:border-red-500:invalid::file-selector-button:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.active\:\!border-red-500:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.active\:opacity-85:active{opacity:.85}.active\:valid\:\!border-red-500:valid:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-gray-400:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.disabled\:bg-gray-400:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.disabled\:text-gray-700:disabled{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.disabled\:opacity-75:disabled{opacity:.75}.disabled\:hover\:translate-y-0:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .dark\:inline){display:inline}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1;border-color:rgb(73 80 87/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-600){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-800){--tw-border-opacity:1;border-color:rgb(58 65 111/var(--tw-border-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:bg-green-500\/90){background-color:#22c55ee6}:is(.dark .dark\:bg-primary){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:bg-primary\/50){background-color:#0b557780}:is(.dark .dark\:bg-slate-700){--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-700\/50){background-color:#34476780}:is(.dark .dark\:bg-slate-850){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900){--tw-bg-opacity:1;background-color:rgb(5 17 57/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900\/30){background-color:#0511394d}:is(.dark .dark\:bg-gradient-to-r){background-image:linear-gradient(to right,var(--tw-gradient-stops))}:is(.dark .dark\:from-transparent){--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}:is(.dark .dark\:via-white){--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#fff var(--tw-gradient-via-position),var(--tw-gradient-to)}:is(.dark .dark\:to-transparent){--tw-gradient-to:#0000 var(--tw-gradient-to-position)}:is(.dark .dark\:fill-blue-500){fill:#5e72e4}:is(.dark .dark\:fill-gray-300){fill:#d2d6da}:is(.dark .dark\:fill-gray-500){fill:#adb5bd}:is(.dark .dark\:fill-gray-600){fill:#6c757d}:is(.dark .dark\:stroke-gray-600){stroke:#6c757d}:is(.dark .dark\:text-gray-100){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-500){--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:text-red-500){--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}:is(.dark .dark\:text-white){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .dark\:text-white\/80){color:#fffc}:is(.dark .dark\:text-white\/90){color:#ffffffe6}:is(.dark .dark\:opacity-60){opacity:.6}:is(.dark .dark\:opacity-75){opacity:.75}:is(.dark .dark\:opacity-80){opacity:.8}:is(.dark .dark\:opacity-90){opacity:.9}:is(.dark .dark\:shadow-dark-xl){--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color)}:is(.dark .dark\:shadow-dark-xl),:is(.dark .dark\:shadow-none){box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-none){--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}:is(.dark .dark\:brightness-110){--tw-brightness:brightness(1.1)}:is(.dark .dark\:brightness-110),:is(.dark .dark\:brightness-125){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-125){--tw-brightness:brightness(1.25)}:is(.dark .dark\:brightness-150){--tw-brightness:brightness(1.5)}:is(.dark .dark\:brightness-150),:is(.dark .dark\:brightness-90){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-90){--tw-brightness:brightness(.9)}:is(.dark .dark\:brightness-95){--tw-brightness:brightness(.95)}:is(.dark .dark\:brightness-95),:is(.dark .dark\:brightness-\[0\.885\]){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-\[0\.885\]){--tw-brightness:brightness(0.885)}:is(.dark .dark\:after\:text-gray-500):after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:checked\:border-primary:checked){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}:is(.dark .dark\:checked\:bg-primary:checked){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-primary\/20:hover){background-color:#0b557733}:is(.dark .dark\:hover\:bg-primary\/60:hover){background-color:#0b557799}:is(.dark .dark\:hover\:bg-slate-700\/50:hover){background-color:#34476780}:is(.dark .dark\:hover\:bg-slate-800:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:brightness-100:hover){--tw-brightness:brightness(1)}:is(.dark .dark\:hover\:brightness-100:hover),:is(.dark .dark\:hover\:brightness-105:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:hover\:brightness-105:hover){--tw-brightness:brightness(1.05)}:is(.dark .dark\:hover\:brightness-90:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:disabled\:border-gray-800:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity))}:is(.dark .dark\:disabled\:bg-gray-800:disabled){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:disabled\:text-gray-300:disabled){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}@media (min-width:576px){.sm\:right-24{right:6rem}.sm\:right-40{right:10rem}.sm\:right-6{right:1.5rem}.sm\:top-2{top:.5rem}.sm\:top-\[4\.5rem\]{top:4.5rem}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-start-5{grid-column-start:5}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:ml-1{margin-left:.25rem}.sm\:mr-16{margin-right:4rem}.sm\:h-10{height:2.5rem}.sm\:h-14{height:3.5rem}.sm\:h-7{height:1.75rem}.sm\:max-h-125{max-height:31.25rem}.sm\:max-h-28{max-height:7rem}.sm\:w-36{width:9rem}.sm\:w-50{width:12.5rem}.sm\:w-7{width:1.75rem}.sm\:min-w-\[500px\]{min-width:500px}.sm\:scale-100{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:justify-items-start{justify-items:start}.sm\:gap-4{gap:1rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-0{padding-top:0;padding-bottom:0}.sm\:pt-6{padding-top:1.5rem}.sm\:text-left{text-align:left}}@media (min-width:768px){.md\:top-\[45\%\]{top:45%}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-7{grid-column:span 7/span 7}.md\:col-span-8{grid-column:span 8/span 8}.md\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.md\:my-3{margin-top:.75rem;margin-bottom:.75rem}.md\:mb-0{margin-bottom:0}.md\:mb-3{margin-bottom:.75rem}.md\:mb-8{margin-bottom:2rem}.md\:mr-3{margin-right:.75rem}.md\:mt-0{margin-top:0}.md\:mt-6{margin-top:1.5rem}.md\:block{display:block}.md\:hidden{display:none}.md\:h-16{height:4rem}.md\:max-h-160{max-height:40rem}.md\:min-h-75-screen{min-height:75vh}.md\:w-1\/2{width:50%}.md\:w-60{width:15rem}.md\:justify-end{justify-content:flex-end}.md\:gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:py-4{padding-top:1rem;padding-bottom:1rem}.md\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:992px){.lg\:relative{position:relative}.lg\:top-11{top:2.75rem}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:my-3{margin-top:.75rem;margin-bottom:.75rem}.lg\:mt-0{margin-top:0}.lg\:mt-4{margin-top:1rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:h-24{height:6rem}.lg\:h-9{height:2.25rem}.lg\:w-80{width:20rem}.lg\:w-9{width:2.25rem}.lg\:flex-row{flex-direction:row}.lg\:flex-nowrap{flex-wrap:nowrap}.lg\:justify-start{justify-content:flex-start}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:gap-6{gap:1.5rem}.lg\:bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:pb-1{padding-bottom:.25rem}.lg\:text-left{text-align:left}}@media (min-width:1200px){.xl\:left-0{left:0}.xl\:right-24{right:6rem}.xl\:right-6{right:1.5rem}.xl\:ml-6{margin-left:1.5rem}.xl\:ml-68{margin-left:17rem}.xl\:hidden{display:none}.xl\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.xl\:p-1{padding:.25rem}.xl\:p-1\.5{padding:.375rem}.xl\:pl-75{padding-left:18.75rem}.xl\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:1320px){.\32xl\:col-span-4{grid-column:span 4/span 4}.\32xl\:col-span-6{grid-column:span 6/span 6}.\32xl\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.\32xl\:my-3{margin-top:.75rem;margin-bottom:.75rem}}@media (min-width:1920px){.\33xl\:col-span-3{grid-column:span 3/span 3}.\33xl\:col-span-4{grid-column:span 4/span 4}.\33xl\:col-span-5{grid-column:span 5/span 5}}@media (min-width:340px){.xs\:flex{display:flex}.xs\:flex-row{flex-direction:row}.xs\:items-center{align-items:center}.xs\:justify-start{justify-content:flex-start}.xs\:pl-2{padding-left:.5rem}.xs\:text-sm{font-size:.875rem;line-height:1.5rem}}.\[\&\>\*\]\:bg-primary>*{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))} \ No newline at end of file +/*! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e9ecef}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Open Sans;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#ced4da}input::placeholder,textarea::placeholder{opacity:1;color:#ced4da}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#5e72e480;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.\!container{width:100%!important;margin-right:auto!important;margin-left:auto!important;padding-right:1.5rem!important;padding-left:1.5rem!important}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:1.5rem;padding-left:1.5rem}@media (min-width:340px){.\!container{max-width:340px!important}.container{max-width:340px}}@media (min-width:576px){.\!container{max-width:576px!important}.container{max-width:576px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:992px){.\!container{max-width:992px!important}.container{max-width:992px}}@media (min-width:1200px){.\!container{max-width:1200px!important}.container{max-width:1200px}}@media (min-width:1320px){.\!container{max-width:1320px!important}.container{max-width:1320px}}@media (min-width:1920px){.\!container{max-width:1920px!important}.container{max-width:1920px}}a{letter-spacing:-.025rem}hr{margin:1rem 0;border:0;opacity:.25}img{max-width:none}label{display:inline-block}p{line-height:1.625;font-weight:400;margin-bottom:1rem}small{font-size:.875em}svg{display:inline}table{border-collapse:inherit}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;color:#344767}h1,h2,h3,h4{letter-spacing:-.05rem}h1,h2,h3{font-weight:700}h4,h5,h6{font-weight:600}h1{font-size:3rem;line-height:1.25}h2{font-size:2.25rem;line-height:1.3}h3{font-size:1.875rem}h3,h4{line-height:1.375}h4{font-size:1.5rem}h5{font-size:1.25rem;line-height:1.375}h6{font-size:1rem;line-height:1.625}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.-left-full{left:-100%}.-right-0{right:0}.-right-1{right:-.25rem}.bottom-0{bottom:0}.left-0{left:0}.left-auto{left:auto}.left-full{left:100%}.right-0{right:0}.right-2{right:.5rem}.right-20{right:5rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-7{right:1.75rem}.right-8{right:2rem}.top-0{top:0}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-16{top:4rem}.top-2{top:.5rem}.top-4{top:1rem}.top-\[4\.5rem\]{top:4.5rem}.top-\[43\%\]{top:43%}.top-\[60\%\]{top:60%}.top-\[8\.2rem\]{top:8.2rem}.-z-10{z-index:-10}.z-10{z-index:10}.z-100{z-index:100}.z-110{z-index:110}.z-20{z-index:20}.z-50{z-index:50}.z-990{z-index:990}.z-\[10000\]{z-index:10000}.z-\[1000\]{z-index:1000}.z-\[1001\]{z-index:1001}.z-\[20\]{z-index:20}.z-sticky{z-index:1020}.order-1{order:1}.order-2{order:2}.col-span-1{grid-column:span 1/span 1}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-9{grid-column:span 9/span 9}.float-right{float:right}.float-left{float:left}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-4{margin:1rem}.mx-0{margin-left:0;margin-right:0}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-2\.5{margin-left:.625rem;margin-right:.625rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-7{margin-bottom:1.75rem}.mb-8{margin-bottom:2rem}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-12{margin-left:3rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-12{margin-right:3rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-6{margin-right:1.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[4\.5rem\]{margin-top:4.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1\/3{height:33.333333%}.h-12{height:3rem}.h-14{height:3.5rem}.h-19{height:4.75rem}.h-3{height:.75rem}.h-4{height:1rem}.h-4\.5{height:1.125rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\.5{height:1.375rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[2\.5rem\]{height:2.5rem}.h-\[3\.5rem\]{height:3.5rem}.h-\[4rem\]{height:4rem}.h-\[90vh\]{height:90vh}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-sidenav{height:calc(100vh - 360px)}.max-h-100{max-height:25rem}.max-h-135{max-height:33.75rem}.max-h-30{max-height:7.5rem}.max-h-80{max-height:20rem}.max-h-90{max-height:22.5rem}.max-h-screen{max-height:100vh}.min-h-12{min-height:3rem}.min-h-20{min-height:5rem}.min-h-50-screen{min-height:50vh}.min-h-52{min-height:13rem}.min-h-6{min-height:1.5rem}.min-h-\[100px\]{min-height:100px}.min-h-\[350px\]{min-height:350px}.min-h-\[55vh\]{min-height:55vh}.min-h-\[75px\]{min-height:75px}.min-h-\[80vh\]{min-height:80vh}.min-h-screen{min-height:100vh}.min-h-\[90vh\]{min-height:90vh}.min-h-\[85vh\]{min-height:85vh}.w-1{width:.25rem}.w-10{width:2.5rem}.w-11\/12{width:91.666667%}.w-12{width:3rem}.w-28{width:7rem}.w-3{width:.75rem}.w-4{width:1rem}.w-4\.5{width:1.125rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\.5{width:1.375rem}.w-50{width:12.5rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-80{width:20rem}.w-90{width:22.5rem}.w-\[2\.5rem\]{width:2.5rem}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[900px\]{min-width:900px}.max-w-180{max-width:45rem}.max-w-40{max-width:10rem}.max-w-60{max-width:15rem}.max-w-64{max-width:16rem}.max-w-\[1920px\]{max-width:1920px}.max-w-\[300px\]{max-width:300px}.max-w-\[400px\]{max-width:400px}.max-w-\[550px\]{max-width:550px}.max-w-full{max-width:100%}.flex-auto{flex:1 1 auto}.grow{flex-grow:1}.basis-full{flex-basis:100%}.-translate-x-1{--tw-translate-x:-0.25rem}.-translate-x-1,.-translate-x-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\.5{--tw-translate-x:-0.375rem}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0{--tw-translate-y:-0px}.-translate-y-0\.4{--tw-translate-y:-0.1rem}.-translate-y-0\.4,.-translate-y-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0\.5{--tw-translate-y:-0.125rem}.-translate-y-1{--tw-translate-y:-0.25rem}.-translate-y-1,.-translate-y-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\.5{--tw-translate-y:-0.375rem}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0\.5{--tw-translate-x:0.125rem}.translate-x-1{--tw-translate-x:0.25rem}.translate-x-1,.translate-x-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-2{--tw-translate-x:0.5rem}.translate-x-90{--tw-translate-x:22.5rem}.translate-x-90,.translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y:0px}.translate-y-0\.5{--tw-translate-y:0.125rem}.translate-y-0\.5,.translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y:0.25rem}.translate-y-16{--tw-translate-y:4rem}.translate-y-16,.translate-y-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y:0.5rem}.-rotate-12{--tw-rotate:-12deg}.-rotate-12,.rotate-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-12{--tw-rotate:12deg}.rotate-180{--tw-rotate:180deg}.rotate-180,.scale-105{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.scale-110,.scale-50{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-50{--tw-scale-x:.5;--tw-scale-y:.5}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-2{row-gap:.5rem}.gap-y-4{row-gap:1rem}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded,.rounded-1{border-radius:.25rem}.rounded-1\.4{border-radius:.35rem}.rounded-10{border-radius:2.5rem}.rounded-2xl{border-radius:1rem}.rounded-circle{border-radius:50%}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-xl{border-radius:.75rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-lg{border-bottom-left-radius:.5rem}.rounded-b-lg,.rounded-r-lg{border-bottom-right-radius:.5rem}.rounded-r-lg{border-top-right-radius:.5rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-gray-200{--tw-border-opacity:1;border-color:rgb(233 236 239/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.border-primary{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.bg-gray-600\/50{background-color:#6c757d80}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(251 99 64/var(--tw-bg-opacity))}.bg-primary{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.bg-primary\/20{background-color:#0b557733}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity))}.bg-secondary{--tw-bg-opacity:1;background-color:rgb(46 172 104/var(--tw-bg-opacity))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.bg-slate-800\/10{background-color:#3a416f1a}.bg-transparent{background-color:initial}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-black\/40{--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#0006 var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.bg-150{background-size:150%}.bg-contain{background-size:contain}.bg-clip-border{background-clip:initial}.bg-clip-padding{background-clip:padding-box}.bg-center{background-position:50%}.bg-left{background-position:0}.bg-x-25{background-position:25% 0}.bg-no-repeat{background-repeat:no-repeat}.fill-amber-500{fill:#f59e0b}.fill-blue-500{fill:#5e72e4}.fill-gray-500{fill:#adb5bd}.fill-gray-600{fill:#6c757d}.fill-green-500{fill:#22c55e}.fill-primary{fill:#0b5577}.fill-red-500{fill:#f53939}.fill-sky-500{fill:#0ea5e9}.fill-slate-800{fill:#3a416f}.fill-white{fill:#fff}.fill-yellow-500{fill:#fbb140}.stroke-blue-400{stroke:#60a5fa}.stroke-blue-500{stroke:#5e72e4}.stroke-emerald-600{stroke:#059669}.stroke-gray-100{stroke:#ebeff4}.stroke-gray-600{stroke:#6c757d}.stroke-green-700{stroke:#15803d}.stroke-orange-500{stroke:#fb6340}.stroke-pink-600{stroke:#db2777}.stroke-red-500{stroke:#f53939}.stroke-sky-500{stroke:#0ea5e9}.stroke-teal-600{stroke:#0d9488}.stroke-yellow-500{stroke:#fbb140}.stroke-0{stroke-width:0}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pb-8{padding-bottom:2rem}.pl-0{padding-left:0}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-6{padding-left:1.5rem}.pr-0{padding-right:0}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-20{padding-top:5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-sans{font-family:Open Sans}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-5{line-height:1.25rem}.leading-5\.6{line-height:1.4rem}.leading-6{line-height:1.5rem}.leading-8{line-height:2rem}.leading-default{line-height:1.6}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-tight{line-height:1.25}.tracking-tight-rem{letter-spacing:-.025rem}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-blue-500{--tw-text-opacity:1;color:rgb(94 114 228/var(--tw-text-opacity))}.text-emerald-500{--tw-text-opacity:1;color:rgb(45 206 137/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.text-gray-600\/90{color:#6c757de6}.text-gray-700{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.text-gray-700\/80{color:#495057cc}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}.text-sky-600{--tw-text-opacity:1;color:rgb(62 161 236/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(103 116 142/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(52 71 103/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(251 177 64/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-3xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-3xl{--tw-shadow:0 8px 26px -4px #14141426,0 8px 9px -5px #1414140f;--tw-shadow-colored:0 8px 26px -4px var(--tw-shadow-color),0 8px 9px -5px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.shadow-md,.shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-sm{--tw-shadow:0 .25rem .375rem -.0625rem #1414141f,0 .125rem .25rem -.0625rem #14141412;--tw-shadow-colored:0 .25rem .375rem -.0625rem var(--tw-shadow-color),0 .125rem .25rem -.0625rem var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color)}.shadow-xs{--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:ease;transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:ease;transition-duration:.15s}.delay-200{transition-delay:.2s}.duration-200{transition-duration:.2s}.duration-250{transition-duration:.25s}.duration-300{transition-duration:.3s}.duration-700{transition-duration:.7s}.ease-in{transition-timing-function:ease-in}.ease-in-out{transition-timing-function:ease-in-out}.flex-wrap-inherit{flex-wrap:inherit}@font-face{font-family:Open Sans;src:url(../webfonts/OpenSans.ttf)}*{font-family:Open Sans,sans-serif!important}.ace_content,.ace_editor,.ace_editor div{font-family:Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace!important;font-size:16px!important;font-weight:400!important}.close-btn{display:inline-block;cursor:pointer;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.close-btn,.close-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.close-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.close-btn:focus,.close-btn:hover{background-color:#fffc}.close-btn:active{opacity:.85}:is(.dark .close-btn){--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity));--tw-brightness:brightness(.9)}:is(.dark .close-btn),:is(.dark .close-btn:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .close-btn:hover){--tw-brightness:brightness(.75)}.valid-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.valid-btn,.valid-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.valid-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.valid-btn:focus,.valid-btn:hover{background-color:#22c55ecc}.valid-btn:active{opacity:.85}:is(.dark .valid-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.delete-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.delete-btn,.delete-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.delete-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.delete-btn:focus,.delete-btn:hover{background-color:#f53939cc}.delete-btn:active{opacity:.85}:is(.dark .delete-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.edit-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.edit-btn,.edit-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.edit-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.edit-btn:focus,.edit-btn:hover{background-color:#fbb140cc}.edit-btn:active{opacity:.85}:is(.dark .edit-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.info-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.info-btn,.info-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.info-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.info-btn:focus,.info-btn:hover{background-color:#0ea5e9cc}.info-btn:active{opacity:.85}:is(.dark .info-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.checkbox{position:relative;z-index:10;float:left;margin-top:.25rem;height:1.25rem;width:1.25rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.35rem;border-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-size:contain;background-position:50%;background-repeat:no-repeat;vertical-align:top;font-size:1rem;line-height:1.5rem;transition-property:all;transition-timing-function:ease;transition-duration:.25s}.checkbox,.checkbox:disabled{--tw-border-opacity:1;--tw-bg-opacity:1}.checkbox:disabled{cursor:default;border-color:rgb(206 212 218/var(--tw-border-opacity));background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.checkbox[data-checked=true]{z-index:0;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checkbox:disabled[data-checked=true]{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}:is(.dark .checkbox){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .checkbox[data-checked=true]){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled[data-checked=true]){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.custom-select-btn{display:flex;width:100%;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;border-style:solid;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;text-align:left;vertical-align:middle;font-size:.875rem;font-weight:400;line-height:1.4rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}.custom-select-btn::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.custom-select-btn:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .custom-select-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .custom-select-btn),:is(.dark .custom-select-btn:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .custom-select-btn:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.custom-select-btn{padding:.5rem .75rem}}.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity))}.active.custom-dropdown-btn,:is(.dark .custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.active.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));color:rgb(210 214 218/var(--tw-text-opacity))}.regular-input,:is(.dark .active.custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1}.regular-input{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.5rem;border-width:1px;border-style:solid;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;font-size:.875rem;font-weight:400;line-height:1.4rem;color:rgb(73 80 87/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.regular-input::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input:focus{border-color:#d2d6da00;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.regular-input:valid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.regular-input:invalid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))}.regular-input:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .regular-input){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .regular-input),:is(.dark .regular-input:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .regular-input:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.regular-input{padding:.5rem .75rem}}.input-title{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .input-title){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.popover-settings-container{position:absolute;left:0;bottom:0;z-index:50;--tw-translate-y:-1.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:all;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.5s}:is(.dark .popover-settings-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.popover-settings-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .popover-settings-text){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity));opacity:.9}.popover-settings-svg{margin-left:.5rem;height:1.25rem;width:1.25rem;cursor:pointer;fill:#5e72e4}.popover-settings-svg:hover{--tw-brightness:brightness(.75);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.active.settings-tabs-tab-btn{position:relative;z-index:10;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .active.settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .active.settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-tab-btn{position:relative;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-name{padding-left:.75rem;padding-right:.5rem;--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-name){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.settings-tabs-popover-container{position:absolute;top:60px;left:0;z-index:50;min-width:150px;border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}:is(.dark .settings-tabs-popover-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-popover-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.settings-tabs-mobile-btn{margin-top:.25rem;margin-bottom:.25rem;display:flex;width:100%;cursor:pointer;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-mobile-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-mobile-btn:hover){--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-mobile-btn-text{--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-mobile-btn-text){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.active.settings-tabs-mobile-dropdown-btn{position:relative;z-index:1000;margin-top:0;margin-bottom:0;cursor:pointer;border-radius:0;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .active.settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first.settings-tabs-mobile-dropdown-btn{border-top-left-radius:.25rem;border-top-right-radius:.25rem;border-width:1px}.settings-tabs-mobile-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;display:flex;cursor:pointer;justify-content:space-between;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first-letter\:absolute:first-letter{position:absolute}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.before\:float-left:before{content:var(--tw-content);float:left}.before\:pr-2:before{content:var(--tw-content);padding-right:.5rem}.before\:text-white:before{content:var(--tw-content);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.before\:content-\[\'\/\'\]:before{--tw-content:"/";content:var(--tw-content)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-px:after{content:var(--tw-content);top:1px}.after\:float-right:after{content:var(--tw-content);float:right}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:translate-x-px:after{content:var(--tw-content);--tw-translate-x:1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:rounded-circle:after{content:var(--tw-content);border-radius:50%}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.after\:pl-2:after{content:var(--tw-content);padding-left:.5rem}.after\:text-gray-600:after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.after\:shadow-2xl:after{content:var(--tw-content);--tw-shadow:0 .3125rem .625rem 0 #0000001f;--tw-shadow-colored:0 .3125rem .625rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.after\:duration-300:after{content:var(--tw-content);transition-duration:.3s}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.after\:content-\[\'\/\'\]:after{--tw-content:"/";content:var(--tw-content)}.checked\:z-0:checked{z-index:0}.checked\:border-primary:checked{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.checked\:bg-primary:checked{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checked\:bg-none:checked{background-image:none}.checked\:bg-right:checked{background-position:100%}.checked\:after\:translate-x-5:checked:after{--tw-translate-x:1.25rem}.checked\:after\:translate-x-5:checked:after,.checked\:after\:translate-x-5\.3:checked:after{content:var(--tw-content);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.checked\:after\:translate-x-5\.3:checked:after{--tw-translate-x:1.3rem}.valid\:\!border-red-500:valid{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.hover\:-translate-y-0:hover{--tw-translate-y:-0px}.hover\:-translate-y-0:hover,.hover\:-translate-y-0\.4:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:-translate-y-0\.4:hover{--tw-translate-y:-0.1rem}.hover\:-translate-y-px:hover{--tw-translate-y:-1px}.hover\:-translate-y-px:hover,.hover\:scale-102:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-102:hover{--tw-scale-x:1.02;--tw-scale-y:1.02}.hover\:rounded-lg:hover{border-radius:.5rem}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.hover\:bg-green-500\/80:hover{background-color:#22c55ecc}.hover\:bg-primary\/30:hover{background-color:#0b55774d}.hover\:bg-primary\/5:hover{background-color:#0b55770d}.hover\:bg-primary\/80:hover{background-color:#0b5577cc}.hover\:bg-red-500\/80:hover{background-color:#f53939cc}.hover\:bg-sky-500\/80:hover{background-color:#0ea5e9cc}.hover\:bg-yellow-500\/80:hover{background-color:#fbb140cc}.hover\:italic:hover{font-style:italic}.hover\:no-underline:hover{text-decoration-line:none}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:brightness-75:hover{--tw-brightness:brightness(.75)}.hover\:brightness-75:hover,.hover\:brightness-90:hover{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.hover\:brightness-90:hover{--tw-brightness:brightness(.9)}.hover\:brightness-95:hover{--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:\!border-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:border-green-500:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:border-primary:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.focus\:bg-green-500\/80:focus{background-color:#22c55ecc}.focus\:bg-primary\/80:focus{background-color:#0b5577cc}.focus\:bg-red-500\/80:focus{background-color:#f53939cc}.focus\:bg-sky-500\/80:focus{background-color:#0ea5e9cc}.focus\:bg-yellow-500\/80:focus{background-color:#fbb140cc}.focus\:valid\:\!border-red-500:valid:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:valid\:border-green-500:valid:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:invalid\:border-red-500:invalid:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.focus\:file\:invalid\:border-red-500:invalid::file-selector-button:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.active\:\!border-red-500:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.active\:opacity-85:active{opacity:.85}.active\:valid\:\!border-red-500:valid:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-gray-400:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.disabled\:bg-gray-400:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.disabled\:text-gray-700:disabled{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.disabled\:opacity-75:disabled{opacity:.75}.disabled\:hover\:translate-y-0:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .dark\:inline){display:inline}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1;border-color:rgb(73 80 87/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-600){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-800){--tw-border-opacity:1;border-color:rgb(58 65 111/var(--tw-border-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:bg-green-500\/90){background-color:#22c55ee6}:is(.dark .dark\:bg-primary){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:bg-primary\/50){background-color:#0b557780}:is(.dark .dark\:bg-slate-700){--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-700\/50){background-color:#34476780}:is(.dark .dark\:bg-slate-850){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900){--tw-bg-opacity:1;background-color:rgb(5 17 57/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900\/30){background-color:#0511394d}:is(.dark .dark\:bg-gradient-to-r){background-image:linear-gradient(to right,var(--tw-gradient-stops))}:is(.dark .dark\:from-transparent){--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}:is(.dark .dark\:via-white){--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#fff var(--tw-gradient-via-position),var(--tw-gradient-to)}:is(.dark .dark\:to-transparent){--tw-gradient-to:#0000 var(--tw-gradient-to-position)}:is(.dark .dark\:fill-blue-500){fill:#5e72e4}:is(.dark .dark\:fill-gray-300){fill:#d2d6da}:is(.dark .dark\:fill-gray-500){fill:#adb5bd}:is(.dark .dark\:fill-gray-600){fill:#6c757d}:is(.dark .dark\:stroke-gray-600){stroke:#6c757d}:is(.dark .dark\:text-gray-100){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-500){--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:text-red-500){--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}:is(.dark .dark\:text-white){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .dark\:text-white\/80){color:#fffc}:is(.dark .dark\:text-white\/90){color:#ffffffe6}:is(.dark .dark\:opacity-60){opacity:.6}:is(.dark .dark\:opacity-75){opacity:.75}:is(.dark .dark\:opacity-80){opacity:.8}:is(.dark .dark\:opacity-90){opacity:.9}:is(.dark .dark\:shadow-dark-xl){--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color)}:is(.dark .dark\:shadow-dark-xl),:is(.dark .dark\:shadow-none){box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-none){--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}:is(.dark .dark\:brightness-110){--tw-brightness:brightness(1.1)}:is(.dark .dark\:brightness-110),:is(.dark .dark\:brightness-125){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-125){--tw-brightness:brightness(1.25)}:is(.dark .dark\:brightness-150){--tw-brightness:brightness(1.5)}:is(.dark .dark\:brightness-150),:is(.dark .dark\:brightness-90){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-90){--tw-brightness:brightness(.9)}:is(.dark .dark\:brightness-95){--tw-brightness:brightness(.95)}:is(.dark .dark\:brightness-95),:is(.dark .dark\:brightness-\[0\.885\]){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-\[0\.885\]){--tw-brightness:brightness(0.885)}:is(.dark .dark\:after\:text-gray-500):after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:checked\:border-primary:checked){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}:is(.dark .dark\:checked\:bg-primary:checked){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-primary\/20:hover){background-color:#0b557733}:is(.dark .dark\:hover\:bg-primary\/60:hover){background-color:#0b557799}:is(.dark .dark\:hover\:bg-slate-700\/50:hover){background-color:#34476780}:is(.dark .dark\:hover\:bg-slate-800:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:brightness-100:hover){--tw-brightness:brightness(1)}:is(.dark .dark\:hover\:brightness-100:hover),:is(.dark .dark\:hover\:brightness-105:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:hover\:brightness-105:hover){--tw-brightness:brightness(1.05)}:is(.dark .dark\:hover\:brightness-90:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:disabled\:border-gray-800:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity))}:is(.dark .dark\:disabled\:bg-gray-800:disabled){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:disabled\:text-gray-300:disabled){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}@media (min-width:576px){.sm\:right-24{right:6rem}.sm\:right-40{right:10rem}.sm\:right-6{right:1.5rem}.sm\:top-2{top:.5rem}.sm\:top-\[4\.5rem\]{top:4.5rem}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-start-5{grid-column-start:5}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:ml-1{margin-left:.25rem}.sm\:mr-16{margin-right:4rem}.sm\:h-10{height:2.5rem}.sm\:h-14{height:3.5rem}.sm\:h-7{height:1.75rem}.sm\:max-h-125{max-height:31.25rem}.sm\:max-h-28{max-height:7rem}.sm\:w-36{width:9rem}.sm\:w-50{width:12.5rem}.sm\:w-7{width:1.75rem}.sm\:min-w-\[500px\]{min-width:500px}.sm\:scale-100{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:justify-items-start{justify-items:start}.sm\:gap-4{gap:1rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-0{padding-top:0;padding-bottom:0}.sm\:pt-6{padding-top:1.5rem}.sm\:text-left{text-align:left}}@media (min-width:768px){.md\:top-\[45\%\]{top:45%}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-7{grid-column:span 7/span 7}.md\:col-span-8{grid-column:span 8/span 8}.md\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.md\:my-3{margin-top:.75rem;margin-bottom:.75rem}.md\:mb-0{margin-bottom:0}.md\:mb-3{margin-bottom:.75rem}.md\:mb-8{margin-bottom:2rem}.md\:mr-3{margin-right:.75rem}.md\:mt-0{margin-top:0}.md\:mt-6{margin-top:1.5rem}.md\:block{display:block}.md\:hidden{display:none}.md\:h-16{height:4rem}.md\:max-h-160{max-height:40rem}.md\:min-h-75-screen{min-height:75vh}.md\:w-1\/2{width:50%}.md\:w-60{width:15rem}.md\:justify-end{justify-content:flex-end}.md\:gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:py-4{padding-top:1rem;padding-bottom:1rem}.md\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:992px){.lg\:relative{position:relative}.lg\:top-11{top:2.75rem}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:my-3{margin-top:.75rem;margin-bottom:.75rem}.lg\:my-2{margin-top:.5rem;margin-bottom:.5rem}.lg\:my-1{margin-top:.25rem;margin-bottom:.25rem}.lg\:mt-0{margin-top:0}.lg\:mt-4{margin-top:1rem}.lg\:mb-1{margin-bottom:.25rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:h-24{height:6rem}.lg\:h-9{height:2.25rem}.lg\:w-80{width:20rem}.lg\:w-9{width:2.25rem}.lg\:max-w-\[500px\]{max-width:500px}.lg\:max-w-\[450px\]{max-width:450px}.lg\:flex-row{flex-direction:row}.lg\:flex-nowrap{flex-wrap:nowrap}.lg\:justify-start{justify-content:flex-start}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:gap-6{gap:1.5rem}.lg\:bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:pb-1{padding-bottom:.25rem}.lg\:text-left{text-align:left}}@media (min-width:1200px){.xl\:left-0{left:0}.xl\:right-24{right:6rem}.xl\:right-6{right:1.5rem}.xl\:ml-6{margin-left:1.5rem}.xl\:ml-68{margin-left:17rem}.xl\:hidden{display:none}.xl\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.xl\:p-1{padding:.25rem}.xl\:p-1\.5{padding:.375rem}.xl\:pl-75{padding-left:18.75rem}.xl\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:1320px){.\32xl\:col-span-3{grid-column:span 3/span 3}.\32xl\:col-span-4{grid-column:span 4/span 4}.\32xl\:col-span-6{grid-column:span 6/span 6}.\32xl\:col-span-8{grid-column:span 8/span 8}.\32xl\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.\32xl\:my-3{margin-top:.75rem;margin-bottom:.75rem}}@media (min-width:1920px){.\33xl\:col-span-3{grid-column:span 3/span 3}.\33xl\:col-span-4{grid-column:span 4/span 4}.\33xl\:col-span-5{grid-column:span 5/span 5}}@media (min-width:340px){.xs\:flex{display:flex}.xs\:flex-row{flex-direction:row}.xs\:items-center{align-items:center}.xs\:justify-start{justify-content:flex-start}.xs\:pl-2{padding-left:.5rem}.xs\:text-sm{font-size:.875rem;line-height:1.5rem}}.\[\&\>\*\]\:bg-primary>*{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))} \ No newline at end of file diff --git a/src/ui/static/js/profile.js b/src/ui/static/js/profile.js index 4604a1ba5..27ecf15bf 100644 --- a/src/ui/static/js/profile.js +++ b/src/ui/static/js/profile.js @@ -1,3 +1,5 @@ +import { Tabs, Popover } from "./utils/settings.js"; + class SubmitProfile { constructor() { this.pwEl = document.querySelector("#admin_password"); @@ -41,7 +43,7 @@ class SubmitProfile { "focus:valid:!border-red-500", "active:!border-red-500", "active:valid:!border-red-500", - "valid:!border-red-500", + "valid:!border-red-500" ); this.pwAlertEl.classList.add("opacity-0"); this.pwAlertEl.setAttribute("aria-hidden", "true"); @@ -53,7 +55,7 @@ class SubmitProfile { "focus:valid:!border-red-500", "active:!border-red-500", "active:valid:!border-red-500", - "valid:!border-red-500", + "valid:!border-red-500" ); this.pwAlertEl.classList.remove("opacity-0"); this.pwAlertEl.setAttribute("aria-hidden", "false"); @@ -71,14 +73,14 @@ class PwBtn { const passwordContainer = e.target.closest("[data-input-group]"); const inpEl = passwordContainer.querySelector("input"); const invBtn = passwordContainer.querySelector( - '[data-setting-password="invisible"]', + '[data-setting-password="invisible"]' ); const visBtn = passwordContainer.querySelector( - '[data-setting-password="visible"]', + '[data-setting-password="visible"]' ); inpEl.setAttribute( "type", - inpEl.getAttribute("type") === "password" ? "text" : "password", + inpEl.getAttribute("type") === "password" ? "text" : "password" ); if (inpEl.getAttribute("type") === "password") { @@ -96,3 +98,5 @@ class PwBtn { const setPWBtn = new PwBtn(); const setSubmit = new SubmitProfile(); +const setTabs = new Tabs(); +const setPopover = new Popover(); diff --git a/src/ui/templates/base.html b/src/ui/templates/base.html index 3c0c1347b..b80d7cdec 100644 --- a/src/ui/templates/base.html +++ b/src/ui/templates/base.html @@ -31,7 +31,7 @@
{% elif current_endpoint == "profile" %} - + {% endif %} diff --git a/src/ui/templates/profile.html b/src/ui/templates/profile.html index 34617ddbb..d981d4fd9 100644 --- a/src/ui/templates/profile.html +++ b/src/ui/templates/profile.html @@ -2,12 +2,12 @@ url_for(request.endpoint)[1:].split("/")[-1].strip() %}
PROFILE
EDIT PROFILE
+ + + + +
+ + + + +
+
- username + Username
-
- -
-
- 2FA SETTINGS {% if not is_totp %} (NOT SETUP) {% else %} (SETUP) {% endif %} -
+
+ {% if not is_totp %} TOTP is currently off {% else %} TOTP is currently on + {% endif %} +
2FA QR CODE
- Secret Token +
+ Secret Token +
+ {% endblock %} diff --git a/src/ui/templates/totp.html b/src/ui/templates/totp.html index 7a7dbe911..845f78628 100644 --- a/src/ui/templates/totp.html +++ b/src/ui/templates/totp.html @@ -125,7 +125,20 @@
+ +
+ + +
+ From 1bd0dcbd7c62fb4acdfeda90307471440e143f8f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Dec 2023 08:55:53 +0000 Subject: [PATCH 075/154] deps/gha: bump ruby/setup-ruby from 1.163.0 to 1.165.0 Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.163.0 to 1.165.0. - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Commits](https://github.com/ruby/setup-ruby/compare/b256bd96bb4867e7d23e92e087d9bb697270b725...961f85197f92e4842e3cb92a4f97bd8e010cdbaf) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .github/workflows/push-packagecloud.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-packagecloud.yml b/.github/workflows/push-packagecloud.yml index 9e939c79c..28d40e442 100644 --- a/.github/workflows/push-packagecloud.yml +++ b/.github/workflows/push-packagecloud.yml @@ -42,7 +42,7 @@ jobs: - name: Check out repository code uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Install ruby - uses: ruby/setup-ruby@b256bd96bb4867e7d23e92e087d9bb697270b725 # v1.163.0 + uses: ruby/setup-ruby@961f85197f92e4842e3cb92a4f97bd8e010cdbaf # v1.165.0 with: ruby-version: "3.0" - name: Install packagecloud From b3462dc954f8c605f72225c69e5bc12e925e5d28 Mon Sep 17 00:00:00 2001 From: Jordan Blasenhauer Date: Thu, 28 Dec 2023 14:03:42 +0100 Subject: [PATCH 076/154] enhance profile page --- src/ui/static/css/dashboard.css | 2 +- src/ui/templates/profile.html | 46 ++++++++++++--------------------- 2 files changed, 17 insertions(+), 31 deletions(-) diff --git a/src/ui/static/css/dashboard.css b/src/ui/static/css/dashboard.css index 32f4f91b4..1980fd023 100644 --- a/src/ui/static/css/dashboard.css +++ b/src/ui/static/css/dashboard.css @@ -1 +1 @@ -/*! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e9ecef}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Open Sans;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#ced4da}input::placeholder,textarea::placeholder{opacity:1;color:#ced4da}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#5e72e480;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.\!container{width:100%!important;margin-right:auto!important;margin-left:auto!important;padding-right:1.5rem!important;padding-left:1.5rem!important}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:1.5rem;padding-left:1.5rem}@media (min-width:340px){.\!container{max-width:340px!important}.container{max-width:340px}}@media (min-width:576px){.\!container{max-width:576px!important}.container{max-width:576px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:992px){.\!container{max-width:992px!important}.container{max-width:992px}}@media (min-width:1200px){.\!container{max-width:1200px!important}.container{max-width:1200px}}@media (min-width:1320px){.\!container{max-width:1320px!important}.container{max-width:1320px}}@media (min-width:1920px){.\!container{max-width:1920px!important}.container{max-width:1920px}}a{letter-spacing:-.025rem}hr{margin:1rem 0;border:0;opacity:.25}img{max-width:none}label{display:inline-block}p{line-height:1.625;font-weight:400;margin-bottom:1rem}small{font-size:.875em}svg{display:inline}table{border-collapse:inherit}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;color:#344767}h1,h2,h3,h4{letter-spacing:-.05rem}h1,h2,h3{font-weight:700}h4,h5,h6{font-weight:600}h1{font-size:3rem;line-height:1.25}h2{font-size:2.25rem;line-height:1.3}h3{font-size:1.875rem}h3,h4{line-height:1.375}h4{font-size:1.5rem}h5{font-size:1.25rem;line-height:1.375}h6{font-size:1rem;line-height:1.625}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.-left-full{left:-100%}.-right-0{right:0}.-right-1{right:-.25rem}.bottom-0{bottom:0}.left-0{left:0}.left-auto{left:auto}.left-full{left:100%}.right-0{right:0}.right-2{right:.5rem}.right-20{right:5rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-7{right:1.75rem}.right-8{right:2rem}.top-0{top:0}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-16{top:4rem}.top-2{top:.5rem}.top-4{top:1rem}.top-\[4\.5rem\]{top:4.5rem}.top-\[43\%\]{top:43%}.top-\[60\%\]{top:60%}.top-\[8\.2rem\]{top:8.2rem}.-z-10{z-index:-10}.z-10{z-index:10}.z-100{z-index:100}.z-110{z-index:110}.z-20{z-index:20}.z-50{z-index:50}.z-990{z-index:990}.z-\[10000\]{z-index:10000}.z-\[1000\]{z-index:1000}.z-\[1001\]{z-index:1001}.z-\[20\]{z-index:20}.z-sticky{z-index:1020}.order-1{order:1}.order-2{order:2}.col-span-1{grid-column:span 1/span 1}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-9{grid-column:span 9/span 9}.float-right{float:right}.float-left{float:left}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-4{margin:1rem}.mx-0{margin-left:0;margin-right:0}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-2\.5{margin-left:.625rem;margin-right:.625rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-7{margin-bottom:1.75rem}.mb-8{margin-bottom:2rem}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-12{margin-left:3rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-12{margin-right:3rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-6{margin-right:1.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[4\.5rem\]{margin-top:4.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1\/3{height:33.333333%}.h-12{height:3rem}.h-14{height:3.5rem}.h-19{height:4.75rem}.h-3{height:.75rem}.h-4{height:1rem}.h-4\.5{height:1.125rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\.5{height:1.375rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[2\.5rem\]{height:2.5rem}.h-\[3\.5rem\]{height:3.5rem}.h-\[4rem\]{height:4rem}.h-\[90vh\]{height:90vh}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-sidenav{height:calc(100vh - 360px)}.max-h-100{max-height:25rem}.max-h-135{max-height:33.75rem}.max-h-30{max-height:7.5rem}.max-h-80{max-height:20rem}.max-h-90{max-height:22.5rem}.max-h-screen{max-height:100vh}.min-h-12{min-height:3rem}.min-h-20{min-height:5rem}.min-h-50-screen{min-height:50vh}.min-h-52{min-height:13rem}.min-h-6{min-height:1.5rem}.min-h-\[100px\]{min-height:100px}.min-h-\[350px\]{min-height:350px}.min-h-\[55vh\]{min-height:55vh}.min-h-\[75px\]{min-height:75px}.min-h-\[80vh\]{min-height:80vh}.min-h-screen{min-height:100vh}.min-h-\[90vh\]{min-height:90vh}.min-h-\[85vh\]{min-height:85vh}.w-1{width:.25rem}.w-10{width:2.5rem}.w-11\/12{width:91.666667%}.w-12{width:3rem}.w-28{width:7rem}.w-3{width:.75rem}.w-4{width:1rem}.w-4\.5{width:1.125rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\.5{width:1.375rem}.w-50{width:12.5rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-80{width:20rem}.w-90{width:22.5rem}.w-\[2\.5rem\]{width:2.5rem}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[900px\]{min-width:900px}.max-w-180{max-width:45rem}.max-w-40{max-width:10rem}.max-w-60{max-width:15rem}.max-w-64{max-width:16rem}.max-w-\[1920px\]{max-width:1920px}.max-w-\[300px\]{max-width:300px}.max-w-\[400px\]{max-width:400px}.max-w-\[550px\]{max-width:550px}.max-w-full{max-width:100%}.flex-auto{flex:1 1 auto}.grow{flex-grow:1}.basis-full{flex-basis:100%}.-translate-x-1{--tw-translate-x:-0.25rem}.-translate-x-1,.-translate-x-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\.5{--tw-translate-x:-0.375rem}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0{--tw-translate-y:-0px}.-translate-y-0\.4{--tw-translate-y:-0.1rem}.-translate-y-0\.4,.-translate-y-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0\.5{--tw-translate-y:-0.125rem}.-translate-y-1{--tw-translate-y:-0.25rem}.-translate-y-1,.-translate-y-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\.5{--tw-translate-y:-0.375rem}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0\.5{--tw-translate-x:0.125rem}.translate-x-1{--tw-translate-x:0.25rem}.translate-x-1,.translate-x-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-2{--tw-translate-x:0.5rem}.translate-x-90{--tw-translate-x:22.5rem}.translate-x-90,.translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y:0px}.translate-y-0\.5{--tw-translate-y:0.125rem}.translate-y-0\.5,.translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y:0.25rem}.translate-y-16{--tw-translate-y:4rem}.translate-y-16,.translate-y-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y:0.5rem}.-rotate-12{--tw-rotate:-12deg}.-rotate-12,.rotate-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-12{--tw-rotate:12deg}.rotate-180{--tw-rotate:180deg}.rotate-180,.scale-105{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.scale-110,.scale-50{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-50{--tw-scale-x:.5;--tw-scale-y:.5}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-2{row-gap:.5rem}.gap-y-4{row-gap:1rem}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded,.rounded-1{border-radius:.25rem}.rounded-1\.4{border-radius:.35rem}.rounded-10{border-radius:2.5rem}.rounded-2xl{border-radius:1rem}.rounded-circle{border-radius:50%}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-xl{border-radius:.75rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-lg{border-bottom-left-radius:.5rem}.rounded-b-lg,.rounded-r-lg{border-bottom-right-radius:.5rem}.rounded-r-lg{border-top-right-radius:.5rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-gray-200{--tw-border-opacity:1;border-color:rgb(233 236 239/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.border-primary{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.bg-gray-600\/50{background-color:#6c757d80}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(251 99 64/var(--tw-bg-opacity))}.bg-primary{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.bg-primary\/20{background-color:#0b557733}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity))}.bg-secondary{--tw-bg-opacity:1;background-color:rgb(46 172 104/var(--tw-bg-opacity))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.bg-slate-800\/10{background-color:#3a416f1a}.bg-transparent{background-color:initial}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-black\/40{--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#0006 var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.bg-150{background-size:150%}.bg-contain{background-size:contain}.bg-clip-border{background-clip:initial}.bg-clip-padding{background-clip:padding-box}.bg-center{background-position:50%}.bg-left{background-position:0}.bg-x-25{background-position:25% 0}.bg-no-repeat{background-repeat:no-repeat}.fill-amber-500{fill:#f59e0b}.fill-blue-500{fill:#5e72e4}.fill-gray-500{fill:#adb5bd}.fill-gray-600{fill:#6c757d}.fill-green-500{fill:#22c55e}.fill-primary{fill:#0b5577}.fill-red-500{fill:#f53939}.fill-sky-500{fill:#0ea5e9}.fill-slate-800{fill:#3a416f}.fill-white{fill:#fff}.fill-yellow-500{fill:#fbb140}.stroke-blue-400{stroke:#60a5fa}.stroke-blue-500{stroke:#5e72e4}.stroke-emerald-600{stroke:#059669}.stroke-gray-100{stroke:#ebeff4}.stroke-gray-600{stroke:#6c757d}.stroke-green-700{stroke:#15803d}.stroke-orange-500{stroke:#fb6340}.stroke-pink-600{stroke:#db2777}.stroke-red-500{stroke:#f53939}.stroke-sky-500{stroke:#0ea5e9}.stroke-teal-600{stroke:#0d9488}.stroke-yellow-500{stroke:#fbb140}.stroke-0{stroke-width:0}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pb-8{padding-bottom:2rem}.pl-0{padding-left:0}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-6{padding-left:1.5rem}.pr-0{padding-right:0}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-20{padding-top:5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-sans{font-family:Open Sans}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-5{line-height:1.25rem}.leading-5\.6{line-height:1.4rem}.leading-6{line-height:1.5rem}.leading-8{line-height:2rem}.leading-default{line-height:1.6}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-tight{line-height:1.25}.tracking-tight-rem{letter-spacing:-.025rem}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-blue-500{--tw-text-opacity:1;color:rgb(94 114 228/var(--tw-text-opacity))}.text-emerald-500{--tw-text-opacity:1;color:rgb(45 206 137/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.text-gray-600\/90{color:#6c757de6}.text-gray-700{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.text-gray-700\/80{color:#495057cc}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}.text-sky-600{--tw-text-opacity:1;color:rgb(62 161 236/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(103 116 142/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(52 71 103/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(251 177 64/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-3xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-3xl{--tw-shadow:0 8px 26px -4px #14141426,0 8px 9px -5px #1414140f;--tw-shadow-colored:0 8px 26px -4px var(--tw-shadow-color),0 8px 9px -5px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.shadow-md,.shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-sm{--tw-shadow:0 .25rem .375rem -.0625rem #1414141f,0 .125rem .25rem -.0625rem #14141412;--tw-shadow-colored:0 .25rem .375rem -.0625rem var(--tw-shadow-color),0 .125rem .25rem -.0625rem var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color)}.shadow-xs{--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:ease;transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:ease;transition-duration:.15s}.delay-200{transition-delay:.2s}.duration-200{transition-duration:.2s}.duration-250{transition-duration:.25s}.duration-300{transition-duration:.3s}.duration-700{transition-duration:.7s}.ease-in{transition-timing-function:ease-in}.ease-in-out{transition-timing-function:ease-in-out}.flex-wrap-inherit{flex-wrap:inherit}@font-face{font-family:Open Sans;src:url(../webfonts/OpenSans.ttf)}*{font-family:Open Sans,sans-serif!important}.ace_content,.ace_editor,.ace_editor div{font-family:Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace!important;font-size:16px!important;font-weight:400!important}.close-btn{display:inline-block;cursor:pointer;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.close-btn,.close-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.close-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.close-btn:focus,.close-btn:hover{background-color:#fffc}.close-btn:active{opacity:.85}:is(.dark .close-btn){--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity));--tw-brightness:brightness(.9)}:is(.dark .close-btn),:is(.dark .close-btn:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .close-btn:hover){--tw-brightness:brightness(.75)}.valid-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.valid-btn,.valid-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.valid-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.valid-btn:focus,.valid-btn:hover{background-color:#22c55ecc}.valid-btn:active{opacity:.85}:is(.dark .valid-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.delete-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.delete-btn,.delete-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.delete-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.delete-btn:focus,.delete-btn:hover{background-color:#f53939cc}.delete-btn:active{opacity:.85}:is(.dark .delete-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.edit-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.edit-btn,.edit-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.edit-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.edit-btn:focus,.edit-btn:hover{background-color:#fbb140cc}.edit-btn:active{opacity:.85}:is(.dark .edit-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.info-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.info-btn,.info-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.info-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.info-btn:focus,.info-btn:hover{background-color:#0ea5e9cc}.info-btn:active{opacity:.85}:is(.dark .info-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.checkbox{position:relative;z-index:10;float:left;margin-top:.25rem;height:1.25rem;width:1.25rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.35rem;border-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-size:contain;background-position:50%;background-repeat:no-repeat;vertical-align:top;font-size:1rem;line-height:1.5rem;transition-property:all;transition-timing-function:ease;transition-duration:.25s}.checkbox,.checkbox:disabled{--tw-border-opacity:1;--tw-bg-opacity:1}.checkbox:disabled{cursor:default;border-color:rgb(206 212 218/var(--tw-border-opacity));background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.checkbox[data-checked=true]{z-index:0;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checkbox:disabled[data-checked=true]{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}:is(.dark .checkbox){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .checkbox[data-checked=true]){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled[data-checked=true]){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.custom-select-btn{display:flex;width:100%;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;border-style:solid;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;text-align:left;vertical-align:middle;font-size:.875rem;font-weight:400;line-height:1.4rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}.custom-select-btn::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.custom-select-btn:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .custom-select-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .custom-select-btn),:is(.dark .custom-select-btn:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .custom-select-btn:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.custom-select-btn{padding:.5rem .75rem}}.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity))}.active.custom-dropdown-btn,:is(.dark .custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.active.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));color:rgb(210 214 218/var(--tw-text-opacity))}.regular-input,:is(.dark .active.custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1}.regular-input{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.5rem;border-width:1px;border-style:solid;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;font-size:.875rem;font-weight:400;line-height:1.4rem;color:rgb(73 80 87/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.regular-input::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input:focus{border-color:#d2d6da00;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.regular-input:valid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.regular-input:invalid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))}.regular-input:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .regular-input){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .regular-input),:is(.dark .regular-input:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .regular-input:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.regular-input{padding:.5rem .75rem}}.input-title{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .input-title){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.popover-settings-container{position:absolute;left:0;bottom:0;z-index:50;--tw-translate-y:-1.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:all;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.5s}:is(.dark .popover-settings-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.popover-settings-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .popover-settings-text){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity));opacity:.9}.popover-settings-svg{margin-left:.5rem;height:1.25rem;width:1.25rem;cursor:pointer;fill:#5e72e4}.popover-settings-svg:hover{--tw-brightness:brightness(.75);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.active.settings-tabs-tab-btn{position:relative;z-index:10;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .active.settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .active.settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-tab-btn{position:relative;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-name{padding-left:.75rem;padding-right:.5rem;--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-name){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.settings-tabs-popover-container{position:absolute;top:60px;left:0;z-index:50;min-width:150px;border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}:is(.dark .settings-tabs-popover-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-popover-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.settings-tabs-mobile-btn{margin-top:.25rem;margin-bottom:.25rem;display:flex;width:100%;cursor:pointer;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-mobile-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-mobile-btn:hover){--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-mobile-btn-text{--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-mobile-btn-text){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.active.settings-tabs-mobile-dropdown-btn{position:relative;z-index:1000;margin-top:0;margin-bottom:0;cursor:pointer;border-radius:0;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .active.settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first.settings-tabs-mobile-dropdown-btn{border-top-left-radius:.25rem;border-top-right-radius:.25rem;border-width:1px}.settings-tabs-mobile-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;display:flex;cursor:pointer;justify-content:space-between;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first-letter\:absolute:first-letter{position:absolute}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.before\:float-left:before{content:var(--tw-content);float:left}.before\:pr-2:before{content:var(--tw-content);padding-right:.5rem}.before\:text-white:before{content:var(--tw-content);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.before\:content-\[\'\/\'\]:before{--tw-content:"/";content:var(--tw-content)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-px:after{content:var(--tw-content);top:1px}.after\:float-right:after{content:var(--tw-content);float:right}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:translate-x-px:after{content:var(--tw-content);--tw-translate-x:1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:rounded-circle:after{content:var(--tw-content);border-radius:50%}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.after\:pl-2:after{content:var(--tw-content);padding-left:.5rem}.after\:text-gray-600:after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.after\:shadow-2xl:after{content:var(--tw-content);--tw-shadow:0 .3125rem .625rem 0 #0000001f;--tw-shadow-colored:0 .3125rem .625rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.after\:duration-300:after{content:var(--tw-content);transition-duration:.3s}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.after\:content-\[\'\/\'\]:after{--tw-content:"/";content:var(--tw-content)}.checked\:z-0:checked{z-index:0}.checked\:border-primary:checked{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.checked\:bg-primary:checked{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checked\:bg-none:checked{background-image:none}.checked\:bg-right:checked{background-position:100%}.checked\:after\:translate-x-5:checked:after{--tw-translate-x:1.25rem}.checked\:after\:translate-x-5:checked:after,.checked\:after\:translate-x-5\.3:checked:after{content:var(--tw-content);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.checked\:after\:translate-x-5\.3:checked:after{--tw-translate-x:1.3rem}.valid\:\!border-red-500:valid{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.hover\:-translate-y-0:hover{--tw-translate-y:-0px}.hover\:-translate-y-0:hover,.hover\:-translate-y-0\.4:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:-translate-y-0\.4:hover{--tw-translate-y:-0.1rem}.hover\:-translate-y-px:hover{--tw-translate-y:-1px}.hover\:-translate-y-px:hover,.hover\:scale-102:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-102:hover{--tw-scale-x:1.02;--tw-scale-y:1.02}.hover\:rounded-lg:hover{border-radius:.5rem}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.hover\:bg-green-500\/80:hover{background-color:#22c55ecc}.hover\:bg-primary\/30:hover{background-color:#0b55774d}.hover\:bg-primary\/5:hover{background-color:#0b55770d}.hover\:bg-primary\/80:hover{background-color:#0b5577cc}.hover\:bg-red-500\/80:hover{background-color:#f53939cc}.hover\:bg-sky-500\/80:hover{background-color:#0ea5e9cc}.hover\:bg-yellow-500\/80:hover{background-color:#fbb140cc}.hover\:italic:hover{font-style:italic}.hover\:no-underline:hover{text-decoration-line:none}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:brightness-75:hover{--tw-brightness:brightness(.75)}.hover\:brightness-75:hover,.hover\:brightness-90:hover{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.hover\:brightness-90:hover{--tw-brightness:brightness(.9)}.hover\:brightness-95:hover{--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:\!border-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:border-green-500:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:border-primary:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.focus\:bg-green-500\/80:focus{background-color:#22c55ecc}.focus\:bg-primary\/80:focus{background-color:#0b5577cc}.focus\:bg-red-500\/80:focus{background-color:#f53939cc}.focus\:bg-sky-500\/80:focus{background-color:#0ea5e9cc}.focus\:bg-yellow-500\/80:focus{background-color:#fbb140cc}.focus\:valid\:\!border-red-500:valid:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:valid\:border-green-500:valid:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:invalid\:border-red-500:invalid:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.focus\:file\:invalid\:border-red-500:invalid::file-selector-button:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.active\:\!border-red-500:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.active\:opacity-85:active{opacity:.85}.active\:valid\:\!border-red-500:valid:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-gray-400:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.disabled\:bg-gray-400:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.disabled\:text-gray-700:disabled{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.disabled\:opacity-75:disabled{opacity:.75}.disabled\:hover\:translate-y-0:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .dark\:inline){display:inline}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1;border-color:rgb(73 80 87/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-600){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-800){--tw-border-opacity:1;border-color:rgb(58 65 111/var(--tw-border-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:bg-green-500\/90){background-color:#22c55ee6}:is(.dark .dark\:bg-primary){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:bg-primary\/50){background-color:#0b557780}:is(.dark .dark\:bg-slate-700){--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-700\/50){background-color:#34476780}:is(.dark .dark\:bg-slate-850){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900){--tw-bg-opacity:1;background-color:rgb(5 17 57/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900\/30){background-color:#0511394d}:is(.dark .dark\:bg-gradient-to-r){background-image:linear-gradient(to right,var(--tw-gradient-stops))}:is(.dark .dark\:from-transparent){--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}:is(.dark .dark\:via-white){--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#fff var(--tw-gradient-via-position),var(--tw-gradient-to)}:is(.dark .dark\:to-transparent){--tw-gradient-to:#0000 var(--tw-gradient-to-position)}:is(.dark .dark\:fill-blue-500){fill:#5e72e4}:is(.dark .dark\:fill-gray-300){fill:#d2d6da}:is(.dark .dark\:fill-gray-500){fill:#adb5bd}:is(.dark .dark\:fill-gray-600){fill:#6c757d}:is(.dark .dark\:stroke-gray-600){stroke:#6c757d}:is(.dark .dark\:text-gray-100){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-500){--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:text-red-500){--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}:is(.dark .dark\:text-white){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .dark\:text-white\/80){color:#fffc}:is(.dark .dark\:text-white\/90){color:#ffffffe6}:is(.dark .dark\:opacity-60){opacity:.6}:is(.dark .dark\:opacity-75){opacity:.75}:is(.dark .dark\:opacity-80){opacity:.8}:is(.dark .dark\:opacity-90){opacity:.9}:is(.dark .dark\:shadow-dark-xl){--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color)}:is(.dark .dark\:shadow-dark-xl),:is(.dark .dark\:shadow-none){box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-none){--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}:is(.dark .dark\:brightness-110){--tw-brightness:brightness(1.1)}:is(.dark .dark\:brightness-110),:is(.dark .dark\:brightness-125){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-125){--tw-brightness:brightness(1.25)}:is(.dark .dark\:brightness-150){--tw-brightness:brightness(1.5)}:is(.dark .dark\:brightness-150),:is(.dark .dark\:brightness-90){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-90){--tw-brightness:brightness(.9)}:is(.dark .dark\:brightness-95){--tw-brightness:brightness(.95)}:is(.dark .dark\:brightness-95),:is(.dark .dark\:brightness-\[0\.885\]){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-\[0\.885\]){--tw-brightness:brightness(0.885)}:is(.dark .dark\:after\:text-gray-500):after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:checked\:border-primary:checked){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}:is(.dark .dark\:checked\:bg-primary:checked){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-primary\/20:hover){background-color:#0b557733}:is(.dark .dark\:hover\:bg-primary\/60:hover){background-color:#0b557799}:is(.dark .dark\:hover\:bg-slate-700\/50:hover){background-color:#34476780}:is(.dark .dark\:hover\:bg-slate-800:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:brightness-100:hover){--tw-brightness:brightness(1)}:is(.dark .dark\:hover\:brightness-100:hover),:is(.dark .dark\:hover\:brightness-105:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:hover\:brightness-105:hover){--tw-brightness:brightness(1.05)}:is(.dark .dark\:hover\:brightness-90:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:disabled\:border-gray-800:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity))}:is(.dark .dark\:disabled\:bg-gray-800:disabled){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:disabled\:text-gray-300:disabled){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}@media (min-width:576px){.sm\:right-24{right:6rem}.sm\:right-40{right:10rem}.sm\:right-6{right:1.5rem}.sm\:top-2{top:.5rem}.sm\:top-\[4\.5rem\]{top:4.5rem}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-start-5{grid-column-start:5}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:ml-1{margin-left:.25rem}.sm\:mr-16{margin-right:4rem}.sm\:h-10{height:2.5rem}.sm\:h-14{height:3.5rem}.sm\:h-7{height:1.75rem}.sm\:max-h-125{max-height:31.25rem}.sm\:max-h-28{max-height:7rem}.sm\:w-36{width:9rem}.sm\:w-50{width:12.5rem}.sm\:w-7{width:1.75rem}.sm\:min-w-\[500px\]{min-width:500px}.sm\:scale-100{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:justify-items-start{justify-items:start}.sm\:gap-4{gap:1rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-0{padding-top:0;padding-bottom:0}.sm\:pt-6{padding-top:1.5rem}.sm\:text-left{text-align:left}}@media (min-width:768px){.md\:top-\[45\%\]{top:45%}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-7{grid-column:span 7/span 7}.md\:col-span-8{grid-column:span 8/span 8}.md\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.md\:my-3{margin-top:.75rem;margin-bottom:.75rem}.md\:mb-0{margin-bottom:0}.md\:mb-3{margin-bottom:.75rem}.md\:mb-8{margin-bottom:2rem}.md\:mr-3{margin-right:.75rem}.md\:mt-0{margin-top:0}.md\:mt-6{margin-top:1.5rem}.md\:block{display:block}.md\:hidden{display:none}.md\:h-16{height:4rem}.md\:max-h-160{max-height:40rem}.md\:min-h-75-screen{min-height:75vh}.md\:w-1\/2{width:50%}.md\:w-60{width:15rem}.md\:justify-end{justify-content:flex-end}.md\:gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:py-4{padding-top:1rem;padding-bottom:1rem}.md\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:992px){.lg\:relative{position:relative}.lg\:top-11{top:2.75rem}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:my-3{margin-top:.75rem;margin-bottom:.75rem}.lg\:my-2{margin-top:.5rem;margin-bottom:.5rem}.lg\:my-1{margin-top:.25rem;margin-bottom:.25rem}.lg\:mt-0{margin-top:0}.lg\:mt-4{margin-top:1rem}.lg\:mb-1{margin-bottom:.25rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:h-24{height:6rem}.lg\:h-9{height:2.25rem}.lg\:w-80{width:20rem}.lg\:w-9{width:2.25rem}.lg\:max-w-\[500px\]{max-width:500px}.lg\:max-w-\[450px\]{max-width:450px}.lg\:flex-row{flex-direction:row}.lg\:flex-nowrap{flex-wrap:nowrap}.lg\:justify-start{justify-content:flex-start}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:gap-6{gap:1.5rem}.lg\:bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:pb-1{padding-bottom:.25rem}.lg\:text-left{text-align:left}}@media (min-width:1200px){.xl\:left-0{left:0}.xl\:right-24{right:6rem}.xl\:right-6{right:1.5rem}.xl\:ml-6{margin-left:1.5rem}.xl\:ml-68{margin-left:17rem}.xl\:hidden{display:none}.xl\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.xl\:p-1{padding:.25rem}.xl\:p-1\.5{padding:.375rem}.xl\:pl-75{padding-left:18.75rem}.xl\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:1320px){.\32xl\:col-span-3{grid-column:span 3/span 3}.\32xl\:col-span-4{grid-column:span 4/span 4}.\32xl\:col-span-6{grid-column:span 6/span 6}.\32xl\:col-span-8{grid-column:span 8/span 8}.\32xl\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.\32xl\:my-3{margin-top:.75rem;margin-bottom:.75rem}}@media (min-width:1920px){.\33xl\:col-span-3{grid-column:span 3/span 3}.\33xl\:col-span-4{grid-column:span 4/span 4}.\33xl\:col-span-5{grid-column:span 5/span 5}}@media (min-width:340px){.xs\:flex{display:flex}.xs\:flex-row{flex-direction:row}.xs\:items-center{align-items:center}.xs\:justify-start{justify-content:flex-start}.xs\:pl-2{padding-left:.5rem}.xs\:text-sm{font-size:.875rem;line-height:1.5rem}}.\[\&\>\*\]\:bg-primary>*{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))} \ No newline at end of file +/*! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e9ecef}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Open Sans;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#ced4da}input::placeholder,textarea::placeholder{opacity:1;color:#ced4da}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#5e72e480;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.\!container{width:100%!important;margin-right:auto!important;margin-left:auto!important;padding-right:1.5rem!important;padding-left:1.5rem!important}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:1.5rem;padding-left:1.5rem}@media (min-width:340px){.\!container{max-width:340px!important}.container{max-width:340px}}@media (min-width:576px){.\!container{max-width:576px!important}.container{max-width:576px}}@media (min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media (min-width:992px){.\!container{max-width:992px!important}.container{max-width:992px}}@media (min-width:1200px){.\!container{max-width:1200px!important}.container{max-width:1200px}}@media (min-width:1320px){.\!container{max-width:1320px!important}.container{max-width:1320px}}@media (min-width:1920px){.\!container{max-width:1920px!important}.container{max-width:1920px}}a{letter-spacing:-.025rem}hr{margin:1rem 0;border:0;opacity:.25}img{max-width:none}label{display:inline-block}p{line-height:1.625;font-weight:400;margin-bottom:1rem}small{font-size:.875em}svg{display:inline}table{border-collapse:inherit}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;color:#344767}h1,h2,h3,h4{letter-spacing:-.05rem}h1,h2,h3{font-weight:700}h4,h5,h6{font-weight:600}h1{font-size:3rem;line-height:1.25}h2{font-size:2.25rem;line-height:1.3}h3{font-size:1.875rem}h3,h4{line-height:1.375}h4{font-size:1.5rem}h5{font-size:1.25rem;line-height:1.375}h6{font-size:1rem;line-height:1.625}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.-left-full{left:-100%}.-right-0{right:0}.-right-1{right:-.25rem}.bottom-0{bottom:0}.left-0{left:0}.left-auto{left:auto}.left-full{left:100%}.right-0{right:0}.right-2{right:.5rem}.right-20{right:5rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-7{right:1.75rem}.right-8{right:2rem}.top-0{top:0}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-16{top:4rem}.top-2{top:.5rem}.top-4{top:1rem}.top-\[4\.5rem\]{top:4.5rem}.top-\[43\%\]{top:43%}.top-\[60\%\]{top:60%}.top-\[8\.2rem\]{top:8.2rem}.-z-10{z-index:-10}.z-10{z-index:10}.z-100{z-index:100}.z-110{z-index:110}.z-20{z-index:20}.z-50{z-index:50}.z-990{z-index:990}.z-\[10000\]{z-index:10000}.z-\[1000\]{z-index:1000}.z-\[1001\]{z-index:1001}.z-\[20\]{z-index:20}.z-sticky{z-index:1020}.order-1{order:1}.order-2{order:2}.col-span-1{grid-column:span 1/span 1}.col-span-10{grid-column:span 10/span 10}.col-span-11{grid-column:span 11/span 11}.col-span-12{grid-column:span 12/span 12}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-9{grid-column:span 9/span 9}.float-right{float:right}.float-left{float:left}.m-0{margin:0}.m-1{margin:.25rem}.m-2{margin:.5rem}.m-4{margin:1rem}.mx-0{margin-left:0;margin-right:0}.mx-0\.5{margin-left:.125rem;margin-right:.125rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-2\.5{margin-left:.625rem;margin-right:.625rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.mb-0{margin-bottom:0}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-7{margin-bottom:1.75rem}.mb-8{margin-bottom:2rem}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-12{margin-left:3rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-12{margin-right:3rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-6{margin-right:1.5rem}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-10{margin-top:2.5rem}.mt-16{margin-top:4rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[4\.5rem\]{margin-top:4.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-1\/3{height:33.333333%}.h-12{height:3rem}.h-14{height:3.5rem}.h-19{height:4.75rem}.h-3{height:.75rem}.h-4{height:1rem}.h-4\.5{height:1.125rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-5\.5{height:1.375rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-\[2\.5rem\]{height:2.5rem}.h-\[3\.5rem\]{height:3.5rem}.h-\[4rem\]{height:4rem}.h-\[90vh\]{height:90vh}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-sidenav{height:calc(100vh - 360px)}.max-h-100{max-height:25rem}.max-h-135{max-height:33.75rem}.max-h-30{max-height:7.5rem}.max-h-80{max-height:20rem}.max-h-90{max-height:22.5rem}.max-h-screen{max-height:100vh}.min-h-12{min-height:3rem}.min-h-20{min-height:5rem}.min-h-50-screen{min-height:50vh}.min-h-52{min-height:13rem}.min-h-6{min-height:1.5rem}.min-h-\[100px\]{min-height:100px}.min-h-\[350px\]{min-height:350px}.min-h-\[55vh\]{min-height:55vh}.min-h-\[75px\]{min-height:75px}.min-h-\[85vh\]{min-height:85vh}.min-h-screen{min-height:100vh}.w-1{width:.25rem}.w-10{width:2.5rem}.w-11\/12{width:91.666667%}.w-12{width:3rem}.w-28{width:7rem}.w-3{width:.75rem}.w-4{width:1rem}.w-4\.5{width:1.125rem}.w-40{width:10rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-5\.5{width:1.375rem}.w-50{width:12.5rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-80{width:20rem}.w-90{width:22.5rem}.w-\[2\.5rem\]{width:2.5rem}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0}.min-w-\[900px\]{min-width:900px}.max-w-180{max-width:45rem}.max-w-40{max-width:10rem}.max-w-60{max-width:15rem}.max-w-64{max-width:16rem}.max-w-\[1920px\]{max-width:1920px}.max-w-\[300px\]{max-width:300px}.max-w-\[400px\]{max-width:400px}.max-w-\[550px\]{max-width:550px}.max-w-full{max-width:100%}.flex-auto{flex:1 1 auto}.grow{flex-grow:1}.basis-full{flex-basis:100%}.-translate-x-1{--tw-translate-x:-0.25rem}.-translate-x-1,.-translate-x-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-1\.5{--tw-translate-x:-0.375rem}.-translate-x-full{--tw-translate-x:-100%}.-translate-x-full,.-translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0{--tw-translate-y:-0px}.-translate-y-0\.4{--tw-translate-y:-0.1rem}.-translate-y-0\.4,.-translate-y-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-0\.5{--tw-translate-y:-0.125rem}.-translate-y-1{--tw-translate-y:-0.25rem}.-translate-y-1,.-translate-y-1\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\.5{--tw-translate-y:-0.375rem}.translate-x-0{--tw-translate-x:0px}.translate-x-0,.translate-x-0\.5{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0\.5{--tw-translate-x:0.125rem}.translate-x-1{--tw-translate-x:0.25rem}.translate-x-1,.translate-x-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-2{--tw-translate-x:0.5rem}.translate-x-90{--tw-translate-x:22.5rem}.translate-x-90,.translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-0{--tw-translate-y:0px}.translate-y-0\.5{--tw-translate-y:0.125rem}.translate-y-0\.5,.translate-y-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y:0.25rem}.translate-y-16{--tw-translate-y:4rem}.translate-y-16,.translate-y-2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-2{--tw-translate-y:0.5rem}.-rotate-12{--tw-rotate:-12deg}.-rotate-12,.rotate-12{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-12{--tw-rotate:12deg}.rotate-180{--tw-rotate:180deg}.rotate-180,.scale-105{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-105{--tw-scale-x:1.05;--tw-scale-y:1.05}.scale-110{--tw-scale-x:1.1;--tw-scale-y:1.1}.scale-110,.scale-50{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-50{--tw-scale-x:.5;--tw-scale-y:.5}.scale-90{--tw-scale-x:.9;--tw-scale-y:.9}.scale-90,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-8{gap:2rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-2{row-gap:.5rem}.gap-y-4{row-gap:1rem}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded,.rounded-1{border-radius:.25rem}.rounded-1\.4{border-radius:.35rem}.rounded-10{border-radius:2.5rem}.rounded-2xl{border-radius:1rem}.rounded-circle{border-radius:50%}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-none{border-radius:0}.rounded-xl{border-radius:.75rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-lg{border-bottom-left-radius:.5rem}.rounded-b-lg,.rounded-r-lg{border-bottom-right-radius:.5rem}.rounded-r-lg{border-top-right-radius:.5rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-t-2xl{border-top-left-radius:1rem;border-top-right-radius:1rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-b{border-bottom-width:1px}.border-b-0{border-bottom-width:0}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-gray-200{--tw-border-opacity:1;border-color:rgb(233 236 239/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.border-primary{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.bg-gray-600\/50{background-color:#6c757d80}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-orange-500{--tw-bg-opacity:1;background-color:rgb(251 99 64/var(--tw-bg-opacity))}.bg-primary{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.bg-primary\/20{background-color:#0b557733}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity))}.bg-secondary{--tw-bg-opacity:1;background-color:rgb(46 172 104/var(--tw-bg-opacity))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity))}.bg-slate-800\/10{background-color:#3a416f1a}.bg-transparent{background-color:initial}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-500{--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-gradient-to-tl{background-image:linear-gradient(to top left,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-transparent{--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.via-black\/40{--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#0006 var(--tw-gradient-via-position),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.bg-150{background-size:150%}.bg-contain{background-size:contain}.bg-clip-border{background-clip:initial}.bg-clip-padding{background-clip:padding-box}.bg-center{background-position:50%}.bg-left{background-position:0}.bg-x-25{background-position:25% 0}.bg-no-repeat{background-repeat:no-repeat}.fill-amber-500{fill:#f59e0b}.fill-blue-500{fill:#5e72e4}.fill-gray-500{fill:#adb5bd}.fill-gray-600{fill:#6c757d}.fill-green-500{fill:#22c55e}.fill-primary{fill:#0b5577}.fill-red-500{fill:#f53939}.fill-sky-500{fill:#0ea5e9}.fill-slate-800{fill:#3a416f}.fill-white{fill:#fff}.fill-yellow-500{fill:#fbb140}.stroke-blue-400{stroke:#60a5fa}.stroke-blue-500{stroke:#5e72e4}.stroke-emerald-600{stroke:#059669}.stroke-gray-100{stroke:#ebeff4}.stroke-gray-600{stroke:#6c757d}.stroke-green-700{stroke:#15803d}.stroke-orange-500{stroke:#fb6340}.stroke-pink-600{stroke:#db2777}.stroke-red-500{stroke:#f53939}.stroke-sky-500{stroke:#0ea5e9}.stroke-teal-600{stroke:#0d9488}.stroke-yellow-500{stroke:#fbb140}.stroke-0{stroke-width:0}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-0{padding-bottom:0}.pb-2{padding-bottom:.5rem}.pb-4{padding-bottom:1rem}.pb-8{padding-bottom:2rem}.pl-0{padding-left:0}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-6{padding-left:1.5rem}.pr-0{padding-right:0}.pr-8{padding-right:2rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-20{padding-top:5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-sans{font-family:Open Sans}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.5rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.ordinal{--tw-ordinal:ordinal;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-5{line-height:1.25rem}.leading-5\.6{line-height:1.4rem}.leading-6{line-height:1.5rem}.leading-8{line-height:2rem}.leading-default{line-height:1.6}.leading-none{line-height:1}.leading-normal{line-height:1.5}.leading-tight{line-height:1.25}.tracking-tight-rem{letter-spacing:-.025rem}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-blue-500{--tw-text-opacity:1;color:rgb(94 114 228/var(--tw-text-opacity))}.text-emerald-500{--tw-text-opacity:1;color:rgb(45 206 137/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.text-gray-600\/90{color:#6c757de6}.text-gray-700{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.text-gray-700\/80{color:#495057cc}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}.text-sky-600{--tw-text-opacity:1;color:rgb(62 161 236/var(--tw-text-opacity))}.text-slate-500{--tw-text-opacity:1;color:rgb(103 116 142/var(--tw-text-opacity))}.text-slate-700{--tw-text-opacity:1;color:rgb(52 71 103/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity:1;color:rgb(251 177 64/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-3xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-3xl{--tw-shadow:0 8px 26px -4px #14141426,0 8px 9px -5px #1414140f;--tw-shadow-colored:0 8px 26px -4px var(--tw-shadow-color),0 8px 9px -5px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.shadow-md,.shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.shadow-sm{--tw-shadow:0 .25rem .375rem -.0625rem #1414141f,0 .125rem .25rem -.0625rem #14141412;--tw-shadow-colored:0 .25rem .375rem -.0625rem var(--tw-shadow-color),0 .125rem .25rem -.0625rem var(--tw-shadow-color)}.shadow-sm,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 0 2rem 0 #8898aa26;--tw-shadow-colored:0 0 2rem 0 var(--tw-shadow-color)}.shadow-xs{--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:ease;transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:ease;transition-duration:.15s}.delay-200{transition-delay:.2s}.duration-200{transition-duration:.2s}.duration-250{transition-duration:.25s}.duration-300{transition-duration:.3s}.duration-700{transition-duration:.7s}.ease-in{transition-timing-function:ease-in}.ease-in-out{transition-timing-function:ease-in-out}.flex-wrap-inherit{flex-wrap:inherit}@font-face{font-family:Open Sans;src:url(../webfonts/OpenSans.ttf)}*{font-family:Open Sans,sans-serif!important}.ace_content,.ace_editor,.ace_editor div{font-family:Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace!important;font-size:16px!important;font-weight:400!important}.close-btn{display:inline-block;cursor:pointer;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.close-btn,.close-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.close-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.close-btn:focus,.close-btn:hover{background-color:#fffc}.close-btn:active{opacity:.85}:is(.dark .close-btn){--tw-bg-opacity:1;background-color:rgb(233 236 239/var(--tw-bg-opacity));--tw-brightness:brightness(.9)}:is(.dark .close-btn),:is(.dark .close-btn:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .close-btn:hover){--tw-brightness:brightness(.75)}.valid-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.valid-btn,.valid-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.valid-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.valid-btn:focus,.valid-btn:hover{background-color:#22c55ecc}.valid-btn:active{opacity:.85}:is(.dark .valid-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.delete-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(245 57 57/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.delete-btn,.delete-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.delete-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.delete-btn:focus,.delete-btn:hover{background-color:#f53939cc}.delete-btn:active{opacity:.85}:is(.dark .delete-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.edit-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(251 177 64/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.edit-btn,.edit-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.edit-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.edit-btn:focus,.edit-btn:hover{background-color:#fbb140cc}.edit-btn:active{opacity:.85}:is(.dark .edit-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.info-btn{display:inline-block;cursor:pointer;border-radius:.5rem;--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:.025em;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.info-btn,.info-btn:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.info-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color)}.info-btn:focus,.info-btn:hover{background-color:#0ea5e9cc}.info-btn:active{opacity:.85}:is(.dark .info-btn){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.checkbox{position:relative;z-index:10;float:left;margin-top:.25rem;height:1.25rem;width:1.25rem;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.35rem;border-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-size:contain;background-position:50%;background-repeat:no-repeat;vertical-align:top;font-size:1rem;line-height:1.5rem;transition-property:all;transition-timing-function:ease;transition-duration:.25s}.checkbox,.checkbox:disabled{--tw-border-opacity:1;--tw-bg-opacity:1}.checkbox:disabled{cursor:default;border-color:rgb(206 212 218/var(--tw-border-opacity));background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.checkbox[data-checked=true]{z-index:0;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checkbox:disabled[data-checked=true]{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}:is(.dark .checkbox){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .checkbox[data-checked=true]){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .checkbox:disabled[data-checked=true]){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.custom-select-btn{display:flex;width:100%;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;border-style:solid;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;text-align:left;vertical-align:middle;font-size:.875rem;font-weight:400;line-height:1.4rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}.custom-select-btn::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.custom-select-btn:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.custom-select-btn:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .custom-select-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .custom-select-btn),:is(.dark .custom-select-btn:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .custom-select-btn:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.custom-select-btn{padding:.5rem .75rem}}.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity))}.active.custom-dropdown-btn,:is(.dark .custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}.active.custom-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;min-height:38px;cursor:pointer;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.custom-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.custom-dropdown-btn){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(11 85 119/var(--tw-bg-opacity));color:rgb(210 214 218/var(--tw-text-opacity))}.regular-input,:is(.dark .active.custom-dropdown-btn){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1}.regular-input{display:block;width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.5rem;border-width:1px;border-style:solid;border-color:rgb(210 214 218/var(--tw-border-opacity));background-color:rgb(255 255 255/var(--tw-bg-opacity));background-clip:padding-box;padding:.25rem .375rem;font-size:.875rem;font-weight:400;line-height:1.4rem;color:rgb(73 80 87/var(--tw-text-opacity));outline:2px solid #0000;outline-offset:2px;transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.regular-input::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.regular-input:focus{border-color:#d2d6da00;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.regular-input:valid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(34 197 94/var(--tw-ring-opacity))}.regular-input:invalid:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(245 57 57/var(--tw-ring-opacity))}.regular-input:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));opacity:.75}:is(.dark .regular-input){border-color:rgb(98 117 148/var(--tw-border-opacity));background-color:rgb(52 71 103/var(--tw-bg-opacity));opacity:.9}:is(.dark .regular-input),:is(.dark .regular-input:disabled){--tw-border-opacity:1;--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .regular-input:disabled){border-color:rgb(37 47 64/var(--tw-border-opacity));background-color:rgb(37 47 64/var(--tw-bg-opacity))}@media (min-width:768px){.regular-input{padding:.5rem .75rem}}.input-title{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .input-title){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.popover-settings-container{position:absolute;left:0;bottom:0;z-index:50;--tw-translate-y:-1.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:all;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.5s}:is(.dark .popover-settings-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.popover-settings-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .popover-settings-text){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity));opacity:.9}.popover-settings-svg{margin-left:.5rem;height:1.25rem;width:1.25rem;cursor:pointer;fill:#5e72e4}.popover-settings-svg:hover{--tw-brightness:brightness(.75);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.active.settings-tabs-tab-btn{position:relative;z-index:10;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .active.settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .active.settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-tab-btn{position:relative;margin-top:.25rem;margin-bottom:.25rem;cursor:pointer;border-radius:0;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-tab-btn:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-tab-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-tab-btn:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}.settings-tabs-name{padding-left:.75rem;padding-right:.5rem;--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-name){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.settings-tabs-popover-container{position:absolute;top:60px;left:0;z-index:50;min-width:150px;border-radius:.375rem;--tw-bg-opacity:1;background-color:rgb(94 114 228/var(--tw-bg-opacity));padding:.75rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.15s}:is(.dark .settings-tabs-popover-container){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-popover-text{margin:0;font-size:.875rem;line-height:1.5rem;font-weight:700;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.settings-tabs-mobile-btn{margin-top:.25rem;margin-bottom:.25rem;display:flex;width:100%;cursor:pointer;align-items:center;justify-content:space-between;border-radius:.5rem;border-width:1px;--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.75rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;font-weight:700;text-transform:uppercase;line-height:1.5;letter-spacing:-.025rem;--tw-shadow:0 7px 14px #32325d1a,0 3px 6px #00000014;--tw-shadow-colored:0 7px 14px var(--tw-shadow-color),0 3px 6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-btn:hover{--tw-translate-y:-1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity));--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .settings-tabs-mobile-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .settings-tabs-mobile-btn:hover){--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.settings-tabs-mobile-btn-text{--tw-text-opacity:1;color:rgb(11 85 119/var(--tw-text-opacity));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:ease;transition-duration:.3s;transition-timing-function:ease-in-out}:is(.dark .settings-tabs-mobile-btn-text){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));opacity:.9}.active.settings-tabs-mobile-dropdown-btn{position:relative;z-index:1000;margin-top:0;margin-bottom:0;cursor:pointer;border-radius:0;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.active.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .active.settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .active.settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first.settings-tabs-mobile-dropdown-btn{border-top-left-radius:.25rem;border-top-right-radius:.25rem;border-width:1px}.settings-tabs-mobile-dropdown-btn{position:relative;margin-top:0;margin-bottom:0;display:flex;cursor:pointer;justify-content:space-between;border-radius:0;border-bottom-width:1px;border-left-width:1px;border-right-width:1px;--tw-border-opacity:1;border-color:rgb(210 214 218/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding:.5rem 1.5rem;text-align:center;vertical-align:middle;font-size:.875rem;line-height:1.5rem;line-height:1.5;letter-spacing:-.025rem;--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity));transition-property:all;transition-timing-function:ease;transition-duration:.15s;transition-timing-function:ease-in}.settings-tabs-mobile-dropdown-btn:hover{--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .settings-tabs-mobile-dropdown-btn){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .settings-tabs-mobile-dropdown-btn:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.first-letter\:absolute:first-letter{position:absolute}.first-letter\:w-full:first-letter{width:100%}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}.before\:float-left:before{content:var(--tw-content);float:left}.before\:pr-2:before{content:var(--tw-content);padding-right:.5rem}.before\:text-white:before{content:var(--tw-content);--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.before\:content-\[\'\/\'\]:before{--tw-content:"/";content:var(--tw-content)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:top-px:after{content:var(--tw-content);top:1px}.after\:float-right:after{content:var(--tw-content);float:right}.after\:h-4:after{content:var(--tw-content);height:1rem}.after\:w-4:after{content:var(--tw-content);width:1rem}.after\:translate-x-px:after{content:var(--tw-content);--tw-translate-x:1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.after\:rounded-circle:after{content:var(--tw-content);border-radius:50%}.after\:bg-white:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.after\:pl-2:after{content:var(--tw-content);padding-left:.5rem}.after\:text-gray-600:after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(108 117 125/var(--tw-text-opacity))}.after\:shadow-2xl:after{content:var(--tw-content);--tw-shadow:0 .3125rem .625rem 0 #0000001f;--tw-shadow-colored:0 .3125rem .625rem 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.after\:duration-300:after{content:var(--tw-content);transition-duration:.3s}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.after\:content-\[\'\/\'\]:after{--tw-content:"/";content:var(--tw-content)}.checked\:z-0:checked{z-index:0}.checked\:border-primary:checked{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.checked\:bg-primary:checked{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}.checked\:bg-none:checked{background-image:none}.checked\:bg-right:checked{background-position:100%}.checked\:after\:translate-x-5:checked:after{--tw-translate-x:1.25rem}.checked\:after\:translate-x-5:checked:after,.checked\:after\:translate-x-5\.3:checked:after{content:var(--tw-content);transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.checked\:after\:translate-x-5\.3:checked:after{--tw-translate-x:1.3rem}.valid\:\!border-red-500:valid{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.hover\:-translate-y-0:hover{--tw-translate-y:-0px}.hover\:-translate-y-0:hover,.hover\:-translate-y-0\.4:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:-translate-y-0\.4:hover{--tw-translate-y:-0.1rem}.hover\:-translate-y-px:hover{--tw-translate-y:-1px}.hover\:-translate-y-px:hover,.hover\:scale-102:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-102:hover{--tw-scale-x:1.02;--tw-scale-y:1.02}.hover\:rounded-lg:hover{border-radius:.5rem}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(235 239 244/var(--tw-bg-opacity))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(210 214 218/var(--tw-bg-opacity))}.hover\:bg-green-500\/80:hover{background-color:#22c55ecc}.hover\:bg-primary\/30:hover{background-color:#0b55774d}.hover\:bg-primary\/5:hover{background-color:#0b55770d}.hover\:bg-primary\/80:hover{background-color:#0b5577cc}.hover\:bg-red-500\/80:hover{background-color:#f53939cc}.hover\:bg-sky-500\/80:hover{background-color:#0ea5e9cc}.hover\:bg-yellow-500\/80:hover{background-color:#fbb140cc}.hover\:italic:hover{font-style:italic}.hover\:no-underline:hover{text-decoration-line:none}.hover\:opacity-80:hover{opacity:.8}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px #32325d1a,0 1px 3px #00000014;--tw-shadow-colored:0 4px 6px var(--tw-shadow-color),0 1px 3px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:brightness-75:hover{--tw-brightness:brightness(.75)}.hover\:brightness-75:hover,.hover\:brightness-90:hover{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.hover\:brightness-90:hover{--tw-brightness:brightness(.9)}.hover\:brightness-95:hover{--tw-brightness:brightness(.95);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:\!border-red-500:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:border-green-500:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:border-primary:focus{--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}.focus\:bg-green-500\/80:focus{background-color:#22c55ecc}.focus\:bg-primary\/80:focus{background-color:#0b5577cc}.focus\:bg-red-500\/80:focus{background-color:#f53939cc}.focus\:bg-sky-500\/80:focus{background-color:#0ea5e9cc}.focus\:bg-yellow-500\/80:focus{background-color:#fbb140cc}.focus\:valid\:\!border-red-500:valid:focus{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.focus\:valid\:border-green-500:valid:focus{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.focus\:invalid\:border-red-500:invalid:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.focus\:file\:invalid\:border-red-500:invalid::file-selector-button:focus{--tw-border-opacity:1;border-color:rgb(245 57 57/var(--tw-border-opacity))}.active\:\!border-red-500:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.active\:opacity-85:active{opacity:.85}.active\:valid\:\!border-red-500:valid:active{--tw-border-opacity:1!important;border-color:rgb(245 57 57/var(--tw-border-opacity))!important}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-gray-400:disabled{--tw-border-opacity:1;border-color:rgb(206 212 218/var(--tw-border-opacity))}.disabled\:bg-gray-400:disabled{--tw-bg-opacity:1;background-color:rgb(206 212 218/var(--tw-bg-opacity))}.disabled\:text-gray-700:disabled{--tw-text-opacity:1;color:rgb(73 80 87/var(--tw-text-opacity))}.disabled\:opacity-75:disabled{opacity:.75}.disabled\:hover\:translate-y-0:hover:disabled{--tw-translate-y:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}:is(.dark .dark\:inline){display:inline}:is(.dark .dark\:hidden){display:none}:is(.dark .dark\:border-gray-700){--tw-border-opacity:1;border-color:rgb(73 80 87/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-600){--tw-border-opacity:1;border-color:rgb(98 117 148/var(--tw-border-opacity))}:is(.dark .dark\:border-slate-800){--tw-border-opacity:1;border-color:rgb(58 65 111/var(--tw-border-opacity))}:is(.dark .dark\:bg-gray-800){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:bg-green-500\/90){background-color:#22c55ee6}:is(.dark .dark\:bg-primary){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:bg-primary\/50){background-color:#0b557780}:is(.dark .dark\:bg-slate-700){--tw-bg-opacity:1;background-color:rgb(52 71 103/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-700\/50){background-color:#34476780}:is(.dark .dark\:bg-slate-850){--tw-bg-opacity:1;background-color:rgb(17 28 68/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900){--tw-bg-opacity:1;background-color:rgb(5 17 57/var(--tw-bg-opacity))}:is(.dark .dark\:bg-slate-900\/30){background-color:#0511394d}:is(.dark .dark\:bg-gradient-to-r){background-image:linear-gradient(to right,var(--tw-gradient-stops))}:is(.dark .dark\:from-transparent){--tw-gradient-from:#0000 var(--tw-gradient-from-position);--tw-gradient-to:#0000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}:is(.dark .dark\:via-white){--tw-gradient-to:#fff0 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),#fff var(--tw-gradient-via-position),var(--tw-gradient-to)}:is(.dark .dark\:to-transparent){--tw-gradient-to:#0000 var(--tw-gradient-to-position)}:is(.dark .dark\:fill-blue-500){fill:#5e72e4}:is(.dark .dark\:fill-gray-300){fill:#d2d6da}:is(.dark .dark\:fill-gray-500){fill:#adb5bd}:is(.dark .dark\:fill-gray-600){fill:#6c757d}:is(.dark .dark\:stroke-gray-600){stroke:#6c757d}:is(.dark .dark\:text-gray-100){--tw-text-opacity:1;color:rgb(235 239 244/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-200){--tw-text-opacity:1;color:rgb(233 236 239/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-400){--tw-text-opacity:1;color:rgb(206 212 218/var(--tw-text-opacity))}:is(.dark .dark\:text-gray-500){--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:text-red-500){--tw-text-opacity:1;color:rgb(245 57 57/var(--tw-text-opacity))}:is(.dark .dark\:text-white){--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}:is(.dark .dark\:text-white\/80){color:#fffc}:is(.dark .dark\:text-white\/90){color:#ffffffe6}:is(.dark .dark\:opacity-60){opacity:.6}:is(.dark .dark\:opacity-75){opacity:.75}:is(.dark .dark\:opacity-80){opacity:.8}:is(.dark .dark\:opacity-90){opacity:.9}:is(.dark .dark\:shadow-dark-xl){--tw-shadow:0 2px 2px 0 #00000024,0 3px 1px -2px #0003,0 1px 5px 0 #0000001f;--tw-shadow-colored:0 2px 2px 0 var(--tw-shadow-color),0 3px 1px -2px var(--tw-shadow-color),0 1px 5px 0 var(--tw-shadow-color)}:is(.dark .dark\:shadow-dark-xl),:is(.dark .dark\:shadow-none){box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:shadow-none){--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}:is(.dark .dark\:brightness-110){--tw-brightness:brightness(1.1)}:is(.dark .dark\:brightness-110),:is(.dark .dark\:brightness-125){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-125){--tw-brightness:brightness(1.25)}:is(.dark .dark\:brightness-150){--tw-brightness:brightness(1.5)}:is(.dark .dark\:brightness-150),:is(.dark .dark\:brightness-90){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-90){--tw-brightness:brightness(.9)}:is(.dark .dark\:brightness-95){--tw-brightness:brightness(.95)}:is(.dark .dark\:brightness-95),:is(.dark .dark\:brightness-\[0\.885\]){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:brightness-\[0\.885\]){--tw-brightness:brightness(0.885)}:is(.dark .dark\:after\:text-gray-500):after{content:var(--tw-content);--tw-text-opacity:1;color:rgb(173 181 189/var(--tw-text-opacity))}:is(.dark .dark\:checked\:border-primary:checked){--tw-border-opacity:1;border-color:rgb(11 85 119/var(--tw-border-opacity))}:is(.dark .dark\:checked\:bg-primary:checked){--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-primary\/20:hover){background-color:#0b557733}:is(.dark .dark\:hover\:bg-primary\/60:hover){background-color:#0b557799}:is(.dark .dark\:hover\:bg-slate-700\/50:hover){background-color:#34476780}:is(.dark .dark\:hover\:bg-slate-800:hover){--tw-bg-opacity:1;background-color:rgb(58 65 111/var(--tw-bg-opacity))}:is(.dark .dark\:hover\:brightness-100:hover){--tw-brightness:brightness(1)}:is(.dark .dark\:hover\:brightness-100:hover),:is(.dark .dark\:hover\:brightness-105:hover){filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:hover\:brightness-105:hover){--tw-brightness:brightness(1.05)}:is(.dark .dark\:hover\:brightness-90:hover){--tw-brightness:brightness(.9);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:is(.dark .dark\:disabled\:border-gray-800:disabled){--tw-border-opacity:1;border-color:rgb(37 47 64/var(--tw-border-opacity))}:is(.dark .dark\:disabled\:bg-gray-800:disabled){--tw-bg-opacity:1;background-color:rgb(37 47 64/var(--tw-bg-opacity))}:is(.dark .dark\:disabled\:text-gray-300:disabled){--tw-text-opacity:1;color:rgb(210 214 218/var(--tw-text-opacity))}@media (min-width:576px){.sm\:right-24{right:6rem}.sm\:right-40{right:10rem}.sm\:right-6{right:1.5rem}.sm\:top-2{top:.5rem}.sm\:top-\[4\.5rem\]{top:4.5rem}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:col-start-5{grid-column-start:5}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.sm\:ml-1{margin-left:.25rem}.sm\:mr-16{margin-right:4rem}.sm\:h-10{height:2.5rem}.sm\:h-14{height:3.5rem}.sm\:h-7{height:1.75rem}.sm\:max-h-125{max-height:31.25rem}.sm\:max-h-28{max-height:7rem}.sm\:w-36{width:9rem}.sm\:w-50{width:12.5rem}.sm\:w-7{width:1.75rem}.sm\:min-w-\[500px\]{min-width:500px}.sm\:scale-100{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:justify-items-start{justify-items:start}.sm\:gap-4{gap:1rem}.sm\:px-12{padding-left:3rem;padding-right:3rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:py-0{padding-top:0;padding-bottom:0}.sm\:pt-6{padding-top:1.5rem}.sm\:text-left{text-align:left}}@media (min-width:768px){.md\:top-\[45\%\]{top:45%}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-span-7{grid-column:span 7/span 7}.md\:col-span-8{grid-column:span 8/span 8}.md\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.md\:my-3{margin-top:.75rem;margin-bottom:.75rem}.md\:mb-0{margin-bottom:0}.md\:mb-3{margin-bottom:.75rem}.md\:mb-8{margin-bottom:2rem}.md\:mr-3{margin-right:.75rem}.md\:mt-0{margin-top:0}.md\:mt-6{margin-top:1.5rem}.md\:block{display:block}.md\:hidden{display:none}.md\:h-16{height:4rem}.md\:max-h-160{max-height:40rem}.md\:min-h-75-screen{min-height:75vh}.md\:w-1\/2{width:50%}.md\:w-60{width:15rem}.md\:max-w-\[600px\]{max-width:600px}.md\:justify-end{justify-content:flex-end}.md\:gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.md\:px-3{padding-left:.75rem;padding-right:.75rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.md\:py-4{padding-top:1rem;padding-bottom:1rem}.md\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:992px){.lg\:relative{position:relative}.lg\:top-11{top:2.75rem}.lg\:order-1{order:1}.lg\:order-2{order:2}.lg\:col-span-1{grid-column:span 1/span 1}.lg\:col-span-4{grid-column:span 4/span 4}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:mx-0{margin-left:0;margin-right:0}.lg\:mx-8{margin-left:2rem;margin-right:2rem}.lg\:my-3{margin-top:.75rem;margin-bottom:.75rem}.lg\:mt-0{margin-top:0}.lg\:mt-4{margin-top:1rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:h-24{height:6rem}.lg\:h-9{height:2.25rem}.lg\:w-80{width:20rem}.lg\:w-9{width:2.25rem}.lg\:flex-row{flex-direction:row}.lg\:flex-nowrap{flex-wrap:nowrap}.lg\:justify-start{justify-content:flex-start}.lg\:justify-end{justify-content:flex-end}.lg\:justify-between{justify-content:space-between}.lg\:gap-6{gap:1.5rem}.lg\:bg-gray-50{--tw-bg-opacity:1;background-color:rgb(248 249 250/var(--tw-bg-opacity))}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:pb-1{padding-bottom:.25rem}.lg\:text-left{text-align:left}}@media (min-width:1200px){.xl\:left-0{left:0}.xl\:right-24{right:6rem}.xl\:right-6{right:1.5rem}.xl\:ml-6{margin-left:1.5rem}.xl\:ml-68{margin-left:17rem}.xl\:hidden{display:none}.xl\:translate-x-0{--tw-translate-x:0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.xl\:p-1{padding:.25rem}.xl\:p-1\.5{padding:.375rem}.xl\:pl-75{padding-left:18.75rem}.xl\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width:1320px){.\32xl\:col-span-4{grid-column:span 4/span 4}.\32xl\:col-span-6{grid-column:span 6/span 6}.\32xl\:mx-6{margin-left:1.5rem;margin-right:1.5rem}.\32xl\:my-3{margin-top:.75rem;margin-bottom:.75rem}}@media (min-width:1920px){.\33xl\:col-span-3{grid-column:span 3/span 3}.\33xl\:col-span-4{grid-column:span 4/span 4}.\33xl\:col-span-5{grid-column:span 5/span 5}}@media (min-width:340px){.xs\:flex{display:flex}.xs\:flex-row{flex-direction:row}.xs\:items-center{align-items:center}.xs\:justify-start{justify-content:flex-start}.xs\:pl-2{padding-left:.5rem}.xs\:text-sm{font-size:.875rem;line-height:1.5rem}}.\[\&\>\*\]\:bg-primary>*{--tw-bg-opacity:1;background-color:rgb(11 85 119/var(--tw-bg-opacity))} \ No newline at end of file diff --git a/src/ui/templates/profile.html b/src/ui/templates/profile.html index d981d4fd9..a208fca0b 100644 --- a/src/ui/templates/profile.html +++ b/src/ui/templates/profile.html @@ -1,40 +1,12 @@ {% extends "base.html" %} {% block content %} {% set current_endpoint = url_for(request.endpoint)[1:].split("/")[-1].strip() %} -
-
PROFILE
-
-
-
- Username -
- - -
-
-
-
EDIT PROFILE
+
SETTINGS
+
+
+ PROFILE +
+
+
+
+ TOTP +
+
From c7e690d9491cc8c055300d5eed18d6e372e9e8a9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 29 Dec 2023 08:44:40 +0000 Subject: [PATCH 077/154] deps/gha: bump ruby/setup-ruby from 1.165.0 to 1.165.1 Bumps [ruby/setup-ruby](https://github.com/ruby/setup-ruby) from 1.165.0 to 1.165.1. - [Release notes](https://github.com/ruby/setup-ruby/releases) - [Commits](https://github.com/ruby/setup-ruby/compare/961f85197f92e4842e3cb92a4f97bd8e010cdbaf...360dc864d5da99d54fcb8e9148c14a84b90d3e88) --- updated-dependencies: - dependency-name: ruby/setup-ruby dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .github/workflows/push-packagecloud.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/push-packagecloud.yml b/.github/workflows/push-packagecloud.yml index 28d40e442..5bcbb259d 100644 --- a/.github/workflows/push-packagecloud.yml +++ b/.github/workflows/push-packagecloud.yml @@ -42,7 +42,7 @@ jobs: - name: Check out repository code uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Install ruby - uses: ruby/setup-ruby@961f85197f92e4842e3cb92a4f97bd8e010cdbaf # v1.165.0 + uses: ruby/setup-ruby@360dc864d5da99d54fcb8e9148c14a84b90d3e88 # v1.165.1 with: ruby-version: "3.0" - name: Install packagecloud From 22c6e1c6d679b9d72d021c34f591676889682f42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Fri, 29 Dec 2023 12:35:22 +0000 Subject: [PATCH 078/154] Update python deps --- docs/requirements.txt | 6 +- src/common/db/requirements.in | 2 +- src/common/db/requirements.txt | 100 +++++++++++----------- tests/core/blacklist/api/requirements.in | 2 +- tests/core/blacklist/api/requirements.txt | 20 ++--- tests/core/bunkernet/api/requirements.in | 2 +- tests/core/bunkernet/api/requirements.txt | 20 ++--- tests/core/db/requirements.in | 2 +- tests/core/db/requirements.txt | 100 +++++++++++----------- tests/core/greylist/api/requirements.in | 2 +- tests/core/greylist/api/requirements.txt | 20 ++--- tests/core/redis/requirements.in | 2 +- tests/core/redis/requirements.txt | 20 ++--- tests/core/reversescan/requirements.in | 2 +- tests/core/reversescan/requirements.txt | 20 ++--- tests/core/whitelist/api/requirements.in | 2 +- tests/core/whitelist/api/requirements.txt | 20 ++--- 17 files changed, 171 insertions(+), 171 deletions(-) diff --git a/docs/requirements.txt b/docs/requirements.txt index f6e0b4cc6..fa0c63b66 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -425,9 +425,9 @@ pygments==2.17.2 \ --hash=sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c \ --hash=sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367 # via mkdocs-material -pymdown-extensions==10.5 \ - --hash=sha256:1b60f1e462adbec5a1ed79dac91f666c9c0d241fa294de1989f29d20096cfd0b \ - --hash=sha256:1f0ca8bb5beff091315f793ee17683bc1390731f6ac4c5eb01e27464b80fe879 +pymdown-extensions==10.6 \ + --hash=sha256:561eb3a5f3c3c2512952a4d6f5b311aa124b7147bd54a3ea0f36ce030c7e3dd9 \ + --hash=sha256:e4531379e0d74b329ff264217ef5b8b1a37bed3afe36f98001b74ecff52215c0 # via mkdocs-material pyparsing==3.1.1 \ --hash=sha256:32c7c0b711493c72ff18a981d24f28aaf9c1fb7ed5e9667c9e84e3db623bdbfb \ diff --git a/src/common/db/requirements.in b/src/common/db/requirements.in index c4e5787e0..c5007d3fb 100644 --- a/src/common/db/requirements.in +++ b/src/common/db/requirements.in @@ -1,4 +1,4 @@ cryptography==41.0.7 psycopg2-binary==2.9.9 PyMySQL==1.1.0 -sqlalchemy==2.0.23 +sqlalchemy==2.0.24 diff --git a/src/common/db/requirements.txt b/src/common/db/requirements.txt index 9fc2e96b2..74ce73216 100644 --- a/src/common/db/requirements.txt +++ b/src/common/db/requirements.txt @@ -225,56 +225,56 @@ pymysql==1.1.0 \ --hash=sha256:4f13a7df8bf36a51e81dd9f3605fede45a4878fe02f9236349fd82a3f0612f96 \ --hash=sha256:8969ec6d763c856f7073c4c64662882675702efcb114b4bcbb955aea3a069fa7 # via -r requirements.in -sqlalchemy==2.0.23 \ - --hash=sha256:0666031df46b9badba9bed00092a1ffa3aa063a5e68fa244acd9f08070e936d3 \ - --hash=sha256:0a8c6aa506893e25a04233bc721c6b6cf844bafd7250535abb56cb6cc1368884 \ - --hash=sha256:0e680527245895aba86afbd5bef6c316831c02aa988d1aad83c47ffe92655e74 \ - --hash=sha256:14aebfe28b99f24f8a4c1346c48bc3d63705b1f919a24c27471136d2f219f02d \ - --hash=sha256:1e018aba8363adb0599e745af245306cb8c46b9ad0a6fc0a86745b6ff7d940fc \ - --hash=sha256:227135ef1e48165f37590b8bfc44ed7ff4c074bf04dc8d6f8e7f1c14a94aa6ca \ - --hash=sha256:31952bbc527d633b9479f5f81e8b9dfada00b91d6baba021a869095f1a97006d \ - --hash=sha256:3e983fa42164577d073778d06d2cc5d020322425a509a08119bdcee70ad856bf \ - --hash=sha256:42d0b0290a8fb0165ea2c2781ae66e95cca6e27a2fbe1016ff8db3112ac1e846 \ - --hash=sha256:42ede90148b73fe4ab4a089f3126b2cfae8cfefc955c8174d697bb46210c8306 \ - --hash=sha256:4895a63e2c271ffc7a81ea424b94060f7b3b03b4ea0cd58ab5bb676ed02f4221 \ - --hash=sha256:4af79c06825e2836de21439cb2a6ce22b2ca129bad74f359bddd173f39582bf5 \ - --hash=sha256:5f94aeb99f43729960638e7468d4688f6efccb837a858b34574e01143cf11f89 \ - --hash=sha256:616fe7bcff0a05098f64b4478b78ec2dfa03225c23734d83d6c169eb41a93e55 \ - --hash=sha256:62d9e964870ea5ade4bc870ac4004c456efe75fb50404c03c5fd61f8bc669a72 \ - --hash=sha256:638c2c0b6b4661a4fd264f6fb804eccd392745c5887f9317feb64bb7cb03b3ea \ - --hash=sha256:63bfc3acc970776036f6d1d0e65faa7473be9f3135d37a463c5eba5efcdb24c8 \ - --hash=sha256:6463aa765cf02b9247e38b35853923edbf2f6fd1963df88706bc1d02410a5577 \ - --hash=sha256:64ac935a90bc479fee77f9463f298943b0e60005fe5de2aa654d9cdef46c54df \ - --hash=sha256:683ef58ca8eea4747737a1c35c11372ffeb84578d3aab8f3e10b1d13d66f2bc4 \ - --hash=sha256:75eefe09e98043cff2fb8af9796e20747ae870c903dc61d41b0c2e55128f958d \ - --hash=sha256:787af80107fb691934a01889ca8f82a44adedbf5ef3d6ad7d0f0b9ac557e0c34 \ - --hash=sha256:7c424983ab447dab126c39d3ce3be5bee95700783204a72549c3dceffe0fc8f4 \ - --hash=sha256:7e0dc9031baa46ad0dd5a269cb7a92a73284d1309228be1d5935dac8fb3cae24 \ - --hash=sha256:87a3d6b53c39cd173990de2f5f4b83431d534a74f0e2f88bd16eabb5667e65c6 \ - --hash=sha256:89a01238fcb9a8af118eaad3ffcc5dedaacbd429dc6fdc43fe430d3a941ff965 \ - --hash=sha256:9585b646ffb048c0250acc7dad92536591ffe35dba624bb8fd9b471e25212a35 \ - --hash=sha256:964971b52daab357d2c0875825e36584d58f536e920f2968df8d581054eada4b \ - --hash=sha256:967c0b71156f793e6662dd839da54f884631755275ed71f1539c95bbada9aaab \ - --hash=sha256:9ca922f305d67605668e93991aaf2c12239c78207bca3b891cd51a4515c72e22 \ - --hash=sha256:a86cb7063e2c9fb8e774f77fbf8475516d270a3e989da55fa05d08089d77f8c4 \ - --hash=sha256:aeb397de65a0a62f14c257f36a726945a7f7bb60253462e8602d9b97b5cbe204 \ - --hash=sha256:b41f5d65b54cdf4934ecede2f41b9c60c9f785620416e8e6c48349ab18643855 \ - --hash=sha256:bd45a5b6c68357578263d74daab6ff9439517f87da63442d244f9f23df56138d \ - --hash=sha256:c14eba45983d2f48f7546bb32b47937ee2cafae353646295f0e99f35b14286ab \ - --hash=sha256:c1bda93cbbe4aa2aa0aa8655c5aeda505cd219ff3e8da91d1d329e143e4aff69 \ - --hash=sha256:c4722f3bc3c1c2fcc3702dbe0016ba31148dd6efcd2a2fd33c1b4897c6a19693 \ - --hash=sha256:c80c38bd2ea35b97cbf7c21aeb129dcbebbf344ee01a7141016ab7b851464f8e \ - --hash=sha256:cabafc7837b6cec61c0e1e5c6d14ef250b675fa9c3060ed8a7e38653bd732ff8 \ - --hash=sha256:cc1d21576f958c42d9aec68eba5c1a7d715e5fc07825a629015fe8e3b0657fb0 \ - --hash=sha256:d0f7fb0c7527c41fa6fcae2be537ac137f636a41b4c5a4c58914541e2f436b45 \ - --hash=sha256:d4041ad05b35f1f4da481f6b811b4af2f29e83af253bf37c3c4582b2c68934ab \ - --hash=sha256:d5578e6863eeb998980c212a39106ea139bdc0b3f73291b96e27c929c90cd8e1 \ - --hash=sha256:e3b5036aa326dc2df50cba3c958e29b291a80f604b1afa4c8ce73e78e1c9f01d \ - --hash=sha256:e599a51acf3cc4d31d1a0cf248d8f8d863b6386d2b6782c5074427ebb7803bda \ - --hash=sha256:f3420d00d2cb42432c1d0e44540ae83185ccbbc67a6054dcc8ab5387add6620b \ - --hash=sha256:f48ed89dd11c3c586f45e9eec1e437b355b3b6f6884ea4a4c3111a3358fd0c18 \ - --hash=sha256:f508ba8f89e0a5ecdfd3761f82dda2a3d7b678a626967608f4273e0dba8f07ac \ - --hash=sha256:fd54601ef9cc455a0c61e5245f690c8a3ad67ddb03d3b91c361d076def0b4c60 +sqlalchemy==2.0.24 \ + --hash=sha256:00d76fe5d7cdb5d84d625ce002ce29fefba0bfd98e212ae66793fed30af73931 \ + --hash=sha256:07cc423892f2ceda9ae1daa28c0355757f362ecc7505b1ab1a3d5d8dc1c44ac6 \ + --hash=sha256:0bb7cedcddffca98c40bb0becd3423e293d1fef442b869da40843d751785beb3 \ + --hash=sha256:1ca7903d5e7db791a355b579c690684fac6304478b68efdc7f2ebdcfe770d8d7 \ + --hash=sha256:1d9b3fd5eca3c0b137a5e0e468e24ca544ed8ca4783e0e55341b7ed2807518ee \ + --hash=sha256:2587e108463cc2e5b45a896b2e7cc8659a517038026922a758bde009271aed11 \ + --hash=sha256:29e51f848f843bbd75d74ae64ab1ab06302cb1dccd4549d1f5afe6b4a946edb2 \ + --hash=sha256:2a479aa1ab199178ff1956b09ca8a0693e70f9c762875d69292d37049ffd0d8f \ + --hash=sha256:37e89d965b52e8b20571b5d44f26e2124b26ab63758bf1b7598a0e38fb2c4005 \ + --hash=sha256:38732884eabc64982a09a846bacf085596ff2371e4e41d20c0734f7e50525d01 \ + --hash=sha256:396f05c552f7fa30a129497c41bef5b4d1423f9af8fe4df0c3dcd38f3e3b9a14 \ + --hash=sha256:4a1d4856861ba9e73bac05030cec5852eabfa9ef4af8e56c19d92de80d46fc34 \ + --hash=sha256:56a0e90a959e18ac5f18c80d0cad9e90cb09322764f536e8a637426afb1cae2f \ + --hash=sha256:57ef6f2cb8b09a042d0dbeaa46a30f2df5dd1e1eb889ba258b0d5d7d6011b81c \ + --hash=sha256:5f801d85ba4753d4ed97181d003e5d3fa330ac7c4587d131f61d7f968f416862 \ + --hash=sha256:6db686a1d9f183c639f7e06a2656af25d4ed438eda581de135d15569f16ace33 \ + --hash=sha256:6db97656fd3fe3f7e5b077f12fa6adb5feb6e0b567a3e99f47ecf5f7ea0a09e3 \ + --hash=sha256:6f5e75de91c754365c098ac08c13fdb267577ce954fa239dd49228b573ca88d7 \ + --hash=sha256:7a6209e689d0ff206c40032b6418e3cfcfc5af044b3f66e381d7f1ae301544b4 \ + --hash=sha256:7ae5d44517fe81079ce75cf10f96978284a6db2642c5932a69c82dbae09f009a \ + --hash=sha256:83fa6df0e035689df89ff77a46bf8738696785d3156c2c61494acdcddc75c69d \ + --hash=sha256:8f358f5cfce04417b6ff738748ca4806fe3d3ae8040fb4e6a0c9a6973ccf9b6e \ + --hash=sha256:9036ebfd934813990c5b9f71f297e77ed4963720db7d7ceec5a3fdb7cd2ef6ce \ + --hash=sha256:95bae3d38f8808d79072da25d5e5a6095f36fe1f9d6c614dd72c59ca8397c7c0 \ + --hash=sha256:9aaaaa846b10dfbe1bda71079d0e31a7e2cebedda9409fa7dba3dfed1ae803e8 \ + --hash=sha256:9b8d0e8578e7f853f45f4512b5c920f6a546cd4bed44137460b2a56534644205 \ + --hash=sha256:9bafaa05b19dc07fa191c1966c5e852af516840b0d7b46b7c3303faf1a349bc9 \ + --hash=sha256:9f29c7f0f4b42337ec5a779e166946a9f86d7d56d827e771b69ecbdf426124ac \ + --hash=sha256:9f992e0f916201731993eab8502912878f02287d9f765ef843677ff118d0e0b1 \ + --hash=sha256:a04191a7c8d77e63f6fc1e8336d6c6e93176c0c010833e74410e647f0284f5a1 \ + --hash=sha256:a0f611b431b84f55779cbb7157257d87b4a2876b067c77c4f36b15e44ced65e2 \ + --hash=sha256:a3c2753bf4f48b7a6024e5e8a394af49b1b12c817d75d06942cae03d14ff87b3 \ + --hash=sha256:a5cd7d30e47f87b21362beeb3e86f1b5886e7d9b0294b230dde3d3f4a1591375 \ + --hash=sha256:acc58b7c2e40235712d857fdfc8f2bda9608f4a850d8d9ac0dd1fc80939ca6ac \ + --hash=sha256:adbd67dac4ebf54587198b63cd30c29fd7eafa8c0cab58893d9419414f8efe4b \ + --hash=sha256:b35c35e3923ade1e7ac44e150dec29f5863513246c8bf85e2d7d313e3832bcfb \ + --hash=sha256:c6910eb4ea90c0889f363965cd3c8c45a620ad27b526a7899f0054f6c1b9219e \ + --hash=sha256:cc889fda484d54d0b31feec409406267616536d048a450fc46943e152700bb79 \ + --hash=sha256:ccfd336f96d4c9bbab0309f2a565bf15c468c2d8b2d277a32f89c5940f71fcf9 \ + --hash=sha256:d8e7e8a150e7b548e7ecd6ebb9211c37265991bf2504297d9454e01b58530fc6 \ + --hash=sha256:db09e424d7bb89b6215a184ca93b4f29d7f00ea261b787918a1af74143b98c06 \ + --hash=sha256:e17e7e27af178d31b436dda6a596703b02a89ba74a15e2980c35ecd9909eea3a \ + --hash=sha256:e69290b921b7833c04206f233d6814c60bee1d135b09f5ae5d39229de9b46cd4 \ + --hash=sha256:e8398593ccc4440ce6dffcc4f47d9b2d72b9fe7112ac12ea4a44e7d4de364db1 \ + --hash=sha256:e9d036e343a604db3f5a6c33354018a84a1d3f6dcae3673358b404286204798c \ + --hash=sha256:ea490564435b5b204d8154f0e18387b499ea3cedc1e6af3b3a2ab18291d85aa7 \ + --hash=sha256:f073321a79c81e1a009218a21089f61d87ee5fa3c9563f6be94f8b41ff181812 \ + --hash=sha256:f0cc0b486a56dff72dddae6b6bfa7ff201b0eeac29d4bc6f0e9725dc3c360d71 \ + --hash=sha256:fcf84fe93397a0f67733aa2a38ed4eab9fc6348189fc950e656e1ea198f45668 # via -r requirements.in typing-extensions==4.9.0 \ --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ diff --git a/tests/core/blacklist/api/requirements.in b/tests/core/blacklist/api/requirements.in index dfea0bebe..9945aad2d 100644 --- a/tests/core/blacklist/api/requirements.in +++ b/tests/core/blacklist/api/requirements.in @@ -1,2 +1,2 @@ -fastapi==0.106.0 +fastapi==0.108.0 uvicorn[standard]==0.25.0 diff --git a/tests/core/blacklist/api/requirements.txt b/tests/core/blacklist/api/requirements.txt index 607a502eb..4b2d26b89 100644 --- a/tests/core/blacklist/api/requirements.txt +++ b/tests/core/blacklist/api/requirements.txt @@ -8,11 +8,10 @@ annotated-types==0.6.0 \ --hash=sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43 \ --hash=sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d # via pydantic -anyio==3.7.1 \ - --hash=sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780 \ - --hash=sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5 +anyio==4.2.0 \ + --hash=sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee \ + --hash=sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f # via - # fastapi # starlette # watchfiles click==8.1.7 \ @@ -23,9 +22,9 @@ exceptiongroup==1.2.0 \ --hash=sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14 \ --hash=sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68 # via anyio -fastapi==0.106.0 \ - --hash=sha256:193c2f1b495d1d6561a3dc1ca02a150757322247d895ff6bf15b6eefee24feb9 \ - --hash=sha256:c7e7453ac8c4b7414bbafcf90127d743559808eee286ae2c9f99a501f0b534a0 +fastapi==0.108.0 \ + --hash=sha256:5056e504ac6395bf68493d71fcfc5352fdbd5fda6f88c21f6420d80d81163296 \ + --hash=sha256:8c7bc6d315da963ee4cdb605557827071a9a7f95aeb8fcdd3bde48cdc8764dd7 # via -r requirements.in h11==0.14.0 \ --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ @@ -244,14 +243,15 @@ sniffio==1.3.0 \ --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \ --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384 # via anyio -starlette==0.27.0 \ - --hash=sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75 \ - --hash=sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91 +starlette==0.32.0.post1 \ + --hash=sha256:cd0cb10ddb49313f609cedfac62c8c12e56c7314b66d89bb077ba228bada1b09 \ + --hash=sha256:e54e2b7e2fb06dff9eac40133583f10dfa05913f5a85bf26f427c7a40a9a3d02 # via fastapi typing-extensions==4.9.0 \ --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd # via + # anyio # fastapi # pydantic # pydantic-core diff --git a/tests/core/bunkernet/api/requirements.in b/tests/core/bunkernet/api/requirements.in index dfea0bebe..9945aad2d 100644 --- a/tests/core/bunkernet/api/requirements.in +++ b/tests/core/bunkernet/api/requirements.in @@ -1,2 +1,2 @@ -fastapi==0.106.0 +fastapi==0.108.0 uvicorn[standard]==0.25.0 diff --git a/tests/core/bunkernet/api/requirements.txt b/tests/core/bunkernet/api/requirements.txt index 607a502eb..4b2d26b89 100644 --- a/tests/core/bunkernet/api/requirements.txt +++ b/tests/core/bunkernet/api/requirements.txt @@ -8,11 +8,10 @@ annotated-types==0.6.0 \ --hash=sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43 \ --hash=sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d # via pydantic -anyio==3.7.1 \ - --hash=sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780 \ - --hash=sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5 +anyio==4.2.0 \ + --hash=sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee \ + --hash=sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f # via - # fastapi # starlette # watchfiles click==8.1.7 \ @@ -23,9 +22,9 @@ exceptiongroup==1.2.0 \ --hash=sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14 \ --hash=sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68 # via anyio -fastapi==0.106.0 \ - --hash=sha256:193c2f1b495d1d6561a3dc1ca02a150757322247d895ff6bf15b6eefee24feb9 \ - --hash=sha256:c7e7453ac8c4b7414bbafcf90127d743559808eee286ae2c9f99a501f0b534a0 +fastapi==0.108.0 \ + --hash=sha256:5056e504ac6395bf68493d71fcfc5352fdbd5fda6f88c21f6420d80d81163296 \ + --hash=sha256:8c7bc6d315da963ee4cdb605557827071a9a7f95aeb8fcdd3bde48cdc8764dd7 # via -r requirements.in h11==0.14.0 \ --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ @@ -244,14 +243,15 @@ sniffio==1.3.0 \ --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \ --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384 # via anyio -starlette==0.27.0 \ - --hash=sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75 \ - --hash=sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91 +starlette==0.32.0.post1 \ + --hash=sha256:cd0cb10ddb49313f609cedfac62c8c12e56c7314b66d89bb077ba228bada1b09 \ + --hash=sha256:e54e2b7e2fb06dff9eac40133583f10dfa05913f5a85bf26f427c7a40a9a3d02 # via fastapi typing-extensions==4.9.0 \ --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd # via + # anyio # fastapi # pydantic # pydantic-core diff --git a/tests/core/db/requirements.in b/tests/core/db/requirements.in index c4e5787e0..c5007d3fb 100644 --- a/tests/core/db/requirements.in +++ b/tests/core/db/requirements.in @@ -1,4 +1,4 @@ cryptography==41.0.7 psycopg2-binary==2.9.9 PyMySQL==1.1.0 -sqlalchemy==2.0.23 +sqlalchemy==2.0.24 diff --git a/tests/core/db/requirements.txt b/tests/core/db/requirements.txt index 9fc2e96b2..74ce73216 100644 --- a/tests/core/db/requirements.txt +++ b/tests/core/db/requirements.txt @@ -225,56 +225,56 @@ pymysql==1.1.0 \ --hash=sha256:4f13a7df8bf36a51e81dd9f3605fede45a4878fe02f9236349fd82a3f0612f96 \ --hash=sha256:8969ec6d763c856f7073c4c64662882675702efcb114b4bcbb955aea3a069fa7 # via -r requirements.in -sqlalchemy==2.0.23 \ - --hash=sha256:0666031df46b9badba9bed00092a1ffa3aa063a5e68fa244acd9f08070e936d3 \ - --hash=sha256:0a8c6aa506893e25a04233bc721c6b6cf844bafd7250535abb56cb6cc1368884 \ - --hash=sha256:0e680527245895aba86afbd5bef6c316831c02aa988d1aad83c47ffe92655e74 \ - --hash=sha256:14aebfe28b99f24f8a4c1346c48bc3d63705b1f919a24c27471136d2f219f02d \ - --hash=sha256:1e018aba8363adb0599e745af245306cb8c46b9ad0a6fc0a86745b6ff7d940fc \ - --hash=sha256:227135ef1e48165f37590b8bfc44ed7ff4c074bf04dc8d6f8e7f1c14a94aa6ca \ - --hash=sha256:31952bbc527d633b9479f5f81e8b9dfada00b91d6baba021a869095f1a97006d \ - --hash=sha256:3e983fa42164577d073778d06d2cc5d020322425a509a08119bdcee70ad856bf \ - --hash=sha256:42d0b0290a8fb0165ea2c2781ae66e95cca6e27a2fbe1016ff8db3112ac1e846 \ - --hash=sha256:42ede90148b73fe4ab4a089f3126b2cfae8cfefc955c8174d697bb46210c8306 \ - --hash=sha256:4895a63e2c271ffc7a81ea424b94060f7b3b03b4ea0cd58ab5bb676ed02f4221 \ - --hash=sha256:4af79c06825e2836de21439cb2a6ce22b2ca129bad74f359bddd173f39582bf5 \ - --hash=sha256:5f94aeb99f43729960638e7468d4688f6efccb837a858b34574e01143cf11f89 \ - --hash=sha256:616fe7bcff0a05098f64b4478b78ec2dfa03225c23734d83d6c169eb41a93e55 \ - --hash=sha256:62d9e964870ea5ade4bc870ac4004c456efe75fb50404c03c5fd61f8bc669a72 \ - --hash=sha256:638c2c0b6b4661a4fd264f6fb804eccd392745c5887f9317feb64bb7cb03b3ea \ - --hash=sha256:63bfc3acc970776036f6d1d0e65faa7473be9f3135d37a463c5eba5efcdb24c8 \ - --hash=sha256:6463aa765cf02b9247e38b35853923edbf2f6fd1963df88706bc1d02410a5577 \ - --hash=sha256:64ac935a90bc479fee77f9463f298943b0e60005fe5de2aa654d9cdef46c54df \ - --hash=sha256:683ef58ca8eea4747737a1c35c11372ffeb84578d3aab8f3e10b1d13d66f2bc4 \ - --hash=sha256:75eefe09e98043cff2fb8af9796e20747ae870c903dc61d41b0c2e55128f958d \ - --hash=sha256:787af80107fb691934a01889ca8f82a44adedbf5ef3d6ad7d0f0b9ac557e0c34 \ - --hash=sha256:7c424983ab447dab126c39d3ce3be5bee95700783204a72549c3dceffe0fc8f4 \ - --hash=sha256:7e0dc9031baa46ad0dd5a269cb7a92a73284d1309228be1d5935dac8fb3cae24 \ - --hash=sha256:87a3d6b53c39cd173990de2f5f4b83431d534a74f0e2f88bd16eabb5667e65c6 \ - --hash=sha256:89a01238fcb9a8af118eaad3ffcc5dedaacbd429dc6fdc43fe430d3a941ff965 \ - --hash=sha256:9585b646ffb048c0250acc7dad92536591ffe35dba624bb8fd9b471e25212a35 \ - --hash=sha256:964971b52daab357d2c0875825e36584d58f536e920f2968df8d581054eada4b \ - --hash=sha256:967c0b71156f793e6662dd839da54f884631755275ed71f1539c95bbada9aaab \ - --hash=sha256:9ca922f305d67605668e93991aaf2c12239c78207bca3b891cd51a4515c72e22 \ - --hash=sha256:a86cb7063e2c9fb8e774f77fbf8475516d270a3e989da55fa05d08089d77f8c4 \ - --hash=sha256:aeb397de65a0a62f14c257f36a726945a7f7bb60253462e8602d9b97b5cbe204 \ - --hash=sha256:b41f5d65b54cdf4934ecede2f41b9c60c9f785620416e8e6c48349ab18643855 \ - --hash=sha256:bd45a5b6c68357578263d74daab6ff9439517f87da63442d244f9f23df56138d \ - --hash=sha256:c14eba45983d2f48f7546bb32b47937ee2cafae353646295f0e99f35b14286ab \ - --hash=sha256:c1bda93cbbe4aa2aa0aa8655c5aeda505cd219ff3e8da91d1d329e143e4aff69 \ - --hash=sha256:c4722f3bc3c1c2fcc3702dbe0016ba31148dd6efcd2a2fd33c1b4897c6a19693 \ - --hash=sha256:c80c38bd2ea35b97cbf7c21aeb129dcbebbf344ee01a7141016ab7b851464f8e \ - --hash=sha256:cabafc7837b6cec61c0e1e5c6d14ef250b675fa9c3060ed8a7e38653bd732ff8 \ - --hash=sha256:cc1d21576f958c42d9aec68eba5c1a7d715e5fc07825a629015fe8e3b0657fb0 \ - --hash=sha256:d0f7fb0c7527c41fa6fcae2be537ac137f636a41b4c5a4c58914541e2f436b45 \ - --hash=sha256:d4041ad05b35f1f4da481f6b811b4af2f29e83af253bf37c3c4582b2c68934ab \ - --hash=sha256:d5578e6863eeb998980c212a39106ea139bdc0b3f73291b96e27c929c90cd8e1 \ - --hash=sha256:e3b5036aa326dc2df50cba3c958e29b291a80f604b1afa4c8ce73e78e1c9f01d \ - --hash=sha256:e599a51acf3cc4d31d1a0cf248d8f8d863b6386d2b6782c5074427ebb7803bda \ - --hash=sha256:f3420d00d2cb42432c1d0e44540ae83185ccbbc67a6054dcc8ab5387add6620b \ - --hash=sha256:f48ed89dd11c3c586f45e9eec1e437b355b3b6f6884ea4a4c3111a3358fd0c18 \ - --hash=sha256:f508ba8f89e0a5ecdfd3761f82dda2a3d7b678a626967608f4273e0dba8f07ac \ - --hash=sha256:fd54601ef9cc455a0c61e5245f690c8a3ad67ddb03d3b91c361d076def0b4c60 +sqlalchemy==2.0.24 \ + --hash=sha256:00d76fe5d7cdb5d84d625ce002ce29fefba0bfd98e212ae66793fed30af73931 \ + --hash=sha256:07cc423892f2ceda9ae1daa28c0355757f362ecc7505b1ab1a3d5d8dc1c44ac6 \ + --hash=sha256:0bb7cedcddffca98c40bb0becd3423e293d1fef442b869da40843d751785beb3 \ + --hash=sha256:1ca7903d5e7db791a355b579c690684fac6304478b68efdc7f2ebdcfe770d8d7 \ + --hash=sha256:1d9b3fd5eca3c0b137a5e0e468e24ca544ed8ca4783e0e55341b7ed2807518ee \ + --hash=sha256:2587e108463cc2e5b45a896b2e7cc8659a517038026922a758bde009271aed11 \ + --hash=sha256:29e51f848f843bbd75d74ae64ab1ab06302cb1dccd4549d1f5afe6b4a946edb2 \ + --hash=sha256:2a479aa1ab199178ff1956b09ca8a0693e70f9c762875d69292d37049ffd0d8f \ + --hash=sha256:37e89d965b52e8b20571b5d44f26e2124b26ab63758bf1b7598a0e38fb2c4005 \ + --hash=sha256:38732884eabc64982a09a846bacf085596ff2371e4e41d20c0734f7e50525d01 \ + --hash=sha256:396f05c552f7fa30a129497c41bef5b4d1423f9af8fe4df0c3dcd38f3e3b9a14 \ + --hash=sha256:4a1d4856861ba9e73bac05030cec5852eabfa9ef4af8e56c19d92de80d46fc34 \ + --hash=sha256:56a0e90a959e18ac5f18c80d0cad9e90cb09322764f536e8a637426afb1cae2f \ + --hash=sha256:57ef6f2cb8b09a042d0dbeaa46a30f2df5dd1e1eb889ba258b0d5d7d6011b81c \ + --hash=sha256:5f801d85ba4753d4ed97181d003e5d3fa330ac7c4587d131f61d7f968f416862 \ + --hash=sha256:6db686a1d9f183c639f7e06a2656af25d4ed438eda581de135d15569f16ace33 \ + --hash=sha256:6db97656fd3fe3f7e5b077f12fa6adb5feb6e0b567a3e99f47ecf5f7ea0a09e3 \ + --hash=sha256:6f5e75de91c754365c098ac08c13fdb267577ce954fa239dd49228b573ca88d7 \ + --hash=sha256:7a6209e689d0ff206c40032b6418e3cfcfc5af044b3f66e381d7f1ae301544b4 \ + --hash=sha256:7ae5d44517fe81079ce75cf10f96978284a6db2642c5932a69c82dbae09f009a \ + --hash=sha256:83fa6df0e035689df89ff77a46bf8738696785d3156c2c61494acdcddc75c69d \ + --hash=sha256:8f358f5cfce04417b6ff738748ca4806fe3d3ae8040fb4e6a0c9a6973ccf9b6e \ + --hash=sha256:9036ebfd934813990c5b9f71f297e77ed4963720db7d7ceec5a3fdb7cd2ef6ce \ + --hash=sha256:95bae3d38f8808d79072da25d5e5a6095f36fe1f9d6c614dd72c59ca8397c7c0 \ + --hash=sha256:9aaaaa846b10dfbe1bda71079d0e31a7e2cebedda9409fa7dba3dfed1ae803e8 \ + --hash=sha256:9b8d0e8578e7f853f45f4512b5c920f6a546cd4bed44137460b2a56534644205 \ + --hash=sha256:9bafaa05b19dc07fa191c1966c5e852af516840b0d7b46b7c3303faf1a349bc9 \ + --hash=sha256:9f29c7f0f4b42337ec5a779e166946a9f86d7d56d827e771b69ecbdf426124ac \ + --hash=sha256:9f992e0f916201731993eab8502912878f02287d9f765ef843677ff118d0e0b1 \ + --hash=sha256:a04191a7c8d77e63f6fc1e8336d6c6e93176c0c010833e74410e647f0284f5a1 \ + --hash=sha256:a0f611b431b84f55779cbb7157257d87b4a2876b067c77c4f36b15e44ced65e2 \ + --hash=sha256:a3c2753bf4f48b7a6024e5e8a394af49b1b12c817d75d06942cae03d14ff87b3 \ + --hash=sha256:a5cd7d30e47f87b21362beeb3e86f1b5886e7d9b0294b230dde3d3f4a1591375 \ + --hash=sha256:acc58b7c2e40235712d857fdfc8f2bda9608f4a850d8d9ac0dd1fc80939ca6ac \ + --hash=sha256:adbd67dac4ebf54587198b63cd30c29fd7eafa8c0cab58893d9419414f8efe4b \ + --hash=sha256:b35c35e3923ade1e7ac44e150dec29f5863513246c8bf85e2d7d313e3832bcfb \ + --hash=sha256:c6910eb4ea90c0889f363965cd3c8c45a620ad27b526a7899f0054f6c1b9219e \ + --hash=sha256:cc889fda484d54d0b31feec409406267616536d048a450fc46943e152700bb79 \ + --hash=sha256:ccfd336f96d4c9bbab0309f2a565bf15c468c2d8b2d277a32f89c5940f71fcf9 \ + --hash=sha256:d8e7e8a150e7b548e7ecd6ebb9211c37265991bf2504297d9454e01b58530fc6 \ + --hash=sha256:db09e424d7bb89b6215a184ca93b4f29d7f00ea261b787918a1af74143b98c06 \ + --hash=sha256:e17e7e27af178d31b436dda6a596703b02a89ba74a15e2980c35ecd9909eea3a \ + --hash=sha256:e69290b921b7833c04206f233d6814c60bee1d135b09f5ae5d39229de9b46cd4 \ + --hash=sha256:e8398593ccc4440ce6dffcc4f47d9b2d72b9fe7112ac12ea4a44e7d4de364db1 \ + --hash=sha256:e9d036e343a604db3f5a6c33354018a84a1d3f6dcae3673358b404286204798c \ + --hash=sha256:ea490564435b5b204d8154f0e18387b499ea3cedc1e6af3b3a2ab18291d85aa7 \ + --hash=sha256:f073321a79c81e1a009218a21089f61d87ee5fa3c9563f6be94f8b41ff181812 \ + --hash=sha256:f0cc0b486a56dff72dddae6b6bfa7ff201b0eeac29d4bc6f0e9725dc3c360d71 \ + --hash=sha256:fcf84fe93397a0f67733aa2a38ed4eab9fc6348189fc950e656e1ea198f45668 # via -r requirements.in typing-extensions==4.9.0 \ --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ diff --git a/tests/core/greylist/api/requirements.in b/tests/core/greylist/api/requirements.in index dfea0bebe..9945aad2d 100644 --- a/tests/core/greylist/api/requirements.in +++ b/tests/core/greylist/api/requirements.in @@ -1,2 +1,2 @@ -fastapi==0.106.0 +fastapi==0.108.0 uvicorn[standard]==0.25.0 diff --git a/tests/core/greylist/api/requirements.txt b/tests/core/greylist/api/requirements.txt index 607a502eb..4b2d26b89 100644 --- a/tests/core/greylist/api/requirements.txt +++ b/tests/core/greylist/api/requirements.txt @@ -8,11 +8,10 @@ annotated-types==0.6.0 \ --hash=sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43 \ --hash=sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d # via pydantic -anyio==3.7.1 \ - --hash=sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780 \ - --hash=sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5 +anyio==4.2.0 \ + --hash=sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee \ + --hash=sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f # via - # fastapi # starlette # watchfiles click==8.1.7 \ @@ -23,9 +22,9 @@ exceptiongroup==1.2.0 \ --hash=sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14 \ --hash=sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68 # via anyio -fastapi==0.106.0 \ - --hash=sha256:193c2f1b495d1d6561a3dc1ca02a150757322247d895ff6bf15b6eefee24feb9 \ - --hash=sha256:c7e7453ac8c4b7414bbafcf90127d743559808eee286ae2c9f99a501f0b534a0 +fastapi==0.108.0 \ + --hash=sha256:5056e504ac6395bf68493d71fcfc5352fdbd5fda6f88c21f6420d80d81163296 \ + --hash=sha256:8c7bc6d315da963ee4cdb605557827071a9a7f95aeb8fcdd3bde48cdc8764dd7 # via -r requirements.in h11==0.14.0 \ --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ @@ -244,14 +243,15 @@ sniffio==1.3.0 \ --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \ --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384 # via anyio -starlette==0.27.0 \ - --hash=sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75 \ - --hash=sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91 +starlette==0.32.0.post1 \ + --hash=sha256:cd0cb10ddb49313f609cedfac62c8c12e56c7314b66d89bb077ba228bada1b09 \ + --hash=sha256:e54e2b7e2fb06dff9eac40133583f10dfa05913f5a85bf26f427c7a40a9a3d02 # via fastapi typing-extensions==4.9.0 \ --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd # via + # anyio # fastapi # pydantic # pydantic-core diff --git a/tests/core/redis/requirements.in b/tests/core/redis/requirements.in index 530bfcb6f..819a03740 100644 --- a/tests/core/redis/requirements.in +++ b/tests/core/redis/requirements.in @@ -1,4 +1,4 @@ -fastapi==0.106.0 +fastapi==0.108.0 redis==5.0.1 requests==2.31.0 selenium==4.16.0 diff --git a/tests/core/redis/requirements.txt b/tests/core/redis/requirements.txt index 09f793298..d9ccb813e 100644 --- a/tests/core/redis/requirements.txt +++ b/tests/core/redis/requirements.txt @@ -8,11 +8,10 @@ annotated-types==0.6.0 \ --hash=sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43 \ --hash=sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d # via pydantic -anyio==3.7.1 \ - --hash=sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780 \ - --hash=sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5 +anyio==4.2.0 \ + --hash=sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee \ + --hash=sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f # via - # fastapi # starlette # watchfiles async-timeout==4.0.3 \ @@ -134,9 +133,9 @@ exceptiongroup==1.2.0 \ # anyio # trio # trio-websocket -fastapi==0.106.0 \ - --hash=sha256:193c2f1b495d1d6561a3dc1ca02a150757322247d895ff6bf15b6eefee24feb9 \ - --hash=sha256:c7e7453ac8c4b7414bbafcf90127d743559808eee286ae2c9f99a501f0b534a0 +fastapi==0.108.0 \ + --hash=sha256:5056e504ac6395bf68493d71fcfc5352fdbd5fda6f88c21f6420d80d81163296 \ + --hash=sha256:8c7bc6d315da963ee4cdb605557827071a9a7f95aeb8fcdd3bde48cdc8764dd7 # via -r requirements.in h11==0.14.0 \ --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ @@ -387,9 +386,9 @@ sortedcontainers==2.4.0 \ --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 # via trio -starlette==0.27.0 \ - --hash=sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75 \ - --hash=sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91 +starlette==0.32.0.post1 \ + --hash=sha256:cd0cb10ddb49313f609cedfac62c8c12e56c7314b66d89bb077ba228bada1b09 \ + --hash=sha256:e54e2b7e2fb06dff9eac40133583f10dfa05913f5a85bf26f427c7a40a9a3d02 # via fastapi trio==0.23.2 \ --hash=sha256:5a0b566fa5d50cf231cfd6b08f3b03aa4179ff004b8f3144059587039e2b26d3 \ @@ -405,6 +404,7 @@ typing-extensions==4.9.0 \ --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd # via + # anyio # fastapi # pydantic # pydantic-core diff --git a/tests/core/reversescan/requirements.in b/tests/core/reversescan/requirements.in index 295927d75..ddf7c36a9 100644 --- a/tests/core/reversescan/requirements.in +++ b/tests/core/reversescan/requirements.in @@ -1,3 +1,3 @@ -fastapi==0.106.0 +fastapi==0.108.0 requests==2.31.0 uvicorn[standard]==0.25.0 diff --git a/tests/core/reversescan/requirements.txt b/tests/core/reversescan/requirements.txt index 72c83e856..d74b6c256 100644 --- a/tests/core/reversescan/requirements.txt +++ b/tests/core/reversescan/requirements.txt @@ -8,11 +8,10 @@ annotated-types==0.6.0 \ --hash=sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43 \ --hash=sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d # via pydantic -anyio==3.7.1 \ - --hash=sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780 \ - --hash=sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5 +anyio==4.2.0 \ + --hash=sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee \ + --hash=sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f # via - # fastapi # starlette # watchfiles certifi==2023.11.17 \ @@ -119,9 +118,9 @@ exceptiongroup==1.2.0 \ --hash=sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14 \ --hash=sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68 # via anyio -fastapi==0.106.0 \ - --hash=sha256:193c2f1b495d1d6561a3dc1ca02a150757322247d895ff6bf15b6eefee24feb9 \ - --hash=sha256:c7e7453ac8c4b7414bbafcf90127d743559808eee286ae2c9f99a501f0b534a0 +fastapi==0.108.0 \ + --hash=sha256:5056e504ac6395bf68493d71fcfc5352fdbd5fda6f88c21f6420d80d81163296 \ + --hash=sha256:8c7bc6d315da963ee4cdb605557827071a9a7f95aeb8fcdd3bde48cdc8764dd7 # via -r requirements.in h11==0.14.0 \ --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ @@ -346,14 +345,15 @@ sniffio==1.3.0 \ --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \ --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384 # via anyio -starlette==0.27.0 \ - --hash=sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75 \ - --hash=sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91 +starlette==0.32.0.post1 \ + --hash=sha256:cd0cb10ddb49313f609cedfac62c8c12e56c7314b66d89bb077ba228bada1b09 \ + --hash=sha256:e54e2b7e2fb06dff9eac40133583f10dfa05913f5a85bf26f427c7a40a9a3d02 # via fastapi typing-extensions==4.9.0 \ --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd # via + # anyio # fastapi # pydantic # pydantic-core diff --git a/tests/core/whitelist/api/requirements.in b/tests/core/whitelist/api/requirements.in index dfea0bebe..9945aad2d 100644 --- a/tests/core/whitelist/api/requirements.in +++ b/tests/core/whitelist/api/requirements.in @@ -1,2 +1,2 @@ -fastapi==0.106.0 +fastapi==0.108.0 uvicorn[standard]==0.25.0 diff --git a/tests/core/whitelist/api/requirements.txt b/tests/core/whitelist/api/requirements.txt index 607a502eb..4b2d26b89 100644 --- a/tests/core/whitelist/api/requirements.txt +++ b/tests/core/whitelist/api/requirements.txt @@ -8,11 +8,10 @@ annotated-types==0.6.0 \ --hash=sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43 \ --hash=sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d # via pydantic -anyio==3.7.1 \ - --hash=sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780 \ - --hash=sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5 +anyio==4.2.0 \ + --hash=sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee \ + --hash=sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f # via - # fastapi # starlette # watchfiles click==8.1.7 \ @@ -23,9 +22,9 @@ exceptiongroup==1.2.0 \ --hash=sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14 \ --hash=sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68 # via anyio -fastapi==0.106.0 \ - --hash=sha256:193c2f1b495d1d6561a3dc1ca02a150757322247d895ff6bf15b6eefee24feb9 \ - --hash=sha256:c7e7453ac8c4b7414bbafcf90127d743559808eee286ae2c9f99a501f0b534a0 +fastapi==0.108.0 \ + --hash=sha256:5056e504ac6395bf68493d71fcfc5352fdbd5fda6f88c21f6420d80d81163296 \ + --hash=sha256:8c7bc6d315da963ee4cdb605557827071a9a7f95aeb8fcdd3bde48cdc8764dd7 # via -r requirements.in h11==0.14.0 \ --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ @@ -244,14 +243,15 @@ sniffio==1.3.0 \ --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \ --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384 # via anyio -starlette==0.27.0 \ - --hash=sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75 \ - --hash=sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91 +starlette==0.32.0.post1 \ + --hash=sha256:cd0cb10ddb49313f609cedfac62c8c12e56c7314b66d89bb077ba228bada1b09 \ + --hash=sha256:e54e2b7e2fb06dff9eac40133583f10dfa05913f5a85bf26f427c7a40a9a3d02 # via fastapi typing-extensions==4.9.0 \ --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd # via + # anyio # fastapi # pydantic # pydantic-core From 80f8d15482b7a49f958ba4b6b0d62ef9e2654245 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Fri, 29 Dec 2023 12:35:40 +0000 Subject: [PATCH 079/154] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d17defca3..b787474c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - [BUGFIX] Fix ModSecurity-nginx to make it work with brotli - [FEATURE] Add Anonymous reporting feature - [FEATURE] Add support for fallback Referrer-Policies +- [FEATURE] Add profile page to web ui and the possibility to activate the 2FA - [MISC] Fallback to default HTTPS certificate to prevent errors - [MISC] Updated Python Docker image to 3.12.1-alpine3.18 in Dockerfiles - [DEPS] Updated ModSecurity to v3.0.11 From 116ca222604b73017f6af3e55487e37b6905992e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Fri, 29 Dec 2023 12:36:04 +0000 Subject: [PATCH 080/154] Update lua-resty-openssl to version v1.2.0 --- src/deps/deps.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/deps/deps.json b/src/deps/deps.json index 582a5b50d..589147007 100644 --- a/src/deps/deps.json +++ b/src/deps/deps.json @@ -151,9 +151,9 @@ }, { "id": "lua-resty-openssl", - "name": "lua-resty-openssl v1.0.2", + "name": "lua-resty-openssl v1.2.0", "url": "https://github.com/fffonion/lua-resty-openssl.git", - "commit": "5aba923e78ae0f213f3b4719effa879e3971821f", + "commit": "7f25f00ba2b2140b794c94b5ae17f5a0736e3b03", "post_install": "rm -r src/deps/src/lua-resty-openssl/t" }, { From dda63ddceeb1f4ffdd97d6aa95ac24a1a7eeede7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Fri, 29 Dec 2023 12:36:57 +0000 Subject: [PATCH 081/154] Squashed 'src/deps/src/lua-resty-openssl/' changes from 5aba923e7..7f25f00ba 7f25f00ba release: 1.2.0 40fdbbbdd feat(mac) add reset API b36ccba3f feat(openssl) list functions can now optionally drop provider name 5381f10c3 chore(tests) bump openssl to 3.2.0 (#140) b72870ce1 chore(perf) calculate openssl speed numbers d23b34ae8 fix(compat) works better with plain luajit e9edc76cb tests(perf) add kdf dac54bf76 perf(kdf) use table.nkeys for params 3d0a51cca feat(cipher) add set_buffer_size API ba5de3e53 perf(cipher) improve performance on cipher e87e93f66 tests(perf) pretty up tests c8745f9ba chore(tests) format tests 073c943bf feat(bn) add from_mpi, to_mpi and set API 253d11c54 release: 1.1.0 2e401b335 feat(pkey) support pass in ctrl str options 12f5209ff chore(tests) revert BoringSSL specific patterns d155657e6 feat(err) standardize error format and add new API to get reason and library name 3c0027d0b doc(readme) remove docs about BoringSSL git-subtree-dir: src/deps/src/lua-resty-openssl git-subtree-split: 7f25f00ba2b2140b794c94b5ae17f5a0736e3b03 --- .github/workflows/tests.yml | 54 +- CHANGELOG.md | 29 +- README.md | 303 ++- examples/perf/framework.lua | 65 +- examples/perf/test_cipher.lua | 3 + examples/perf/test_other_libs.lua | 433 ++++ examples/perf/test_pkey_asymm.lua | 4 + examples/perf/test_pkey_codec.lua | 7 +- examples/perf/test_x509_codec.lua | 7 +- lib/resty/openssl.lua | 70 +- lib/resty/openssl/auxiliary/compat.lua | 84 + lib/resty/openssl/auxiliary/jwk.lua | 31 +- lib/resty/openssl/bn.lua | 167 +- lib/resty/openssl/cipher.lua | 79 +- lib/resty/openssl/ctx.lua | 4 +- lib/resty/openssl/err.lua | 79 +- lib/resty/openssl/include/bn.lua | 13 +- lib/resty/openssl/include/err.lua | 25 +- lib/resty/openssl/include/evp.lua | 33 +- lib/resty/openssl/include/evp/pkey.lua | 49 +- lib/resty/openssl/kdf.lua | 15 +- lib/resty/openssl/mac.lua | 22 +- lib/resty/openssl/param.lua | 4 +- lib/resty/openssl/pkey.lua | 127 +- lib/resty/openssl/version.lua | 80 +- ...spec => lua-resty-openssl-1.2.0-1.rockspec | 5 +- scripts/templates/x509_tests.j2 | 35 +- scripts/types_test.py | 2 +- t/fips.t | 7 + t/openssl.t | 17 +- t/openssl/asn1.t | 9 + t/openssl/bn.t | 385 ++-- t/openssl/cipher.t | 60 +- t/openssl/ctx.t | 4 + t/openssl/digest.t | 17 +- t/openssl/err.t | 1 + t/openssl/helper.lua | 2 +- t/openssl/hmac.t | 10 +- t/openssl/kdf.t | 21 +- t/openssl/mac.t | 13 + t/openssl/objects.t | 6 +- t/openssl/param.t | 1 + t/openssl/pkcs12.t | 37 +- t/openssl/pkey.t | 1768 +++++++++-------- t/openssl/provider.t | 12 +- t/openssl/rand.t | 4 +- t/openssl/version.t | 7 +- t/openssl/x509.t | 112 +- t/openssl/x509/altname.t | 17 +- t/openssl/x509/chain.t | 13 +- t/openssl/x509/crl.t | 41 +- t/openssl/x509/csr.t | 75 +- t/openssl/x509/extension.t | 23 +- t/openssl/x509/extensions.t | 11 + t/openssl/x509/name.t | 8 +- t/openssl/x509/revoked.t | 5 +- t/openssl/x509/store.t | 25 +- 57 files changed, 3058 insertions(+), 1482 deletions(-) create mode 100644 examples/perf/test_other_libs.lua create mode 100644 lib/resty/openssl/auxiliary/compat.lua rename lua-resty-openssl-1.0.2-1.rockspec => lua-resty-openssl-1.2.0-1.rockspec (98%) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1a7f23f78..b673a9058 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -60,7 +60,7 @@ jobs: lua_resty_core: "v0.1.27" nginx_cc_opts: "-Wno-error" - nginx: "1.21.4" - openssl: "3.2.0-alpha1" + openssl: "3.2.0" openssl_fips: "3.0.8" extras: "valgrind perf" lua_nginx_module: "v0.10.25" @@ -117,7 +117,6 @@ jobs: popd git clone https://github.com/openresty/lua-resty-core.git ../lua-resty-core -b ${{ matrix.lua_resty_core }} git clone https://github.com/openresty/lua-resty-lrucache.git ../lua-resty-lrucache - git clone https://github.com/jkeys089/lua-resty-hmac ../lua-resty-hmac && pushd ../lua-resty-hmac && git checkout 79a4929 && popd git clone https://github.com/openresty/lua-resty-string ../lua-resty-string - name: Build OpenSSL @@ -181,20 +180,6 @@ jobs: nginx -V ldd `which nginx`|grep -E 'luajit|ssl|pcre' - - name: Run performance test - if: contains(matrix.extras, 'perf') - run: | - wget https://github.com/openresty/resty-cli/raw/master/bin/resty - chmod +x resty - - export LD_LIBRARY_PATH=$LUAJIT_LIB:$LD_LIBRARY_PATH - export PATH=$BASE_PATH/work/nginx/sbin:$PATH - - for f in $(find examples/perf -type f -name "test_*" | sort); do - ./resty --no-stream -I lib $f - echo '================================================================' - done - - name: Run Test run: | export LD_LIBRARY_PATH=$LUAJIT_LIB:$LD_LIBRARY_PATH @@ -242,4 +227,39 @@ jobs: else echo "FIPS tests are skipped" fi - + + - name: Prepare other libraries + if: contains(matrix.extras, 'perf') + run: | + git clone https://github.com/spacewander/lua-resty-rsa ../lua-resty-rsa + + wget https://luarocks.org/releases/luarocks-3.9.2.tar.gz + tar zxf luarocks-*.tar.gz + pushd luarocks-*/ + ./configure --with-lua=$LUAJIT_PREFIX \ + --lua-suffix=jit \ + --with-lua-include=$LUAJIT_PREFIX/include/luajit-2.1 + make -j$(nproc) build + sudo make install + popd + + luarocks install --local lua_pack + luarocks install --local openssl OPENSSL_DIR=$OPENSSL_PREFIX + luarocks install --local luaossl CRYPTO_DIR=$OPENSSL_PREFIX OPENSSL_DIR=$OPENSSL_PREFIX + cp ~/.luarocks/lib/lua/5.1/openssl_*-openssl.so ~/.luarocks/lib/lua/5.1/lua-openssl.so + + - name: Run performance test + if: contains(matrix.extras, 'perf') + run: | + wget https://github.com/openresty/resty-cli/raw/master/bin/resty + chmod +x resty + + export LD_LIBRARY_PATH=$LUAJIT_LIB:$LD_LIBRARY_PATH + export PATH=$BASE_PATH/work/nginx/sbin:$PATH + + for f in $(find examples/perf -type f -name "test_*" | sort); do + ./resty --no-stream -I lib -I ../lua-resty-string/lib -I ../lua-resty-rsa/lib -I ~/.luarocks/lib/lua/5.1 $f + echo '================================================================' + done + + diff --git a/CHANGELOG.md b/CHANGELOG.md index 67ea9c876..5afde5e29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,29 @@ ## [Unreleased] + +## [1.2.0] - 2023-12-28 +### bug fixes +- **compat:** works better with plain luajit [d23b34a](https://github.com/fffonion/lua-resty-openssl/commit/d23b34ae8b3349342d5f82d90dbfe76696dd2ca4) + +### features +- **bn:** add from_mpi, to_mpi and set API [073c943](https://github.com/fffonion/lua-resty-openssl/commit/073c943bf74cce7bd6ce90ee97dfc9b753af3cf2) +- **cipher:** add set_buffer_size API [3d0a51c](https://github.com/fffonion/lua-resty-openssl/commit/3d0a51ccab0c2dd46f9eb8088fa2f767eff02a61) +- **mac:** add reset API [40fdbbb](https://github.com/fffonion/lua-resty-openssl/commit/40fdbbbddc078c01ea40b8ec8b21257d0e3fefa6) +- **openssl:** list functions can now optionally drop provider name [b36ccba](https://github.com/fffonion/lua-resty-openssl/commit/b36ccba3fce9a1b51a0bc8c23d5e9843e99a2052) + +### performance improvements +- **cipher:** improve performance on cipher [ba5de3e](https://github.com/fffonion/lua-resty-openssl/commit/ba5de3e53e1b83de5b8f75d64c83eb3e507f386a) +- **kdf:** use table.nkeys for params [dac54bf](https://github.com/fffonion/lua-resty-openssl/commit/dac54bf7685d907518e80ab96a594753cdf0c0e1) + + + +## [1.1.0] - 2023-12-15 +### features +- **err:** standardize error format and add new API to get reason and library name [d155657](https://github.com/fffonion/lua-resty-openssl/commit/d155657e60cdfdb0634d0c3147b184e8543b972e) +- **pkey:** support pass in ctrl str options [2e401b3](https://github.com/fffonion/lua-resty-openssl/commit/2e401b335bce759fe8a7a48d5b23cb33a46cc9ba) + + ## [1.0.2] - 2023-11-21 ### bug fixes @@ -459,8 +482,8 @@ - **autogen:** generate tests for x509, csr and crl [1392428](https://github.com/fffonion/lua-resty-openssl/commit/1392428352164d2a1a6e0c03075ff65b55aecdee) - **objects:** add helper function for ASN1_OBJECT [d037706](https://github.com/fffonion/lua-resty-openssl/commit/d037706c11d716afe3616bdaf4658afc1763081d) - **pkey:** asymmetric encryption and decryption [6d60451](https://github.com/fffonion/lua-resty-openssl/commit/6d60451157edbf9cefb634f888dfa3e6d9be302f) -- **x509:** getter/setters for extensions [243f40d](https://github.com/fffonion/lua-resty-openssl/commit/243f40d35562a516f404188a5c7eb8f5134d9b30) - **x509:** add get_ocsp_url and get_crl_url [6141b6f](https://github.com/fffonion/lua-resty-openssl/commit/6141b6f5aed38706b477a71d8c4383bf55da7eee) +- **x509:** getter/setters for extensions [243f40d](https://github.com/fffonion/lua-resty-openssl/commit/243f40d35562a516f404188a5c7eb8f5134d9b30) - **x509.altname:** support iterate and decode over the stack [083a201](https://github.com/fffonion/lua-resty-openssl/commit/083a201746e02d51f6c5c640ad9bf8c6730ebe0b) - **x509.crl:** add crl module [242f8cb](https://github.com/fffonion/lua-resty-openssl/commit/242f8cb45d6c2df5918f26540c92a430d42feb5d) - **x509.csr:** autogen some csr functions as well [9800e36](https://github.com/fffonion/lua-resty-openssl/commit/9800e36c2ff8a299b88f24091cc722940a8652bb) @@ -548,7 +571,9 @@ - **x509:** export pubkey [ede4f81](https://github.com/fffonion/lua-resty-openssl/commit/ede4f817cb0fe092ad6f9ab5d6ecdcde864a9fd8) -[Unreleased]: https://github.com/fffonion/lua-resty-openssl/compare/1.0.2...HEAD +[Unreleased]: https://github.com/fffonion/lua-resty-openssl/compare/1.2.0...HEAD +[1.2.0]: https://github.com/fffonion/lua-resty-openssl/compare/1.1.0...1.2.0 +[1.1.0]: https://github.com/fffonion/lua-resty-openssl/compare/1.0.2...1.1.0 [1.0.2]: https://github.com/fffonion/lua-resty-openssl/compare/1.0.1...1.0.2 [1.0.1]: https://github.com/fffonion/lua-resty-openssl/compare/1.0.0...1.0.1 [1.0.0]: https://github.com/fffonion/lua-resty-openssl/compare/0.8.26...1.0.0 diff --git a/README.md b/README.md index 7a6ed283c..41c0a157b 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,11 @@ Table of Contents * [resty.openssl.ctx](#restyopensslctx) + [ctx.new](#ctxnew) + [ctx.free](#ctxfree) + * [resty.openssl.err](#restyopensslerr) + + [err.format_error](#errformat_error) + + [err.get_last_error_code](#errget_last_error_code) + + [err.get_lib_error_string](#errget_lib_error_string) + + [err.get_reason_error_string](#errget_reason_error_string) * [resty.openssl.version](#restyopensslversion) + [version_num](#version_num) + [version_text](#version_text) @@ -69,7 +74,9 @@ Table of Contents + [bn.new](#bnnew) + [bn.dup](#bndup) + [bn.istype](#bnistype) + + [bn:set](#bnset) + [bn.from_binary, bn:to_binary](#bnfrom_binary-bnto_binary) + + [bn.from_mpi, bn:to_mpi](#bnfrom_mpi-bnto_mpi) + [bn.from_hex, bn:to_hex](#bnfrom_hex-bnto_hex) + [bn.from_dec, bn:to_dec](#bnfrom_dec-bnto_dec) + [bn:to_number](#bnto_number) @@ -84,6 +91,7 @@ Table of Contents * [resty.openssl.cipher](#restyopensslcipher) + [cipher.new](#ciphernew) + [cipher.istype](#cipheristype) + + [cipher.set_buffer_size](#cipherset_buffer_size) + [cipher:get_provider_name](#cipherget_provider_name) + [cipher:gettable_params, cipher:settable_params, cipher:get_param, cipher:set_params](#ciphergettable_params-ciphersettable_params-cipherget_param-cipherset_params) + [cipher:encrypt](#cipherencrypt) @@ -116,6 +124,7 @@ Table of Contents + [mac:gettable_params, mac:settable_params, mac:get_param, mac:set_params](#macgettable_params-macsettable_params-macget_param-macset_params) + [mac:update](#macupdate) + [mac:final](#macfinal) + + [mac:reset](#macreset) * [resty.openssl.kdf](#restyopensslkdf) + [kdf.derive (legacy)](#kdfderive-legacy) + [kdf.new](#kdfnew) @@ -406,7 +415,7 @@ lua-resty-openssl supports following modes: Compile the module per [security policy](https://www.openssl.org/docs/fips/SecurityPolicy-2.0.2.pdf), -**OpenSSL 3.0.0 fips provider ** +**OpenSSL 3.0.0 fips provider** Refer to https://wiki.openssl.org/index.php/OpenSSL_3.0 Section 7 Compile the provider per guide, install the fipsmodule.cnf that @@ -432,12 +441,6 @@ local c = assert(cipher.new("aes256", "fips=yes")) print(c:get_provider_name()) -- prints "fips" ``` -**BroingSSL fips-20190808 and fips-20210429 (later haven't been certified)** - -Compile the module per [security policy](https://csrc.nist.gov/CSRC/media/projects/cryptographic-module-validation-program/documents/security-policies/140sp3678.pdf) - -Check if FIPS is acticated by running `assert(openssl.set_fips_mode(true))`. - [Back to TOC](#table-of-contents) ### openssl.get_fips_version_text @@ -458,33 +461,37 @@ Sets the default properties for all future EVP algorithm fetches, implicit as we ### openssl.list_cipher_algorithms -**syntax**: *ret = openssl.list_cipher_algorithms()* +**syntax**: *ret = openssl.list_cipher_algorithms(hide_provider?)* -Return available cipher algorithms in an array. +Return available cipher algorithms in an array. Set `hide_provider` to `true` to +hide provider name from the result. [Back to TOC](#table-of-contents) ### openssl.list_digest_algorithms -**syntax**: *ret = openssl.list_digest_algorithms()* +**syntax**: *ret = openssl.list_digest_algorithms(hide_provider?)* -Return available digest algorithms in an array. +Return available digest algorithms in an array. Set `hide_provider` to `true` to +hide provider name from the result. [Back to TOC](#table-of-contents) ### openssl.list_mac_algorithms -**syntax**: *ret = openssl.list_mac_algorithms()* +**syntax**: *ret = openssl.list_mac_algorithms(hide_provider?)* -Return available MAC algorithms in an array. +Return available MAC algorithms in an array. Set `hide_provider` to `true` to +hide provider name from the result. [Back to TOC](#table-of-contents) ### openssl.list_kdf_algorithms -**syntax**: *ret = openssl.list_kdf_algorithms()* +**syntax**: *ret = openssl.list_kdf_algorithms(hide_provider?)* -Return available KDF algorithms in an array. +Return available KDF algorithms in an array. Set `hide_provider` to `true` to +hide provider name from the result. [Back to TOC](#table-of-contents) @@ -562,6 +569,71 @@ Free the context that was previously created by [ctx.new](#ctxnew). [Back to TOC](#table-of-contents) +## resty.openssl.err + +A module to provide error messages. + +[Back to TOC](#table-of-contents) + +### err.format_error + +**syntax**: *msg = err.format_error(ctx_msg?, return_code?, all_errors?)* + +**syntax**: *msg = err.format_all_errors(ctx_msg?, return_code?)* + +Return the latest error message from the last error code. Errors are formatted as: + + [ctx_msg]: code: [return_code]: error:[error code]:[library name]:[func name]:[reason string]:[file name]:[line number]: + +On OpenSSL prior to 3.x, errors are formatted as: + + [ctx_msg]: code: [return_code]: [file name]:[line number]:error:[error code]:[library name]:[func name]:[reason string]: + + +If `all_errors` is set to `true`, all errors no just the latest one will be returned in a single string. All errors thrown +by this library internally only thrown the latest error. + +For example: + +```lua +local f = io.open("t/fixtures/ec_key_encrypted.pem"):read("*a") +local privkey, err = require("resty.openssl.pkey").new(f, { + format = "PEM", + type = "pr", + passphrase = "wrongpasswrod", +}) +ngx.say(err) +-- pkey.new:load_key: error:4800065:PEM routines:PEM_do_header:bad decrypt:crypto/pem/pem_lib.c:467: +``` + +[Back to TOC](#table-of-contents) + +### err.get_last_error_code + +**syntax**: *code = err.get_last_error_code()* + +Return the last error code. + +[Back to TOC](#table-of-contents) + +### err.get_lib_error_string + +**syntax**: *lib_error_message = err.get_lib_error_string(code?)* + +Return the library name of the last error code as string. If `code` is set, return the library name +corresponding to provided error code instead. + +[Back to TOC](#table-of-contents) + +### err.get_reason_error_string + +**syntax**: *reason_error_message = err.get_reason_error_string(code?)* + +Return the reason of the last error code as string. If `code` is set, return the reason +corresponding to provided error code instead. + +[Back to TOC](#table-of-contents) + ## resty.openssl.version A module to provide version info. @@ -796,6 +868,8 @@ in provided JSON will decide if a private or public key is loaded. from private key part (the `d` parameter) if it's specified. - Signatures and verification must use `ecdsa_use_raw` option to work with JWS standards for EC keys. See [pkey:sign](#pkeysign) and [pkey.verify](#pkeyverify) for detail. +- When running outside of OpenResty, needs to install a JSON library (`cjson` or `dkjson`) +and `basexx`. #### Key generation @@ -842,6 +916,26 @@ local key, err = pkey.new({ }) ``` +It's also possible to pass raw pkeyopt control strings in `config` table as used in the `genpkey` CLI program. +See [openssl-genpkey(1)](https://www.openssl.org/docs/man3.0/man1/openssl-genpkey.html) for a list of options. + +For example: + +```lua +pkey.new({ + type = 'RSA', + bits = 2048, + exp = 65537, +}) +-- is same as +pkey.new({ + type = 'RSA', + exp = 65537, + "rsa_keygen_bits:4096", +}) + +``` + [Back to TOC](#table-of-contents) @@ -893,6 +987,9 @@ local pem, err = pkey.paramgen({ }) ``` +It's also possible to pass raw pkeyopt control strings in `config` table as used in the `genpkey` CLI program. +See [openssl-genpkey(1)](https://www.openssl.org/docs/man3.0/man1/openssl-genpkey.html) for a list of options. + [Back to TOC](#table-of-contents) ### pkey:get_provider_name @@ -1047,10 +1144,20 @@ to use when signing. When `md_alg` is undefined, for RSA and EC keys, this funct by default. For Ed25519 or Ed448 keys, this function does a PureEdDSA signing, no message digest should be specified and will not be used. -`opts` is a table that accepts additional parameters. +For RSA key, it's also possible to specify `padding` scheme with following choices: -For RSA key, it's also possible to specify `padding` scheme. The choice of values are same -as those in [pkey:encrypt](#pkeyencrypt). When `padding` is `RSA_PKCS1_PSS_PADDING`, it's +```lua + pkey.PADDINGS = { + RSA_PKCS1_PADDING = 1, + RSA_SSLV23_PADDING = 2, + RSA_NO_PADDING = 3, + RSA_PKCS1_OAEP_PADDING = 4, + RSA_X931_PADDING = 5, -- sign only + RSA_PKCS1_PSS_PADDING = 6, -- sign and verify only + } +``` + +When `padding` is `RSA_PKCS1_PSS_PADDING`, it's possible to specify PSS salt length by setting `opts.pss_saltlen`. For EC key, this function does a ECDSA signing. @@ -1062,6 +1169,32 @@ is encoded in ASN.1 DER format. If the `opts` table contains a `ecdsa_use_raw` f a true value, a binary with just the concatenation of binary representation `pr` and `ps` is returned. This is useful for example to send the signature as JWS. +`opts` is a table that accepts additional parameters with following choices: + +``` +{ + pss_saltlen, -- For PSS mode only this option specifies the salt length. + mgf1_md, -- For PSS and OAEP padding sets the MGF1 digest. If the MGF1 digest is not explicitly set in PSS mode then the signing digest is used. + oaep_md, -- The digest used for the OAEP hash function. If not explicitly set then SHA1 is used. +} +``` + +It's also possible to pass raw pkeyopt control strings as used in the `pkeyutl` CLI program. This lets user pass in options that +are not explictly supported as parameters above. +See [openssl-pkeyutl(1)](https://www.openssl.org/docs/manmaster/man1/openssl-pkeyutl.html) for a list of options. + +```lua +pk:sign(message, nil, pk.PADDINGS.RSA_PKCS1_OAEP_PADDING, { + oaep_md = "sha256", +}) +-- is same as +pk:sign(message, nil, nil, { + "rsa_padding_mode:oaep", + "rsa_oaep_md:sha256", +}) +-- in pkeyutl CLI the above is equivalent to: `openssl pkeyutl -sign -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256 +``` + [Back to TOC](#table-of-contents) ### pkey:verify @@ -1084,10 +1217,8 @@ to use when verifying. When `md_alg` is undefined, for RSA and EC keys, this fun by default. For Ed25519 or Ed448 keys, this function does a PureEdDSA verification, no message digest should be specified and will not be used. -`opts` is a table that accepts additional parameters. - -For RSA key, it's also possible to specify `padding` scheme. The choice of values are same -as those in [pkey:encrypt](#pkeyencrypt). When `padding` is `RSA_PKCS1_PSS_PADDING`, it's +When key is a RSA key, the function accepts an optional argument `padding` which choices +of values are same as those in [pkey:sign](#pkeysign). When `padding` is `RSA_PKCS1_PSS_PADDING`, it's possible to specify PSS salt length by setting `opts.pss_saltlen`. For EC key, this function does a ECDSA verification. Normally, the ECDSA signature @@ -1095,6 +1226,10 @@ should be encoded in ASN.1 DER format. If the `opts` table contains a `ecdsa_use a true value, this library treat `signature` as concatenation of binary representation `pr` and `ps`. This is useful for example to verify the signature as JWS. +`opts` is a table that accepts additional parameters which choices +of values are same as those in [pkey:sign](#pkeysign). + + ```lua -- RSA and EC keys local pk, err = require("resty.openssl.pkey").new() @@ -1130,34 +1265,28 @@ ngx.say(ngx.encode_base64(signature)) ### pkey:encrypt -**syntax**: *cipher_txt, err = pk:encrypt(txt, padding?)* +**syntax**: *cipher_txt, err = pk:encrypt(txt, padding?, opts?)* Encrypts plain text `txt` with `pkey` instance, which must loaded a public key. -When key is a RSA key, the function accepts an optional second argument `padding` which can be: - -```lua - pkey.PADDINGS = { - RSA_PKCS1_PADDING = 1, - RSA_SSLV23_PADDING = 2, - RSA_NO_PADDING = 3, - RSA_PKCS1_OAEP_PADDING = 4, - RSA_X931_PADDING = 5, - RSA_PKCS1_PSS_PADDING = 6, - } -``` - +The optional second argument `padding` has same meaning as in [pkey:sign](#pkeysign). If omitted, `padding` is default to `pkey.PADDINGS.RSA_PKCS1_PADDING`. +The third optional argument `opts` has same meaning as in [pkey:sign](#pkeysign). + + [Back to TOC](#table-of-contents) ### pkey:decrypt -**syntax**: *txt, err = pk:decrypt(cipher_txt, padding?)* +**syntax**: *txt, err = pk:decrypt(cipher_txt, padding?, opts?)* Decrypts cipher text `cipher_txt` with pkey instance, which must loaded a private key. -The optional second argument `padding` has same meaning in [pkey:encrypt](#pkeyencrypt). +The optional second argument `padding` has same meaning as in [pkey:sign](#pkeysign). +If omitted, `padding` is default to `pkey.PADDINGS.RSA_PKCS1_PADDING`. + +The third optional argument `opts` has same meaning as in [pkey:sign](#pkeysign). ```lua local pkey = require("resty.openssl.pkey") @@ -1176,11 +1305,14 @@ ngx.say(decrypted) ### pkey:sign_raw -**syntax**: *signature, err = pk:sign_raw(txt, padding?)* +**syntax**: *signature, err = pk:sign_raw(txt, padding?, opts?)* Signs the cipher text `cipher_txt` with pkey instance, which must loaded a private key. -The optional second argument `padding` has same meaning in [pkey:encrypt](#pkeyencrypt). +The optional second argument `padding` has same meaning as in [pkey:sign](#pkeysign). +If omitted, `padding` is default to `pkey.PADDINGS.RSA_PKCS1_PADDING`. + +The third optional argument `opts` has same meaning as in [pkey:sign](#pkeysign). This function may also be called "private encrypt" in some implementations like NodeJS or PHP. Do note as the function names suggested, this function is not secure to be regarded as an encryption. @@ -1194,12 +1326,15 @@ for an example. ### pkey:verify_recover -**syntax**: *txt, err = pk:verify_recover(signature, padding?)* +**syntax**: *txt, err = pk:verify_recover(signature, padding?, opts?)* Verify the cipher text `signature` with pkey instance, which must loaded a public key, and also returns the original text being signed. This operation is only supported by RSA key. -The optional second argument `padding` has same meaning in [pkey:encrypt](#pkeyencrypt). +The optional second argument `padding` has same meaning as in [pkey:sign](#pkeysign). +If omitted, `padding` is default to `pkey.PADDINGS.RSA_PKCS1_PADDING`. + +The third optional argument `opts` has same meaning as in [pkey:sign](#pkeysign). This function may also be called "public decrypt" in some implementations like NodeJS or PHP. @@ -1255,8 +1390,20 @@ Module to expose BIGNUM structure. Note bignum is a big integer, no float operat **syntax**: *b, err = bn.new(number?)* -Creates a `bn` instance. The first argument can be a Lua number or `nil` to -creates an empty instance. +**syntax**: *b, err = bn.new(string?, base?)* + +Creates a `bn` instance. The first argument can be: + +- `nil` to creates an empty bn instance. +- A Lua number to initialize the bn instance. +- A string to initialize the bn instance. The second argument `base` specifies the base of the string, +and can take value from (compatible with Ruby OpenSSL.BN API): + - `10` or omitted, for decimal string (`"23333"`) + - `16`, for hex encoded string (`"5b25"`) + - `2`, for binary string (`"\x5b\x25"`) + - `0`, for MPI formated string (`"\x00\x00\x00\x02\x5b\x25"`) + +MPI is a format that consists of the number's length in bytes represented as a 4-byte big-endian number, and the number itself in big-endian format, where the most significant bit signals a negative number (the representation of numbers with the MSB set is prefixed with null byte). [Back to TOC](#table-of-contents) @@ -1276,6 +1423,17 @@ Returns `true` if table is an instance of `bn`. Returns `false` otherwise. [Back to TOC](#table-of-contents) +### bn.set + +**syntax**: *b, err = bn:set(number)* + +**syntax**: *b, err = bn:set(string, base?)* + +Reuse the existing bn instance and reset its value with given number or string. +Refer to [bn.new](#bnnew) for the type of arguments supported. + +[Back to TOC](#table-of-contents) + ### bn.from_binary, bn:to_binary **syntax**: *bn, err = bn.from_binary(bin)* @@ -1290,10 +1448,32 @@ Exports the BIGNUM value in binary string. used to pad leading zeros to the output to a specific length. ```lua -local b, err = require("resty.openssl.bn").from_binary(ngx.decode_base64("WyU=")) +local to_hex = require "resty.string".to_hex +local b, err = require("resty.openssl.bn").from_binary("\x5b\x25") local bin, err = b:to_binary() -ngx.say(ngx.encode_base64(bin)) --- outputs "WyU=" +ngx.say(to_hex(bin)) +-- outputs "5b25 +``` + +[Back to TOC](#table-of-contents) + +### bn.from_mpi, bn:to_mpi + +**syntax**: *bn, err = bn.from_mpi(bin)* + +**syntax**: *bin, err = bn:to_mpi()* + +Creates a `bn` instance from MPI formatted binary string. + +Exports the BIGNUM value in MPI formatted binary string. + + +```lua +local to_hex = require "resty.string".to_hex +local b, err = require("resty.openssl.bn").from_mpi("\x00\x00\x00\x02\x5b\x25") +local bin, err = b:to_mpi() +ngx.say(to_hex(bin)) +-- outputs "000000025b25 ``` [Back to TOC](#table-of-contents) @@ -1561,6 +1741,20 @@ Returns `true` if table is an instance of `cipher`. Returns `false` otherwise. [Back to TOC](#table-of-contents) +### cipher.set_buffer_size + +**syntax**: *ok = cipher.set_buffer_size(sz)* + +Resize the internal buffer size used by all cipher instance. The default buffer size is 1024 bytes. + +If you are expecting to pass input text larger than 1024 bytes at one time to `update()`, `encrypt()` +or `decrypt()`, setting the buffer to larger than the expected input size will improve performance +by let more code to be JIT-able. + +Avoid call this function at hotpath, as this re-allocate the buffer every time it's called. + +[Back to TOC](#table-of-contents) + ### cipher:get_provider_name **syntax**: *name = cipher:get_provider_name()* @@ -1918,10 +2112,13 @@ Module to interact with message authentication code (EVP_MAC). **syntax**: *h, err = mac.new(key, mac, cipher?, digest?, properties?)* -Creates a mac instance. `mac` is a case-insensitive string of digest algorithm name. +Creates a mac instance. `mac` is a case-insensitive string of MAC algorithm name. To view a list of digest algorithms implemented, use [openssl.list_mac_algorithms](#openssllist_mac_algorithms) or `openssl list -mac-algorithms`. + +At least one of `cipher` or `digest` must be specified. + `cipher` is a case-insensitive string of digest algorithm name. To view a list of digest algorithms implemented, use [openssl.list_cipher_algorithms](#openssllist_cipher_algorithms) or @@ -1988,6 +2185,16 @@ ngx.say(ngx.encode_base64(mac)) [Back to TOC](#table-of-contents) +### mac:reset + +**syntax**: *ok, err = mac:reset()* + +Reset the internal state of `mac` instance as it's just created by [mac.new](#macnew). +It calls [EVP_MAC_Init](https://www.openssl.org/docs/manmaster/man3/EVP_MAC_init.html) under +the hood. + +User must call this before reusing the same `mac` instance. + ## resty.openssl.kdf Module to interact with KDF (key derivation function). diff --git a/examples/perf/framework.lua b/examples/perf/framework.lua index eb22a2841..51bbf92af 100644 --- a/examples/perf/framework.lua +++ b/examples/perf/framework.lua @@ -64,20 +64,58 @@ local function stat(t) return v, v/#t, max end -local function test(desc, r, iter) - print("RUNNING " .. ITER .. " ITERATIONS FOR " .. desc) - local data = table.new(ITER, 0) - for i=1, ITER do - get_duration() - local ok, err = r() - data[i] = get_duration() - assert(ok, err) +local write_seperator = function() + print(string.rep("-", 64)) +end + +local no_count_iter = false + +local run_only = os.getenv("RUN_ONLY") + +local function test(desc, r, iter, expected) + if run_only and not string.match(desc, run_only) then + print("SKIP " .. desc) + return end - local sum, avg, max = stat(data) + print("RUNNING " .. ITER .. " ITERATIONS FOR " .. desc) + local sum, avg, max + local ok, err - print(string.format("FINISHED in\t%s (%d op/s)\nAVG\t%s\tMAX\t%s", hmt(sum), 1e9/avg, hmt(avg), hmt(max))) + if no_count_iter then + get_duration() + for i=1, ITER do + ok, err = r() + end + local duration = get_duration() + assert(ok, err) + sum, avg, max = duration, duration/ITER, 1/0 + else + local data = table.new(ITER, 0) + for i=1, ITER do + get_duration() + ok, err = r() + data[i] = get_duration() + assert(ok, err) + end + + sum, avg, max = stat(data) + end + + local bytes = string.match(desc, "(%d+) bytes") + if bytes then + bytes = tonumber(bytes) + bytes = bytes / 1000 * (1e9/avg) + else + bytes = 1/0 + end + print(string.format("FINISHED in\t%s (%d op/s, %.2fk bytes/s)\nAVG\t%s\tMAX\t%s", hmt(sum), 1e9/avg, bytes, hmt(avg), hmt(max))) print(string.rep("-", 64)) + + if expected ~= nil then + assert(expected == ok, "expected " .. expected .. "(" .. (#expected or 0) .. " bytes)" .. + ", but got " .. ok .. "(" .. (#ok or 0) .. " bytes)") + end end local function set_iteration(i) @@ -85,9 +123,14 @@ local function set_iteration(i) end print("LOADING TEST FROM " .. arg[0]) -print(string.rep("=", 64)) + +write_seperator() return { test = test, set_iteration = set_iteration, + write_seperator = write_seperator, + set_no_count_iter = function(s) + no_count_iter = s + end, } diff --git a/examples/perf/test_cipher.lua b/examples/perf/test_cipher.lua index fc2245665..2f167caa4 100644 --- a/examples/perf/test_cipher.lua +++ b/examples/perf/test_cipher.lua @@ -3,6 +3,7 @@ package.path = path .. "/?.lua;" .. package.path local test = require "framework".test local set_iteration = require "framework".set_iteration +local write_seperator = require "framework".write_seperator local cipher = require "resty.openssl.cipher" local version = require("resty.openssl.version") @@ -46,4 +47,6 @@ for _, t in ipairs({"aes-256-cbc", "aes-256-gcm", "chacha20-poly1305"}) do end ::continue:: end + + write_seperator() end diff --git a/examples/perf/test_other_libs.lua b/examples/perf/test_other_libs.lua new file mode 100644 index 000000000..e20c4c3f5 --- /dev/null +++ b/examples/perf/test_other_libs.lua @@ -0,0 +1,433 @@ +local path = debug.getinfo(1, "S").source:sub(2):match("(.*/)") +package.path = path .. "/?.lua;" .. package.path + +local test = require "framework".test +local set_iteration = require "framework".set_iteration +local write_seperator = require "framework".write_seperator +local cipher = require "resty.openssl.cipher" +local digest = require "resty.openssl.digest" +local hmac = require "resty.openssl.hmac" +local pkey = require "resty.openssl.pkey" +local version = require "resty.openssl.version" +local rand = require "resty.openssl.rand" +local kdf = require "resty.openssl.kdf" +local aes = require "resty.aes" +local resty_rsa = require "resty.rsa" +local to_hex = require "resty.string".to_hex + +-- ensure best performance +require "framework".set_no_count_iter(true) + +local luaossl +do + local pok, perr, err = pcall(require, "_openssl") + if pok then + luaossl = perr + end +end + +local lua_openssl +do + -- move openssl.so to lua-openssl.so to avoid conflict with luaossl + local pok, perr, err = pcall(require, "lua-openssl") + if pok then + lua_openssl = perr + end +end + +local lua_pack +do + local pok, perr, err = pcall(require, "lua_pack") + if pok then + lua_pack = perr + end +end + +local v = require "jit.dump" +v.on(nil, "/tmp/a.out") + +------------- bn +do + set_iteration(1000000) + + local binary_input = rand.bytes(24) + local bn = require "resty.openssl.bn" + local hex_input = assert(bn.from_binary(binary_input)):to_hex() + + test("lua-resty-openssl bn unpack parse binary", function() + return bn.new(hex_input, 16) + end) + + local bni = bn.new() + test("lua-resty-openssl bn unpack parse binary reused struct", function() + return bni:set(hex_input, 16) + end) + + if luaossl then + local luaossl_bn = require "_openssl.bignum" + local hex_input = "0X" .. hex_input + + test("luaossl bn unpack parse binary", function() + return luaossl_bn.new(hex_input) + end) + end + + if lua_openssl then + local hex_input = "X" .. hex_input + test("lua-openssl bn unpack parse binary", function() + return lua_openssl.bn.number(hex_input) + end) + end + + if lua_pack then + test("lua_pack bn unpack 6 int", function() + return lua_pack.unpack(binary_input, ">6I") + end) + end +end + +------------- cipher +do + write_seperator() + + local key = rand.bytes(32) + local iv = rand.bytes(16) + local data = string.rep("1", 4096) + + set_iteration(100000) + + for _, t in ipairs({"aes-256-cbc", "aes-256-gcm"}) do + for _, op in ipairs({"encrypt", "decrypt"}) do + + local c = assert(cipher.new(t)) + cipher.set_buffer_size(#data + 64) -- add room for decrypt + + local _iv = iv + if t == "aes-256-gcm" then + _iv = string.rep("0", 12) + end + + local aes_default + if t == "aes-256-cbc" then + aes_default = aes:new(key, nil, aes.cipher(256, "cbc"), {iv = _iv}) + else + aes_default = aes:new(key, nil, aes.cipher(256, "gcm"), {iv = _iv}) + end + + local luaossl_aes + if luaossl then + local luaossl_cipher = require "_openssl.cipher" + luaossl_aes = luaossl_cipher.new(t) + end + + local ciphertext = assert(c:encrypt(key, _iv, data, false)) + + if op == "encrypt" then + -- assert(c:init(key, _iv, {is_encrypt = true })) + -- assert(c:encrypt(key, _iv, data, false)) + test("lua-resty-openssl encrypt with " .. t .. " on " .. #data .. " bytes", function() + return c:encrypt(key, _iv, data, false) + -- return c:final(data) + end, nil, ciphertext) + + test("lua-resty-strings encrypt with " .. t .. " on " .. #data .. " bytes", function() + local r = aes_default:encrypt(data) + if t == "aes-256-gcm" then + return r[1] + end + return r + end, nil, ciphertext) + + if luaossl then + test("luaossl encrypt with " .. t .. " on " .. #data .. " bytes", function() + return luaossl_aes:encrypt(key, _iv):final(data) + end, nil, ciphertext) + end + + if lua_openssl then + local evp_cipher = lua_openssl.cipher.get(t) + test("lua_openssl encrypt with " .. t .. " on " .. #data .. " bytes", function() + return evp_cipher:encrypt(data, key, _iv) + end, nil, ciphertext) + end + + + else + + local tag + if t == "aes-256-gcm" then + tag = assert(c:get_aead_tag()) + end + -- assert(c:init(key, _iv)) + test("lua-resty-openssl decrypt with " .. t .. " on " .. #ciphertext .. " bytes", function() + -- if tag then + -- c:set_aead_tag(tag) + --end + --return c:final(ciphertext) + return c:decrypt(key, _iv, ciphertext, false, nil, tag) + end, nil, data) + + + test("lua-resty-strings decrypt with " .. t .. " on " .. #ciphertext .. " bytes", function() + return aes_default:decrypt(ciphertext, tag) + end, nil, data) + + if luaossl then + --local luaossl_cipher = require "openssl.cipher" + --local luaossl_aes2 = luaossl_cipher.new(t) + + test("luaossl decrypt with " .. t .. " on " .. #ciphertext .. " bytes", function() + luaossl_aes:decrypt(key, _iv) + if t == "aes-256-gcm" then + luaossl_aes:setTag(tag) + end + return luaossl_aes:final(ciphertext) + end, nil, data) + end + + + if lua_openssl then + local evp = lua_openssl.cipher.get(t) + + local d = evp:decrypt_new(key, _iv) + test("lua_openssl decrypt with " .. t .. " on " .. #ciphertext .. " bytes", function() + d:ctrl(lua_openssl.cipher.EVP_CTRL_GCM_SET_IVLEN, #_iv) + d:init(key, _iv) + d:padding(false) + + local r = d:update(ciphertext) + if t == "aes-256-gcm" then + assert(d:ctrl(lua_openssl.cipher.EVP_CTRL_GCM_SET_TAG, tag)) + end + return r .. d:final() + end) -- has extra padding: , nil, data) + end + end + ::continue:: + end + + write_seperator() + end +end + +------------- digest +do + write_seperator() + + local data = string.rep("1", 4096) + + for _, t in ipairs({"sha256", "md5"}) do + + local d = digest.new(t) + + local expected = d:final(data) + + test("lua-resty-openssl " .. t .. " on " .. #data .. " bytes", function() + d:reset() + return d:final(data) + end, nil, expected) + + local h = require ("resty." .. t) + local hh = h:new() + + test("lua-resty-strings " .. t .. " on " .. #data .. " bytes", function() + hh:reset() + hh:update(data) + return hh:final() + end, nil, expected) + + if luaossl then + local _digest = require "_openssl.digest" + test("luaossl " .. t .. " on " .. #data .. " bytes", function() + local hh = _digest.new(t) + return hh:final(data) + end, nil, expected) + end + + if lua_openssl then + local hh = lua_openssl.digest.get(t) + test("lua_openssl " .. t .. " on " .. #data .. " bytes", function() + return hh:digest(data) + end, nil, expected) + end + + if t == "md5" then + test("ngx.md5_bin on " .. #data .. " bytes", function() + return ngx.md5_bin(data) + end, nil, expected) + end + end + +end + +------------- hmac +do + write_seperator() + + local data = string.rep("1", 4096) + local key = rand.bytes(32) + + local d = hmac.new(key, "sha256") + + local expected = d:final(data) + + test("lua-resty-openssl hmac sha256 on " .. #data .. " bytes", function() + d:reset() + return d:final(data) + end, nil, expected) + + if version.OPENSSL_3X then + local mac = require "resty.openssl.mac" + local m = mac.new(key, "HMAC", nil, "sha256") + test("lua-resty-openssl hmac sha256 new API on " .. #data .. " bytes", function() + m:reset() + return m:final(data) + end, nil, expected) + end + + if luaossl then + local _hmac = require "_openssl.hmac" + test("luaossl hmac sha256 " .. #data .. " bytes", function() + local hh = _hmac.new(key, "sha256") + return hh:final(data) + end, nil, expected) + end + + if lua_openssl then + local hh = lua_openssl.hmac + test("lua_openssl hmac sha256 on " .. #data .. " bytes", function() + return hh.hmac("sha256", data, key) + end, nil, to_hex(expected)) + + if version.OPENSSL_3X then + local mm = lua_openssl.mac + test("lua_openssl hmac sha256 new API on " .. #data .. " bytes", function() + return mm.mac("sha256", data, key) + end, nil, to_hex(expected)) + end + end +end + +------------- pkey +do + write_seperator() + + local key = pkey.new({ type = "RSA", bits = 4096 }) + local data = string.rep("1", 200) + local rsa_encrypted = assert(key:encrypt(data, pkey.PADDINGS.RSA_PKCS1_PADDING)) + + set_iteration(1000) + + for _, op in ipairs({"encrypt", "decrypt"}) do + local _data = data + if op == "decrypt" then + _data = rsa_encrypted + end + + local f = key[op] + test("lua-resty-openssl RSA " .. op .. " on " .. #data .. " bytes", function() + return f(key, _data) + end) + + if not version.OPENSSL_3X then + local pub = resty_rsa:new({ public_key = key:to_PEM("public"), padding = resty_rsa.PADDING.RSA_PKCS1_PADDING }) + local priv = resty_rsa:new({ private_key = key:to_PEM("private"), padding = resty_rsa.PADDING.RSA_PKCS1_PADDING }) + + local _key = pub + if op == "decrypt" then + _key = priv + end + + local f = _key[op] + test("lua-resty-rsa RSA " .. op .." on " .. #data .. " bytes", function() + return f(_key, _data) + end) + end + + if luaossl then + local _key = require "_openssl.pkey".new(key:to_PEM("private")) + local f = _key[op] + test("luaossl RSA " .. op .." on " .. #data .. " bytes", function() + return f(_key, _data) + end) + end + + + if lua_openssl then + local _key = lua_openssl.pkey.read(key:to_PEM("private"), true) + local f = _key[op] + test("lua_openssl RSA " .. op .." on " .. #data .. " bytes", function() + return f(_key, _data) + end) + end + end + +end + +------------- kdf +do + write_seperator() + + local kdf_out_size = 64 + local kdf_pass = "1234567" + local kdf_md = "md5" + local kdf_salt = rand.bytes(16) + + set_iteration(500) + + local kdf_opts = { + type = kdf.PBKDF2, + outlen = kdf_out_size, + pass = kdf_pass, + md = kdf_md, + salt = kdf_salt, + pbkdf2_iter = 1000, + } + local expected = assert(kdf.derive(kdf_opts)) + + test("lua-resty-openssl kdf pbkdf2 outputs " .. kdf_out_size .. " bytes", function() + return kdf.derive(kdf_opts) + end) + + if version.OPENSSL_3X then + local kdfi = kdf.new("pbkdf2") + kdf_opts = { + pass = kdf_pass, + iter = 1000, + digest = kdf_md, + salt = kdf_salt, + } + test("lua-resty-openssl kdf new API pbkdf2 outputs " .. kdf_out_size .. " bytes", function() + return kdfi:derive(kdf_out_size, kdf_opts) + end, nil, expected) + end + + if luaossl then + local _kdf = require "_openssl.kdf" + local kdf_opts = { + type = "PBKDF2", + outlen = kdf_out_size, + pass = kdf_pass, + md = kdf_md, + salt = kdf_salt, + iter = 1000, + } + test("luaossl kdf pbkf2 outputs " .. kdf_out_size .. " bytes", function() + return _kdf.derive(kdf_opts) + end, nil, expected) + end + + + if lua_openssl and version.OPENSSL_3X then + local _kdf = lua_openssl.kdf.fetch('PBKDF2') + local kdf_opts = { + { name = "pass", data = kdf_pass }, + { name = "iter", data = 1000 }, + { name = "digest", data = kdf_md }, + { name = "salt", data = kdf_salt }, + } + test("lua_openssl kdf pbkf2 outputs " .. kdf_out_size .. " bytes", function() + return _kdf:derive(kdf_opts, kdf_out_size) + end, nil, expected) + end +end diff --git a/examples/perf/test_pkey_asymm.lua b/examples/perf/test_pkey_asymm.lua index c153e7c4f..e4e405451 100644 --- a/examples/perf/test_pkey_asymm.lua +++ b/examples/perf/test_pkey_asymm.lua @@ -3,6 +3,7 @@ package.path = path .. "/?.lua;" .. package.path local test = require "framework".test local set_iteration = require "framework".set_iteration +local write_seperator = require "framework".write_seperator local pkey = require "resty.openssl.pkey" local version = require("resty.openssl.version") local data = string.rep("=", 200) @@ -26,6 +27,7 @@ for _, op in ipairs({"encrypt", "decrypt"}) do end end +write_seperator() for _, t in ipairs({"RSA", "EC", "Ed25519", "Ed448"}) do for _, op in ipairs({"sign", "verify"}) do @@ -61,4 +63,6 @@ for _, t in ipairs({"RSA", "EC", "Ed25519", "Ed448"}) do end ::continue:: end + + write_seperator() end diff --git a/examples/perf/test_pkey_codec.lua b/examples/perf/test_pkey_codec.lua index 973b8bb59..15f57f32d 100644 --- a/examples/perf/test_pkey_codec.lua +++ b/examples/perf/test_pkey_codec.lua @@ -2,11 +2,12 @@ local path = debug.getinfo(1, "S").source:sub(2):match("(.*/)") package.path = path .. "/?.lua;" .. package.path local test = require "framework".test +local write_seperator = require "framework".write_seperator local pkey = require "resty.openssl.pkey" local example_pkey = assert(pkey.new()) -for _, op in ipairs({"load", "export"}) do - for _, t in ipairs({"PEM", "DER", "JWK"}) do +for _, t in ipairs({"PEM", "DER", "JWK"}) do + for _, op in ipairs({"load", "export"}) do for _, p in ipairs({"public", "private"}) do if op == "load" then @@ -30,4 +31,6 @@ for _, op in ipairs({"load", "export"}) do end end + + write_seperator() end diff --git a/examples/perf/test_x509_codec.lua b/examples/perf/test_x509_codec.lua index abc74df52..2d5b5a591 100644 --- a/examples/perf/test_x509_codec.lua +++ b/examples/perf/test_x509_codec.lua @@ -2,12 +2,13 @@ local path = debug.getinfo(1, "S").source:sub(2):match("(.*/)") package.path = path .. "/?.lua;" .. package.path local test = require "framework".test +local write_seperator = require "framework".write_seperator local x509 = require "resty.openssl.x509" local cert = assert(io.open(path .. "../../t/fixtures/Github.pem")):read("*a") local example_x509 = assert(x509.new(cert)) -for _, op in ipairs({"load", "export"}) do - for _, t in ipairs({"PEM", "DER"}) do +for _, t in ipairs({"PEM", "DER"}) do + for _, op in ipairs({"load", "export"}) do if op == "load" then local txt = assert(example_x509:tostring(t)) test("load " .. t .. " x509", function() @@ -20,4 +21,6 @@ for _, op in ipairs({"load", "export"}) do end) end end + + write_seperator() end diff --git a/lib/resty/openssl.lua b/lib/resty/openssl.lua index 7bd9dcb55..fba8ae6b1 100644 --- a/lib/resty/openssl.lua +++ b/lib/resty/openssl.lua @@ -24,31 +24,9 @@ try_require_modules() local _M = { - _VERSION = '1.0.2', + _VERSION = '1.2.0', } -local libcrypto_name -local lib_patterns = { - "%s", "%s.so.3", "%s.so.1.1", "%s.so.1.0" -} - -function _M.load_library() - for _, pattern in ipairs(lib_patterns) do - -- true: load to global namespae - local pok, _ = pcall(ffi.load, string.format(pattern, "crypto"), true) - if pok then - libcrypto_name = string.format(pattern, "crypto") - ffi.load(string.format(pattern, "ssl"), true) - - try_require_modules() - - return libcrypto_name - end - end - - return false, "unable to load crypto library" -end - function _M.load_modules() _M.bn = require("resty.openssl.bn") _M.cipher = require("resty.openssl.cipher") @@ -348,7 +326,7 @@ local function list_legacy(typ, get_nid_cf) return ret end -local function list_provided(typ) +local function list_provided(typ, hide_provider) local typ_lower = string.lower(typ:sub(5)) -- cut off EVP_ local typ_ptr = typ .. "*" require ("resty.openssl.include.evp." .. typ_lower) @@ -360,9 +338,13 @@ local function list_provided(typ) function(elem, _) elem = ffi_cast(typ_ptr, elem) local name = ffi_str(C[typ .. "_get0_name"](elem)) - -- alternate names are ignored, retrieve use TYPE_names_do_all - local prov = ffi_str(C.OSSL_PROVIDER_get0_name(C[typ .. "_get0_provider"](elem))) - table.insert(ret, name .. " @ " .. prov) + if hide_provider then + table.insert(ret, name) + else + -- alternate names are ignored, retrieve use TYPE_names_do_all + local prov = ffi_str(C.OSSL_PROVIDER_get0_name(C[typ .. "_get0_provider"](elem))) + table.insert(ret, name .. " @ " .. prov) + end end) C[typ .. "_do_all_provided"](ctx_lib.get_libctx(), fn, nil) @@ -372,50 +354,40 @@ local function list_provided(typ) return ret end -function _M.list_cipher_algorithms() +function _M.list_cipher_algorithms(hide_provider) require "resty.openssl.include.evp.cipher" - local ret = list_legacy("EVP_CIPHER", - OPENSSL_3X and C.EVP_CIPHER_get_nid or C.EVP_CIPHER_nid) if OPENSSL_3X then - local ret_provided = list_provided("EVP_CIPHER") - for _, r in ipairs(ret_provided) do - table.insert(ret, r) - end + return list_provided("EVP_CIPHER", hide_provider) + else + return list_legacy("EVP_CIPHER", C.EVP_CIPHER_nid) end - - return ret end -function _M.list_digest_algorithms() +function _M.list_digest_algorithms(hide_provider) require "resty.openssl.include.evp.md" - local ret = list_legacy("EVP_MD", - OPENSSL_3X and C.EVP_MD_get_type or C.EVP_MD_type) if OPENSSL_3X then - local ret_provided = list_provided("EVP_MD") - for _, r in ipairs(ret_provided) do - table.insert(ret, r) - end + return list_provided("EVP_MD", hide_provider) + else + return list_legacy("EVP_MD", C.EVP_MD_type) end - - return ret end -function _M.list_mac_algorithms() +function _M.list_mac_algorithms(hide_provider) if not OPENSSL_3X then return nil, "openssl.list_mac_algorithms is only supported from OpenSSL 3.0" end - return list_provided("EVP_MAC") + return list_provided("EVP_MAC", hide_provider) end -function _M.list_kdf_algorithms() +function _M.list_kdf_algorithms(hide_provider) if not OPENSSL_3X then return nil, "openssl.list_kdf_algorithms is only supported from OpenSSL 3.0" end - return list_provided("EVP_KDF") + return list_provided("EVP_KDF", hide_provider) end local valid_ssl_protocols = { diff --git a/lib/resty/openssl/auxiliary/compat.lua b/lib/resty/openssl/auxiliary/compat.lua new file mode 100644 index 000000000..10dd36df4 --- /dev/null +++ b/lib/resty/openssl/auxiliary/compat.lua @@ -0,0 +1,84 @@ +local nkeys + +do + local pok, perr = pcall(require, "table.nkeys") + if pok then + nkeys = perr + else + nkeys = function(tbl) + local cnt = 0 + for _ in pairs(tbl) do + cnt = cnt + 1 + end + return cnt + end + end +end + +local noop = function() end + +local log_warn, log_debug +local encode_base64url, decode_base64url + +if ngx then + log_warn = function(...) + ngx.log(ngx.WARN, ...) + end + + log_debug = function(...) + ngx.log(ngx.DEBUG, ...) + end + + local b64 = require("ngx.base64") + encode_base64url = b64.encode_base64url + decode_base64url = b64.decode_base64url + +else + log_warn = noop + log_debug = noop + + local pok, basexx = pcall(require, "basexx") + if pok then + encode_base64url = basexx.to_url64 + decode_base64url = basexx.from_url64 + else + encode_base64url = function() + error("no base64 library is found, needs either ngx.base64 or basexx") + end + decode_base64url = encode_base64url + end + +end + +local json +do + local pok, perr = pcall(require, "cjson.safe") + if pok then + json = perr + else + local pok, perr = pcall(require, "dkjson") + if pok then + json = perr + end + end + + if not json then + json = setmetatable({}, { + __index = function() + return function() + error("no JSON library is found, needs either cjson or dkjson") + end + end, + }) + end +end + + +return { + nkeys = nkeys, + log_warn = log_warn, + log_debug = log_debug, + encode_base64url = encode_base64url, + decode_base64url = decode_base64url, + json = json, +} \ No newline at end of file diff --git a/lib/resty/openssl/auxiliary/jwk.lua b/lib/resty/openssl/auxiliary/jwk.lua index 3738e99e0..8d81ebff3 100644 --- a/lib/resty/openssl/auxiliary/jwk.lua +++ b/lib/resty/openssl/auxiliary/jwk.lua @@ -2,8 +2,6 @@ local ffi = require "ffi" local C = ffi.C -local cjson = require("cjson.safe") -local b64 = require("ngx.base64") local evp_macro = require "resty.openssl.include.evp" local rsa_lib = require "resty.openssl.rsa" @@ -11,6 +9,9 @@ local ec_lib = require "resty.openssl.ec" local ecx_lib = require "resty.openssl.ecx" local bn_lib = require "resty.openssl.bn" local digest_lib = require "resty.openssl.digest" +local encode_base64url = require "resty.openssl.auxiliary.compat".encode_base64url +local decode_base64url = require "resty.openssl.auxiliary.compat".decode_base64url +local json = require "resty.openssl.auxiliary.compat".json local _M = {} @@ -27,7 +28,7 @@ local function load_jwk_rsa(tbl) for i, k in ipairs(rsa_jwk_params) do local v = tbl[k] if v then - v = b64.decode_base64url(v) + v = decode_base64url(v) if not v then return nil, "cannot decode parameter \"" .. k .. "\" from base64 " .. tbl[k] end @@ -86,7 +87,7 @@ local function load_jwk_ec(tbl) for _, k in ipairs(ec_jwk_params) do local v = tbl[k] if v then - v = b64.decode_base64url(v) + v = decode_base64url(v) if not v then return nil, "cannot decode parameter \"" .. k .. "\" from base64 " .. tbl[k] end @@ -122,9 +123,9 @@ end local function load_jwk_okp(key_type, tbl) local params = {} if tbl["d"] then - params.private = b64.decode_base64url(tbl["d"]) + params.private = decode_base64url(tbl["d"]) elseif tbl["x"] then - params.public = b64.decode_base64url(tbl["x"]) + params.public = decode_base64url(tbl["x"]) else return nil, "at least \"x\" or \"d\" parameter is required" end @@ -141,7 +142,7 @@ for k, v in pairs(evp_macro.ecx_curves) do end function _M.load_jwk(txt) - local tbl, err = cjson.decode(txt) + local tbl, err = json.decode(txt) if err then return nil, "error decoding JSON from JWK: " .. err elseif type(tbl) ~= "table" then @@ -220,7 +221,7 @@ function _M.dump_jwk(pkey, is_priv) } for i, p in ipairs(param_keys) do local v = params[rsa_openssl_params[i]]:to_binary() - jwk[p] = b64.encode_base64url(v) + jwk[p] = encode_base64url(v) end elseif pkey.key_type == evp_macro.EVP_PKEY_EC then local params, err = pkey:get_parameters() @@ -230,11 +231,11 @@ function _M.dump_jwk(pkey, is_priv) jwk = { kty = "EC", crv = ec_curves_reverse[params.group], - x = b64.encode_base64url(params.x:to_binary()), - y = b64.encode_base64url(params.y:to_binary()), + x = encode_base64url(params.x:to_binary()), + y = encode_base64url(params.y:to_binary()), } if is_priv then - jwk.d = b64.encode_base64url(params.private:to_binary()) + jwk.d = encode_base64url(params.private:to_binary()) end elseif ecx_curves_reverse[pkey.key_type] then local params, err = pkey:get_parameters() @@ -244,8 +245,8 @@ function _M.dump_jwk(pkey, is_priv) jwk = { kty = "OKP", crv = ecx_curves_reverse[pkey.key_type], - d = b64.encode_base64url(params.private), - x = b64.encode_base64url(params.public), + d = encode_base64url(params.private), + x = encode_base64url(params.public), } else return nil, "jwk.dump_jwk: not implemented for this key type" @@ -257,9 +258,9 @@ function _M.dump_jwk(pkey, is_priv) if err then return nil, "jwk.dump_jwk: failed to calculate digest for key" end - jwk.kid = b64.encode_base64url(d) + jwk.kid = encode_base64url(d) - return cjson.encode(jwk) + return json.encode(jwk) end return _M diff --git a/lib/resty/openssl/bn.lua b/lib/resty/openssl/bn.lua index 3c4fce440..4c66f1ae0 100644 --- a/lib/resty/openssl/bn.lua +++ b/lib/resty/openssl/bn.lua @@ -9,7 +9,6 @@ require "resty.openssl.include.bn" local crypto_macro = require("resty.openssl.include.crypto") local ctypes = require "resty.openssl.auxiliary.ctypes" local format_error = require("resty.openssl.err").format_error -local OPENSSL_3X = require("resty.openssl.version").OPENSSL_3X local _M = {} local mt = {__index = _M} @@ -17,16 +16,73 @@ local mt = {__index = _M} local bn_ptr_ct = ffi.typeof('BIGNUM*') local bn_ptrptr_ct = ffi.typeof('BIGNUM*[1]') -function _M.new(bn) +local function set_binary(ctx, s) + local ctx = C.BN_bin2bn(s, #s, ctx) + if ctx == nil then + return nil, format_error("set_binary") + end + return ctx +end + +local function set_mpi(ctx, s) + local ctx = C.BN_mpi2bn(s, #s, ctx) + if ctx == nil then + return nil, format_error("set_mpi") + end + return ctx +end + +local function set_hex(ctx, s) + local p = ffi_new(bn_ptrptr_ct) + p[0] = ctx + + if C.BN_hex2bn(p, s) == 0 then + return nil, format_error("set_hex") + end + return p[0] +end + +local function set_dec(ctx, s) + local p = ffi_new(bn_ptrptr_ct) + p[0] = ctx + + if C.BN_dec2bn(p, s) == 0 then + return nil, format_error("set_dec") + end + return p[0] +end + +local function set_bn(ctx, s, base) + if type(s) == 'number' then + if C.BN_set_word(ctx, s) ~= 1 then + return nil, format_error("set_bn") + end + elseif type(s) == 'string' then + if not base or base == 10 then + return set_dec(ctx, s) + elseif base == 16 then + return set_hex(ctx, s) + elseif base == 2 then + return set_binary(ctx, s) + elseif base == 0 then + ctx = set_mpi(ctx, s) + else + return nil, "set_bn: unsupported base: " .. base + end + elseif s then + return nil, "set_bn: expect nil, a number or a string at #1" + end + + return ctx +end + +function _M.new(some, base) local ctx = C.BN_new() ffi_gc(ctx, C.BN_free) - if type(bn) == 'number' then - if C.BN_set_word(ctx, bn) ~= 1 then - return nil, format_error("bn.new") - end - elseif bn then - return nil, "bn.new: expect nil or a number at #1" + local ctx, err = set_bn(ctx, some, base) + if err then + return nil, "bn.new: " .. err end return setmetatable( { ctx = ctx }, mt), nil @@ -50,6 +106,19 @@ function _M.dup(ctx) return self end +function _M:set(some, base) + if not some then + return nil, "expect a number or a string at #1" + end + + local _, err = set_bn(self.ctx, some, base) + if err then + return nil, "bn:set: " .. err + end + + return self +end + function _M:to_binary(pad) if pad then if type(pad) ~= "number" then @@ -80,17 +149,22 @@ function _M:to_binary(pad) return ffi_str(buf, sz) end -function _M.from_binary(s) - if type(s) ~= "string" then - return nil, "bn.from_binary: expect a string at #1" +function _M:to_mpi(no_header) + local length = C.BN_bn2mpi(self.ctx, nil) + if length <= 0 then + return nil, format_error("bn:to_mpi") end - local ctx = C.BN_bin2bn(s, #s, nil) - if ctx == nil then - return nil, format_error("bn.from_binary") + local buf = ctypes.uchar_array(length) + + local sz = C.BN_bn2mpi(self.ctx, buf) + if sz <= 0 then + return nil, format_error("bn:to_mpi") end - ffi_gc(ctx, C.BN_free) - return setmetatable( { ctx = ctx }, mt), nil + + local ret = ffi_str(buf, sz) + + return no_header and ret:sub(4) or ret end function _M:to_hex() @@ -103,21 +177,6 @@ function _M:to_hex() return s end -function _M.from_hex(s) - if type(s) ~= "string" then - return nil, "bn.from_hex: expect a string at #1" - end - - local p = ffi_new(bn_ptrptr_ct) - - if C.BN_hex2bn(p, s) == 0 then - return nil, format_error("bn.from_hex") - end - local ctx = p[0] - ffi_gc(ctx, C.BN_free) - return setmetatable( { ctx = ctx }, mt), nil -end - function _M:to_dec() local buf = C.BN_bn2dec(self.ctx) if buf == nil then @@ -129,26 +188,35 @@ function _M:to_dec() end mt.__tostring = _M.to_dec -function _M.from_dec(s) - if type(s) ~= "string" then - return nil, "bn.from_dec: expect a string at #1" - end - - local p = ffi_new(bn_ptrptr_ct) - - if C.BN_dec2bn(p, s) == 0 then - return nil, format_error("bn.from_dec") - end - local ctx = p[0] - ffi_gc(ctx, C.BN_free) - return setmetatable( { ctx = ctx }, mt), nil -end - function _M:to_number() return tonumber(C.BN_get_word(self.ctx)) end _M.tonumber = _M.to_number +local from_funcs = { + binary = set_binary, + mpi = set_mpi, + hex = set_hex, + dec = set_dec, +} + +for typ, func in pairs(from_funcs) do + local sig = "from_" .. typ + _M[sig] = function(s) + if type(s) ~= "string" then + return nil, "bn." .. sig .. ": expect a string at #1" + end + + local ctx, err = func(nil, s) + if not ctx then + return nil, "bn." .. sig .. ": " .. err + end + + ffi_gc(ctx, C.BN_free) + return setmetatable( { ctx = ctx }, mt), nil + end +end + function _M.generate_prime(bits, safe) local ctx = C.BN_new() ffi_gc(ctx, C.BN_free) @@ -373,12 +441,7 @@ function _M:is_prime(nchecks) end -- if nchecks is not defined, set to BN_prime_checks: -- select number of iterations based on the size of the number - local code - if OPENSSL_3X then - code = C.BN_check_prime(self.ctx, bn_ctx_tmp, nil) - else - code = C.BN_is_prime_ex(self.ctx, nchecks or 0, bn_ctx_tmp, nil) - end + local code = C.BN_is_prime_ex(self.ctx, nchecks or 0, bn_ctx_tmp, nil) if code == -1 then return nil, format_error("bn.is_prime") end diff --git a/lib/resty/openssl/cipher.lua b/lib/resty/openssl/cipher.lua index f247ed9a6..8e7e60741 100644 --- a/lib/resty/openssl/cipher.lua +++ b/lib/resty/openssl/cipher.lua @@ -10,11 +10,11 @@ local ctypes = require "resty.openssl.auxiliary.ctypes" local ctx_lib = require "resty.openssl.ctx" local format_error = require("resty.openssl.err").format_error local OPENSSL_3X = require("resty.openssl.version").OPENSSL_3X +local log_warn = require "resty.openssl.auxiliary.compat".log_warn local uchar_array = ctypes.uchar_array local void_ptr = ctypes.void_ptr local ptr_of_int = ctypes.ptr_of_int -local uchar_ptr = ctypes.uchar_ptr local _M = {} local mt = {__index = _M} @@ -23,7 +23,8 @@ local cipher_ctx_ptr_ct = ffi.typeof('EVP_CIPHER_CTX*') local out_length = ptr_of_int() -- EVP_MAX_BLOCK_LENGTH is 32, we give it a 64 to be future proof -local out_buffer = ctypes.uchar_array(1024 + 64) +local out_buffer_size = 1024 +local out_buffer = ctypes.uchar_array(out_buffer_size + 64) function _M.new(typ, properties) if not typ then @@ -69,6 +70,15 @@ function _M.istype(l) return l and l.ctx and ffi.istype(cipher_ctx_ptr_ct, l.ctx) end +function _M.set_buffer_size(sz) + if out_buffer_size ~= sz then + out_buffer_size = sz + out_buffer = ctypes.uchar_array(sz + 64) + end + + return true +end + function _M:get_provider_name() if not OPENSSL_3X then return false, "cipher:get_provider_name is not supported" @@ -195,49 +205,54 @@ function _M:set_aead_tag(tag) return true end +local update_buffer = {} function _M:update(...) if not self.initialized then return nil, "cipher:update: cipher not initalized, call cipher:init first" end - local ret = {} + table.clear(update_buffer) + local _out_buffer = out_buffer for i, s in ipairs({...}) do local inl = #s - if inl > 1024 then - s = ffi_cast(uchar_ptr, s) - for i=0, inl-1, 1024 do - local chunk_size = 1024 - if inl - i < 1024 then - chunk_size = inl - i - end - if C.EVP_CipherUpdate(self.ctx, out_buffer, out_length, s+i, chunk_size) ~= 1 then - return nil, format_error("cipher:update") - end - table.insert(ret, ffi_str(out_buffer, out_length[0])) - end - else - if C.EVP_CipherUpdate(self.ctx, out_buffer, out_length, s, inl) ~= 1 then - return nil, format_error("cipher:update") - end - table.insert(ret, ffi_str(out_buffer, out_length[0])) + if inl > out_buffer_size and _out_buffer == out_buffer then + -- create a larger buffer than the default one + _out_buffer = ctypes.uchar_array(inl + 64) end + if C.EVP_CipherUpdate(self.ctx, _out_buffer, out_length, s, inl) ~= 1 then + return nil, format_error("cipher:update") + end + table.insert(update_buffer, ffi_str(_out_buffer, out_length[0])) end - return table.concat(ret, "") + return table.concat(update_buffer, "") end function _M:final(s) - local ret, err - if s then - ret, err = self:update(s) - if err then - return nil, err - end + if not self.initialized then + return nil, "cipher:update: cipher not initalized, call cipher:init first" end - if C.EVP_CipherFinal_ex(self.ctx, out_buffer, out_length) ~= 1 then + + out_length[0] = 0 + local offset = 0 -- advance the offset if we have update buffer + local _out_buffer = out_buffer + if s then + local inl = #s + if inl > out_buffer_size then + -- create a larger buffer than the default one + _out_buffer = ctypes.uchar_array(inl + 64) + end + + if C.EVP_CipherUpdate(self.ctx, _out_buffer, out_length, s, inl) ~= 1 then + return nil, format_error("cipher:final") + end + offset = out_length[0] + end + + if C.EVP_CipherFinal_ex(self.ctx, _out_buffer + offset, out_length) ~= 1 then return nil, format_error("cipher:final: EVP_CipherFinal_ex") end - local final_ret = ffi_str(out_buffer, out_length[0]) - return ret and (ret .. final_ret) or final_ret + + return ffi_str(_out_buffer, out_length[0] + offset) end @@ -257,10 +272,10 @@ function _M:derive(key, salt, count, md, md_properties) if salt then if #salt > 8 then - ngx.log(ngx.WARN, "cipher:derive: salt is too long, truncate salt to 8 bytes") + log_warn("cipher:derive: salt is too long, truncate salt to 8 bytes") salt = salt:sub(0, 8) elseif #salt < 8 then - ngx.log(ngx.WARN, "cipher:derive: salt is too short, padding with zero bytes to length") + log_warn("cipher:derive: salt is too short, padding with zero bytes to length") salt = salt .. string.rep('\000', 8 - #salt) end end diff --git a/lib/resty/openssl/ctx.lua b/lib/resty/openssl/ctx.lua index eaec39627..2659d2bf5 100644 --- a/lib/resty/openssl/ctx.lua +++ b/lib/resty/openssl/ctx.lua @@ -26,7 +26,7 @@ local function new(request_context_only, conf_file) return false, format_error("ctx.new") end - if request_context_only then + if request_context_only and ngx then ngx.ctx.ossl_lib_ctx = ctx else ossl_lib_ctx = ctx @@ -40,7 +40,7 @@ local function free(request_context_only) return false, "ctx is only supported from OpenSSL 3.0" end - if request_context_only then + if request_context_only and ngx then ngx.ctx.ossl_lib_ctx = nil else ossl_lib_ctx = nil diff --git a/lib/resty/openssl/err.lua b/lib/resty/openssl/err.lua index a047a7c01..61dad9b6d 100644 --- a/lib/resty/openssl/err.lua +++ b/lib/resty/openssl/err.lua @@ -5,27 +5,70 @@ local ffi_sizeof = ffi.sizeof local ctypes = require "resty.openssl.auxiliary.ctypes" require "resty.openssl.include.err" +local OPENSSL_3X = require("resty.openssl.version").OPENSSL_3X local constchar_ptrptr = ffi.typeof("const char*[1]") -local buf = ffi.new('char[256]') +local last_err_code = 0 + +local function get_last_error_code() + local code = C.ERR_peek_last_error() + last_err_code = code == 0 and last_err_code or code + + return last_err_code +end + +local function get_lib_error_string(code) + code = code or get_last_error_code() + + local msg = C.ERR_lib_error_string(code) + if msg == nil then + return "unknown library" + end + + return ffi_str(msg) +end + +local function get_reason_error_string(code) + code = code or get_last_error_code() + + local msg = C.ERR_reason_error_string(code) + if msg == nil then + return "" + end + + return ffi_str(msg) +end local function format_error(ctx, code, all_errors) local errors = {} if code then table.insert(errors, string.format("code: %d", code or 0)) end + + local line = ctypes.ptr_of_int() + local path = constchar_ptrptr() + local func = constchar_ptrptr() + -- get the OpenSSL errors while C.ERR_peek_error() ~= 0 do - local line = ctypes.ptr_of_int() - local path = constchar_ptrptr() local code if all_errors then - code = C.ERR_get_error_line(path, line) + if OPENSSL_3X then + code = C.ERR_get_error_all(path, line, func, nil, nil) + else + code = C.ERR_get_error_line(path, line) + end else - code = C.ERR_peek_last_error_line(path, line) + if OPENSSL_3X then + code = C.ERR_peek_last_error_all(path, line, func, nil, nil) + else + code = C.ERR_peek_last_error_line(path, line) + end end + last_err_code = code + local abs_path = ffi_str(path[0]) -- ../crypto/asn1/a_d2i_fp.c => crypto/asn1/a_d2i_fp.c local start = abs_path:find("/") @@ -33,10 +76,23 @@ local function format_error(ctx, code, all_errors) abs_path = abs_path:sub(start+1) end - C.ERR_error_string_n(code, buf, ffi_sizeof(buf)) - table.insert(errors, string.format("%s:%d:%s", - abs_path, line[0], ffi_str(buf)) - ) + local err_line + + if OPENSSL_3X then + local reason_msg = get_reason_error_string(code) + local lib_msg = get_lib_error_string(code) + -- error:04800065:PEM routines:PEM_do_header:bad decrypt:crypto/pem/pem_lib.c:467: + err_line = string.format("error:%X:%s:%s:%s:%s:%d:", + code, lib_msg, ffi_str(func[0]), reason_msg, abs_path, line[0]) + else + local buf = ffi.new('char[256]') + + C.ERR_error_string_n(code, buf, ffi_sizeof(buf)) + err_line = string.format("%s:%d:%s", + abs_path, line[0], ffi_str(buf)) + end + + table.insert(errors, err_line) if not all_errors then break @@ -59,4 +115,7 @@ end return { format_error = format_error, format_all_error = format_all_error, -} \ No newline at end of file + get_last_error_code = get_last_error_code, + get_lib_error_string = get_lib_error_string, + get_reason_error_string = get_reason_error_string, +} diff --git a/lib/resty/openssl/include/bn.lua b/lib/resty/openssl/include/bn.lua index ac6dee76c..7c83aad64 100644 --- a/lib/resty/openssl/include/bn.lua +++ b/lib/resty/openssl/include/bn.lua @@ -1,7 +1,6 @@ local ffi = require "ffi" require "resty.openssl.include.ossl_typ" -local OPENSSL_3X = require("resty.openssl.version").OPENSSL_3X local BN_ULONG if ffi.abi('64bit') then @@ -33,6 +32,9 @@ ffi.cdef( char *BN_bn2hex(const BIGNUM *a); char *BN_bn2dec(const BIGNUM *a); + int BN_bn2mpi(const BIGNUM *a, unsigned char *to); + BIGNUM *BN_mpi2bn(const unsigned char *s, int len, BIGNUM *ret); + void BN_set_negative(BIGNUM *a, int n); int BN_is_negative(const BIGNUM *a); @@ -60,7 +62,6 @@ ffi.cdef( int BN_cmp(BIGNUM *a, BIGNUM *b); int BN_ucmp(BIGNUM *a, BIGNUM *b); - // openssl >= 1.1 only int BN_is_zero(BIGNUM *a); int BN_is_one(BIGNUM *a); int BN_is_word(BIGNUM *a, ]] .. BN_ULONG ..[[ w); @@ -70,10 +71,4 @@ ffi.cdef( int BN_generate_prime_ex(BIGNUM *ret,int bits,int safe, const BIGNUM *add, const BIGNUM *rem, BN_GENCB *cb); ]] -) - -if OPENSSL_3X then - ffi.cdef [[ - int BN_check_prime(const BIGNUM *p, BN_CTX *ctx, BN_GENCB *cb); - ]] -end \ No newline at end of file +) \ No newline at end of file diff --git a/lib/resty/openssl/include/err.lua b/lib/resty/openssl/include/err.lua index 142098c5f..592329607 100644 --- a/lib/resty/openssl/include/err.lua +++ b/lib/resty/openssl/include/err.lua @@ -1,9 +1,30 @@ local ffi = require "ffi" +require "resty.openssl.include.ossl_typ" +local OPENSSL_3X = require("resty.openssl.version").OPENSSL_3X + ffi.cdef [[ unsigned long ERR_peek_error(void); - unsigned long ERR_peek_last_error_line(const char **file, int *line); - unsigned long ERR_get_error_line(const char **file, int *line); + unsigned long ERR_peek_last_error(void); void ERR_clear_error(void); void ERR_error_string_n(unsigned long e, char *buf, size_t len); + const char *ERR_lib_error_string(unsigned long e); + const char *ERR_reason_error_string(unsigned long e); ]] + +if OPENSSL_3X then + ffi.cdef [[ + unsigned long ERR_get_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); + unsigned long ERR_peek_last_error_all(const char **file, int *line, + const char **func, + const char **data, int *flags); + ]] + +else + ffi.cdef [[ + unsigned long ERR_get_error_line(const char **file, int *line); + unsigned long ERR_peek_last_error_line(const char **file, int *line); + ]] +end \ No newline at end of file diff --git a/lib/resty/openssl/include/evp.lua b/lib/resty/openssl/include/evp.lua index 48c6ad771..3ae1db277 100644 --- a/lib/resty/openssl/include/evp.lua +++ b/lib/resty/openssl/include/evp.lua @@ -44,15 +44,24 @@ local _M = { EVP_PKEY_X448 = C.OBJ_txt2nid("X448"), EVP_PKEY_ED448 = C.OBJ_txt2nid("ED448"), - EVP_PKEY_OP_PARAMGEN = bit.lshift(1, 1), - EVP_PKEY_OP_KEYGEN = bit.lshift(1, 2), - EVP_PKEY_OP_SIGN = bit.lshift(1, 3), - EVP_PKEY_OP_VERIFY = bit.lshift(1, 4), - EVP_PKEY_OP_DERIVE = OPENSSL_3X and bit.lshift(1, 12) or bit.lshift(1, 10), + EVP_CTRL_AEAD_SET_IVLEN = 0x9, + EVP_CTRL_AEAD_GET_TAG = 0x10, + EVP_CTRL_AEAD_SET_TAG = 0x11, + + -- remove EVP_PKEY_OP_* and EVP_PKEY_CTRL_* after openssl 1.1.1 support is dropped + EVP_PKEY_OP_PARAMGEN = not OPENSSL_3X and bit.lshift(1, 1) or nil, + EVP_PKEY_OP_KEYGEN = not OPENSSL_3X and bit.lshift(1, 2) or nil, + EVP_PKEY_OP_SIGN = not OPENSSL_3X and bit.lshift(1, 3) or nil, + EVP_PKEY_OP_VERIFY = not OPENSSL_3X and bit.lshift(1, 4) or nil, + EVP_PKEY_OP_VERIFYRECOVER = not OPENSSL_3X and bit.lshift(1, 5) or nil, + EVP_PKEY_OP_SIGNCTX = not OPENSSL_3X and bit.lshift(1, 6) or nil, + EVP_PKEY_OP_VERIFYCTX = not OPENSSL_3X and bit.lshift(1, 7) or nil, + EVP_PKEY_OP_ENCRYPT = not OPENSSL_3X and bit.lshift(1, 8) or nil, + EVP_PKEY_OP_DECRYPT = not OPENSSL_3X and bit.lshift(1, 9) or nil, + EVP_PKEY_OP_DERIVE = not OPENSSL_3X and bit.lshift(1, 10) or nil, EVP_PKEY_ALG_CTRL = EVP_PKEY_ALG_CTRL, - EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN = EVP_PKEY_ALG_CTRL + 1, EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID = EVP_PKEY_ALG_CTRL + 1, EVP_PKEY_CTRL_EC_PARAM_ENC = EVP_PKEY_ALG_CTRL + 2, @@ -60,10 +69,8 @@ local _M = { EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP = EVP_PKEY_ALG_CTRL + 4, EVP_PKEY_CTRL_RSA_PADDING = EVP_PKEY_ALG_CTRL + 1, EVP_PKEY_CTRL_RSA_PSS_SALTLEN = EVP_PKEY_ALG_CTRL + 2, - - EVP_CTRL_AEAD_SET_IVLEN = 0x9, - EVP_CTRL_AEAD_GET_TAG = 0x10, - EVP_CTRL_AEAD_SET_TAG = 0x11, + EVP_PKEY_CTRL_RSA_MGF1_MD = EVP_PKEY_ALG_CTRL + 5, + EVP_PKEY_CTRL_RSA_OAEP_MD = EVP_PKEY_ALG_CTRL + 9, EVP_PKEY_CTRL_TLS_MD = EVP_PKEY_ALG_CTRL, EVP_PKEY_CTRL_TLS_SECRET = EVP_PKEY_ALG_CTRL + 1, @@ -81,6 +88,12 @@ local _M = { EVP_PKEY_CTRL_SCRYPT_MAXMEM_BYTES = EVP_PKEY_ALG_CTRL + 13, } +if not OPENSSL_3X then + _M.EVP_PKEY_OP_CRYPT = _M.EVP_PKEY_OP_ENCRYPT + _M.EVP_PKEY_OP_DECRYPT + _M.EVP_PKEY_OP_SIG = _M.EVP_PKEY_OP_SIGN + _M.EVP_PKEY_OP_VERIFY + _M.EVP_PKEY_OP_VERIFYRECOVER + + _M.EVP_PKEY_OP_SIGNCTX + _M.EVP_PKEY_OP_VERIFYCTX +end + -- clean up error occurs during OBJ_txt2* C.ERR_clear_error() diff --git a/lib/resty/openssl/include/evp/pkey.lua b/lib/resty/openssl/include/evp/pkey.lua index 40184b06b..8bdd809ee 100644 --- a/lib/resty/openssl/include/evp/pkey.lua +++ b/lib/resty/openssl/include/evp/pkey.lua @@ -81,6 +81,9 @@ ffi.cdef [[ int EVP_PKEY_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); int EVP_PKEY_paramgen_init(EVP_PKEY_CTX *ctx); int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey); + + int EVP_PKEY_CTX_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, + const char *value); ]] local _M = {} @@ -102,6 +105,10 @@ if OPENSSL_3X then int EVP_PKEY_CTX_set_rsa_padding(EVP_PKEY_CTX *ctx, int pad); int EVP_PKEY_CTX_set_rsa_pss_saltlen(EVP_PKEY_CTX *ctx, int len); + int EVP_PKEY_CTX_set_rsa_mgf1_md_name(EVP_PKEY_CTX *ctx, const char *mdname, + const char *mdprops); + int EVP_PKEY_CTX_set_rsa_oaep_md_name(EVP_PKEY_CTX *ctx, const char *mdname, + const char *mdprops); int EVP_PKEY_CTX_set_dh_paramgen_prime_len(EVP_PKEY_CTX *ctx, int pbits); @@ -121,6 +128,10 @@ if OPENSSL_3X then return C.EVP_PKEY_CTX_set_ec_param_enc(pctx, param_enc) end + _M.EVP_PKEY_CTX_set_dh_paramgen_prime_len = function(pctx, pbits) + return C.EVP_PKEY_CTX_set_dh_paramgen_prime_len(pctx, pbits) + end + _M.EVP_PKEY_CTX_set_rsa_keygen_bits = function(pctx, mbits) return C.EVP_PKEY_CTX_set_rsa_keygen_bits(pctx, mbits) end @@ -134,8 +145,11 @@ if OPENSSL_3X then _M.EVP_PKEY_CTX_set_rsa_pss_saltlen = function(pctx, len) return C.EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, len) end - _M.EVP_PKEY_CTX_set_dh_paramgen_prime_len = function(pctx, pbits) - return C.EVP_PKEY_CTX_set_dh_paramgen_prime_len(pctx, pbits) + _M.EVP_PKEY_CTX_set_rsa_mgf1_md_name = function(pctx, name ,props) + return C.EVP_PKEY_CTX_set_rsa_mgf1_md_name(pctx, name, props) + end + _M.EVP_PKEY_CTX_set_rsa_oaep_md_name = function(pctx, name, props) + return C.EVP_PKEY_CTX_set_rsa_oaep_md_name(pctx, name, props) end else @@ -154,6 +168,13 @@ else param_enc, nil) end + _M.EVP_PKEY_CTX_set_dh_paramgen_prime_len = function(pctx, pbits) + return C.EVP_PKEY_CTX_ctrl(pctx, + evp.EVP_PKEY_DH, evp.EVP_PKEY_OP_PARAMGEN, + evp.EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, + pbits, nil) + end + _M.EVP_PKEY_CTX_set_rsa_keygen_bits = function(pctx, mbits) return C.EVP_PKEY_CTX_ctrl(pctx, evp.EVP_PKEY_RSA, @@ -183,11 +204,27 @@ else len, nil) end - _M.EVP_PKEY_CTX_set_dh_paramgen_prime_len = function(pctx, pbits) + _M.EVP_PKEY_CTX_set_rsa_mgf1_md_name = function(pctx, name, _) + local md = C.EVP_get_digestbyname(name) + if not md then + return -1, "unknown digest: " .. name + end return C.EVP_PKEY_CTX_ctrl(pctx, - evp.EVP_PKEY_DH, evp.EVP_PKEY_OP_PARAMGEN, - evp.EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, - pbits, nil) + evp.EVP_PKEY_RSA, + evp.EVP_PKEY_OP_SIG + evp.EVP_PKEY_OP_TYPE_CRYPT, + evp.EVP_PKEY_CTRL_RSA_MGF1_MD, + 0, ffi.cast("void *", md)) + end + _M.EVP_PKEY_CTX_set_rsa_oaep_md_name = function(pctx, name, _) + local md = C.EVP_get_digestbyname(name) + if not md then + return -1, "unknown digest: " .. name + end + return C.EVP_PKEY_CTX_ctrl(pctx, + evp.EVP_PKEY_RSA, + evp.EVP_PKEY_OP_CRYPT, + evp.EVP_PKEY_CTRL_RSA_OAEP_MD, + 0, ffi.cast("void *", md)) end end diff --git a/lib/resty/openssl/kdf.lua b/lib/resty/openssl/kdf.lua index d7555151c..c6b3ac4d1 100644 --- a/lib/resty/openssl/kdf.lua +++ b/lib/resty/openssl/kdf.lua @@ -13,6 +13,8 @@ local format_error = require("resty.openssl.err").format_error local version_text = require("resty.openssl.version").version_text local OPENSSL_3X = require("resty.openssl.version").OPENSSL_3X local ctypes = require "resty.openssl.auxiliary.ctypes" +local nkeys = require "resty.openssl.auxiliary.compat".nkeys +local log_warn = require "resty.openssl.auxiliary.compat".log_warn --[[ https://wiki.openssl.org/index.php/EVP_Key_Derivation @@ -251,7 +253,7 @@ function _M.derive(options) local md_size = OPENSSL_3X and C.EVP_MD_get_size(md) or C.EVP_MD_size(md) if options.outlen ~= md_size then options.outlen = md_size - ngx.log(ngx.WARN, "hkdf_mode EXTRACT_ONLY outputs fixed length of ", md_size, + log_warn("hkdf_mode EXTRACT_ONLY outputs fixed length of ", md_size, " key, ignoring options.outlen") end outlen[0] = md_size @@ -311,6 +313,7 @@ function _M.new(typ, properties) algo = algo, buf = buf, buf_size = buf_size, + schema = nil, }, mt), nil end @@ -344,14 +347,16 @@ function _M:derive(outlen, options, options_count) if options_count then options_count = options_count - 1 else - options_count = 0 - for k, v in pairs(options) do options_count = options_count + 1 end + options_count = nkeys(options) end local param, err if options_count > 0 then - local schema = self:settable_params(true) -- raw schema - param, err = param_lib.construct(options, nil, schema) + if not self.schema then + self.schema = self:settable_params(true) -- raw schema + end + + param, err = param_lib.construct(options, nil, self.schema) if err then return nil, "kdf:derive: " .. err end diff --git a/lib/resty/openssl/mac.lua b/lib/resty/openssl/mac.lua index accfbc476..7712399f3 100644 --- a/lib/resty/openssl/mac.lua +++ b/lib/resty/openssl/mac.lua @@ -41,7 +41,8 @@ function _M.new(key, typ, cipher, digest, properties) params.cipher = cipher local p = param_lib.construct(params, 2, param_types) - local code = C.EVP_MAC_init(ctx, key, #key, p) + local keyl = #key + local code = C.EVP_MAC_init(ctx, key, keyl, p) if code ~= 1 then return nil, format_error(string.format("mac.new: invalid cipher or digest type")) end @@ -53,6 +54,7 @@ function _M.new(key, typ, cipher, digest, properties) algo = algo, buf = ctypes.uchar_array(md_size), buf_size = md_size, + _reset = function() return C.EVP_MAC_init(ctx, key, keyl, p) end, }, mt), nil end @@ -73,7 +75,7 @@ _M.settable_params, _M.set_params, _M.gettable_params, _M.get_param = param_lib. function _M:update(...) for _, s in ipairs({...}) do if C.EVP_MAC_update(self.ctx, s, #s) ~= 1 then - return false, format_error("digest:update") + return false, format_error("mac:update") end end return true, nil @@ -81,17 +83,25 @@ end function _M:final(s) if s then - local _, err = self:update(s) - if err then - return nil, err + if C.EVP_MAC_update(self.ctx, s, #s) ~= 1 then + return false, format_error("mac:final") end end local length = ctypes.ptr_of_size_t() if C.EVP_MAC_final(self.ctx, self.buf, length, self.buf_size) ~= 1 then - return nil, format_error("digest:final: EVP_MAC_final") + return nil, format_error("mac:final: EVP_MAC_final") end return ffi_str(self.buf, length[0]) end +function _M:reset() + local code = self._reset() + if code ~= 1 then + return false, format_error("mac:reset") + end + + return true +end + return _M diff --git a/lib/resty/openssl/param.lua b/lib/resty/openssl/param.lua index 2c8dcea65..add0fa0eb 100644 --- a/lib/resty/openssl/param.lua +++ b/lib/resty/openssl/param.lua @@ -8,6 +8,7 @@ require "resty.openssl.include.param" local format_error = require("resty.openssl.err").format_error local bn_lib = require("resty.openssl.bn") local null = require("resty.openssl.auxiliary.ctypes").null +local nkeys = require "resty.openssl.auxiliary.compat".nkeys local OSSL_PARAM_INTEGER = 1 local OSSL_PARAM_UNSIGNED_INTEGER = 2 @@ -22,8 +23,7 @@ local buf_param_key = {} local function construct(buf_t, length, types_map, types_size) if not length then - length = 0 - for k, v in pairs(buf_t) do length = length + 1 end + length = nkeys(buf_t) end local params = ffi_new("OSSL_PARAM[?]", length + 1) diff --git a/lib/resty/openssl/pkey.lua b/lib/resty/openssl/pkey.lua index 8dba4dd52..5ad4a118f 100644 --- a/lib/resty/openssl/pkey.lua +++ b/lib/resty/openssl/pkey.lua @@ -26,6 +26,8 @@ local ctx_lib = require "resty.openssl.ctx" local ctypes = require "resty.openssl.auxiliary.ctypes" local ecdsa_util = require "resty.openssl.auxiliary.ecdsa" local format_error = require("resty.openssl.err").format_error +local log_warn = require "resty.openssl.auxiliary.compat".log_warn +local log_debug = require "resty.openssl.auxiliary.compat".log_debug local OPENSSL_3X = require("resty.openssl.version").OPENSSL_3X @@ -67,7 +69,7 @@ local function load_pem_der(txt, opts, funcs) return nil, "explictly load private or public key from JWK format is not supported" end - ngx.log(ngx.DEBUG, "load key using fmt: ", fmt, ", type: ", typ) + log_debug("load key using fmt: ", fmt, ", type: ", typ) local bio = C.BIO_new_mem_buf(txt, #txt) if bio == nil then @@ -89,7 +91,7 @@ local function load_pem_der(txt, opts, funcs) if fmt == "JWK" then return nil, err end - ngx.log(ngx.DEBUG, "jwk decode failed: ", err, ", continuing") + log_debug("jwk decode failed: ", err, ", continuing") end else -- #define BIO_CTRL_RESET 1 @@ -113,7 +115,7 @@ local function load_pem_der(txt, opts, funcs) local p = opts.passphrase_cb() local len = #p -- 1 byte for \0 if len > size then - ngx.log(ngx.WARN, "pkey:load_pem_der: passphrase truncated from ", len, " to ", size) + log_warn("pkey:load_pem_der: passphrase truncated from ", len, " to ", size) len = size end ffi_copy(buf, p, len) @@ -127,7 +129,7 @@ local function load_pem_der(txt, opts, funcs) end if ctx ~= nil then - ngx.log(ngx.DEBUG, "pkey:load_pem_der: loaded pkey using function ", f) + log_debug("pkey:load_pem_der: loaded pkey using function ", f) -- pkcs1 functions create a rsa rather than evp_pkey -- disable the checking in openssl 3.0 for sail safe @@ -160,6 +162,40 @@ local function load_pem_der(txt, opts, funcs) return ctx, nil end +local function _pctx_ctrl_str(pctx, opts) + if not opts then + return true + end + + if opts.mgf1_md and pkey_macro.EVP_PKEY_CTX_set_rsa_mgf1_md_name(pctx, opts.mgf1_md, nil) ~= 1 then + return nil, format_error("EVP_PKEY_CTX_set_rsa_mgf1_md_name") + end + + if opts.oaep_md and pkey_macro.EVP_PKEY_CTX_set_rsa_oaep_md_name(pctx, opts.oaep_md, nil) ~= 1 then + return nil, format_error("EVP_PKEY_CTX_set_rsa_oaep_md_name") + end + + if opts.pss_saltlen and pkey_macro.EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, opts.pss_saltlen) ~= 1 then + return nil, format_error("EVP_PKEY_CTX_set_rsa_pss_saltlen") + end + + + for _, c in ipairs(opts) do + if type(c) == "string" then + local k, v = string.match(c, "([_%w]+):([_%w]+)") + if not k or not v then + return nil, "unknown ctrl str: ".. c + end + + if C.EVP_PKEY_CTX_ctrl_str(pctx, k, v) ~= 1 then + return nil, format_error(string.format('EVP_PKEY_CTX_ctrl_str(%s, "%s", "%s")', pctx, k, v)) + end + end + end + return true +end + + local function generate_param(key_type, config) if key_type == evp_macro.EVP_PKEY_DH then local dh_group = config.group @@ -222,6 +258,11 @@ local function generate_param(key_type, config) end end + local ok, err = _pctx_ctrl_str(pctx, config) + if not ok then + return nil, "pkey:generate_param: " .. err + end + local ctx_ptr = ffi_new("EVP_PKEY*[1]") if C.EVP_PKEY_paramgen(pctx, ctx_ptr) ~= 1 then return nil, format_error("EVP_PKEY_paramgen") @@ -347,6 +388,12 @@ local function generate_key(config) end end end + + local ok, err = _pctx_ctrl_str(pctx, config) + if not ok then + return nil, "pkey:generate_key: " .. err + end + local ctx_ptr = ffi_new("EVP_PKEY*[1]") -- TODO: move to use EVP_PKEY_gen after drop support for <1.1.1 if C.EVP_PKEY_keygen(pctx, ctx_ptr) ~= 1 then @@ -500,7 +547,6 @@ function _M.new(s, opts) local self = setmetatable({ ctx = ctx, pkey_ctx = nil, - rsa_padding = nil, key_type = key_type, key_type_is_ecx = key_type_is_ecx, buf = ctypes.uchar_array(buf_size), @@ -613,7 +659,11 @@ local ASYMMETRIC_OP_DECRYPT = 0x2 local ASYMMETRIC_OP_SIGN_RAW = 0x4 local ASYMMETRIC_OP_VERIFY_RECOVER = 0x8 -local function asymmetric_routine(self, s, op, padding) +local function asymmetric_routine(self, s, op, padding, opts) + if type(s) ~= "string" then + return nil, "pkey:asymmetric_routine: expect a string at #1" + end + local pkey_ctx if self.key_type == evp_macro.EVP_PKEY_RSA then @@ -627,9 +677,8 @@ local function asymmetric_routine(self, s, op, padding) end end - if self.pkey_ctx ~= nil and - (self.key_type ~= evp_macro.EVP_PKEY_RSA or self.rsa_padding == padding) then - pkey_ctx = self.pkey_ctx + if self.pkey_ctx ~= nil and self.key_type ~= evp_macro.EVP_PKEY_RSA then + pkey_ctx = self.pkey_ctx else pkey_ctx = C.EVP_PKEY_CTX_new(self.ctx, nil) if pkey_ctx == nil then @@ -666,11 +715,14 @@ local function asymmetric_routine(self, s, op, padding) end -- EVP_PKEY_CTX_ctrl must be called after *_init - if self.key_type == evp_macro.EVP_PKEY_RSA and padding then - if pkey_macro.EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, padding) ~= 1 then - return nil, format_error("pkey:asymmetric_routine EVP_PKEY_CTX_set_rsa_padding") - end - self.rsa_padding = padding + if self.key_type == evp_macro.EVP_PKEY_RSA and padding and + pkey_macro.EVP_PKEY_CTX_set_rsa_padding(pkey_ctx, padding) ~= 1 then + return nil, format_error("pkey:asymmetric_routine EVP_PKEY_CTX_set_rsa_padding") + end + + local ok, err = _pctx_ctrl_str(pkey_ctx, opts) + if not ok then + return nil, "pkey:asymmetric_routine: " .. err end local length = ptr_of_size_t(self.buf_size) @@ -684,40 +736,30 @@ end _M.PADDINGS = rsa_macro.paddings -function _M:encrypt(s, padding) - return asymmetric_routine(self, s, ASYMMETRIC_OP_ENCRYPT, padding) +function _M:encrypt(s, padding, opts) + return asymmetric_routine(self, s, ASYMMETRIC_OP_ENCRYPT, padding, opts) end -function _M:decrypt(s, padding) - return asymmetric_routine(self, s, ASYMMETRIC_OP_DECRYPT, padding) +function _M:decrypt(s, padding, opts) + return asymmetric_routine(self, s, ASYMMETRIC_OP_DECRYPT, padding, opts) end -function _M:sign_raw(s, padding) +function _M:sign_raw(s, padding, opts) -- TODO: temporary hack before OpenSSL has proper check for existence of private key if self.key_type_is_ecx and not self:is_private() then return nil, "pkey:sign_raw: missing private key" end - return asymmetric_routine(self, s, ASYMMETRIC_OP_SIGN_RAW, padding) + return asymmetric_routine(self, s, ASYMMETRIC_OP_SIGN_RAW, padding, opts) end -function _M:verify_recover(s, padding) - return asymmetric_routine(self, s, ASYMMETRIC_OP_VERIFY_RECOVER, padding) +function _M:verify_recover(s, padding, opts) + return asymmetric_routine(self, s, ASYMMETRIC_OP_VERIFY_RECOVER, padding, opts) end local evp_pkey_ctx_ptr_ptr_ct = ffi.typeof('EVP_PKEY_CTX*[1]') local function sign_verify_prepare(self, fint, md_alg, padding, opts) - local pkey_ctx - - if self.key_type == evp_macro.EVP_PKEY_RSA and padding then - pkey_ctx = C.EVP_PKEY_CTX_new(self.ctx, nil) - if pkey_ctx == nil then - return nil, format_error("pkey:sign_verify_prepare EVP_PKEY_CTX_new()") - end - ffi_gc(pkey_ctx, C.EVP_PKEY_CTX_free) - end - local md_ctx = C.EVP_MD_CTX_new() if md_ctx == nil then return nil, "pkey:sign_verify_prepare: EVP_MD_CTX_new() failed" @@ -737,22 +779,19 @@ local function sign_verify_prepare(self, fint, md_alg, padding, opts) end local ppkey_ctx = evp_pkey_ctx_ptr_ptr_ct() - ppkey_ctx[0] = pkey_ctx if fint(md_ctx, ppkey_ctx, algo, nil, self.ctx) ~= 1 then return nil, format_error("pkey:sign_verify_prepare: Init failed") end - if self.key_type == evp_macro.EVP_PKEY_RSA then - if padding then - if pkey_macro.EVP_PKEY_CTX_set_rsa_padding(ppkey_ctx[0], padding) ~= 1 then - return nil, format_error("pkey:sign_verify_prepare EVP_PKEY_CTX_set_rsa_padding") - end - end - if opts and opts.pss_saltlen and padding ~= rsa_macro.paddings.RSA_PKCS1_PSS_PADDING then - if pkey_macro.EVP_PKEY_CTX_set_rsa_pss_saltlen(ppkey_ctx[0], opts.pss_saltlen) ~= 1 then - return nil, format_error("pkey:sign_verify_prepare EVP_PKEY_CTX_set_rsa_pss_saltlen") - end - end + -- EVP_PKEY_CTX_ctrl must be called after *_init + if self.key_type == evp_macro.EVP_PKEY_RSA and padding and + pkey_macro.EVP_PKEY_CTX_set_rsa_padding(ppkey_ctx[0], padding) ~= 1 then + return nil, format_error("pkey:sign_verify_prepare EVP_PKEY_CTX_set_rsa_padding") + end + + local ok, err = _pctx_ctrl_str(ppkey_ctx[0], opts) + if not ok then + return nil, "pkey:sign_verify_prepare: " .. err end return md_ctx diff --git a/lib/resty/openssl/version.lua b/lib/resty/openssl/version.lua index b13777d68..fa7d8d0d0 100644 --- a/lib/resty/openssl/version.lua +++ b/lib/resty/openssl/version.lua @@ -2,11 +2,30 @@ local ffi = require "ffi" local C = ffi.C local ffi_str = ffi.string +local log_debug = require "resty.openssl.auxiliary.compat".log_debug + +local libcrypto_name +local lib_patterns = { + "%s", "%s.so.3", "%s.so.1.1", "%s.so.1.0" +} + +local function load_library() + for _, pattern in ipairs(lib_patterns) do + -- true: load to global namespae + local pok, _ = pcall(ffi.load, string.format(pattern, "crypto"), true) + if pok then + libcrypto_name = string.format(pattern, "crypto") + ffi.load(string.format(pattern, "ssl"), true) + + log_debug("loaded crypto library: ", libcrypto_name) + return libcrypto_name + end + end + + return false, "unable to load crypto library" +end ffi.cdef[[ - // 1.0 - unsigned long SSLeay(void); - const char *SSLeay_version(int t); // >= 1.1 unsigned long OpenSSL_version_num(); const char *OpenSSL_version(int t); @@ -15,49 +34,38 @@ ffi.cdef[[ ]] local version_func, info_func -local types_table +local types_table = { + VERSION = 0, + CFLAGS = 1, + BUILT_ON = 2, + PLATFORM = 3, + DIR = 4, + ENGINES_DIR = 5, + VERSION_STRING = 6, + FULL_VERSION_STRING = 7, + MODULES_DIR = 8, + CPU_INFO = 9, +} --- >= 1.1 -local ok, version_num = pcall(function() +local get_version = function() local num = C.OpenSSL_version_num() version_func = C.OpenSSL_version - types_table = { - VERSION = 0, - CFLAGS = 1, - BUILT_ON = 2, - PLATFORM = 3, - DIR = 4, - ENGINES_DIR = 5, - VERSION_STRING = 6, - FULL_VERSION_STRING = 7, - MODULES_DIR = 8, - CPU_INFO = 9, - } return num -end) - - -if not ok then - -- 1.0.x - ok, version_num = pcall(function() - local num = C.SSLeay() - version_func = C.SSLeay_version - types_table = { - VERSION = 0, - CFLAGS = 2, - BUILT_ON = 3, - PLATFORM = 4, - DIR = 5, - } - return num - end) end +local ok, version_num = pcall(get_version) +if not ok then + ok, version_num = pcall(load_library) + if ok then + -- try again + ok, version_num = pcall(get_version) + end +end if not ok then error(string.format("OpenSSL has encountered an error: %s; is OpenSSL library loaded?", tostring(version_num))) -elseif type(version_num) == 'number' and version_num < 0x10000000 then +elseif type(version_num) == 'number' and version_num < 0x10101000 then error(string.format("OpenSSL version %s is not supported", tostring(version_num or 0))) elseif not version_num then error("Can not get OpenSSL version") diff --git a/lua-resty-openssl-1.0.2-1.rockspec b/lua-resty-openssl-1.2.0-1.rockspec similarity index 98% rename from lua-resty-openssl-1.0.2-1.rockspec rename to lua-resty-openssl-1.2.0-1.rockspec index 0413f006d..ade507dd7 100644 --- a/lua-resty-openssl-1.0.2-1.rockspec +++ b/lua-resty-openssl-1.2.0-1.rockspec @@ -1,8 +1,8 @@ package = "lua-resty-openssl" -version = "1.0.2-1" +version = "1.2.0-1" source = { url = "git+https://github.com/fffonion/lua-resty-openssl.git", - tag = "1.0.2" + tag = "1.2.0" } description = { detailed = "FFI-based OpenSSL binding for LuaJIT.", @@ -15,6 +15,7 @@ build = { ["resty.openssl"] = "lib/resty/openssl.lua", ["resty.openssl.asn1"] = "lib/resty/openssl/asn1.lua", ["resty.openssl.auxiliary.bio"] = "lib/resty/openssl/auxiliary/bio.lua", + ["resty.openssl.auxiliary.compat"] = "lib/resty/openssl/auxiliary/compat.lua", ["resty.openssl.auxiliary.ctypes"] = "lib/resty/openssl/auxiliary/ctypes.lua", ["resty.openssl.auxiliary.ecdsa"] = "lib/resty/openssl/auxiliary/ecdsa.lua", ["resty.openssl.auxiliary.jwk"] = "lib/resty/openssl/auxiliary/jwk.lua", diff --git a/scripts/templates/x509_tests.j2 b/scripts/templates/x509_tests.j2 index a108791b6..4517b58c4 100644 --- a/scripts/templates/x509_tests.j2 +++ b/scripts/templates/x509_tests.j2 @@ -1,7 +1,9 @@ -{%- set ns = namespace(idx=test_idx) %} -{%- for f in module.fields %} - {%- if f.type in tests.types and not f.skip_tests%} + + +{%+ set ns = namespace(idx=test_idx) -%} +{%- for f in module.fields -%} + {%- if f.type in tests.types and not f.skip_tests -%} === TEST {{ ns.idx }}: {{ modname }}:get_{{ f.field }} (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -24,9 +26,10 @@ "{{ f.sample_printable }}" --- no_error_log [error] - {%- set ns.idx = ns.idx + 1 %} -=== TEST {{ ns.idx }}: {{ modname }}:set_{{ f.field }} (AUTOGEN) + + +=== TEST {{ ns.idx + 1 }}: {{ modname }}:set_{{ f.field }} (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -61,11 +64,14 @@ "ok" --- no_error_log [error] - {%- set ns.idx = ns.idx + 1 %} - {%- endif %} - {%- if f.extension_nid and not f.skip_tests %} -=== TEST {{ ns.idx + 1 }}: {{ modname }}:get/set_{{ f.field }}_critical (AUTOGEN) + + +{%+ set nop=1 -%} + {%- set ns.idx = ns.idx + 2 -%} + {%- endif -%} + {%- if f.extension_nid and not f.skip_tests -%} +=== TEST {{ ns.idx }}: {{ modname }}:get/set_{{ f.field }}_critical (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -86,11 +92,14 @@ true --- no_error_log [error] - {%- set ns.idx = ns.idx + 1 %} - {%- endif %} -{%- endfor %} -=== TEST {{ ns.idx + 1 }}: {{ modname }}:get_get_signature_name (AUTOGEN) + + +{%+ set nop=1 -%} + {%- set ns.idx = ns.idx + 1 -%} + {%- endif -%} +{%- endfor -%} +=== TEST {{ ns.idx }}: {{ modname }}:get_signature_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { diff --git a/scripts/types_test.py b/scripts/types_test.py index 5d08fa6a1..642c527b5 100644 --- a/scripts/types_test.py +++ b/scripts/types_test.py @@ -3,7 +3,7 @@ tests = { { "bn": { "new_from": "new(math.random(1, 2333333))", - "print": "to_hex():upper", + "print": "to_hex", }, "number": { "new_from": "ngx.time()", diff --git a/t/fips.t b/t/fips.t index 673251c56..53eb55fc7 100644 --- a/t/fips.t +++ b/t/fips.t @@ -25,6 +25,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: FIPS mode can be turned on and off --- http_config eval: $::HttpConfig --- config @@ -51,6 +52,8 @@ false --- no_error_log [error] + + === TEST 2: CIPHER, MD and PKEY provider is directed to fips --- http_config eval: $::HttpConfig --- config @@ -77,6 +80,8 @@ fips --- no_error_log [error] + + === TEST 3: Non-FIPS compliant algorithms are not allowed --- http_config eval: $::HttpConfig --- config @@ -122,6 +127,8 @@ true --- no_error_log [error] + + === TEST 4: Get FIPS version text --- http_config eval: $::HttpConfig --- config diff --git a/t/openssl.t b/t/openssl.t index 978f61afd..e4e56057c 100644 --- a/t/openssl.t +++ b/t/openssl.t @@ -10,7 +10,7 @@ my $use_luacov = $ENV{'TEST_NGINX_USE_LUACOV'} // ''; my $fips = $ENV{'TEST_NGINX_FIPS'} // ''; our $HttpConfig = qq{ - lua_package_path "$pwd/lib/?.lua;$pwd/lib/?/init.lua;$pwd/../lua-resty-hmac/lib/?.lua;$pwd/../lua-resty-string/lib/?.lua;;"; + lua_package_path "$pwd/lib/?.lua;$pwd/lib/?/init.lua;$pwd/../lua-resty-string/lib/?.lua;;"; init_by_lua_block { if "1" == "$use_luacov" then require 'luacov.tick' @@ -24,6 +24,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Load ffi openssl library --- http_config eval: $::HttpConfig --- config @@ -42,6 +43,7 @@ __DATA__ [error] + === TEST 2: Luaossl compat pattern --- http_config eval: $::HttpConfig --- config @@ -64,13 +66,14 @@ false [error] + === TEST 3: List cipher algorithms --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { local openssl = require("resty.openssl") - ngx.say(require("cjson").encode(openssl.list_cipher_algorithms())) + ngx.say(require("cjson").encode(openssl.list_cipher_algorithms(true))) local version = require("resty.openssl.version") if not version.OPENSSL_3X then ngx.say("[\"AES-256-GCM @ default\"]") @@ -87,13 +90,15 @@ false --- no_error_log [error] + + === TEST 4: List digest algorithms --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { local openssl = require("resty.openssl") - ngx.say(require("cjson").encode(openssl.list_digest_algorithms())) + ngx.say(require("cjson").encode(openssl.list_digest_algorithms(true))) local version = require("resty.openssl.version") if not version.OPENSSL_3X then ngx.say("[\"SHA2-256 @ default\"]") @@ -110,6 +115,8 @@ false --- no_error_log [error] + + === TEST 5: List mac algorithms --- http_config eval: $::HttpConfig --- config @@ -131,6 +138,8 @@ false --- no_error_log [error] + + === TEST 6: List kdf algorithms --- http_config eval: $::HttpConfig --- config @@ -152,6 +161,8 @@ false --- no_error_log [error] + + === TEST 7: List SSL cipher --- http_config eval: $::HttpConfig --- config diff --git a/t/openssl/asn1.t b/t/openssl/asn1.t index d37b40a94..439d1aefe 100644 --- a/t/openssl/asn1.t +++ b/t/openssl/asn1.t @@ -21,6 +21,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: asn1_to_unix utctime --- http_config eval: $::HttpConfig --- config @@ -43,6 +44,8 @@ __DATA__ --- no_error_log [error] + + === TEST 2: asn1_to_unix utctime, offset --- http_config eval: $::HttpConfig --- config @@ -65,6 +68,8 @@ __DATA__ --- no_error_log [error] + + === TEST 3: asn1_to_unix generalized time --- http_config eval: $::HttpConfig --- config @@ -87,6 +92,8 @@ __DATA__ --- no_error_log [error] + + === TEST 4: asn1_to_unix generalized time, offset --- http_config eval: $::HttpConfig --- config @@ -109,6 +116,8 @@ __DATA__ --- no_error_log [error] + + === TEST 5: asn1_to_unix error on bad format --- http_config eval: $::HttpConfig --- config diff --git a/t/openssl/bn.t b/t/openssl/bn.t index 9a1dc369e..3467db852 100644 --- a/t/openssl/bn.t +++ b/t/openssl/bn.t @@ -9,33 +9,27 @@ my $pwd = cwd(); my $use_luacov = $ENV{'TEST_NGINX_USE_LUACOV'} // ''; our $HttpConfig = qq{ - lua_package_path "$pwd/lib/?.lua;$pwd/lib/?/init.lua;;"; + lua_package_path "$pwd/t/openssl/?.lua;$pwd/lib/?.lua;$pwd/lib/?/init.lua;$pwd/../lua-resty-string/lib/?.lua;;"; init_by_lua_block { if "1" == "$use_luacov" then require 'luacov.tick' jit.off() end + _G.myassert = require("helper").myassert } }; run_tests(); __DATA__ + === TEST 1: New BIGNUM instance correctly --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - local bn, err = require("resty.openssl.bn").new() - if err then - ngx.log(ngx.ERR, err) - return - end - local b, err = bn:to_binary() - if err then - ngx.log(ngx.ERR, err) - return - end + local bn = myassert(require("resty.openssl.bn").new()) + local b = myassert(bn:to_binary()) ngx.print(ngx.encode_base64(b)) } } @@ -46,21 +40,15 @@ __DATA__ --- error_log bn:to_binary failed + + === TEST 2: New BIGNUM instance from number --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - local bn, err = require("resty.openssl.bn").new(0x5b25) - if err then - ngx.log(ngx.ERR, err) - return - end - local b, err = bn:to_binary() - if err then - ngx.log(ngx.ERR, err) - return - end + local bn = myassert(require("resty.openssl.bn").new(0x5b25)) + local b = myassert(bn:to_binary()) ngx.print(ngx.encode_base64(b)) } } @@ -71,29 +59,50 @@ bn:to_binary failed --- no_error_log [error] -=== TEST 3: Duplicate the ctx + + +=== TEST 3: New BIGNUM instance from string +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local data = { + ["23333"] = 10, + ["5b25"] = 16, + ["5B25"] = 16, + ["\x5b\x25"] = 2, + ["\x00\x00\x00\x02\x5b\x25"] = 0, + } + for k, v in pairs(data) do + local bn = myassert(require("resty.openssl.bn").new(k, v)) + if bn:to_number() ~= 23333 then + ngx.log(ngx.ERR, bn, " != 23333: ", k, " ", v) + return + end + end + ngx.print("ok") + } + } +--- request + GET /t +--- response_body eval +"ok" +--- no_error_log +[error] + + + +=== TEST 4: Duplicate the ctx --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { require('ffi').cdef('typedef struct bignum_st BIGNUM; void BN_free(BIGNUM *a);') - local bn, err = require("resty.openssl.bn").new(0x5b25) - if err then - ngx.log(ngx.ERR, err) - return - end - local bn2, err = require("resty.openssl.bn").dup(bn.ctx) - if err then - ngx.log(ngx.ERR, err) - return - end + local bn = myassert(require("resty.openssl.bn").new(0x5b25)) + local bn2 = myassert(require("resty.openssl.bn").dup(bn.ctx)) bn = nil collectgarbage("collect") - local b, err = bn2:to_binary() - if err then - ngx.log(ngx.ERR, err) - return - end + local b = myassert(bn2:to_binary()) ngx.print(ngx.encode_base64(b)) } } @@ -104,29 +113,55 @@ bn:to_binary failed --- no_error_log [error] -=== TEST 4: from_binary, to_binary + + +=== TEST 5: set +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local data = { + ["23333"] = 10, + ["5b25"] = 16, + ["5B25"] = 16, + ["\x5b\x25"] = 2, + ["\x00\x00\x00\x02\x5b\x25"] = 0, + } + for k, v in pairs(data) do + local bn = myassert(require("resty.openssl.bn").new(0)) + local new_bn = myassert(bn:set(k, v)) + if bn:to_number() ~= 23333 then + ngx.log(ngx.ERR, bn, " != 23333: ", k, " ", v) + return + end + if tostring(bn.ctx) ~= tostring(new_bn.ctx) then + ngx.log(ngx.ERR, tostring(bn.ctx), " != ", tostring(new_bn.ctx), " (ctx not properly reused)") + return + end + end + ngx.print("ok") + } + } +--- request + GET /t +--- response_body eval +"ok" +--- no_error_log +[error] + + + +=== TEST 6: from_binary, to_binary --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { local d = ngx.decode_base64('WyU=') - local bn, err = require("resty.openssl.bn").from_binary(d) - if err then - ngx.log(ngx.ERR, err) - return - end - local b, err = bn:to_binary() - if err then - ngx.log(ngx.ERR, err) - return - end + local bn = myassert(require("resty.openssl.bn").from_binary(d)) + local b = myassert(bn:to_binary()) ngx.print(ngx.encode_base64(b)) - local b, err = bn:to_binary(10) - if err then - ngx.log(ngx.ERR, err) - return - end + local b = myassert(bn:to_binary(10)) ngx.print(ngx.encode_base64(b)) } } @@ -137,46 +172,34 @@ bn:to_binary failed --- no_error_log [error] -=== TEST 5: from_hex, to_hex + + +=== TEST 7: from_hex, to_hex --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - local bn, err = require("resty.openssl.bn").from_hex("5B25") - if err then - ngx.log(ngx.ERR, err) - return - end - local b, err = bn:to_hex() - if err then - ngx.log(ngx.ERR, err) - return - end + local bn = myassert(require("resty.openssl.bn").from_hex("5B25")) + local b = myassert(bn:to_hex()) ngx.print(b) } } --- request GET /t ---- response_body_like eval -"5[Bb]25" +--- response_body eval +"5B25" --- no_error_log [error] -=== TEST 6: from_dec, to_dec + + +=== TEST 8: from_dec, to_dec --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - local bn, err = require("resty.openssl.bn").from_dec("23333") - if err then - ngx.log(ngx.ERR, err) - return - end - local b, err = bn:to_dec() - if err then - ngx.log(ngx.ERR, err) - return - end + local bn = myassert(require("resty.openssl.bn").from_dec("23333")) + local b = myassert(bn:to_dec()) ngx.print(b) } } @@ -187,34 +210,40 @@ bn:to_binary failed --- no_error_log [error] -=== TEST 7: to_number + + +=== TEST 9: from_mpi, to_mpi +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local to_hex = require "resty.string".to_hex + local bn = myassert(require("resty.openssl.bn").from_mpi("\x00\x00\x00\x02\x5b\x25")) + local b = myassert(bn:to_mpi()) + ngx.print(to_hex(b)) + } + } +--- request + GET /t +--- response_body eval +"000000025b25" +--- no_error_log +[error] + + + +=== TEST 10: to_number --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { local bn = require("resty.openssl.bn") - local b, err = bn.new(23333) - if err then - ngx.log(ngx.ERR, err) - return - end - local n, err = b:to_number() - if err then - ngx.log(ngx.ERR, err) - return - end + local b = myassert(bn.new(23333)) + local n = myassert(b:to_number()) ngx.say(tostring(n),type(n)) - b, err = bn.from_dec('184467440737095516161844674407370955161618446744073709551616') - if err then - ngx.log(ngx.ERR, err) - return - end - local n, err = b:to_number() - if err then - ngx.log(ngx.ERR, err) - return - end + b = myassert(bn.from_dec('184467440737095516161844674407370955161618446744073709551616')) + local n = myassert(b:to_number()) ngx.say(tostring(n),type(n)) } @@ -228,27 +257,17 @@ bn:to_binary failed --- no_error_log [error] -=== TEST 8: unary minus + + +=== TEST 11: unary minus --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - local bn, err = require("resty.openssl.bn").new(23333) - if err then - ngx.log(ngx.ERR, err) - return - end - local b, err = (-bn):to_dec() - if err then - ngx.log(ngx.ERR, err) - return - end + local bn = myassert(require("resty.openssl.bn").new(23333)) + local b = myassert((-bn):to_dec()) ngx.say(b) - local b, err = (-(-bn)):to_dec() - if err then - ngx.log(ngx.ERR, err) - return - end + local b = myassert((-(-bn)):to_dec()) ngx.say(b) } } @@ -261,21 +280,15 @@ bn:to_binary failed --- no_error_log [error] -=== TEST 9: metamethods checks arg + + +=== TEST 12: metamethods checks arg --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - local a, err = require("resty.openssl.bn").new(23578164761333) - if err then - ngx.log(ngx.ERR, err) - return - end - local b, err = require("resty.openssl.bn").new(2478652) - if err then - ngx.log(ngx.ERR, err) - return - end + local a = myassert(require("resty.openssl.bn").new(23578164761333)) + local b = myassert(require("resty.openssl.bn").new(2478652)) local pok, perr = pcall(function() return a + "233" end) ngx.say(perr) local pok, perr = pcall(function() return "233" - a end) @@ -291,22 +304,16 @@ bn:to_binary failed --- no_error_log [error] -=== TEST 10: add, sub, mul, div mod + + +=== TEST 13: add, sub, mul, div mod --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { local bn = require("resty.openssl.bn") - local a, err = bn.new(23578164761333) - if err then - ngx.log(ngx.ERR, err) - return - end - local b, err = bn.new(2478652) - if err then - ngx.log(ngx.ERR, err) - return - end + local a = myassert(bn.new(23578164761333)) + local b = myassert(bn.new(2478652)) ngx.say(tostring(a+b)) ngx.say(tostring(a-b)) ngx.say(tostring(a*b)) @@ -336,22 +343,16 @@ bn:to_binary failed --- no_error_log [error] -=== TEST 11: sqr, exp + + +=== TEST 14: sqr, exp --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { local bn = require("resty.openssl.bn") - local a, err = bn.new(23578164761333) - if err then - ngx.log(ngx.ERR, err) - return - end - local b, err = bn.new(97) - if err then - ngx.log(ngx.ERR, err) - return - end + local a = myassert(bn.new(23578164761333)) + local b = myassert(bn.new(97)) ngx.say(tostring(a:sqr())) ngx.say(tostring(a:exp(2))) ngx.say(tostring(a:pow(2))) @@ -377,22 +378,16 @@ bn:to_binary failed --- no_error_log [error] -=== TEST 12: gcd + + +=== TEST 15: gcd --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { local bn = require("resty.openssl.bn") - local a, err = bn.new(23578164761333) - if err then - ngx.log(ngx.ERR, err) - return - end - local b, err = bn.new(97) - if err then - ngx.log(ngx.ERR, err) - return - end + local a = myassert(bn.new(23578164761333)) + local b = myassert(bn.new(97)) ngx.say(tostring(a:gcd(b))) ngx.say(tostring(bn.gcd(a, b))) ngx.say(tostring(bn.gcd(a, 97))) @@ -410,17 +405,15 @@ bn:to_binary failed --- no_error_log [error] -=== TEST 13: lshift, rshift + + +=== TEST 16: lshift, rshift --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { local bn = require("resty.openssl.bn") - local a, err = bn.new(23578164761333) - if err then - ngx.log(ngx.ERR, err) - return - end + local a = myassert(bn.new(23578164761333)) ngx.say(tostring(a:lshift(2))) ngx.say(tostring(a:rshift(2))) } @@ -434,22 +427,16 @@ bn:to_binary failed --- no_error_log [error] -=== TEST 14: comparasion + + +=== TEST 17: comparasion --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { local bn = require("resty.openssl.bn") - local a, err = bn.new(23578164761333) - if err then - ngx.log(ngx.ERR, err) - return - end - local b, err = bn.new(97) - if err then - ngx.log(ngx.ERR, err) - return - end + local a = myassert(bn.new(23578164761333)) + local b = myassert(bn.new(97)) ngx.say(tostring(a == b)) ngx.say(tostring(a ~= b)) ngx.say(tostring(a >= b)) @@ -485,7 +472,9 @@ true --- no_error_log [error] -=== TEST 15: is_one, is_zero, is_odd, is_word + + +=== TEST 18: is_one, is_zero, is_odd, is_word --- http_config eval: $::HttpConfig --- config location =/t { @@ -516,7 +505,9 @@ false --- no_error_log [error] -=== TEST 16: is_prime + + +=== TEST 19: is_prime --- http_config eval: $::HttpConfig --- config location =/t { @@ -539,27 +530,17 @@ true --- no_error_log [error] -=== TEST 17: mod_add, mod_sub, mod_mul, mul_exp, mul_sqr mod + + +=== TEST 20: mod_add, mod_sub, mod_mul, mul_exp, mul_sqr mod --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { local bn = require("resty.openssl.bn") - local a, err = bn.new(23578164761333) - if err then - ngx.log(ngx.ERR, err) - return - end - local b, err = bn.new(2478652) - if err then - ngx.log(ngx.ERR, err) - return - end - local m, err = bn.new(65537) - if err then - ngx.log(ngx.ERR, err) - return - end + local a = myassert(bn.new(23578164761333)) + local b = myassert(bn.new(2478652)) + local m = myassert(bn.new(65537)) ngx.say(tostring(a:mod_add(b, m))) ngx.say(tostring(a:mod_sub(b, m))) ngx.say(tostring(a:mod_mul(b, m))) @@ -583,26 +564,20 @@ true --- no_error_log [error] -=== TEST 18: generate_prime + + +=== TEST 21: generate_prime --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { local bn = require("resty.openssl.bn") - local a, err = bn.generate_prime(10, false) - if err then - ngx.log(ngx.ERR, err) - return - end + local a = myassert(bn.generate_prime(10, false)) if not a:is_prime() then ngx.log(ngx.ERR, "not prime") return end - local a, err = bn.generate_prime(10, true) - if err then - ngx.log(ngx.ERR, err) - return - end + local a = myassert(bn.generate_prime(10, true)) if not a:is_prime() then ngx.log(ngx.ERR, "not prime") return @@ -616,4 +591,4 @@ true "ok " --- no_error_log -[error] \ No newline at end of file +[error] diff --git a/t/openssl/cipher.t b/t/openssl/cipher.t index da46e5923..c0e156270 100644 --- a/t/openssl/cipher.t +++ b/t/openssl/cipher.t @@ -22,12 +22,13 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Creates cipher correctly --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - local cipher = myassert(require("resty.openssl.cipher").new("aes-256-cbc")) + local cipher = myassert(require("resty.openssl.cipher").new("aes256")) myassert(cipher:init(string.rep("0", 32), string.rep("0", 16), { is_encrypt = true, @@ -44,6 +45,7 @@ __DATA__ [error] + === TEST 2: Rejects unknown cipher --- http_config eval: $::HttpConfig --- config @@ -60,12 +62,14 @@ __DATA__ --- no_error_log [error] + + === TEST 3: Unintialized ctx throw errors --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - local cipher = myassert(require("resty.openssl.cipher").new("aes-256-cbc")) + local cipher = myassert(require("resty.openssl.cipher").new("aes256")) local s, err = cipher:update("1") ngx.say(err) @@ -82,12 +86,14 @@ cipher:update: cipher not initalized, call cipher:init first --- no_error_log [error] + + === TEST 4: Encrypt --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - local cipher = myassert(require("resty.openssl.cipher").new("aes-256-cbc")) + local cipher = myassert(require("resty.openssl.cipher").new("aes256")) local s = myassert(cipher:encrypt(string.rep("0", 32), string.rep("0", 16), '1')) @@ -101,12 +107,14 @@ cipher:update: cipher not initalized, call cipher:init first --- no_error_log [error] + + === TEST 5: Encrypt no padding --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - local cipher = myassert(require("resty.openssl.cipher").new("aes-256-cbc")) + local cipher = myassert(require("resty.openssl.cipher").new("aes256")) local s, err = cipher:encrypt(string.rep("0", 32), string.rep("0", 16), '1', true) ngx.say(s) @@ -122,17 +130,19 @@ cipher:update: cipher not initalized, call cipher:init first GET /t --- response_body_like eval "nil -.+(?:data not multiple of block length|wrong final block length|DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH) +.+(?:data not multiple of block length|wrong final block length).* VhGyRCcMvlAgUjTYrqiWpg==" --- no_error_log [error] + + === TEST 6: Decrypt --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - local cipher = myassert(require("resty.openssl.cipher").new("aes-256-cbc")) + local cipher = myassert(require("resty.openssl.cipher").new("aes256")) local s = myassert(cipher:decrypt(string.rep("0", 32), string.rep("0", 16), ngx.decode_base64("VhGyRCcMvlAgUjTYrqiWpg=="))) @@ -147,12 +157,14 @@ VhGyRCcMvlAgUjTYrqiWpg==" --- no_error_log [error] + + === TEST 7: Decrypt no padding --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - local cipher = myassert(require("resty.openssl.cipher").new("aes-256-cbc")) + local cipher = myassert(require("resty.openssl.cipher").new("aes256")) local s = myassert(cipher:decrypt(string.rep("0", 32), string.rep("0", 16), ngx.decode_base64("VhGyRCcMvlAgUjTYrqiWpg=="), true)) @@ -167,12 +179,14 @@ VhGyRCcMvlAgUjTYrqiWpg==" --- no_error_log [error] + + === TEST 8: Encrypt streaming --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - local cipher = myassert(require("resty.openssl.cipher").new("aes-256-cbc")) + local cipher = myassert(require("resty.openssl.cipher").new("aes256")) local ok = myassert(cipher:init(string.rep("0", 32), string.rep("0", 16), { is_encrypt = true, @@ -209,12 +223,14 @@ dtpklHxY9IbgmSw84+2XMr0Vy/S1392+rvu0A3GW1Wo= --- no_error_log [error] + + === TEST 9: Decrypt streaming --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - local cipher = myassert(require("resty.openssl.cipher").new("aes-256-cbc")) + local cipher = myassert(require("resty.openssl.cipher").new("aes256")) local ok = myassert(cipher:init(string.rep("0", 32), string.rep("0", 16), { is_encrypt = false, @@ -253,7 +269,7 @@ nothing hiabcdefghiabcde fghiabcdefghiabc nothing -.+(wrong final block length|WRONG_FINAL_BLOCK_LENGTH) +.+wrong final block length.* nil final defghi @@ -262,6 +278,7 @@ defghi [error] + === TEST 10: Derive key and iv --- http_config eval: $::HttpConfig --- config @@ -273,9 +290,9 @@ defghi end)) end - local cipher = myassert(require("resty.openssl.cipher").new("aes-256-cbc")) + local cipher = myassert(require("resty.openssl.cipher").new("aes256")) - -- openssl enc -aes-256-cbc -pass pass:xxx -S 797979 -P -md md5 + -- openssl enc -aes256 -pass pass:xxx -S 797979 -P -md md5 local key, iv = cipher:derive("xxx", "yyy", 1, "md5") ngx.say(key:tohex()) @@ -300,6 +317,8 @@ no iv --- no_error_log [error] + + === TEST 11: Derive key and iv: salt, count and md is optional --- http_config eval: $::HttpConfig --- config @@ -311,9 +330,9 @@ no iv end)) end - local cipher = myassert(require("resty.openssl.cipher").new("aes-256-cbc")) + local cipher = myassert(require("resty.openssl.cipher").new("aes256")) - -- openssl enc -aes-256-cbc -pass pass:xxx -nosalt -P -md sha1 + -- openssl enc -aes256 -pass pass:xxx -nosalt -P -md sha1 local key, iv = cipher:derive("xxx") ngx.say(key:tohex()) @@ -329,6 +348,8 @@ no iv --- no_error_log [error] + + === TEST 12: AEAD modes --- http_config eval: $::HttpConfig --- config @@ -368,6 +389,8 @@ nil --- no_error_log [error] + + === TEST 13: Returns provider --- http_config eval: $::HttpConfig --- config @@ -390,6 +413,8 @@ default --- no_error_log [error] + + === TEST 14: Returns gettable, settable params --- http_config eval: $::HttpConfig --- config @@ -409,11 +434,13 @@ default --- request GET /t --- response_body_like -.+ivlen.+ -.+padding.+ +.+ivlen.* +.+padding.* --- no_error_log [error] + + === TEST 15: Get params, set params --- http_config eval: $::HttpConfig --- config @@ -464,6 +491,7 @@ nil [error] + === TEST 16: Update with segements larger than 1024 --- http_config eval: $::HttpConfig --- config diff --git a/t/openssl/ctx.t b/t/openssl/ctx.t index 8a1c29bc5..27e10287d 100644 --- a/t/openssl/ctx.t +++ b/t/openssl/ctx.t @@ -22,6 +22,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Can create a ctx in ngx.ctx --- http_config eval: $::HttpConfig --- config @@ -40,6 +41,7 @@ __DATA__ [error] + === TEST 2: Can create a ctx in global namespace --- http_config eval: $::HttpConfig --- config @@ -58,6 +60,7 @@ __DATA__ [error] + === TEST 3: Can free ctx in ngx.ctx --- http_config eval: $::HttpConfig --- config @@ -77,6 +80,7 @@ __DATA__ [error] + === TEST 4: Can free ctx in global namespace --- http_config eval: $::HttpConfig --- config diff --git a/t/openssl/digest.t b/t/openssl/digest.t index ab086041f..372dd585a 100644 --- a/t/openssl/digest.t +++ b/t/openssl/digest.t @@ -22,6 +22,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Calculate digest correctly --- http_config eval: $::HttpConfig --- config @@ -40,6 +41,8 @@ __DATA__ --- no_error_log [error] + + === TEST 2: Update accepts vardiac args --- http_config eval: $::HttpConfig --- config @@ -58,6 +61,8 @@ __DATA__ --- no_error_log [error] + + === TEST 3: Final accepts optional arg --- http_config eval: $::HttpConfig --- config @@ -76,6 +81,8 @@ __DATA__ --- no_error_log [error] + + === TEST 4: Rejects unknown hash --- http_config eval: $::HttpConfig --- config @@ -92,6 +99,8 @@ __DATA__ --- no_error_log [error] + + === TEST 5: Can be reused --- http_config eval: $::HttpConfig --- config @@ -116,6 +125,8 @@ __DATA__ --- no_error_log [error] + + === TEST 6: Returns provider --- http_config eval: $::HttpConfig --- config @@ -138,6 +149,8 @@ default --- no_error_log [error] + + === TEST 7: Returns gettable, settable params --- http_config eval: $::HttpConfig --- config @@ -162,6 +175,8 @@ default --- no_error_log [error] + + === TEST 8: Get params, set params --- http_config eval: $::HttpConfig --- config @@ -177,4 +192,4 @@ default "skipped " --- no_error_log -[error] \ No newline at end of file +[error] diff --git a/t/openssl/err.t b/t/openssl/err.t index 4da69bca5..a84cd9d75 100644 --- a/t/openssl/err.t +++ b/t/openssl/err.t @@ -21,6 +21,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Don't cry if there's no error --- http_config eval: $::HttpConfig --- config diff --git a/t/openssl/helper.lua b/t/openssl/helper.lua index 42e1ef281..f2f31330c 100644 --- a/t/openssl/helper.lua +++ b/t/openssl/helper.lua @@ -51,7 +51,7 @@ local function to_hex(bin) if err then error(err) end - return hex:upper() + return hex end local function myassert(...) diff --git a/t/openssl/hmac.t b/t/openssl/hmac.t index 0c5cf40b8..55483df81 100644 --- a/t/openssl/hmac.t +++ b/t/openssl/hmac.t @@ -22,6 +22,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Calculate hmac correctly --- http_config eval: $::HttpConfig --- config @@ -40,6 +41,8 @@ __DATA__ --- no_error_log [error] + + === TEST 2: Update accepts vardiac args --- http_config eval: $::HttpConfig --- config @@ -58,6 +61,8 @@ __DATA__ --- no_error_log [error] + + === TEST 3: Final accepts optional arg --- http_config eval: $::HttpConfig --- config @@ -76,6 +81,8 @@ __DATA__ --- no_error_log [error] + + === TEST 4: Rejects unknown hash --- http_config eval: $::HttpConfig --- config @@ -93,6 +100,7 @@ __DATA__ [error] + === TEST 5: Can be reused --- http_config eval: $::HttpConfig --- config @@ -115,4 +123,4 @@ __DATA__ kwUMjYrP0BSJb8cIJvWYoiM1Kc4mQxZOTwSiTTLRhDM= " --- no_error_log -[error] \ No newline at end of file +[error] diff --git a/t/openssl/kdf.t b/t/openssl/kdf.t index 516768343..06b800287 100644 --- a/t/openssl/kdf.t +++ b/t/openssl/kdf.t @@ -22,6 +22,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: kdf: invalid args are checked --- http_config eval: $::HttpConfig --- config @@ -66,6 +67,7 @@ kdf.derive: unknown type 19823718236128632 [error] + === TEST 2: PBKDF2 --- http_config eval: $::HttpConfig --- config @@ -92,6 +94,7 @@ kdf.derive: unknown type 19823718236128632 [error] + === TEST 3: PBKDF2, optional args --- http_config eval: $::HttpConfig --- config @@ -114,6 +117,7 @@ kdf.derive: unknown type 19823718236128632 [error] + === TEST 4: HKDF --- http_config eval: $::HttpConfig --- config @@ -141,6 +145,7 @@ kdf.derive: unknown type 19823718236128632 [error] + === TEST 5: HKDF, optional arg --- http_config eval: $::HttpConfig --- config @@ -178,6 +183,7 @@ W/tSxFnNsHIYwXa13eybYhW9W3Y= [error] + === TEST 6: TLS1-PRF --- http_config eval: $::HttpConfig --- config @@ -203,6 +209,7 @@ W/tSxFnNsHIYwXa13eybYhW9W3Y= [error] + === TEST 7: TLS1-PRF, optional arg --- http_config eval: $::HttpConfig --- config @@ -227,6 +234,7 @@ W/tSxFnNsHIYwXa13eybYhW9W3Y= [error] + === TEST 8: scrypt --- http_config eval: $::HttpConfig --- config @@ -252,6 +260,8 @@ W/tSxFnNsHIYwXa13eybYhW9W3Y= --- no_error_log [error] + + === TEST 9: EVP_KDF API: new --- http_config eval: $::HttpConfig --- config @@ -277,6 +287,8 @@ W/tSxFnNsHIYwXa13eybYhW9W3Y= --- no_error_log [error] + + === TEST 10: EVP_KDF API: Returns provider --- http_config eval: $::HttpConfig --- config @@ -300,6 +312,7 @@ default [error] + === TEST 11: EVP_KDF API: derive --- http_config eval: $::HttpConfig --- config @@ -327,6 +340,8 @@ cDRFLQ7NWt+AP4i0TdBzog== --- no_error_log [error] + + === TEST 12: EVP_KDF API: Returns gettable, settable params --- http_config eval: $::HttpConfig --- config @@ -351,6 +366,8 @@ cDRFLQ7NWt+AP4i0TdBzog== --- no_error_log [error] + + === TEST 13: EVP_KDF API: Get params, set params --- http_config eval: $::HttpConfig --- config @@ -384,6 +401,8 @@ cDRFLQ7NWt+AP4i0TdBzog== --- no_error_log [error] + + === TEST 14: EVP_KDF API: reset --- http_config eval: $::HttpConfig --- config @@ -421,7 +440,7 @@ cDRFLQ7NWt+AP4i0TdBzog== --- request GET /t --- response_body_like -.+missing salt +.+missing salt.* cDRFLQ7NWt\+AP4i0TdBzog== --- no_error_log [error] diff --git a/t/openssl/mac.t b/t/openssl/mac.t index b3cddf10a..b78d398b8 100644 --- a/t/openssl/mac.t +++ b/t/openssl/mac.t @@ -22,6 +22,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Calculate mac correctly --- http_config eval: $::HttpConfig --- config @@ -45,6 +46,8 @@ __DATA__ --- no_error_log [error] + + === TEST 2: Update accepts vardiac args --- http_config eval: $::HttpConfig --- config @@ -68,6 +71,8 @@ __DATA__ --- no_error_log [error] + + === TEST 3: Final accepts optional arg --- http_config eval: $::HttpConfig --- config @@ -91,6 +96,8 @@ __DATA__ --- no_error_log [error] + + === TEST 4: Rejects unknown hash --- http_config eval: $::HttpConfig --- config @@ -111,6 +118,8 @@ __DATA__ --- no_error_log [error] + + === TEST 5: Returns provider --- http_config eval: $::HttpConfig --- config @@ -133,6 +142,8 @@ default --- no_error_log [error] + + === TEST 6: Returns gettable, settable params --- http_config eval: $::HttpConfig --- config @@ -157,6 +168,8 @@ default --- no_error_log [error] + + === TEST 7: Get params, set params --- http_config eval: $::HttpConfig --- config diff --git a/t/openssl/objects.t b/t/openssl/objects.t index cec5fb8fa..257728e59 100644 --- a/t/openssl/objects.t +++ b/t/openssl/objects.t @@ -22,6 +22,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Convert nid to table --- http_config eval: $::HttpConfig --- config @@ -39,6 +40,7 @@ __DATA__ [error] + === TEST 2: Convert txt to nid --- http_config eval: $::HttpConfig --- config @@ -64,6 +66,8 @@ __DATA__ --- no_error_log [error] + + === TEST 3: Convert sigid to nid --- http_config eval: $::HttpConfig --- config @@ -78,4 +82,4 @@ __DATA__ --- response_body eval 673 --- no_error_log -[error] \ No newline at end of file +[error] diff --git a/t/openssl/param.t b/t/openssl/param.t index f85c44200..2c7fb95ee 100644 --- a/t/openssl/param.t +++ b/t/openssl/param.t @@ -22,6 +22,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Construct --- http_config eval: $::HttpConfig --- config diff --git a/t/openssl/pkcs12.t b/t/openssl/pkcs12.t index 4acedef5f..a1d4afd32 100644 --- a/t/openssl/pkcs12.t +++ b/t/openssl/pkcs12.t @@ -23,6 +23,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Loads password protected pkcs12 --- http_config eval: $::HttpConfig --- config @@ -39,8 +40,8 @@ __DATA__ local r = myassert(pkcs12.decode(pp, "badssl.com")) - ngx.say(r.key:get_parameters().d:to_hex():upper()) - ngx.say(r.cert:get_serial_number():to_hex():upper()) + ngx.say(r.key:get_parameters().d:to_hex()) + ngx.say(r.cert:get_serial_number():to_hex()) } } --- request @@ -51,6 +52,8 @@ __DATA__ --- no_error_log [error] + + === TEST 2: Errors on bad password --- http_config eval: $::HttpConfig --- config @@ -78,13 +81,15 @@ __DATA__ GET /t --- response_body_like eval 'true -pkcs12.decode.+(mac verify failure|INCORRECT_PASSWORD) +pkcs12.decode.+mac verify failure.* true -pkcs12.decode.+(mac verify failure|INCORRECT_PASSWORD) +pkcs12.decode.+mac verify failure.* ' --- no_error_log [error] + + === TEST 3: Creates pkcs12 --- http_config eval: $::HttpConfig --- config @@ -96,7 +101,7 @@ pkcs12.decode.+(mac verify failure|INCORRECT_PASSWORD) end local pkcs12 = require "resty.openssl.pkcs12" - local cert, key = require("helper").create_self_signed({ type = 'EC', curve = "prime256v1" }) + local cert, key = require("helper").create_self_signed({ type = 'EC' }) local x509 = require("resty.openssl.x509") local ca1 = myassert(x509.new(io.open("t/fixtures/GlobalSign.pem"):read("*a"))) local ca2 = myassert(x509.new(io.open("t/fixtures/GlobalSign_sub.pem"):read("*a"))) @@ -141,6 +146,8 @@ pkcs12.decode.+(mac verify failure|INCORRECT_PASSWORD) --- no_error_log [error] + + === TEST 4: Uses empty string password when omitted --- http_config eval: $::HttpConfig --- config @@ -152,7 +159,7 @@ pkcs12.decode.+(mac verify failure|INCORRECT_PASSWORD) end local pkcs12 = require "resty.openssl.pkcs12" - local cert, key = require("helper").create_self_signed({ type = 'EC', curve = "prime256v1" }) + local cert, key = require("helper").create_self_signed({ type = 'EC' }) local x509 = require("resty.openssl.x509") local ca1 = myassert(x509.new(io.open("t/fixtures/GlobalSign.pem"):read("*a"))) local ca2 = myassert(x509.new(io.open("t/fixtures/GlobalSign_sub.pem"):read("*a"))) @@ -165,8 +172,8 @@ pkcs12.decode.+(mac verify failure|INCORRECT_PASSWORD) })) local r = myassert(pkcs12.decode(p12, nil)) - ngx.say(#r.key:get_parameters().x:to_hex():upper()) - ngx.say(r.cert:get_serial_number():to_hex():upper()) + ngx.say(#r.key:get_parameters().x:to_hex()) + ngx.say(r.cert:get_serial_number():to_hex()) ngx.say(#r.cacerts) ngx.say(r.friendly_name) -- same as empty string @@ -181,16 +188,18 @@ pkcs12.decode.+(mac verify failure|INCORRECT_PASSWORD) --- request GET /t --- response_body_like eval -'6\d +'4\d 0 2 myname true -pkcs12.decode.+(mac verify failure|INCORRECT_PASSWORD) +pkcs12.decode.+mac verify failure.* ' --- no_error_log [error] + + === TEST 5: Check cert and key mismatch --- http_config eval: $::HttpConfig --- config @@ -202,8 +211,8 @@ pkcs12.decode.+(mac verify failure|INCORRECT_PASSWORD) end local pkcs12 = require "resty.openssl.pkcs12" - local cert, key = require("helper").create_self_signed({ type = 'EC', curve = "prime256v1" }) - local key2 = require("resty.openssl.pkey").new({ type = 'EC', curve = "prime256v1" }) + local cert, key = require("helper").create_self_signed({ type = 'EC' }) + local key2 = require("resty.openssl.pkey").new({ type = 'EC' }) local r, err = pkcs12.encode({ friendly_name = "myname", @@ -217,11 +226,13 @@ pkcs12.decode.+(mac verify failure|INCORRECT_PASSWORD) --- request GET /t --- response_body_like eval -'true.+(key values mismatch|KEY_VALUES_MISMATCH) +'true.+key values mismatch.* ' --- no_error_log [error] + + === TEST 6: Creates pkcs12 with newer algorithm --- http_config eval: $::HttpConfig --- config diff --git a/t/openssl/pkey.t b/t/openssl/pkey.t index 5c425b8d1..7832a6435 100644 --- a/t/openssl/pkey.t +++ b/t/openssl/pkey.t @@ -25,7 +25,8 @@ no_long_string(); run_tests(); __DATA__ -=== TEST 1: Generates RSA key by default + +=== TEST 1: keygen: Generates RSA key by default --- http_config eval: $::HttpConfig --- config location =/t { @@ -41,7 +42,9 @@ __DATA__ --- no_error_log [error] -=== TEST 2: Generates and loads RSA key + + +=== TEST 2: keygen: Generates and loads RSA key --- http_config eval: $::HttpConfig --- config location =/t { @@ -65,7 +68,9 @@ true" --- no_error_log [error] -=== TEST 3: Generates and loads EC key explictly + + +=== TEST 3: keygen: Generates and loads EC key explictly --- http_config eval: $::HttpConfig --- config location =/t { @@ -89,7 +94,9 @@ true" --- no_error_log [error] -=== TEST 4: Generates and loads Ed25519 key explictly + + +=== TEST 4: keygen: Generates and loads Ed25519 key explictly --- http_config eval: $::HttpConfig --- config location =/t { @@ -112,7 +119,9 @@ true" --- no_error_log [error] -=== TEST 5: Generates and loads DH key explictly + + +=== TEST 5: keygen: Generates and loads DH key explictly --- http_config eval: $::HttpConfig --- config location =/t { @@ -137,7 +146,9 @@ true" --- no_error_log [error] -=== TEST 6: Uses DH predefined groups + + +=== TEST 6: keygen: Uses DH predefined groups --- http_config eval: $::HttpConfig --- config location =/t { @@ -161,7 +172,9 @@ true" --- no_error_log [error] -=== TEST 7: Rejects invalid arg + + +=== TEST 7: keygen: Rejects invalid arg --- http_config eval: $::HttpConfig --- config location =/t { @@ -182,7 +195,108 @@ pkey.new:load_key: .+ --- no_error_log [error] -=== TEST 8: Loads encrypted PEM pkey with passphrase + + +=== TEST 8: keygen: Keygen and paramgen with ctrl str +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local p_384 = myassert(require("resty.openssl.pkey").new({ + type = "EC", + "ec_paramgen_curve:secp384r1", + })) + ngx.say(myassert(p_384:get_parameters()).group) + + local _, err = myassert(require("resty.openssl.pkey").paramgen({ + type = "EC", + "ec_paramgen_curve:secp384r1", + })) + ngx.say(err) + } + } +--- request + GET /t +--- response_body +715 +nil +--- no_error_log +[error] + + + +=== TEST 9: paramgen: Outpus DH and EC params +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local pkey = require("resty.openssl.pkey") + ngx.say(myassert(pkey.paramgen({ + type = 'DH', + group = "dh_1024_160", + }))) + ngx.say(myassert(pkey.paramgen({ + type = "EC", + curve = "prime256v1", + }))) + collectgarbage() + } + } +--- request + GET /t +--- response_body_like eval +"-----BEGIN DH PARAMETERS----- +.+ +-----BEGIN EC PARAMETERS-----" +--- no_error_log +[error] + + + +=== TEST 10: paramgen: Load parameters for keygen +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local pem = myassert(require("resty.openssl.pkey").paramgen({ + type = "DH", + group = "dh_1024_160", + })) + + local p = myassert(require("resty.openssl.pkey").new({ + type = "DH", + param = pem, + })) + + ngx.say(myassert(p:get_parameters().p:to_hex())) + + local pem = myassert(require("resty.openssl.pkey").paramgen({ + type = "EC", + curve = "prime192v1", + })) + + local p = myassert(require("resty.openssl.pkey").new({ + type = "EC", + param = pem, + })) + + ngx.say(myassert(p:get_parameters().group)) + + collectgarbage() + } + } +--- request + GET /t +--- response_body_like eval +"B10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C69A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C013ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD7098488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708DF1FB2BC2E4A4371 +409 +" +--- no_error_log +[error] + + + +=== TEST 11: load: Loads encrypted PEM pkey with passphrase --- http_config eval: $::HttpConfig --- config location =/t { @@ -206,13 +320,15 @@ pkey.new:load_key: .+ --- request GET /t --- response_body_like eval -"pkey.new.+(?:bad decrypt|failed|BAD_DECRYPT) +"pkey.new.+(?:bad decrypt|failed).* ok " --- no_error_log [error] -=== TEST 9: Loads encrypted PEM pkey with passphrase callback + + +=== TEST 12: load: Loads encrypted PEM pkey with passphrase callback --- http_config eval: $::HttpConfig --- config location =/t { @@ -240,735 +356,15 @@ ok --- request GET /t --- response_body_like eval -"pkey.new.+(?:bad decrypt|failed|BAD_DECRYPT) +"pkey.new.+(?:bad decrypt|failed).* ok " --- no_error_log [error] -=== TEST 10: Loads DER format ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local pkey = require("resty.openssl.pkey") - local p1 = myassert(pkey.new()) - local pem = p1:to_PEM('private') - local der = myassert(p1:tostring('private', 'DER')) - local p2 = myassert(pkey.new(der)) - ngx.print(p2 and pem == p2:to_PEM('private')) - } - } ---- request - GET /t ---- response_body eval -"true" ---- no_error_log -[error] - -=== TEST 11: Outputs DER and JWK ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local p = myassert(require("resty.openssl.pkey").new({ - type = "EC", - curve = 'prime256v1', - })) - local t = myassert(p:tostring('private', "PEM")) - ngx.say(t) - - local t = myassert(p:tostring('private', "DER")) - ngx.say(#t) - - local t = myassert(p:tostring('private', "JWK")) - ngx.say(t) - } - } ---- request - GET /t ---- response_body_like eval -"-----BEGIN PRIVATE KEY----- -.+ ------END PRIVATE KEY----- - -(121|138|364) -.+kid.+" ---- no_error_log -[error] - -=== TEST 12: Outputs public key ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local p = myassert(require("resty.openssl.pkey").new()) - ngx.say(p:to_PEM()) - } - } ---- request - GET /t ---- response_body_like eval -"-----BEGIN PUBLIC KEY-----" ---- no_error_log -[error] - -=== TEST 13: Extracts RSA parameters ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local p = myassert(require("resty.openssl.pkey").new({ - exp = 65537, - })) - - local params = myassert(p:get_parameters()) - - for _, k in ipairs(require("resty.openssl.rsa").params) do - local b = myassert(params[k]:to_hex():upper()) - ngx.say(b) - end - local got = params.dne - ngx.say(got) - } - } ---- request - GET /t ---- response_body_like eval -"[A-F0-9]+ -[A-F0-9]+ -[A-F0-9]+ -[A-F0-9]+ -[A-F0-9]+ -[A-F0-9]+ -[A-F0-9]+ -[A-F0-9]+ -nil -" ---- no_error_log -[error] - -=== TEST 14: Extracts EC parameters ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local p = myassert(require("resty.openssl.pkey").new({ - type = "EC", - curve = "prime256v1", - })) - - local params = myassert(p:get_parameters()) - - local group = params["group"] - ngx.say(group) - for _, k in ipairs(require("resty.openssl.ec").params) do - if k ~= "group" then - local b = myassert(params[k]:to_hex():upper()) - - ngx.say(b) - end - end - local got = params.dne - ngx.say(got) - } - } ---- request - GET /t ---- response_body_like eval -"415 -[A-F0-9]{1,130} -[A-F0-9]{1,64} -[A-F0-9]{1,64} -[A-F0-9]{1,64} -nil -" ---- no_error_log -[error] - -=== TEST 15: Extracts Ed25519 parameters ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local p = myassert(require("resty.openssl.pkey").new({ - type = "Ed25519", - })) - - local params = myassert(p:get_parameters()) - - ngx.say(#params.private) - ngx.say(#params.public) - } - } ---- request - GET /t ---- response_body_like eval -"32 -32 -" ---- no_error_log -[error] - -=== TEST 16: Extracts DH parameters ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local p = myassert(require("resty.openssl.pkey").new({ - type = "DH", - group = "dh_1024_160", - })) - - local params = myassert(p:get_parameters()) - - ngx.say(params.p:to_hex():upper()) - ngx.say(params.g:to_hex():upper()) - ngx.say(params.private:to_hex():upper()) - ngx.say(params.public:to_hex():upper()) - } - } ---- request - GET /t ---- response_body_like eval -"B10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C69A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C013ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD7098488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708DF1FB2BC2E4A4371 -A4D1CBD5C3FD34126765A442EFB99905F8104DD258AC507FD6406CFF14266D31266FEA1E5C41564B777E690F5504F213160217B4B01B886A5E91547F9E2749F4D7FBD7D3B9A92EE1909D0D2263F80A76A6A24C087A091F531DBF0A0169B6A28AD662A4D18E73AFA32D779D5918D08BC8858F4DCEF97C2A24855E6EEB22B3B2E5 -[A-F0-9]+ -[A-F0-9]+ -" ---- no_error_log -[error] - -=== TEST 17: Encrypt and decrypt ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local privkey = myassert(require("resty.openssl.pkey").new()) - if err then - ngx.log(ngx.ERR, err) - return - end - local pubkey = myassert(require("resty.openssl.pkey").new(assert(privkey:to_PEM("public")))) - - local s = myassert(pubkey:encrypt("23333")) - ngx.say(#s) - - local decrypted = myassert(privkey:decrypt(s)) - ngx.say(decrypted) - } - } ---- request - GET /t ---- response_body eval -"256 -23333 -" ---- no_error_log -[error] - - -=== TEST 18: Sign and verify ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local p = myassert(require("resty.openssl.pkey").new()) - - local digest = myassert(require("resty.openssl.digest").new("SHA256")) - - myassert(digest:update("πŸ•ΆοΈ", "+1s")) - - local s = myassert(p:sign(digest)) - ngx.say(#s) - - local v = myassert(p:verify(s, digest)) - ngx.say(v) - } - } ---- request - GET /t ---- response_body eval -"256 -true -" ---- no_error_log -[error] - -=== TEST 19: One shot sign and verify ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - -- pureeddsa - local p = myassert(require("resty.openssl.pkey").new({ - type = "Ed25519" - })) - local digest = "23333" - local s = myassert(p:sign(digest)) - ngx.say(#s) - - local v = myassert(p:verify(s, digest)) - ngx.say(v) - - -- uses default md type - local p = myassert(require("resty.openssl.pkey").new({ - type = "RSA" - })) - local digest = "23333" - local s = myassert(p:sign(digest)) - ngx.say(#s) - - local v = myassert(p:verify(s, digest)) - ngx.say(v) - } - } ---- request - GET /t ---- response_body eval -"64 -true -256 -true -" ---- no_error_log -[error] - -=== TEST 20: Error on bad digest or verify parameters ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local p = myassert(require("resty.openssl.pkey").new({ - type = "EC", - curve = "prime256v1", - })) - local s, err = p:sign(false) - ngx.say(err) - local v, err = p:verify("", false) - ngx.say(err) - local v, err = p:verify(false, "1") - ngx.say(err) - } - } ---- request - GET /t ---- response_body eval -"pkey:sign: expect a digest instance or a string at #1 -pkey:verify: expect a digest instance or a string at #2 -pkey:verify: expect a string at #1 -" ---- no_error_log -[error] - -=== TEST 21: Key derivation for EC, X448 and X25519 ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - for i, t in ipairs({"EC", "X25519", "X448"}) do - local p = myassert(require("resty.openssl.pkey").new({ - type = t, - curve = t == "EC" and "prime256v1" or nil, - })) - - -- usually the peer key is the pubkey from other key pair - -- we use the same key here just for simplicity - local k = myassert(p:derive(p)) - ngx.say(#k) - ::next:: - end - } - } ---- request - GET /t ---- response_body_like eval -"32 -32 -56" ---- no_error_log -[error] - -=== TEST 22: get key type ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local p, err = myassert(require("resty.openssl.pkey").new({ - type = 'RSA', - })) - ngx.say(encode_sorted_json(p:get_key_type())) - } - } ---- request - GET /t ---- response_body_like eval -'{"id":"1.2.840.113549.1.1.1","ln":"rsaEncryption","nid":6,"sn":"rsaEncryption"}' ---- no_error_log -[error] - -=== TEST 23: Raw sign and recover ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local p = myassert(require("resty.openssl.pkey").new()) - - local s = myassert(p:sign_raw("πŸ•ΆοΈ")) - ngx.say(#s) - - local v = myassert(p:verify_recover(s)) - ngx.say(v == "πŸ•ΆοΈ") - } - } ---- request - GET /t ---- response_body eval -"256 -true -" ---- no_error_log -[error] - -=== TEST 24: Streaming sign and one shot sign can cross verify ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local p = myassert(require("resty.openssl.pkey").new()) - local pec = myassert(require("resty.openssl.pkey").new({ - type = "EC", - curve = "prime256v1", - })) - - -- one shot sign RSA, verify with digest instance - local s = myassert(p:sign("πŸ•ΆοΈ+1s")) - - local digest = myassert(require("resty.openssl.digest").new("SHA256")) - digest:update("πŸ•ΆοΈ+1s") - local v, err = p:verify(s, digest) - ngx.say(v) - - -- sign with digest RSA, one shot verify - local digest = myassert(require("resty.openssl.digest").new("SHA256")) - digest:update("πŸ•ΆοΈ+1s") - local s = myassert(p:sign(digest)) - - local v, err = p:verify(s, "πŸ•ΆοΈ+1s") - ngx.say(v) - - -- one shot sign EC, verify with digest instance - local s = myassert(pec:sign("πŸ•ΆοΈ+1s")) - - local digest = myassert(require("resty.openssl.digest").new("SHA256")) - digest:update("πŸ•ΆοΈ+1s") - local v, err = pec:verify(s, digest) - ngx.say(v) - - -- sign with digest EC, one shot verify - local digest = myassert(require("resty.openssl.digest").new("SHA256")) - digest:update("πŸ•ΆοΈ+1s") - local s = myassert(pec:sign(digest)) - - local v, err = pec:verify(s, "πŸ•ΆοΈ+1s") - ngx.say(v) - } - } ---- request - GET /t ---- response_body eval -"true -true -true -true -" ---- no_error_log -[error] - -=== TEST 25: Outpus DH and EC params ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local pkey = require("resty.openssl.pkey") - ngx.say(myassert(pkey.paramgen({ - type = 'DH', - group = "dh_1024_160", - }))) - ngx.say(myassert(pkey.paramgen({ - type = "EC", - curve = "prime256v1", - }))) - collectgarbage() - } - } ---- request - GET /t ---- response_body_like eval -"-----BEGIN DH PARAMETERS----- -.+ ------BEGIN EC PARAMETERS-----" ---- no_error_log -[error] - - -=== TEST 26: Set DH parameters ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local p = myassert(require("resty.openssl.pkey").new({ - type = "DH", - group = "dh_1024_160", - })) - - local params1 = myassert(p:get_parameters()) - - local p = myassert(require("resty.openssl.pkey").new({ - type = "DH", - group = "dh_2048_224", - })) - - myassert(p:set_parameters({ - p = params1.p, - g = params1.g, - private = params1.private, - public = params1.public, - })) - - local params = myassert(p:get_parameters()) - - ngx.say(params.p:to_hex():upper()) - ngx.say(params.g:to_hex():upper()) - ngx.say(params.private:to_hex():upper()) - ngx.say(params.public:to_hex():upper()) - - collectgarbage() - } - } ---- request - GET /t ---- response_body_like eval -"B10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C69A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C013ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD7098488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708DF1FB2BC2E4A4371 -A4D1CBD5C3FD34126765A442EFB99905F8104DD258AC507FD6406CFF14266D31266FEA1E5C41564B777E690F5504F213160217B4B01B886A5E91547F9E2749F4D7FBD7D3B9A92EE1909D0D2263F80A76A6A24C087A091F531DBF0A0169B6A28AD662A4D18E73AFA32D779D5918D08BC8858F4DCEF97C2A24855E6EEB22B3B2E5 -[A-F0-9]{1,256} -[A-F0-9]{1,256} -" ---- no_error_log -[error] - -=== TEST 27: Load parameters for keygen ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local pem = myassert(require("resty.openssl.pkey").paramgen({ - type = "DH", - group = "dh_1024_160", - })) - - local p = myassert(require("resty.openssl.pkey").new({ - type = "DH", - param = pem, - })) - - ngx.say(myassert(p:get_parameters().p:to_hex():upper())) - - local pem = myassert(require("resty.openssl.pkey").paramgen({ - type = "EC", - curve = "prime256v1", - })) - - local p = myassert(require("resty.openssl.pkey").new({ - type = "EC", - param = pem, - })) - - ngx.say(myassert(p:get_parameters().group)) - - collectgarbage() - } - } ---- request - GET /t ---- response_body_like eval -"B10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C69A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C013ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD7098488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708DF1FB2BC2E4A4371 -415 -" ---- no_error_log -[error] - -=== TEST 28: Checks if it's private key ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local opts = { - { type = 'RSA', bits = 1024 }, - { type = "EC", curve = "prime256v1" }, - { type = 'DH', group = "dh_1024_160",}, - } - for _, opt in ipairs(opts) do - local priv = myassert(require("resty.openssl.pkey").new(opt)) - - local ok, err = priv:is_private() - if not ok then - ngx.say(opt.type .. ": should be a private key, but returns false: ".. (err or "nil")) - end - - local pem = myassert(priv:to_PEM("public")) - - local pub = myassert(require("resty.openssl.pkey").new(pem)) - - local ok, err = pub:is_private() - if ok then - ngx.say(opt.type .. ": should not be a private key, but returns true: ".. (err or "nil")) - end - end - } - } ---- request - GET /t ---- response_body eval -"" ---- no_error_log -[error] - -=== TEST 29: Checks if it's private key: ecx ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local opts = { - { type = 'Ed25519'}, - } - for _, opt in ipairs(opts) do - local priv = myassert(require("resty.openssl.pkey").new(opt)) - - local ok, err = priv:is_private() - if not ok then - ngx.say(opt.type .. ": should be a private key, but returns false: ".. (err or "nil")) - end - - local pem = myassert(priv:to_PEM("public")) - - local pub = myassert(require("resty.openssl.pkey").new(pem)) - - local ok, err = pub:is_private() - if ok then - ngx.say(opt.type .. ": should not be a private key, but returns true: ".. (err or "nil")) - end - end - } - } ---- request - GET /t ---- response_body eval -"" ---- no_error_log -[error] - -=== TEST 30: Sign/verify with md_alg ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - -- uses default md type - local p = myassert(require("resty.openssl.pkey").new({ - type = "RSA" - })) - local digest = "23333" - local s = myassert(p:sign(digest, "sha512")) - ngx.say(#s) - - local ok = myassert(p:verify(s, digest, "sha512")) - ngx.say(ok) - - -- use wrong md type, should not pass - local ok, e = p:verify(s, digest, "sha256") - ngx.say(ok) - local ok, e = p:verify(s, digest, "md5") - ngx.say(ok) - } - } ---- request - GET /t ---- response_body eval -"256 -true -false -false -" ---- no_error_log -[error] - -=== TEST 31: Sign/verify with paddings ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - -- uses default md type - - local p = myassert(require("resty.openssl.pkey").new({ - type = "RSA" - })) - local digest = "23333" - local s = myassert(p:sign(digest, md, p.PADDINGS.RSA_PKCS1_PSS_PADDING)) - ngx.say(#s) - - local ok = myassert(p:verify(s, digest, md, p.PADDINGS.RSA_PKCS1_PSS_PADDING)) - ngx.say(ok) - - -- use wrong padding scheme, should not pass - local ok, e = p:verify(s, digest, nil) - if ok ~= false then ngx.say(e) else ngx.say(ok) end - local ok, e = p:verify(s, digest, nil, p.PADDINGS.RSA_PKCS1_PADDING) - if ok ~= false then ngx.say(e) else ngx.say(ok) end - } - } ---- request - GET /t ---- response_body eval -"256 -true -false -false -" ---- no_error_log -[error] - -=== TEST 32: Sign/verify with PSS custom salt_len ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local p = myassert(require("resty.openssl.pkey").new({ - type = "RSA" - })) - local digest = "23333" - local s = myassert(p:sign(digest, nil, p.PADDINGS.RSA_PKCS1_PSS_PADDING, { - pss_saltlen = 64, - })) - ngx.say(#s) - - local ok = myassert(p:verify(s, digest, nil, p.PADDINGS.RSA_PKCS1_PSS_PADDING, { - pss_saltlen = 64, - })) - ngx.say(ok) - } - } ---- request - GET /t ---- response_body eval -"256 -true -" ---- no_error_log -[error] - -=== TEST 33: PEM passphrase_cb won't overflow +=== TEST 13: load: PEM passphrase_cb won't overflow --- http_config eval: $::HttpConfig --- config location =/t { @@ -1033,105 +429,40 @@ true GET /t --- response_body_like eval "errored out with too many callbacks -pkey.new.+(?:bad decrypt|failed|BAD_DECRYPT|no start line|NO_START_LINE|DECODER routines::unsupported) +pkey.new.+(?:bad decrypt|failed|no start line|DECODER routines:OSSL_DECODER_from_bio:unsupported).* ok ok " --- no_error_log [error] -=== TEST 34: Returns provider + + +=== TEST 14: load: Loads DER format --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - if not require("resty.openssl.version").OPENSSL_3X then - ngx.say("default") - ngx.exit(0) - end - local pkey = require("resty.openssl.pkey") - local p = myassert(pkey.new({ type = "EC" })) - ngx.say(myassert(p:get_provider_name())) - } - } ---- request - GET /t ---- response_body -default ---- no_error_log -[error] + local p1 = myassert(pkey.new()) -=== TEST 35: Returns gettable, settable params ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - if not require("resty.openssl.version").OPENSSL_3X then - ngx.say("-bits-\n-encoding-") - ngx.exit(0) - end + local pem = p1:to_PEM('private') + local der = myassert(p1:tostring('private', 'DER')) + local p2 = myassert(pkey.new(der)) - local pkey = require("resty.openssl.pkey") - local p = myassert(pkey.new({ type = "EC" })) - ngx.say(require("cjson").encode(myassert(p:gettable_params()))) - ngx.say(require("cjson").encode(myassert(p:settable_params()))) - } - } ---- request - GET /t ---- response_body_like -.+bits.+ -.+encoding.+ ---- no_error_log -[error] - -=== TEST 36: Get params, set params ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - if not require("resty.openssl.version").OPENSSL_3X then - ngx.say("true") - ngx.exit(0) - end - - local pkey = require("resty.openssl.pkey") - local p = myassert(pkey.new({ type = "EC" })) - local priv = myassert(p:get_param("priv", nil, "bn")) - local priv2 = p:get_parameters().private - ngx.say(priv == priv2) - - myassert(p:set_params({["point-format"] = "UNCOMPRESSED"})) + ngx.print(p2 and pem == p2:to_PEM('private')) } } --- request GET /t --- response_body eval -"true -" +"true" --- no_error_log [error] -=== TEST 37: Get default digest type ---- http_config eval: $::HttpConfig ---- config - location =/t { - content_by_lua_block { - local pkey = require("resty.openssl.pkey") - local p = myassert(pkey.new({ type = "EC" })) - local algo = myassert(p:get_default_digest_type()) - ngx.say(require("cjson").encode(algo)) - } - } ---- request - GET /t ---- response_body_like -.+sha256.+ ---- no_error_log -[error] -=== TEST 38: Reads and write pkcs1 rsa key + +=== TEST 15: load: Reads and write pkcs1 rsa key --- http_config eval: $::HttpConfig --- config location =/t { @@ -1179,7 +510,566 @@ true --- no_error_log [error] -=== TEST 39: Sign/verify with binary ecdsa sig + + +=== TEST 16: write: Outputs DER and JWK +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local p = myassert(require("resty.openssl.pkey").new({ + type = "EC", + curve = 'prime256v1', + })) + local t = myassert(p:tostring('private', "PEM")) + ngx.say(t) + + local t = myassert(p:tostring('private', "DER")) + ngx.say(#t) + + local t = myassert(p:tostring('private', "JWK")) + ngx.say(t) + } + } +--- request + GET /t +--- response_body_like eval +"-----BEGIN PRIVATE KEY----- +.+ +-----END PRIVATE KEY----- + +(121|138|364) +.+kid.+" +--- no_error_log +[error] + + + +=== TEST 17: write: Outputs public key +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local p = myassert(require("resty.openssl.pkey").new()) + ngx.say(p:to_PEM()) + } + } +--- request + GET /t +--- response_body_like eval +"-----BEGIN PUBLIC KEY-----" +--- no_error_log +[error] + + + +=== TEST 18: parameters: Extracts RSA parameters +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local p = myassert(require("resty.openssl.pkey").new({ + exp = 65537, + })) + + local params = myassert(p:get_parameters()) + + for _, k in ipairs(require("resty.openssl.rsa").params) do + local b = myassert(params[k]:to_hex()) + ngx.say(b) + end + local got = params.dne + ngx.say(got) + } + } +--- request + GET /t +--- response_body_like eval +"[A-F0-9]+ +[A-F0-9]+ +[A-F0-9]+ +[A-F0-9]+ +[A-F0-9]+ +[A-F0-9]+ +[A-F0-9]+ +[A-F0-9]+ +nil +" +--- no_error_log +[error] + + + +=== TEST 19: parameters: Extracts EC parameters +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local p = myassert(require("resty.openssl.pkey").new({ + type = "EC", + })) + + local params = myassert(p:get_parameters()) + + local group = params["group"] + ngx.say(group) + for _, k in ipairs(require("resty.openssl.ec").params) do + if k ~= "group" then + local b = myassert(params[k]:to_hex()) + + ngx.say(b) + end + end + local got = params.dne + ngx.say(got) + } + } +--- request + GET /t +--- response_body_like eval +"409 +[A-F0-9]{1,98} +[A-F0-9]{1,48} +[A-F0-9]{1,48} +[A-F0-9]{1,48} +nil +" +--- no_error_log +[error] + + + +=== TEST 20: parameters: Extracts Ed25519 parameters +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local p = myassert(require("resty.openssl.pkey").new({ + type = "Ed25519", + })) + + local params = myassert(p:get_parameters()) + + ngx.say(#params.private) + ngx.say(#params.public) + } + } +--- request + GET /t +--- response_body_like eval +"32 +32 +" +--- no_error_log +[error] + + + +=== TEST 21: parameters: Set DH parameters +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local p = myassert(require("resty.openssl.pkey").new({ + type = "DH", + group = "dh_1024_160", + })) + + local params1 = myassert(p:get_parameters()) + + local p = myassert(require("resty.openssl.pkey").new({ + type = "DH", + group = "dh_2048_224", + })) + + myassert(p:set_parameters({ + p = params1.p, + g = params1.g, + private = params1.private, + public = params1.public, + })) + + local params = myassert(p:get_parameters()) + + ngx.say(params.p:to_hex()) + ngx.say(params.g:to_hex()) + ngx.say(params.private:to_hex()) + ngx.say(params.public:to_hex()) + + collectgarbage() + } + } +--- request + GET /t +--- response_body_like eval +"B10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C69A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C013ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD7098488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708DF1FB2BC2E4A4371 +A4D1CBD5C3FD34126765A442EFB99905F8104DD258AC507FD6406CFF14266D31266FEA1E5C41564B777E690F5504F213160217B4B01B886A5E91547F9E2749F4D7FBD7D3B9A92EE1909D0D2263F80A76A6A24C087A091F531DBF0A0169B6A28AD662A4D18E73AFA32D779D5918D08BC8858F4DCEF97C2A24855E6EEB22B3B2E5 +[A-F0-9]{1,256} +[A-F0-9]{1,256} +" +--- no_error_log +[error] + + + +=== TEST 22: encryption: Encrypt and decrypt +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local privkey = myassert(require("resty.openssl.pkey").new()) + if err then + ngx.log(ngx.ERR, err) + return + end + local pubkey = myassert(require("resty.openssl.pkey").new(assert(privkey:to_PEM("public")))) + + local s = myassert(pubkey:encrypt("23333")) + ngx.say(#s) + + local decrypted = myassert(privkey:decrypt(s)) + ngx.say(decrypted) + } + } +--- request + GET /t +--- response_body eval +"256 +23333 +" +--- no_error_log +[error] + + + +=== TEST 23: encryption: Encrypt and decrypt with ctrl str +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local privkey = myassert(require("resty.openssl.pkey").new()) + if err then + ngx.log(ngx.ERR, err) + return + end + local pubkey = myassert(require("resty.openssl.pkey").new(assert(privkey:to_PEM("public")))) + + local s = myassert(pubkey:encrypt("23333", privkey.PADDINGS.RSA_PKCS1_OAEP_PADDING, { + oaep_md = "sha256", + })) + ngx.say(#s) + + local decrypted = myassert(privkey:decrypt(s, privkey.PADDINGS.RSA_PKCS1_OAEP_PADDING,{ + "rsa_oaep_md:sha256", + "rsa_mgf1_md:sha256", + })) + ngx.say(decrypted) + + local ok, err = privkey:decrypt(s, privkey.PADDINGS.RSA_PKCS1_OAEP_PADDING,{ + "rsa_oaep_md:sha256", + "rsa_mgf1_md:sha384", + }) + ngx.say(err) + } + } +--- request + GET /t +--- response_body_like eval +"256 +23333 +.+oaep decoding error.* +" +--- no_error_log +[error] + + + +=== TEST 24: signature: Sign and verify +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local p = myassert(require("resty.openssl.pkey").new()) + + local digest = myassert(require("resty.openssl.digest").new("SHA256")) + + myassert(digest:update("πŸ•ΆοΈ", "+1s")) + + local s = myassert(p:sign(digest)) + ngx.say(#s) + + local v = myassert(p:verify(s, digest)) + ngx.say(v) + } + } +--- request + GET /t +--- response_body eval +"256 +true +" +--- no_error_log +[error] + + + +=== TEST 25: signature: One shot sign and verify +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + -- pureeddsa + local p = myassert(require("resty.openssl.pkey").new({ + type = "Ed25519" + })) + local digest = "23333" + local s = myassert(p:sign(digest)) + ngx.say(#s) + + local v = myassert(p:verify(s, digest)) + ngx.say(v) + + -- uses default md type + local p = myassert(require("resty.openssl.pkey").new({ + type = "RSA" + })) + local digest = "23333" + local s = myassert(p:sign(digest)) + ngx.say(#s) + + local v = myassert(p:verify(s, digest)) + ngx.say(v) + } + } +--- request + GET /t +--- response_body eval +"64 +true +256 +true +" +--- no_error_log +[error] + + + +=== TEST 26: signature: Error on bad digest or verify parameters +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local p = myassert(require("resty.openssl.pkey").new({ + type = "EC", + curve = "prime256v1", + })) + local s, err = p:sign(false) + ngx.say(err) + local v, err = p:verify("", false) + ngx.say(err) + local v, err = p:verify(false, "1") + ngx.say(err) + } + } +--- request + GET /t +--- response_body eval +"pkey:sign: expect a digest instance or a string at #1 +pkey:verify: expect a digest instance or a string at #2 +pkey:verify: expect a string at #1 +" +--- no_error_log +[error] + + + +=== TEST 27: signature: Raw sign and recover +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local p = myassert(require("resty.openssl.pkey").new()) + + local s = myassert(p:sign_raw("πŸ•ΆοΈ")) + ngx.say(#s) + + local v = myassert(p:verify_recover(s)) + ngx.say(v == "πŸ•ΆοΈ") + } + } +--- request + GET /t +--- response_body eval +"256 +true +" +--- no_error_log +[error] + + + +=== TEST 28: signature: Streaming sign and one shot sign can cross verify +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local p = myassert(require("resty.openssl.pkey").new()) + local pec = myassert(require("resty.openssl.pkey").new({ + type = "EC", + curve = "prime256v1", + })) + + -- one shot sign RSA, verify with digest instance + local s = myassert(p:sign("πŸ•ΆοΈ+1s")) + + local digest = myassert(require("resty.openssl.digest").new("SHA256")) + digest:update("πŸ•ΆοΈ+1s") + local v, err = p:verify(s, digest) + ngx.say(v) + + -- sign with digest RSA, one shot verify + local digest = myassert(require("resty.openssl.digest").new("SHA256")) + digest:update("πŸ•ΆοΈ+1s") + local s = myassert(p:sign(digest)) + + local v, err = p:verify(s, "πŸ•ΆοΈ+1s") + ngx.say(v) + + -- one shot sign EC, verify with digest instance + local s = myassert(pec:sign("πŸ•ΆοΈ+1s")) + + local digest = myassert(require("resty.openssl.digest").new("SHA256")) + digest:update("πŸ•ΆοΈ+1s") + local v, err = pec:verify(s, digest) + ngx.say(v) + + -- sign with digest EC, one shot verify + local digest = myassert(require("resty.openssl.digest").new("SHA256")) + digest:update("πŸ•ΆοΈ+1s") + local s = myassert(pec:sign(digest)) + + local v, err = pec:verify(s, "πŸ•ΆοΈ+1s") + ngx.say(v) + } + } +--- request + GET /t +--- response_body eval +"true +true +true +true +" +--- no_error_log +[error] + + + +=== TEST 29: signature: Sign/verify with md_alg +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + -- uses default md type + local p = myassert(require("resty.openssl.pkey").new({ + type = "RSA" + })) + local digest = "23333" + local s = myassert(p:sign(digest, "sha512")) + ngx.say(#s) + + local ok = myassert(p:verify(s, digest, "sha512")) + ngx.say(ok) + + -- use wrong md type, should not pass + local ok, e = p:verify(s, digest, "sha256") + ngx.say(ok) + local ok, e = p:verify(s, digest, "md5") + ngx.say(ok) + } + } +--- request + GET /t +--- response_body eval +"256 +true +false +false +" +--- no_error_log +[error] + + + +=== TEST 30: signature: Sign/verify with paddings +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + -- uses default md type + + local p = myassert(require("resty.openssl.pkey").new({ + type = "RSA" + })) + local digest = "23333" + local s = myassert(p:sign(digest, md, p.PADDINGS.RSA_PKCS1_PSS_PADDING)) + ngx.say(#s) + + local ok = myassert(p:verify(s, digest, md, p.PADDINGS.RSA_PKCS1_PSS_PADDING)) + ngx.say(ok) + + -- use wrong padding scheme, should not pass + local ok, e = p:verify(s, digest, nil) + if ok ~= false then ngx.say(e) else ngx.say(ok) end + local ok, e = p:verify(s, digest, nil, p.PADDINGS.RSA_PKCS1_PADDING) + if ok ~= false then ngx.say(e) else ngx.say(ok) end + } + } +--- request + GET /t +--- response_body eval +"256 +true +false +false +" +--- no_error_log +[error] + + + +=== TEST 31: signature: Sign/verify with PSS custom salt_len +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local p = myassert(require("resty.openssl.pkey").new({ + type = "RSA" + })) + local digest = "23333" + local s = myassert(p:sign(digest, nil, p.PADDINGS.RSA_PKCS1_PSS_PADDING, { + pss_saltlen = 64, + })) + ngx.say(#s) + + local ok = myassert(p:verify(s, digest, nil, p.PADDINGS.RSA_PKCS1_PSS_PADDING, { + pss_saltlen = 64, + })) + ngx.say(ok) + } + } +--- request + GET /t +--- response_body eval +"256 +true +" +--- no_error_log +[error] + + + +=== TEST 32: signature: Sign/verify with binary ecdsa sig --- http_config eval: $::HttpConfig --- config location =/t { @@ -1221,7 +1111,9 @@ nilpkey:sign: ecdsa.sig_raw2der: invalid signature length, expect 64 but got \\d --- no_error_log [error] -=== TEST 40: Sign/verify with binary ecdsa sig length + + +=== TEST 33: signature: Sign/verify with binary ecdsa sig length --- http_config eval: $::HttpConfig --- config location =/t { @@ -1260,3 +1152,257 @@ true true --- no_error_log [error] + + + +=== TEST 34: signature: Sign and verify with ctrl str +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local p = myassert(require("resty.openssl.pkey").new({ + type = "RSA" + })) + local digest = "23333" + local s = myassert(p:sign(digest, nil, p.PADDINGS.RSA_PKCS1_PSS_PADDING, { + pss_saltlen = 64, + })) + ngx.say(#s) + + local ok = myassert(p:verify(s, digest, nil, p.PADDINGS.RSA_PKCS1_PSS_PADDING, { + "rsa_pss_saltlen:64", + })) + ngx.say(ok) + } + } +--- request + GET /t +--- response_body eval +"256 +true +" +--- no_error_log +[error] + + + +=== TEST 35: signature: Get default digest type +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local pkey = require("resty.openssl.pkey") + local p = myassert(pkey.new({ type = "EC" })) + local algo = myassert(p:get_default_digest_type()) + ngx.say(require("cjson").encode(algo)) + } + } +--- request + GET /t +--- response_body_like +.+sha256.+ +--- no_error_log +[error] + + + +=== TEST 36: derivation: Key derivation for EC, X448 and X25519 +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + for i, t in ipairs({"EC", "X25519", "X448"}) do + local p = myassert(require("resty.openssl.pkey").new({ + type = t, + curve = t == "EC" and "prime256v1" or nil, + })) + + -- usually the peer key is the pubkey from other key pair + -- we use the same key here just for simplicity + local k = myassert(p:derive(p)) + ngx.say(#k) + ::next:: + end + } + } +--- request + GET /t +--- response_body_like eval +"32 +32 +56" +--- no_error_log +[error] + + + +=== TEST 37: misc: get key type +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local p, err = myassert(require("resty.openssl.pkey").new({ + type = 'RSA', + })) + ngx.say(encode_sorted_json(p:get_key_type())) + } + } +--- request + GET /t +--- response_body_like eval +'{"id":"1.2.840.113549.1.1.1","ln":"rsaEncryption","nid":6,"sn":"rsaEncryption"}' +--- no_error_log +[error] + + + +=== TEST 38: misc: Checks if it's private key +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local opts = { + { type = 'RSA', bits = 1024 }, + { type = "EC", curve = "prime256v1" }, + { type = 'DH', group = "dh_1024_160",}, + } + for _, opt in ipairs(opts) do + local priv = myassert(require("resty.openssl.pkey").new(opt)) + + local ok, err = priv:is_private() + if not ok then + ngx.say(opt.type .. ": should be a private key, but returns false: ".. (err or "nil")) + end + + local pem = myassert(priv:to_PEM("public")) + + local pub = myassert(require("resty.openssl.pkey").new(pem)) + + local ok, err = pub:is_private() + if ok then + ngx.say(opt.type .. ": should not be a private key, but returns true: ".. (err or "nil")) + end + end + } + } +--- request + GET /t +--- response_body eval +"" +--- no_error_log +[error] + + + +=== TEST 39: misc: Checks if it's private key: ecx +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + local opts = { + { type = 'Ed25519'}, + } + for _, opt in ipairs(opts) do + local priv = myassert(require("resty.openssl.pkey").new(opt)) + + local ok, err = priv:is_private() + if not ok then + ngx.say(opt.type .. ": should be a private key, but returns false: ".. (err or "nil")) + end + + local pem = myassert(priv:to_PEM("public")) + + local pub = myassert(require("resty.openssl.pkey").new(pem)) + + local ok, err = pub:is_private() + if ok then + ngx.say(opt.type .. ": should not be a private key, but returns true: ".. (err or "nil")) + end + end + } + } +--- request + GET /t +--- response_body eval +"" +--- no_error_log +[error] + + + +=== TEST 40: misc: Returns provider +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + if not require("resty.openssl.version").OPENSSL_3X then + ngx.say("default") + ngx.exit(0) + end + + local pkey = require("resty.openssl.pkey") + local p = myassert(pkey.new({ type = "EC" })) + ngx.say(myassert(p:get_provider_name())) + } + } +--- request + GET /t +--- response_body +default +--- no_error_log +[error] + + + +=== TEST 41: params: Returns gettable, settable params +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + if not require("resty.openssl.version").OPENSSL_3X then + ngx.say("-bits-\n-encoding-") + ngx.exit(0) + end + + local pkey = require("resty.openssl.pkey") + local p = myassert(pkey.new({ type = "EC" })) + ngx.say(require("cjson").encode(myassert(p:gettable_params()))) + ngx.say(require("cjson").encode(myassert(p:settable_params()))) + } + } +--- request + GET /t +--- response_body_like +.+bits.+ +.+encoding.+ +--- no_error_log +[error] + + + +=== TEST 42: params: Get params, set params +--- http_config eval: $::HttpConfig +--- config + location =/t { + content_by_lua_block { + if not require("resty.openssl.version").OPENSSL_3X then + ngx.say("true") + ngx.exit(0) + end + + local pkey = require("resty.openssl.pkey") + local p = myassert(pkey.new({ type = "EC" })) + local priv = myassert(p:get_param("priv", nil, "bn")) + local priv2 = p:get_parameters().private + ngx.say(priv == priv2) + + myassert(p:set_params({["point-format"] = "UNCOMPRESSED"})) + } + } +--- request + GET /t +--- response_body eval +"true +" +--- no_error_log +[error] diff --git a/t/openssl/provider.t b/t/openssl/provider.t index 8a86d96c2..b226afec1 100644 --- a/t/openssl/provider.t +++ b/t/openssl/provider.t @@ -23,6 +23,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Loads default and legacy provider --- http_config eval: $::HttpConfig --- config @@ -59,6 +60,8 @@ true --- no_error_log [error] + + === TEST 2: Self test default and legacy provider --- http_config eval: $::HttpConfig --- config @@ -91,13 +94,15 @@ true --- no_error_log [error] + + === TEST 3: Set default search path --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { if not require("resty.openssl.version").OPENSSL_3X then - ngx.say("true\ncommon libcrypto routines::init fail") + ngx.say("true\ncommon libcrypto routines:provider_init:") ngx.exit(0) end @@ -112,10 +117,12 @@ true GET /t --- response_body_like true -.+(?:init fail|common libcrypto routines::reason\(\d+\)) +.*(?:init fail|common libcrypto routines:provider_init).* --- no_error_log [error] + + === TEST 4: Get parameters --- http_config eval: $::HttpConfig --- config @@ -138,4 +145,3 @@ true {"buildinfo":"3.+","name":"OpenSSL Default Provider","status":1,"version":"3.+"} --- no_error_log [error] - diff --git a/t/openssl/rand.t b/t/openssl/rand.t index af1e58c3b..371d17f03 100644 --- a/t/openssl/rand.t +++ b/t/openssl/rand.t @@ -21,6 +21,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Geneartes random bytes --- http_config eval: $::HttpConfig --- config @@ -53,6 +54,7 @@ false [error] + === TEST 2: Rejects invalid arguments --- http_config eval: $::HttpConfig --- config @@ -76,5 +78,3 @@ rand.bytes: expect a number at #1 " --- no_error_log [error] - - diff --git a/t/openssl/version.t b/t/openssl/version.t index 30df4a2e8..4998b6c81 100644 --- a/t/openssl/version.t +++ b/t/openssl/version.t @@ -21,6 +21,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Prints version text properly --- http_config eval: $::HttpConfig --- config @@ -33,10 +34,12 @@ __DATA__ --- request GET /t --- response_body_like -(OpenSSL \d.\d.\d.+|BoringSSL) +OpenSSL \d.\d.\d.+ --- no_error_log [error] + + === TEST 2: Prints version text using version() --- http_config eval: $::HttpConfig --- config @@ -50,7 +53,7 @@ __DATA__ --- request GET /t --- response_body_like -(OpenSSL \d.\d.\d.+|BoringSSL) +OpenSSL \d.\d.\d.+ compiler:.+ --- no_error_log [error] diff --git a/t/openssl/x509.t b/t/openssl/x509.t index 3ef58771f..5ed42af14 100644 --- a/t/openssl/x509.t +++ b/t/openssl/x509.t @@ -25,6 +25,7 @@ no_long_string(); run_tests(); __DATA__ + === TEST 1: Loads a cert --- http_config eval: $::HttpConfig --- config @@ -43,6 +44,8 @@ __DATA__ --- no_error_log [error] + + === TEST 2: Converts and loads PEM format --- http_config eval: $::HttpConfig --- config @@ -63,10 +66,12 @@ __DATA__ --- request GET /t --- response_body_like eval -"x509.new.+(nested asn1 error|NESTED_ASN1_ERROR).+" +"x509.new.+nested asn1 error.+" --- no_error_log [error] + + === TEST 3: Converts and loads DER format --- http_config eval: $::HttpConfig --- config @@ -87,10 +92,12 @@ __DATA__ --- request GET /t --- response_body_like eval -"x509.new.+(no start line|NO_START_LINE).+" +"x509.new.+no start line.+" --- no_error_log [error] + + === TEST 4: Rejectes invalid cert --- http_config eval: $::HttpConfig --- config @@ -107,11 +114,13 @@ __DATA__ GET /t --- response_body_like eval "expect nil or a string at #1 -x509.new: .*(not enough data|NOT_ENOUGH_DATA) +x509.new: .*not enough data.* " --- no_error_log [error] + + === TEST 5: Calculates cert digest --- http_config eval: $::HttpConfig --- config @@ -121,7 +130,7 @@ x509.new: .*(not enough data|NOT_ENOUGH_DATA) local c = myassert(require("resty.openssl.x509").new(f)) local dd = myassert(c:digest()) - local h = string.upper(myassert(require("helper").to_hex(dd))) + local h = myassert(require("helper").to_hex(dd)) ngx.say(h) } } @@ -133,6 +142,8 @@ x509.new: .*(not enough data|NOT_ENOUGH_DATA) --- no_error_log [error] + + === TEST 6: Calculates pubkey digest --- http_config eval: $::HttpConfig --- config @@ -142,7 +153,7 @@ x509.new: .*(not enough data|NOT_ENOUGH_DATA) local c = myassert(require("resty.openssl.x509").new(f)) local dd = myassert(c:pubkey_digest()) - local h, err = string.upper(require("helper").to_hex(dd)) + local h, err = require("helper").to_hex(dd) ngx.say(h) } } @@ -154,6 +165,8 @@ x509.new: .*(not enough data|NOT_ENOUGH_DATA) --- no_error_log [error] + + === TEST 7: Gets extension --- http_config eval: $::HttpConfig --- config @@ -176,6 +189,8 @@ TLS Web Server Authentication, TLS Web Client Authentication --- no_error_log [error] + + === TEST 8: Adds extension --- http_config eval: $::HttpConfig --- config @@ -201,6 +216,8 @@ TLS Web Server Authentication, TLS Web Client Authentication --- no_error_log [error] + + === TEST 9: Set extension --- http_config eval: $::HttpConfig --- config @@ -227,6 +244,7 @@ TLS Web Server Authentication, TLS Web Client Authentication [error] + === TEST 10: Reads basic constraints --- http_config eval: $::HttpConfig --- config @@ -248,6 +266,8 @@ TLS Web Server Authentication, TLS Web Client Authentication --- no_error_log [error] + + === TEST 11: Set basic constraints --- http_config eval: $::HttpConfig --- config @@ -274,6 +294,8 @@ TLS Web Server Authentication, TLS Web Client Authentication --- no_error_log [error] + + === TEST 12: Get authority info access --- http_config eval: $::HttpConfig --- config @@ -299,6 +321,8 @@ CA Issuers - URI:http://cacerts.digicert.com/DigiCertHighAssuranceTLSHybridECCSH --- no_error_log [error] + + === TEST 13: Set authority info access --- http_config eval: $::HttpConfig --- config @@ -329,6 +353,8 @@ OCSP - URI:http://somedomain.com --- no_error_log [error] + + === TEST 14: Get CRL distribution points --- http_config eval: $::HttpConfig --- config @@ -356,6 +382,8 @@ URI http://crl4.digicert.com/DigiCertHighAssuranceTLSHybridECCSHA2562020CA1.crl --- no_error_log [error] + + === TEST 15: Set CRL distribution points --- http_config eval: $::HttpConfig --- config @@ -369,6 +397,8 @@ URI http://crl4.digicert.com/DigiCertHighAssuranceTLSHybridECCSHA2562020CA1.crl --- no_error_log [error] + + === TEST 16: Get OCSP url --- http_config eval: $::HttpConfig --- config @@ -399,6 +429,8 @@ nil --- no_error_log [error] + + === TEST 17: Get CRL url --- http_config eval: $::HttpConfig --- config @@ -429,6 +461,8 @@ nil --- no_error_log [error] + + === TEST 18: Get non existend extension, return nil, nil --- http_config eval: $::HttpConfig --- config @@ -449,12 +483,14 @@ nil --- no_error_log [error] + + === TEST 19: Check private key match --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { - local cert, key = require("helper").create_self_signed({ type = "EC", curve = "prime256v1" }) + local cert, key = require("helper").create_self_signed({ type = "EC" }) local ok, err = cert:check_private_key(key) ngx.say(ok) ngx.say(err) @@ -467,7 +503,6 @@ nil local key2 = require("resty.openssl.pkey").new({ type = 'EC', - curve = "prime256v1", }) local ok, err = cert:check_private_key(key2) ngx.say(ok) @@ -480,8 +515,8 @@ nil "true nil false -.+(key type mismatch|KEY_TYPE_MISMATCH) -.+(key values mismatch|KEY_VALUES_MISMATCH) +.+key type mismatch.* +.+key values mismatch.* " --- no_error_log [error] @@ -489,6 +524,7 @@ false # START AUTO GENERATED CODE + === TEST 20: x509:get_serial_number (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -498,7 +534,7 @@ false local c = myassert(require("resty.openssl.x509").new(f)) local get = myassert(c:get_serial_number()) - get = get:to_hex():upper() + get = get:to_hex() ngx.print(get) } } @@ -509,6 +545,8 @@ false --- no_error_log [error] + + === TEST 21: x509:set_serial_number (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -520,8 +558,8 @@ false local ok = myassert(c:set_serial_number(toset)) local get = myassert(c:get_serial_number()) - get = get:to_hex():upper() - toset = toset:to_hex():upper() + get = get:to_hex() + toset = toset:to_hex() if get ~= toset then ngx.say(get) ngx.say(toset) @@ -537,6 +575,8 @@ false --- no_error_log [error] + + === TEST 22: x509:get_not_before (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -556,6 +596,8 @@ false --- no_error_log [error] + + === TEST 23: x509:set_not_before (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -582,6 +624,8 @@ false --- no_error_log [error] + + === TEST 24: x509:get_not_after (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -601,6 +645,8 @@ false --- no_error_log [error] + + === TEST 25: x509:set_not_after (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -627,6 +673,8 @@ false --- no_error_log [error] + + === TEST 26: x509:get_pubkey (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -651,6 +699,8 @@ Tp+h/rnQjL05vAwjx8+RppBa2EWrAxO+wSN6ucTInUf2luC5dmtQNmb3DQ== --- no_error_log [error] + + === TEST 27: x509:set_pubkey (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -679,6 +729,8 @@ Tp+h/rnQjL05vAwjx8+RppBa2EWrAxO+wSN6ucTInUf2luC5dmtQNmb3DQ== --- no_error_log [error] + + === TEST 28: x509:get_subject_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -699,6 +751,8 @@ Tp+h/rnQjL05vAwjx8+RppBa2EWrAxO+wSN6ucTInUf2luC5dmtQNmb3DQ== --- no_error_log [error] + + === TEST 29: x509:set_subject_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -727,6 +781,8 @@ Tp+h/rnQjL05vAwjx8+RppBa2EWrAxO+wSN6ucTInUf2luC5dmtQNmb3DQ== --- no_error_log [error] + + === TEST 30: x509:get_issuer_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -747,6 +803,8 @@ Tp+h/rnQjL05vAwjx8+RppBa2EWrAxO+wSN6ucTInUf2luC5dmtQNmb3DQ== --- no_error_log [error] + + === TEST 31: x509:set_issuer_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -775,6 +833,8 @@ Tp+h/rnQjL05vAwjx8+RppBa2EWrAxO+wSN6ucTInUf2luC5dmtQNmb3DQ== --- no_error_log [error] + + === TEST 32: x509:get_version (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -794,6 +854,8 @@ Tp+h/rnQjL05vAwjx8+RppBa2EWrAxO+wSN6ucTInUf2luC5dmtQNmb3DQ== --- no_error_log [error] + + === TEST 33: x509:set_version (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -820,6 +882,8 @@ Tp+h/rnQjL05vAwjx8+RppBa2EWrAxO+wSN6ucTInUf2luC5dmtQNmb3DQ== --- no_error_log [error] + + === TEST 34: x509:get_subject_alt_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -840,6 +904,8 @@ Tp+h/rnQjL05vAwjx8+RppBa2EWrAxO+wSN6ucTInUf2luC5dmtQNmb3DQ== --- no_error_log [error] + + === TEST 35: x509:set_subject_alt_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -868,7 +934,9 @@ Tp+h/rnQjL05vAwjx8+RppBa2EWrAxO+wSN6ucTInUf2luC5dmtQNmb3DQ== --- no_error_log [error] -=== TEST 37: x509:get/set_subject_alt_name_critical (AUTOGEN) + + +=== TEST 36: x509:get/set_subject_alt_name_critical (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -890,7 +958,9 @@ true --- no_error_log [error] -=== TEST 38: x509:get/set_basic_constraints_critical (AUTOGEN) + + +=== TEST 37: x509:get/set_basic_constraints_critical (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -912,7 +982,9 @@ true --- no_error_log [error] -=== TEST 39: x509:get/set_info_access_critical (AUTOGEN) + + +=== TEST 38: x509:get/set_info_access_critical (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -934,7 +1006,9 @@ true --- no_error_log [error] -=== TEST 40: x509:get/set_crl_distribution_points_critical (AUTOGEN) + + +=== TEST 39: x509:get/set_crl_distribution_points_critical (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -956,7 +1030,9 @@ true --- no_error_log [error] -=== TEST 41: x509:get_get_signature_name (AUTOGEN) + + +=== TEST 40: x509:get_signature_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -985,4 +1061,4 @@ ecdsa-with-SHA256 SHA256 --- no_error_log [error] -# END AUTO GENERATED CODE \ No newline at end of file +# END AUTO GENERATED CODE diff --git a/t/openssl/x509/altname.t b/t/openssl/x509/altname.t index a6692d7f2..23d1a445d 100644 --- a/t/openssl/x509/altname.t +++ b/t/openssl/x509/altname.t @@ -23,6 +23,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Creates stack properly --- http_config eval: $::HttpConfig --- config @@ -41,6 +42,8 @@ __DATA__ --- no_error_log [error] + + === TEST 2: Adds elements to stack properly --- http_config eval: $::HttpConfig --- config @@ -65,6 +68,8 @@ __DATA__ --- no_error_log [error] + + === TEST 3: Element can be indexed properly --- http_config eval: $::HttpConfig --- config @@ -91,6 +96,8 @@ DNS 2.com --- no_error_log [error] + + === TEST 4: Element is duplicated when added to stack --- http_config eval: $::HttpConfig --- config @@ -115,6 +122,8 @@ DNS 2.com --- no_error_log [error] + + === TEST 5: Element is duplicated when returned --- http_config eval: $::HttpConfig --- config @@ -144,6 +153,8 @@ DNS 2.com --- no_error_log [error] + + === TEST 6: Element is not freed when stack is duplicated --- http_config eval: $::HttpConfig --- config @@ -172,6 +183,8 @@ DNS example.com --- no_error_log [error] + + === TEST 7: Unsupported SANs are returned as "unsupported" --- http_config eval: $::HttpConfig --- config @@ -206,6 +219,8 @@ RID:RID: --- no_error_log [error] + + === TEST 8: IP addresses are validated and parsed --- http_config eval: $::HttpConfig --- config @@ -235,4 +250,4 @@ RID:RID: --- response_body IP=1.2.3.4/IP=100.100.100.100/IP=255.255.255.255/IP=::1/IP=ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff --- no_error_log -[error] \ No newline at end of file +[error] diff --git a/t/openssl/x509/chain.t b/t/openssl/x509/chain.t index a4e5d3df2..2bdce409c 100644 --- a/t/openssl/x509/chain.t +++ b/t/openssl/x509/chain.t @@ -23,6 +23,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Creates stack properly --- http_config eval: $::HttpConfig --- config @@ -42,6 +43,8 @@ __DATA__ --- no_error_log [error] + + === TEST 2: Adds elements to stack properly --- http_config eval: $::HttpConfig --- config @@ -67,6 +70,8 @@ __DATA__ --- no_error_log [error] + + === TEST 3: Element can be indexed properly --- http_config eval: $::HttpConfig --- config @@ -95,6 +100,8 @@ __DATA__ --- no_error_log [error] + + === TEST 4: Element is duplicated when added to stack --- http_config eval: $::HttpConfig --- config @@ -119,6 +126,8 @@ __DATA__ --- no_error_log [error] + + === TEST 5: Element is duplicated when returned --- http_config eval: $::HttpConfig --- config @@ -144,6 +153,8 @@ __DATA__ --- no_error_log [error] + + === TEST 6: Element is not freed when stack is duplicated --- http_config eval: $::HttpConfig --- config @@ -170,4 +181,4 @@ __DATA__ 20 " --- no_error_log -[error] \ No newline at end of file +[error] diff --git a/t/openssl/x509/crl.t b/t/openssl/x509/crl.t index c5c774427..b24930da0 100644 --- a/t/openssl/x509/crl.t +++ b/t/openssl/x509/crl.t @@ -24,6 +24,7 @@ no_long_string(); run_tests(); __DATA__ + === TEST 1: Loads a crl --- http_config eval: $::HttpConfig --- config @@ -43,6 +44,8 @@ __DATA__ --- no_error_log [error] + + === TEST 2: Converts and loads PEM format --- http_config eval: $::HttpConfig --- config @@ -63,10 +66,12 @@ __DATA__ --- request GET /t --- response_body_like eval -"x509.crl.new.+(nested asn1 error|NESTED_ASN1_ERROR).+" +"x509.crl.new.+nested asn1 error.+" --- no_error_log [error] + + === TEST 3: Converts and loads DER format --- http_config eval: $::HttpConfig --- config @@ -87,10 +92,12 @@ __DATA__ --- request GET /t --- response_body_like eval -"x509.crl.new.+(no start line|NO_START_LINE).+" +"x509.crl.new.+no start line.+" --- no_error_log [error] + + === TEST 4: x509.crl:add_revoked should add revoked to crl --- http_config eval: $::HttpConfig --- config @@ -122,6 +129,8 @@ __DATA__ --- no_error_log [error] + + === TEST 5: x509.crl:add_revoked should fail if revoked is not instance of revoked --- http_config eval: $::HttpConfig --- config @@ -149,6 +158,7 @@ __DATA__ [error] + === TEST 6: x509.crl:sign should succeed --- http_config eval: $::HttpConfig --- config @@ -178,6 +188,8 @@ __DATA__ --- no_error_log [error] + + === TEST 7: x509.crl:text --- http_config eval: $::HttpConfig --- config @@ -195,6 +207,8 @@ __DATA__ --- no_error_log [error] + + === TEST 8: x509.crl metamethods --- http_config eval: $::HttpConfig --- config @@ -229,6 +243,8 @@ __DATA__ --- no_error_log [error] + + === TEST 9: x509.crl get_by_serial --- http_config eval: $::HttpConfig --- config @@ -255,6 +271,8 @@ truetrue --- no_error_log [error] + + === TEST 10: x509.crl doesn't error if revoked is empty (regression) --- http_config eval: $::HttpConfig --- config @@ -282,6 +300,7 @@ truetrue # START AUTO GENERATED CODE + === TEST 11: x509.crl:get_issuer_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -302,6 +321,8 @@ truetrue --- no_error_log [error] + + === TEST 12: x509.crl:set_issuer_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -330,6 +351,8 @@ truetrue --- no_error_log [error] + + === TEST 13: x509.crl:get_last_update (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -349,6 +372,8 @@ truetrue --- no_error_log [error] + + === TEST 14: x509.crl:set_last_update (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -375,6 +400,8 @@ truetrue --- no_error_log [error] + + === TEST 15: x509.crl:get_next_update (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -394,6 +421,8 @@ truetrue --- no_error_log [error] + + === TEST 16: x509.crl:set_next_update (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -420,6 +449,8 @@ truetrue --- no_error_log [error] + + === TEST 17: x509.crl:get_version (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -439,6 +470,8 @@ truetrue --- no_error_log [error] + + === TEST 18: x509.crl:set_version (AUTOGEN) --- http_config eval: $::HttpConfig --- config @@ -465,7 +498,9 @@ truetrue --- no_error_log [error] -=== TEST 20: x509.crl:get_get_signature_name (AUTOGEN) + + +=== TEST 19: x509.crl:get_signature_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { diff --git a/t/openssl/x509/csr.t b/t/openssl/x509/csr.t index 42d8239e6..19dccc771 100644 --- a/t/openssl/x509/csr.t +++ b/t/openssl/x509/csr.t @@ -24,6 +24,7 @@ no_long_string(); run_tests(); __DATA__ + === TEST 1: Loads a csr --- http_config eval: $::HttpConfig --- config @@ -43,6 +44,8 @@ __DATA__ --- no_error_log [error] + + === TEST 2: Converts and loads PEM format --- http_config eval: $::HttpConfig --- config @@ -63,10 +66,12 @@ __DATA__ --- request GET /t --- response_body_like eval -"x509.csr.new.+(nested asn1 error|NESTED_ASN1_ERROR).+" +"x509.csr.new.+nested asn1 error.+" --- no_error_log [error] + + === TEST 3: Converts and loads DER format --- http_config eval: $::HttpConfig --- config @@ -87,10 +92,12 @@ __DATA__ --- request GET /t --- response_body_like eval -"x509.csr.new.+(no start line|NO_START_LINE).+" +"x509.csr.new.+no start line.+" --- no_error_log [error] + + === TEST 4: Generates CSR with RSA pkey correctly --- http_config eval: $::HttpConfig --- config @@ -116,6 +123,8 @@ __DATA__ --- no_error_log [error] + + === TEST 5: Rejects invalid arguments --- http_config eval: $::HttpConfig --- config @@ -144,6 +153,7 @@ x509.csr:sign: expect a pkey instance at #1 [error] + === TEST 6: x509.csr:get_extensions of csr --- http_config eval: $::HttpConfig --- config @@ -167,6 +177,7 @@ x509.csr:sign: expect a pkey instance at #1 [error] + === TEST 7: x509.csr:get_extension by nid --- http_config eval: $::HttpConfig --- config @@ -198,6 +209,8 @@ nil --- no_error_log [error] + + === TEST 8: x509.csr:get_extension by nid name --- http_config eval: $::HttpConfig --- config @@ -220,6 +233,8 @@ nil --- no_error_log [error] + + === TEST 9: x509.csr:get_extension should return nil if wrong nid name is given --- http_config eval: $::HttpConfig --- config @@ -242,6 +257,8 @@ nil --- no_error_log [error] + + === TEST 10: Adds extension --- http_config eval: $::HttpConfig --- config @@ -276,6 +293,8 @@ nil --- no_error_log [error] + + === TEST 11: Set extension --- http_config eval: $::HttpConfig --- config @@ -304,6 +323,8 @@ nil --- no_error_log [error] + + === TEST 12: x509.csr:sign should succeed --- http_config eval: $::HttpConfig --- config @@ -328,13 +349,15 @@ nil --- no_error_log [error] -=== TEST 14: Check private key match + + +=== TEST 13: Check private key match --- http_config eval: $::HttpConfig --- config location =/t { content_by_lua_block { local util = require("csr") - local pkey = require("resty.openssl.pkey").new({ type = "EC", curve = "prime256v1" }) + local pkey = require("resty.openssl.pkey").new({ type = "EC" }) local der = myassert(util.create_csr(pkey, "dns1.com", "dns2.com", "dns3.com")) local csr = myassert(require("resty.openssl.x509.csr").new(der)) local ok, err = csr:check_private_key(pkey) @@ -349,7 +372,6 @@ nil local key2 = require("resty.openssl.pkey").new({ type = 'EC', - curve = "prime256v1", }) local ok, err = csr:check_private_key(key2) ngx.say(ok) @@ -362,8 +384,8 @@ nil "true nil false -.+(key type mismatch|KEY_TYPE_MISMATCH) -.+(key values mismatch|KEY_VALUES_MISMATCH) +.+key type mismatch.* +.+key values mismatch.* " --- no_error_log [error] @@ -371,7 +393,8 @@ false # START AUTO GENERATED CODE -=== TEST 15: x509.csr:get_subject_name (AUTOGEN) + +=== TEST 14: x509.csr:get_subject_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -391,7 +414,9 @@ false --- no_error_log [error] -=== TEST 16: x509.csr:set_subject_name (AUTOGEN) + + +=== TEST 15: x509.csr:set_subject_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -419,7 +444,9 @@ false --- no_error_log [error] -=== TEST 17: x509.csr:get_pubkey (AUTOGEN) + + +=== TEST 16: x509.csr:get_pubkey (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -448,7 +475,9 @@ cwIDAQAB --- no_error_log [error] -=== TEST 18: x509.csr:set_pubkey (AUTOGEN) + + +=== TEST 17: x509.csr:set_pubkey (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -476,7 +505,9 @@ cwIDAQAB --- no_error_log [error] -=== TEST 19: x509.csr:get_version (AUTOGEN) + + +=== TEST 18: x509.csr:get_version (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -495,7 +526,9 @@ cwIDAQAB --- no_error_log [error] -=== TEST 20: x509.csr:set_version (AUTOGEN) + + +=== TEST 19: x509.csr:set_version (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -521,7 +554,9 @@ cwIDAQAB --- no_error_log [error] -=== TEST 21: x509.csr:get_subject_alt_name (AUTOGEN) + + +=== TEST 20: x509.csr:get_subject_alt_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -541,7 +576,9 @@ cwIDAQAB --- no_error_log [error] -=== TEST 22: x509.csr:set_subject_alt_name (AUTOGEN) + + +=== TEST 21: x509.csr:set_subject_alt_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -569,7 +606,9 @@ cwIDAQAB --- no_error_log [error] -=== TEST 24: x509.csr:get/set_subject_alt_name_critical (AUTOGEN) + + +=== TEST 22: x509.csr:get/set_subject_alt_name_critical (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { @@ -591,7 +630,9 @@ true --- no_error_log [error] -=== TEST 25: x509.csr:get_get_signature_name (AUTOGEN) + + +=== TEST 23: x509.csr:get_signature_name (AUTOGEN) --- http_config eval: $::HttpConfig --- config location =/t { diff --git a/t/openssl/x509/extension.t b/t/openssl/x509/extension.t index a4e8c43c1..decb512da 100644 --- a/t/openssl/x509/extension.t +++ b/t/openssl/x509/extension.t @@ -24,6 +24,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Creates extension by nconf --- http_config eval: $::HttpConfig --- config @@ -39,6 +40,8 @@ __DATA__ --- no_error_log [error] + + === TEST 2: Gets extension object --- http_config eval: $::HttpConfig --- config @@ -59,6 +62,8 @@ __DATA__ --- no_error_log [error] + + === TEST 3: Gets extension critical --- http_config eval: $::HttpConfig --- config @@ -91,6 +96,8 @@ false --- no_error_log [error] + + === TEST 4: Set extension critical --- http_config eval: $::HttpConfig --- config @@ -115,6 +122,8 @@ true --- no_error_log [error] + + === TEST 5: Prints human readable txt of extension --- http_config eval: $::HttpConfig --- config @@ -163,6 +172,8 @@ CA Issuers - URI:http://cacerts.digicert.com/DigiCertHighAssuranceTLSHybridECCSH --- no_error_log [error] + + === TEST 6: Creates extension by X509V3_CTX --- http_config eval: $::HttpConfig --- config @@ -222,6 +233,8 @@ keyid:CF:03:F5:09:EB:83:D2:4F:10:DE:65:92:90:E9:93:3E:38:4C:E8:7C --- no_error_log [error] + + === TEST 7: Creates extension by data --- http_config eval: $::HttpConfig --- config @@ -246,6 +259,8 @@ DNS:test.com, DNS:test2.com --- no_error_log [error] + + === TEST 8: Convert extension to data --- http_config eval: $::HttpConfig --- config @@ -269,6 +284,8 @@ DNS:test.com, DNS:test2.com --- no_error_log [error] + + === TEST 9: Creates extension by der --- http_config eval: $::HttpConfig --- config @@ -288,6 +305,8 @@ DNS:test.com, DNS:test2.com --- no_error_log [error] + + === TEST 10: Creates extension by nconf --- http_config eval: $::HttpConfig --- config @@ -330,6 +349,8 @@ Policy: 1.3.5.8 --- no_error_log [error] + + === TEST 11: Returns DER encoded data --- http_config eval: $::HttpConfig --- config @@ -360,4 +381,4 @@ Policy: 1.3.5.8 308182302406082B060105050730018618687474703A2F2F6F6373702E64696769636572742E636F6D305A06082B06010505073002864E687474703A2F2F636163657274732E64696769636572742E636F6D2F4469676943657274486967684173737572616E6365544C53487962726964454343534841323536323032304341312E637274 " --- no_error_log -[error] \ No newline at end of file +[error] diff --git a/t/openssl/x509/extensions.t b/t/openssl/x509/extensions.t index 112e033e0..b1ab8b670 100644 --- a/t/openssl/x509/extensions.t +++ b/t/openssl/x509/extensions.t @@ -23,6 +23,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Creates stack properly --- http_config eval: $::HttpConfig --- config @@ -42,6 +43,8 @@ __DATA__ --- no_error_log [error] + + === TEST 2: Adds elements to stack properly --- http_config eval: $::HttpConfig --- config @@ -68,6 +71,8 @@ __DATA__ --- no_error_log [error] + + === TEST 3: Element can be indexed properly --- http_config eval: $::HttpConfig --- config @@ -99,6 +104,8 @@ TLS Web Server Authentication, TLS Web Client Authentication --- no_error_log [error] + + === TEST 4: Element is duplicated when added to stack --- http_config eval: $::HttpConfig --- config @@ -124,6 +131,8 @@ TLS Web Server Authentication, TLS Web Client Authentication --- no_error_log [error] + + === TEST 5: Element is duplicated when returned --- http_config eval: $::HttpConfig --- config @@ -150,6 +159,8 @@ TLS Web Server Authentication, TLS Web Client Authentication --- no_error_log [error] + + === TEST 6: Element is not freed when stack is duplicated --- http_config eval: $::HttpConfig --- config diff --git a/t/openssl/x509/name.t b/t/openssl/x509/name.t index 7f1641298..2c2e9380e 100644 --- a/t/openssl/x509/name.t +++ b/t/openssl/x509/name.t @@ -23,6 +23,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Duplicate the ctx --- http_config eval: $::HttpConfig --- config @@ -47,6 +48,8 @@ __DATA__ --- no_error_log [error] + + === TEST 2: Rejects invalid NID --- http_config eval: $::HttpConfig --- config @@ -68,6 +71,8 @@ x509.name:add: invalid NID text whatever --- no_error_log [error] + + === TEST 3: Finds by text --- http_config eval: $::HttpConfig --- config @@ -109,6 +114,7 @@ found 2 anotherdomain.com [error] + === TEST 4: Pairs --- http_config eval: $::HttpConfig --- config @@ -136,4 +142,4 @@ found 2 anotherdomain.com "6 13,13,13,15,16,17," --- no_error_log -[error] \ No newline at end of file +[error] diff --git a/t/openssl/x509/revoked.t b/t/openssl/x509/revoked.t index a60f3b7e5..ceb82b3b5 100644 --- a/t/openssl/x509/revoked.t +++ b/t/openssl/x509/revoked.t @@ -24,6 +24,7 @@ no_long_string(); run_tests(); __DATA__ + === TEST 1:revoked.new should create new revoked instance --- http_config eval: $::HttpConfig --- config @@ -47,6 +48,8 @@ __DATA__ --- no_error_log [error] + + === TEST 2:revoked.new should fail when invalid parameters are given --- http_config eval: $::HttpConfig --- config @@ -66,4 +69,4 @@ __DATA__ x509.revoked.new: sn should be number or a bn instance " --- no_error_log -[error] \ No newline at end of file +[error] diff --git a/t/openssl/x509/store.t b/t/openssl/x509/store.t index 16fd74c17..9f1618d09 100644 --- a/t/openssl/x509/store.t +++ b/t/openssl/x509/store.t @@ -23,6 +23,7 @@ our $HttpConfig = qq{ run_tests(); __DATA__ + === TEST 1: Creates store properly --- http_config eval: $::HttpConfig --- config @@ -40,6 +41,7 @@ __DATA__ [error] + === TEST 2: Loads a x509 object --- http_config eval: $::HttpConfig --- config @@ -59,6 +61,8 @@ __DATA__ --- no_error_log [error] + + === TEST 3: Loads default location --- http_config eval: $::HttpConfig --- config @@ -76,6 +80,8 @@ __DATA__ --- no_error_log [error] + + === TEST 4: Loads file --- http_config eval: $::HttpConfig --- config @@ -113,6 +119,7 @@ x509.store:load_file.+ [error] + === TEST 5: Verifies a x509 object --- http_config eval: $::HttpConfig --- config @@ -147,6 +154,7 @@ true [error] + === TEST 6: Using default CAs (skip due to hard to setup on custom-built openssl env) --- SKIP --- http_config eval: $::HttpConfig @@ -174,6 +182,8 @@ true --- no_error_log [error] + + === TEST 7: Loads directory --- http_config eval: $::HttpConfig --- config @@ -199,6 +209,8 @@ true --- no_error_log [error] + + === TEST 8: Verifies sub cert --- http_config eval: $::HttpConfig --- config @@ -237,6 +249,8 @@ B1BC968BD4F49D622AA89A81F2150152A41D829C --- no_error_log [error] + + === TEST 9: Set purpose --- http_config eval: $::HttpConfig --- config @@ -275,6 +289,8 @@ truenil --- no_error_log [error] + + === TEST 10: Set depth --- http_config eval: $::HttpConfig --- config @@ -309,6 +325,8 @@ nilcertificate chain too long --- no_error_log [error] + + === TEST 11: Verify with verify_method --- http_config eval: $::HttpConfig --- config @@ -348,6 +366,8 @@ nil(?:unsupported|unsuitable) certificate purpose --- no_error_log [error] + + === TEST 12: Set flags --- http_config eval: $::HttpConfig --- config @@ -380,6 +400,8 @@ truenil --- no_error_log [error] + + === TEST 13: Set verify time flags --- http_config eval: $::HttpConfig --- config @@ -411,6 +433,8 @@ truenil --- no_error_log [error] + + === TEST 14: Check revocation --- http_config eval: $::HttpConfig --- config @@ -467,4 +491,3 @@ nilcertificate revoked " --- no_error_log [error] - From d1d82aa300edf82ee6403459167ab98e17b6f8a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Fri, 29 Dec 2023 16:15:08 +0000 Subject: [PATCH 082/154] Add UI tests for the profile page and the Wizard --- tests/ui/docker-compose.dev.yml | 12 +- tests/ui/docker-compose.yml | 12 +- tests/ui/main.py | 308 ++++++++++++++++++++++++++++++-- tests/ui/requirements.in | 1 + tests/ui/requirements.txt | 4 + 5 files changed, 306 insertions(+), 31 deletions(-) diff --git a/tests/ui/docker-compose.dev.yml b/tests/ui/docker-compose.dev.yml index 817142cb4..c7b5d6db1 100644 --- a/tests/ui/docker-compose.dev.yml +++ b/tests/ui/docker-compose.dev.yml @@ -7,9 +7,8 @@ services: dockerfile: src/bw/Dockerfile ports: - 80:80 - - 443:8443 environment: - SERVER_NAME: "www.example.com" + SERVER_NAME: "" MULTISITE: "yes" HTTP_PORT: "80" API_WHITELIST_IP: "127.0.0.0/8 10.20.30.0/24" @@ -20,12 +19,7 @@ services: USE_CLIENT_CACHE: "yes" USE_GZIP: "yes" DATASTORE_MEMORY_SIZE: "384m" - www.example.com_USE_UI: "yes" - www.example.com_SERVE_FILES: "no" - www.example.com_USE_REVERSE_PROXY: "yes" - www.example.com_REVERSE_PROXY_URL: "/admin" - www.example.com_REVERSE_PROXY_HOST: "http://bw-ui:7000" - www.example.com_INTERCEPTED_ERROR_CODES: "400 405 413 429 500 501 502 503 504" + UI_HOST: "http://bw-ui:7000" labels: - "bunkerweb.INSTANCE=yes" networks: @@ -57,8 +51,6 @@ services: volumes: - bw-data:/data environment: - ADMIN_USERNAME: "admin" - ADMIN_PASSWORD: "S$$cr3tP@ssw0rd" DOCKER_HOST: "tcp://docker-proxy:2375" networks: - net-docker diff --git a/tests/ui/docker-compose.yml b/tests/ui/docker-compose.yml index 22c45d46c..302c8b6e8 100644 --- a/tests/ui/docker-compose.yml +++ b/tests/ui/docker-compose.yml @@ -6,9 +6,8 @@ services: pull_policy: never ports: - 80:80 - - 443:8443 environment: - SERVER_NAME: "www.example.com" + SERVER_NAME: "" MULTISITE: "yes" HTTP_PORT: "80" API_WHITELIST_IP: "127.0.0.0/8 10.20.30.0/24" @@ -20,13 +19,8 @@ services: USE_CLIENT_CACHE: "yes" USE_GZIP: "yes" DATASTORE_MEMORY_SIZE: "384m" - www.example.com_USE_UI: "yes" - www.example.com_SERVE_FILES: "no" - www.example.com_USE_REVERSE_PROXY: "yes" - www.example.com_REVERSE_PROXY_URL: "/admin" - www.example.com_REVERSE_PROXY_HOST: "http://bw-ui:7000" - www.example.com_INTERCEPTED_ERROR_CODES: "400 405 413 429 500 501 502 503 504" CUSTOM_CONF_SERVER_HTTP_port-redirect: "port_in_redirect on;" + UI_HOST: "http://bw-ui:7000" labels: - "bunkerweb.INSTANCE=yes" networks: @@ -54,8 +48,6 @@ services: - bw - bw-docker-proxy environment: - ADMIN_USERNAME: "admin" - ADMIN_PASSWORD: "S$$cr3tP@ssw0rd" DOCKER_HOST: "tcp://bw-docker-proxy:2375" volumes: - bw-data:/data diff --git a/tests/ui/main.py b/tests/ui/main.py index fcb580949..48fc8a9b4 100644 --- a/tests/ui/main.py +++ b/tests/ui/main.py @@ -7,6 +7,7 @@ from pathlib import Path from time import sleep from traceback import format_exc from typing import List, Union +from pyotp import TOTP from requests import get from requests.exceptions import RequestException from selenium import webdriver @@ -23,7 +24,7 @@ ready = False retries = 0 while not ready: with suppress(RequestException): - status_code = get("http://www.example.com/admin/login").status_code + status_code = get("http://127.0.0.1/setup").status_code if status_code > 500 and status_code != 502: print("An error occurred with the server, exiting ...", flush=True) @@ -178,9 +179,41 @@ with driver_func() as driver: driver.maximize_window() driver_wait = WebDriverWait(driver, 60) - print("Navigating to http://www.example.com/admin/login ...", flush=True) + print("Navigating to http://127.0.0.1/setup ...", flush=True) - driver.get("http://www.example.com/admin/login") + driver.get("http://127.0.0.1/setup") + + ### WIZARD PAGE + + try: + title = driver_wait.until(EC.presence_of_element_located((By.XPATH, "/html/body/main/div/div/h1"))) + + if title.text != "Setup Wizard": + print("Didn't get redirected to setup page, exiting ...", flush=True) + exit(1) + except TimeoutException: + print("Didn't get redirected to setup page, exiting ...", flush=True) + exit(1) + + print("Setup page loaded successfully, filling the form ...", flush=True) + + admin_username_input = safe_get_element(driver, By.ID, "admin_username") + password_input = safe_get_element(driver, By.ID, "admin_password") + password_check_input = safe_get_element(driver, By.ID, "admin_password_check") + ui_url = safe_get_element(driver, By.ID, "ui_url").get_attribute("value") + + admin_username_input.send_keys("admin") + password_input.send_keys("S$cr3tP@ssw0rd") + password_check_input.send_keys("S$cr3tP@ssw0rd") + + assert_button_click(driver, "//button[@id='setup-button']") + + print("Submitted the form, waiting for the wizard to finish ...", flush=True) + + current_time = datetime.now() + + while current_time + timedelta(minutes=5) > datetime.now() and not driver.current_url.endswith("/login"): + sleep(1) ### LOGIN PAGE @@ -197,7 +230,7 @@ with driver_func() as driver: flush=True, ) - driver.get("http://www.example.com/admin/home") + driver.get(f"http://www.example.com{ui_url}/home") print("Waiting for toast ...", flush=True) @@ -508,9 +541,9 @@ with driver_func() as driver: print("The service is not present, exiting ...", flush=True) exit(1) - if service.find_element(By.TAG_NAME, "h6").text.strip() != "scheduler": + if service.find_element(By.TAG_NAME, "h6").text.strip() != "ui": print( - "The service should have been created by the scheduler, exiting ...", + "The service should have been created by the ui, exiting ...", flush=True, ) exit(1) @@ -1260,8 +1293,8 @@ location /hello { current_date = datetime.now() resp = get( - f"http://www.example.com/admin/logs/{first_instance}?from_date={int(current_date.timestamp() - 86400000)}&to_date={int((current_date - timedelta(days=1)).timestamp())}", - headers={"Host": "www.example.com"}, + f"http://www.example.com{ui_url}/logs/{first_instance}?from_date={int(current_date.timestamp() - 86400000)}&to_date={int((current_date - timedelta(days=1)).timestamp())}", + headers={"Host": "www.example.com", "User-Agent": driver.execute_script("return navigator.userAgent;")}, cookies={"session": driver.get_cookies()[0]["value"]}, ) @@ -1396,13 +1429,173 @@ location /hello { sleep(0.3) - resp = get("http://www.example.com/admin/jobs/download?job_name=mmdb-country&file_name=country.mmdb") + resp = get(f"http://www.example.com{ui_url}/jobs/download?job_name=mmdb-country&file_name=country.mmdb") if resp.status_code != 200: print("The cache download is not working, exiting ...", flush=True) exit(1) - print("Cache download is working, trying to log out ...", flush=True) + print("Cache download is working, trying profile page ...", flush=True) + + access_page(driver, driver_wait, "/html/body/aside[1]/div[1]/div[2]/ul/li[10]/a", "profile") + + ### PROFILE PAGE + + username_input = safe_get_element(driver, By.ID, "admin_username") + + if username_input.get_attribute("value") != "admin": + print("The username is not correct, exiting ...", flush=True) + exit(1) + + username_input.clear() + username_input.send_keys("admin2") + + password_input = safe_get_element(driver, By.ID, "curr_password") + + if password_input.get_attribute("value") != "": + print("The current password is not empty, exiting ...", flush=True) + exit(1) + + password_input.send_keys("S$cr3tP@ssw0rd") + + assert_button_click(driver, "//button[@id='profile-button' and @class='edit-btn']") + + try: + title = driver_wait.until(EC.presence_of_element_located((By.XPATH, "/html/body/main/div[1]/div/h1"))) + + if title.text != "Log in": + print("Didn't get redirected to login page, exiting ...", flush=True) + exit(1) + except TimeoutException: + print("Login page didn't load in time, exiting ...", flush=True) + exit(1) + + print("Successfully changed username, trying to log in with new username ...", flush=True) + + username_input = safe_get_element(driver, By.ID, "username") + password_input = safe_get_element(driver, By.ID, "password") + username_input.send_keys("admin2") + password_input.send_keys("S$cr3tP@ssw0rd") + + access_page( + driver, + driver_wait, + "//button[@value='login']", + "profile", + ) + + username_input = safe_get_element(driver, By.ID, "admin_username") + + if username_input.get_attribute("value") != "admin2": + print("The username is not correct, exiting ...", flush=True) + exit(1) + + print("Successfully logged in with new username, trying to change password ...", flush=True) + + password_input = safe_get_element(driver, By.ID, "curr_password") + + if password_input.get_attribute("value") != "": + print("The current password is not empty, exiting ...", flush=True) + exit(1) + + password_input.send_keys("S$cr3tP@ssw0rd") + + new_password_input = safe_get_element(driver, By.ID, "admin_password") + + if new_password_input.get_attribute("value") != "": + print("The new password is not empty, exiting ...", flush=True) + exit(1) + + new_password_input.send_keys("P@ssw0rd") + + new_password_check_input = safe_get_element(driver, By.ID, "admin_password_check") + + if new_password_check_input.get_attribute("value") != "": + print("The new password check is not empty, exiting ...", flush=True) + exit(1) + + new_password_check_input.send_keys("P@ssw0rd") + + assert_button_click(driver, "//button[@id='profile-button' and @class='edit-btn']") + + try: + title = driver_wait.until(EC.presence_of_element_located((By.XPATH, "/html/body/main/div[1]/div/h1"))) + + if title.text != "Log in": + print("Didn't get redirected to login page, exiting ...", flush=True) + exit(1) + except TimeoutException: + print("Login page didn't load in time, exiting ...", flush=True) + exit(1) + + print("Successfully changed username, trying to log in with new password ...", flush=True) + + username_input = safe_get_element(driver, By.ID, "username") + password_input = safe_get_element(driver, By.ID, "password") + username_input.send_keys("admin2") + password_input.send_keys("P@ssw0rd") + + access_page( + driver, + driver_wait, + "//button[@value='login']", + "profile", + ) + + print("Successfully logged in with new password, trying 2FA ...", flush=True) + + assert_button_click(driver, "//button[@data-tab-handler='totp']") + + secret_token_input = safe_get_element(driver, By.ID, "secret_token") + secret_token = secret_token_input.get_attribute("value") + + driver.refresh() + + driver_wait.until(EC.presence_of_element_located((By.XPATH, "/html/body/div/header/div/nav/h6"))) + + assert_button_click(driver, "//button[@data-tab-handler='totp']") + + secret_token_input = safe_get_element(driver, By.ID, "secret_token") + new_secret_token = secret_token_input.get_attribute("value") + + if new_secret_token == secret_token: + print("The secret token hasn't been changed, exiting ...", flush=True) + exit(1) + + print("The secret token has been changed, trying to activate 2FA ...", flush=True) + + totp = TOTP(new_secret_token) + totp_input = safe_get_element(driver, By.ID, "totp_token") + totp_input.send_keys(totp.now()) + + password_input = safe_get_element(driver, By.ID, "totp_password") + + if password_input.get_attribute("value") != "": + print("The new password check is not empty, exiting ...", flush=True) + exit(1) + + password_input.send_keys("P@ssw0rd") + + access_page( + driver, + driver_wait, + "//button[@id='profile-button' and @class='valid-btn']", + "profile", + ) + + assert_button_click(driver, "//button[@data-tab-handler='totp']") + + try: + totp_state = safe_get_element(driver, By.XPATH, "/html/body/main/div/div/form[2]/h5") + + if totp_state.text != "TOTP IS CURRENTLY ON": + print("TOTP is not activated, exiting ...", flush=True) + exit(1) + except TimeoutException: + print("TOTP has not been activated, exiting ...", flush=True) + exit(1) + + print("2FA has been activated, trying to log out ...", flush=True) assert_button_click(driver, "//a[@href='logout']") @@ -1416,7 +1609,100 @@ location /hello { print("Login page didn't load in time, exiting ...", flush=True) exit(1) - print("Successfully logged out, tests are done", flush=True) + print("Successfully logged out, trying to log in with 2FA ...", flush=True) + + username_input = safe_get_element(driver, By.ID, "username") + password_input = safe_get_element(driver, By.ID, "password") + username_input.send_keys("admin2") + password_input.send_keys("P@ssw0rd") + + assert_button_click(driver, "//button[@value='login']") + + try: + totp_input = safe_get_element(driver, By.ID, "totp_token") + except TimeoutException: + print("Didn't get redirected to 2FA page, exiting ...", flush=True) + exit(1) + + totp_input.send_keys("0000000") + assert_button_click(driver, "//button[@value='login']") + + sleep(5) + + if not driver.current_url.endswith("/totp"): + print("Didn't get redirected back to 2FA page, exiting ...", flush=True) + exit(1) + + totp_input = safe_get_element(driver, By.ID, "totp_token") + totp_input.send_keys(totp.now()) + + access_page( + driver, + driver_wait, + "//button[@value='login']", + "home", + ) + + print("Successfully logged in with 2FA, trying to deactivate 2FA ...", flush=True) + + access_page(driver, driver_wait, "/html/body/aside[1]/div[1]/div[2]/ul/li[10]/a", "profile") + + assert_button_click(driver, "//button[@data-tab-handler='totp']") + + totp_input = safe_get_element(driver, By.ID, "totp_token") + totp_input.send_keys(totp.now()) + + password_input = safe_get_element(driver, By.ID, "totp_password") + password_input.send_keys("P@ssw0rd") + + access_page( + driver, + driver_wait, + "//button[@id='profile-button' and @class='delete-btn']", + "profile", + ) + + assert_button_click(driver, "//button[@data-tab-handler='totp']") + + try: + totp_state = safe_get_element(driver, By.XPATH, "/html/body/main/div/div/form[2]/h5") + + if totp_state.text != "TOTP IS CURRENTLY OFF": + print("TOTP is not deactivated, exiting ...", flush=True) + exit(1) + except TimeoutException: + print("TOTP has not been deactivated, exiting ...", flush=True) + exit(1) + + print("2FA has been deactivated, trying to log out ...", flush=True) + + assert_button_click(driver, "//a[@href='logout']") + + try: + title = driver_wait.until(EC.presence_of_element_located((By.XPATH, "/html/body/main/div[1]/div/h1"))) + + if title.text != "Log in": + print("Didn't get redirected to login page, exiting ...", flush=True) + exit(1) + except TimeoutException: + print("Login page didn't load in time, exiting ...", flush=True) + exit(1) + + print("Successfully logged out, trying to log in without 2FA ...", flush=True) + + username_input = safe_get_element(driver, By.ID, "username") + password_input = safe_get_element(driver, By.ID, "password") + username_input.send_keys("admin2") + password_input.send_keys("P@ssw0rd") + + access_page( + driver, + driver_wait, + "//button[@value='login']", + "home", + ) + + print("Successfully logged in without 2FA, tests are done, exiting ...", flush=True) except SystemExit: exit(1) except: diff --git a/tests/ui/requirements.in b/tests/ui/requirements.in index 49cb1341f..c215e69bd 100644 --- a/tests/ui/requirements.in +++ b/tests/ui/requirements.in @@ -1,2 +1,3 @@ +pyotp==2.9.0 requests==2.31.0 selenium==4.16.0 diff --git a/tests/ui/requirements.txt b/tests/ui/requirements.txt index 5569ddd33..99ddbd31e 100644 --- a/tests/ui/requirements.txt +++ b/tests/ui/requirements.txt @@ -128,6 +128,10 @@ outcome==1.3.0.post0 \ --hash=sha256:9dcf02e65f2971b80047b377468e72a268e15c0af3cf1238e6ff14f7f91143b8 \ --hash=sha256:e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b # via trio +pyotp==2.9.0 \ + --hash=sha256:346b6642e0dbdde3b4ff5a930b664ca82abfa116356ed48cc42c7d6590d36f63 \ + --hash=sha256:81c2e5865b8ac55e825b0358e496e1d9387c811e85bb40e71a3b29b288963612 + # via -r requirements.in pysocks==1.7.1 \ --hash=sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299 \ --hash=sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 \ From 91448f1f45410b208e4160059164ca9ffcfd4113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Fri, 29 Dec 2023 16:15:34 +0000 Subject: [PATCH 083/154] Add a log in the UI when a login attempt is made --- src/ui/main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ui/main.py b/src/ui/main.py index d10708124..e7d26309a 100755 --- a/src/ui/main.py +++ b/src/ui/main.py @@ -1660,6 +1660,7 @@ def jobs_download(): def login(): fail = False if request.method == "POST" and "username" in request.form and "password" in request.form: + app.logger.warning(f"Login attempt from {request.remote_addr} with username \"{request.form['username']}\"") if app.config["USER"].get_id() == request.form["username"] and app.config["USER"].check_password(request.form["password"]): # log the user in session["ip"] = request.remote_addr From fdb01b305949e82a0a80460206c6084497b334a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Fri, 29 Dec 2023 16:16:11 +0000 Subject: [PATCH 084/154] Fix shenanigans with the ui user edition --- src/common/db/Database.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/common/db/Database.py b/src/common/db/Database.py index 7b8f4c438..eafa92c47 100644 --- a/src/common/db/Database.py +++ b/src/common/db/Database.py @@ -1700,7 +1700,7 @@ class Database: return "" - def update_ui_user(self, username: str, password: bytes, is_two_factor_enabled: bool = False, secret_token: Optional[str] = None) -> str: + def update_ui_user(self, username: str, password: bytes, is_two_factor_enabled: bool = False, secret_token: Optional[str] = None, method: str = "ui") -> str: """Update ui user.""" with self.__db_session() as session: user = session.query(Users).filter_by(id=1).first() @@ -1711,6 +1711,7 @@ class Database: user.password = password.decode("utf-8") user.is_two_factor_enabled = is_two_factor_enabled user.secret_token = secret_token + user.method = method try: session.commit() From a5e0ceed3be78085e9b85dc40714b89309c32be4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Fri, 29 Dec 2023 16:16:58 +0000 Subject: [PATCH 085/154] [#795] Add setting REVERSE_PROXY_INCLUDES to manually add "include" directives in the reverse proxies --- .../reverseproxy/confs/server-http/reverse-proxy.conf | 6 ++++++ src/common/core/reverseproxy/plugin.json | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/common/core/reverseproxy/confs/server-http/reverse-proxy.conf b/src/common/core/reverseproxy/confs/server-http/reverse-proxy.conf index 2024cac6c..e39a58697 100644 --- a/src/common/core/reverseproxy/confs/server-http/reverse-proxy.conf +++ b/src/common/core/reverseproxy/confs/server-http/reverse-proxy.conf @@ -38,6 +38,7 @@ add_header X-Proxy-Cache $upstream_cache_status; {% set connect_timeout = all[k.replace("URL", "CONNECT_TIMEOUT")] if k.replace("URL", "CONNECT_TIMEOUT") in all else "60s" %} {% set read_timeout = all[k.replace("URL", "READ_TIMEOUT")] if k.replace("URL", "READ_TIMEOUT") in all else "60s" %} {% set send_timeout = all[k.replace("URL", "SEND_TIMEOUT")] if k.replace("URL", "SEND_TIMEOUT") in all else "60s" %} + {% set includes = all[k.replace("URL", "INCLUDES")] if k.replace("URL", "INCLUDES") in all else "" %} location {{ url }} {% raw %}{{% endraw +%} etag off; set $backend{{ counter.value }} "{{ host }}"; @@ -88,6 +89,11 @@ location {{ url }} {% raw %}{{% endraw +%} proxy_connect_timeout {{ connect_timeout }}; proxy_read_timeout {{ read_timeout }}; proxy_send_timeout {{ send_timeout }}; + {% if includes != "" +%} + {% for include in includes.split(" ") +%} + include {{ include }}; + {% endfor +%} + {% endif +%} {% raw %}}{% endraw %} {% endif %} {% set counter.value = counter.value + 1 %} diff --git a/src/common/core/reverseproxy/plugin.json b/src/common/core/reverseproxy/plugin.json index c28e668ec..846628c3c 100644 --- a/src/common/core/reverseproxy/plugin.json +++ b/src/common/core/reverseproxy/plugin.json @@ -242,6 +242,16 @@ "regex": "^\\d+(ms?|[shdwMy])$", "type": "text", "multiple": "reverse-proxy" + }, + "REVERSE_PROXY_INCLUDES": { + "context": "multisite", + "default": "", + "help": "Additional configuration to include in the location block, separated with spaces.", + "id": "reverse-proxy-includes", + "label": "Reverse proxy includes", + "regex": "^(?! )( ?(\\w+)(?!.*\\b\\2\\b))*$", + "type": "text", + "multiple": "reverse-proxy" } } } From aea3fae2ba397d03d1f39016df5169acb9fb7ce1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Fri, 29 Dec 2023 16:17:22 +0000 Subject: [PATCH 086/154] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b787474c8..c46b36878 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - [FEATURE] Add Anonymous reporting feature - [FEATURE] Add support for fallback Referrer-Policies - [FEATURE] Add profile page to web ui and the possibility to activate the 2FA +- [FEATURE] Add setting REVERSE_PROXY_INCLUDES to manually add "include" directives in the reverse proxies - [MISC] Fallback to default HTTPS certificate to prevent errors - [MISC] Updated Python Docker image to 3.12.1-alpine3.18 in Dockerfiles - [DEPS] Updated ModSecurity to v3.0.11 From 077b2c1c137fc660903bd36160530c762719ba4a Mon Sep 17 00:00:00 2001 From: florian Date: Sat, 30 Dec 2023 14:00:30 +0100 Subject: [PATCH 087/154] bw - various improvements and refactoring (WIP) --- src/bw/lua/bunkerweb/api.lua | 196 +++++++++++------ src/bw/lua/bunkerweb/cachestore.lua | 63 +++--- src/bw/lua/bunkerweb/clusterstore.lua | 98 +++++---- src/bw/lua/bunkerweb/datastore.lua | 39 +++- src/bw/lua/bunkerweb/helpers.lua | 119 +++++----- src/bw/lua/bunkerweb/logger.lua | 7 +- src/bw/lua/bunkerweb/plugin.lua | 51 +++-- src/bw/lua/bunkerweb/utils.lua | 208 +++++++++++------- src/common/confs/api.conf | 48 ++-- src/common/confs/default-server-http.conf | 56 +++-- src/common/confs/init-lua.conf | 94 ++++---- src/common/confs/init-stream-lua.conf | 92 ++++---- src/common/confs/init-worker-lua.conf | 59 ++--- src/common/confs/server-http/access-lua.conf | 92 +++++--- src/common/confs/server-http/header-lua.conf | 52 +++-- src/common/confs/server-http/log-lua.conf | 60 ++--- src/common/confs/server-http/set-lua.conf | 64 +++--- .../server-http/ssl-certificate-lua.conf | 52 +++-- src/common/core/antibot/antibot.lua | 121 +++++----- .../antibot/confs/server-http/antibot.conf | 20 +- src/common/core/badbehavior/badbehavior.lua | 47 ++-- src/common/core/blacklist/blacklist.lua | 48 ++-- src/common/core/bunkernet/bunkernet.lua | 83 ++++--- src/common/core/cors/cors.lua | 39 ++-- src/common/core/country/country.lua | 17 +- src/common/core/customcert/customcert.lua | 34 ++- src/common/core/dnsbl/dnsbl.lua | 41 ++-- src/common/core/errors/errors.lua | 10 +- src/common/core/greylist/greylist.lua | 44 ++-- src/common/core/headers/headers.lua | 28 ++- src/common/core/letsencrypt/letsencrypt.lua | 88 +++++--- src/common/core/limit/limit.lua | 41 ++-- src/common/core/misc/misc.lua | 11 +- src/common/core/redis/redis.lua | 5 +- src/common/core/reversescan/reversescan.lua | 22 +- src/common/core/selfsigned/selfsigned.lua | 34 ++- src/common/core/sessions/sessions.lua | 14 +- src/common/core/whitelist/whitelist.lua | 71 +++--- 38 files changed, 1383 insertions(+), 885 deletions(-) diff --git a/src/bw/lua/bunkerweb/api.lua b/src/bw/lua/bunkerweb/api.lua index 6e969343d..2c4962228 100644 --- a/src/bw/lua/bunkerweb/api.lua +++ b/src/bw/lua/bunkerweb/api.lua @@ -1,24 +1,52 @@ +local ngx = ngx +local ngx_req = ngx.req local cjson = require "cjson" local class = require "middleclass" -local datastore = require "bunkerweb.datastore" -local logger = require "bunkerweb.logger" +local cdatastore = require "bunkerweb.datastore" +local clogger = require "bunkerweb.logger" local process = require "ngx.process" local rsignal = require "resty.signal" local upload = require "resty.upload" local utils = require "bunkerweb.utils" +local helpers = require "bunkerweb.helpers" local api = class("api") +local datastore = cdatastore:new() +local logger = clogger:new("API") + +local get_variable = utils.get_variable +local is_ip_in_networks = utils.is_ip_in_networks +-- local run = shell.run +local NOTICE = ngx.NOTICE +local ERR = ngx.ERR +local HTTP_OK = ngx.HTTP_OK +local HTTP_INTERNAL_SERVER_ERROR = ngx.HTTP_INTERNAL_SERVER_ERROR +local HTTP_BAD_REQUEST = ngx.HTTP_BAD_REQUEST +local HTTP_NOT_FOUND = ngx.HTTP_NOT_FOUND +local kill = rsignal.kill +local get_master_pid = process.get_master_pid +local execute = os.execute +local open = io.open +local read_body = ngx_req.read_body +local get_body_data = ngx_req.get_body_data +local get_body_file = ngx_req.get_body_file +local decode = cjson.decode +local encode = cjson.encode +local floor = math.floor +local match = string.match +local require_plugin = helpers.require_plugin +local new_plugin = helpers.new_plugin +local call_plugin = helpers.call_plugin + api.global = { GET = {}, POST = {}, PUT = {}, DELETE = {} } -function api:initialize() - self.datastore = datastore:new() - self.logger = logger:new("API") - self.ctx = ngx.ctx - local data, err = utils.get_variable("API_WHITELIST_IP", false) +function api:initialize(ctx) + self.ctx = ctx + local data, err = get_variable("API_WHITELIST_IP", false) self.ips = {} if not data then - self.logger.log(ngx.ERR, "can't get API_WHITELIST_IP variable : " .. err) + logger:log(ERR, "can't get API_WHITELIST_IP variable : " .. err) else for ip in data:gmatch("%S+") do table.insert(self.ips, ip) @@ -28,23 +56,23 @@ end -- luacheck: ignore 212 function api:log_cmd(cmd, status, stdout, stderr) - local level = ngx.NOTICE + local level = NOTICE local prefix = "success" if status ~= 0 then - level = ngx.ERR + level = ERR prefix = "error" end - self.logger:log(level, prefix .. " while running command " .. cmd) - self.logger:log(level, "stdout = " .. stdout) - self.logger:log(level, "stdout = " .. stderr) + logger:log(level, prefix .. " while running command " .. cmd) + logger:log(level, "stdout = " .. stdout) + logger:log(level, "stdout = " .. stderr) end -- TODO : use this if we switch to OpenResty function api:cmd(cmd) -- Non-blocking command -- luacheck: ignore 113 - local ok, stdout, stderr, reason, status = shell.run(cmd, nil, 10000) - self.logger:log_cmd(cmd, status, stdout, stderr) + local ok, stdout, stderr, reason, status = run(cmd, nil, 10000) + self:log_cmd(cmd, status, stdout, stderr) -- Timeout if ok == nil then return nil, reason @@ -62,25 +90,30 @@ function api:response(http_status, api_status, msg) end api.global.GET["^/ping$"] = function(self) - return self:response(ngx.HTTP_OK, "success", "pong") + return self:response(HTTP_OK, "success", "pong") end api.global.POST["^/reload$"] = function(self) - -- Send HUP signal to master process - local ok, err = rsignal.kill(process.get_master_pid(), "HUP") - if not ok then - return self:response(ngx.HTTP_INTERNAL_SERVER_ERROR, "error", "err = " .. err) + -- Check config + local status = execute("nginx -t") + if status ~= 0 then + return self:response(HTTP_INTERNAL_SERVER_ERROR, "error", "config check failed") end - return self:response(ngx.HTTP_OK, "success", "reload successful") + -- Send HUP signal to master process + local ok, err = kill(get_master_pid(), "HUP") + if not ok then + return self:response(HTTP_INTERNAL_SERVER_ERROR, "error", "err = " .. err) + end + return self:response(HTTP_OK, "success", "reload successful") end api.global.POST["^/stop$"] = function(self) -- Send QUIT signal to master process - local ok, err = rsignal.kill(process.get_master_pid(), "QUIT") + local ok, err = kill(get_master_pid(), "QUIT") if not ok then - return self:response(ngx.HTTP_INTERNAL_SERVER_ERROR, "error", "err = " .. err) + return self:response(HTTP_INTERNAL_SERVER_ERROR, "error", "err = " .. err) end - return self:response(ngx.HTTP_OK, "success", "stop successful") + return self:response(HTTP_OK, "success", "stop successful") end api.global.POST["^/confs$"] = function(self) @@ -99,16 +132,19 @@ api.global.POST["^/confs$"] = function(self) end local form, err = upload:new(4096) if not form then - return self:response(ngx.HTTP_BAD_REQUEST, "error", err) + return self:response(HTTP_BAD_REQUEST, "error", err) end form:set_timeout(1000) - local file = io.open(tmp, "w+") + local file, err = open(tmp, "w+") + if not file then + return self:response(HTTP_INTERNAL_SERVER_ERROR, "error", err) + end while true do -- luacheck: ignore 421 local typ, res, err = form:read() if not typ then file:close() - return self:response(ngx.HTTP_BAD_REQUEST, "error", err) + return self:response(HTTP_BAD_REQUEST, "error", err) end if typ == "eof" then break @@ -124,12 +160,12 @@ api.global.POST["^/confs$"] = function(self) "tar xzf " .. tmp .. " -C " .. destination, } for _, cmd in ipairs(cmds) do - local status = os.execute(cmd) + local status = execute(cmd) if status ~= 0 then - return self:response(ngx.HTTP_INTERNAL_SERVER_ERROR, "error", "exit status = " .. tostring(status)) + return self:response(HTTP_INTERNAL_SERVER_ERROR, "error", "exit status = " .. tostring(status)) end end - return self:response(ngx.HTTP_OK, "success", "saved data at " .. destination) + return self:response(HTTP_OK, "success", "saved data at " .. destination) end api.global.POST["^/data$"] = api.global.POST["^/confs$"] @@ -141,80 +177,86 @@ api.global.POST["^/custom_configs$"] = api.global.POST["^/confs$"] api.global.POST["^/plugins$"] = api.global.POST["^/confs$"] api.global.POST["^/unban$"] = function(self) - ngx.req.read_body() - local data = ngx.req.get_body_data() + read_body() + local data = get_body_data() if not data then - local data_file = ngx.req.get_body_file() + local data_file = get_body_file() if data_file then - local file = io.open(data_file) + local file, err = open(data_file) + if not file then + return self:response(HTTP_INTERNAL_SERVER_ERROR, "error", err) + end data = file:read("*a") file:close() end end - local ok, ip = pcall(cjson.decode, data) + local ok, ip = pcall(decode, data) if not ok then - return self:response(ngx.HTTP_INTERNAL_SERVER_ERROR, "error", "can't decode JSON : " .. ip) + return self:response(HTTP_INTERNAL_SERVER_ERROR, "error", "can't decode JSON : " .. ip) end - self.datastore:delete("bans_ip_" .. ip["ip"]) - return self:response(ngx.HTTP_OK, "success", "ip " .. ip["ip"] .. " unbanned") + datastore:delete("bans_ip_" .. ip["ip"]) + return self:response(HTTP_OK, "success", "ip " .. ip["ip"] .. " unbanned") end api.global.POST["^/ban$"] = function(self) - ngx.req.read_body() - local data = ngx.req.get_body_data() + read_body() + local data = get_body_data() if not data then - local data_file = ngx.req.get_body_file() + local data_file = get_body_file() if data_file then - local file = io.open(data_file) + local file, err = io.open(data_file) + if not file then + return self:response(HTTP_INTERNAL_SERVER_ERROR, "error", err) + end data = file:read("*a") file:close() end end - local ok, ip = pcall(cjson.decode, data) + local ok, ip = pcall(decode, data) if not ok then - return self:response(ngx.HTTP_INTERNAL_SERVER_ERROR, "error", "can't decode JSON : " .. ip) + return self:response(HTTP_INTERNAL_SERVER_ERROR, "error", "can't decode JSON : " .. ip) end - self.datastore:set("bans_ip_" .. ip["ip"], "manual", ip["exp"]) - return self:response(ngx.HTTP_OK, "success", "ip " .. ip["ip"] .. " banned") + datastore:set("bans_ip_" .. ip["ip"], "manual", ip["exp"]) + return self:response(HTTP_OK, "success", "ip " .. ip["ip"] .. " banned") end api.global.GET["^/bans$"] = function(self) local data = {} - for _, k in ipairs(self.datastore:keys()) do + for _, k in ipairs(datastore:keys()) do if k:find("^bans_ip_") then - local reason, err = self.datastore:get(k) + local reason, err = datastore:get(k) if err then return self:response( - ngx.HTTP_INTERNAL_SERVER_ERROR, + HTTP_INTERNAL_SERVER_ERROR, "error", "can't access " .. k .. " from datastore : " .. reason ) end - local ok, ttl = self.datastore:ttl(k) + local ok, ttl = datastore:ttl(k) if not ok then return self:response( - ngx.HTTP_INTERNAL_SERVER_ERROR, + HTTP_INTERNAL_SERVER_ERROR, "error", "can't access ttl " .. k .. " from datastore : " .. ttl ) end - local ban = { ip = k:sub(9, #k), reason = reason, exp = math.floor(ttl) } + local ban = { ip = k:sub(9, #k), reason = reason, exp = floor(ttl) } table.insert(data, ban) end end - return self:response(ngx.HTTP_OK, "success", data) + return self:response(HTTP_OK, "success", data) end api.global.GET["^/variables$"] = function(self) local variables, err = datastore:get("variables", true) if not variables then - return self:response(ngx.HTTP_INTERNAL_SERVER_ERROR, "error", "can't access variables from datastore : " .. err) + return self:response(HTTP_INTERNAL_SERVER_ERROR, "error", "can't access variables from datastore : " .. err) end - return self:response(ngx.HTTP_OK, "success", variables) + return self:response(HTTP_OK, "success", variables) end function api:is_allowed_ip() - if utils.is_ip_in_networks(self.ctx.bw.remote_addr, self.ips) then + if is_ip_in_networks(self.ctx.bw.remote_addr, self.ips) then return true, "ok" end return false, "IP is not in API_WHITELIST_IP" @@ -223,10 +265,10 @@ end function api:do_api_call() if self.global[self.ctx.bw.request_method] ~= nil then for uri, api_fun in pairs(self.global[self.ctx.bw.request_method]) do - if string.match(self.ctx.bw.uri, uri) then + if match(self.ctx.bw.uri, uri) then local status, resp = api_fun(self) local ret = true - if status ~= ngx.HTTP_OK then + if status ~= HTTP_OK then ret = false end if #resp["msg"] == 0 then @@ -235,26 +277,36 @@ function api:do_api_call() resp["data"] = resp["msg"] resp["msg"] = resp["status"] end - return ret, resp["msg"], status, cjson.encode(resp) + return ret, resp["msg"], status, encode(resp) end end end - local list, err = self.datastore:get("plugins", true) + local list, err = datastore:get("plugins", true) if not list then - local _, resp = self:response(ngx.HTTP_INTERNAL_SERVER_ERROR, "error", "can't list loaded plugins : " .. err) - return false, resp["msg"], ngx.HTTP_INTERNAL_SERVER_ERROR, cjson.encode(resp) + local _, resp = self:response(HTTP_INTERNAL_SERVER_ERROR, "error", "can't list loaded plugins : " .. err) + return false, resp["msg"], HTTP_INTERNAL_SERVER_ERROR, encode(resp) end for _, plugin in ipairs(list) do - if pcall(require, plugin.id .. "/" .. plugin.id) then - local plugin_lua = require(plugin.id .. "/" .. plugin.id) - if plugin_lua.api ~= nil then - local matched, status, resp = plugin_lua:api(self.ctx) - if matched then - local ret = true - if status ~= ngx.HTTP_OK then - ret = false + local plugin_lua, err = require_plugin(plugin.id) + if plugin_lua and plugin_lua.api ~= nil then + local ok, plugin_obj = new_plugin(plugin_lua, self.ctx) + if not ok then + logger:log(ERR, "can't instantiate " .. plugin.id .. " : " .. plugin_obj) + else + local ok, ret = call_plugin(plugin_obj, "api") + if not ok then + logger:log(ERR, "error while executing " .. plugin.id .. ":api() : " .. ret) + else + if ret.ret then + local resp = {} + if ret.status == HTTP_OK then + resp["status"] = "success" + else + resp["status"] = "error" + end + resp["msg"] = ret.msg + return ret.status == HTTP_OK, resp["status"], ret.status, encode(resp) end - return ret, resp["msg"], status, cjson.encode(resp) end end end @@ -262,7 +314,7 @@ function api:do_api_call() local resp = {} resp["status"] = "error" resp["msg"] = "not found" - return false, "error", ngx.HTTP_NOT_FOUND, cjson.encode(resp) + return false, "error", HTTP_NOT_FOUND, encode(resp) end return api diff --git a/src/bw/lua/bunkerweb/cachestore.lua b/src/bw/lua/bunkerweb/cachestore.lua index b26b6c474..e349d51d8 100644 --- a/src/bw/lua/bunkerweb/cachestore.lua +++ b/src/bw/lua/bunkerweb/cachestore.lua @@ -1,17 +1,27 @@ +local ngx = ngx local class = require "middleclass" local clusterstore = require "bunkerweb.clusterstore" -local logger = require "bunkerweb.logger" +local clogger = require "bunkerweb.logger" local mlcache = require "resty.mlcache" local utils = require "bunkerweb.utils" local cachestore = class("cachestore") +local logger = clogger:new("CACHESTORE") + +local subsystem = ngx.config.subsystem +local ERR = ngx.ERR +local INFO = ngx.INFO +local null = ngx.null +local get_ctx_obj = utils.get_ctx_obj +local is_cosocket_available = utils.is_cosocket_available + -- Instantiate mlcache object at module level (which will be cached when running init phase) -- TODO : custom settings local shm = "cachestore" local ipc_shm = "cachestore_ipc" local shm_miss = "cachestore_miss" local shm_locks = "cachestore_locks" -if not ngx.shared.cachestore then +if subsystem == "stream" then shm = "cachestore_stream" ipc_shm = "cachestore_ipc_stream" shm_miss = "cachestore_miss_stream" @@ -33,22 +43,18 @@ local cache, err = mlcache.new("cachestore", shm, { }, ipc_shm = ipc_shm, }) -local module_logger = logger:new("CACHESTORE") if not cache then - module_logger:log(ngx.ERR, "can't instantiate mlcache : " .. err) + logger:log(ERR, "can't instantiate mlcache : " .. err) end -function cachestore:initialize(use_redis, new_cs, ctx) - self.ctx = ctx - self.cache = cache +function cachestore:initialize(use_redis, ctx, pool) self.use_redis = use_redis or false - self.logger = module_logger - if new_cs then - self.clusterstore = clusterstore:new(false) - self.shared_cs = false - else - self.clusterstore = utils.get_ctx_obj("clusterstore", self.ctx) - self.shared_cs = true + if self.use_redis then + if ctx then + self.clusterstore = get_ctx_obj("clusterstore", ctx) + else + self.clusterstore = clusterstore:new(pool) + end end end @@ -57,8 +63,7 @@ function cachestore:get(key) local callback = function(key, cs) -- Connect to redis -- luacheck: ignore 431 - local clusterstore = cs or require "bunkerweb.clusterstore":new(false) - local ok, err, _ = clusterstore:connect() + local ok, err, _ = cs:connect() if not ok then return nil, "can't connect to redis : " .. err, nil end @@ -76,14 +81,14 @@ function cachestore:get(key) end return {ret_get, ret_ttl} ]] - local ret, err = clusterstore:call("eval", redis_script, 1, key) + local ret, err = cs:call("eval", redis_script, 1, key) if not ret then - clusterstore:close() + cs:close() return nil, err, nil end -- Extract values - clusterstore:close() - if ret[1] == ngx.null then + cs:close() + if ret[1] == null then ret[1] = nil ret[2] = -1 elseif ret[2] < 0 then @@ -96,29 +101,25 @@ function cachestore:get(key) end -- luacheck: ignore 431 local value, err, hit_level - if self.use_redis and utils.is_cosocket_available() then - local cs = nil - if self.shared_cs then - cs = self.clusterstore - end - value, err, hit_level = self.cache:get(key, nil, callback, key, cs) + if self.use_redis and is_cosocket_available() then + value, err, hit_level = self.cache:get(key, nil, callback, key, self.clusterstore) else value, err, hit_level = self.cache:get(key, nil, callback_no_miss) end if value == nil and err ~= nil then return false, err end - self.logger:log(ngx.INFO, "hit level for " .. key .. " = " .. tostring(hit_level)) + logger:log(INFO, "hit level for " .. key .. " = " .. tostring(hit_level)) return true, value end function cachestore:set(key, value, ex) -- luacheck: ignore 431 local ok, err - if self.use_redis and utils.is_cosocket_available() then + if self.use_redis and is_cosocket_available() then ok, err = self:set_redis(key, value, ex) if not ok then - self.logger:log(ngx.ERR, err) + logger:log(ERR, err) end end if ex then @@ -153,10 +154,10 @@ end function cachestore:delete(key) -- luacheck: ignore 431 local ok, err - if self.use_redis and utils.is_cosocket_available() then + if self.use_redis and is_cosocket_available() then ok, err = self:del_redis(key) if not ok then - self.logger:log(ngx.ERR, err) + logger:log(ERR, err) end end ok, err = self.cache:delete(key) diff --git a/src/bw/lua/bunkerweb/clusterstore.lua b/src/bw/lua/bunkerweb/clusterstore.lua index d9359b477..306613553 100644 --- a/src/bw/lua/bunkerweb/clusterstore.lua +++ b/src/bw/lua/bunkerweb/clusterstore.lua @@ -1,13 +1,18 @@ +local ngx = ngx local class = require "middleclass" -local logger = require "bunkerweb.logger" +local clogger = require "bunkerweb.logger" local redis = require "resty.redis" local utils = require "bunkerweb.utils" local clusterstore = class("clusterstore") +local logger = clogger:new("CLUSTERSTORE") + +local get_variable = utils.get_variable +local ERR = ngx.ERR +local tonumber = tonumber + function clusterstore:initialize(pool) - -- Instantiate logger - self.logger = logger:new("CLUSTERSTORE") -- Get variables local variables = { ["REDIS_HOST"] = "", @@ -18,33 +23,32 @@ function clusterstore:initialize(pool) ["REDIS_KEEPALIVE_IDLE"] = "", ["REDIS_KEEPALIVE_POOL"] = "", } - -- Set them for later user + -- Set them for later use self.variables = {} for k, _ in pairs(variables) do - local value, err = utils.get_variable(k, false) + local value, err = get_variable(k, false) if value == nil then - self.logger:log(ngx.ERR, err) + logger:log(ERR, err) end self.variables[k] = value end - -- Don't instantiate a redis object for now - self.redis_client = nil + -- Instantiate object self.pool = pool == nil or pool + local redis_client, err = redis:new() + self.redis_client = redis_client + if self.redis_client == nil then + logger:log(ERR, "can't instantiate redis object : " .. err) + return + end + self.redis_client:set_timeout(tonumber(self.variables["REDIS_TIMEOUT"])) end function clusterstore:connect() - -- Check if we are already connected - if self.redis_client then - return true, "already connected", self.redis_client:get_reused_times() + -- Check if client is created + if not self.redis_client then + return false, "client is not instantiated" end - -- Instantiate object - local redis_client, err = redis:new() - if redis_client == nil then - return false, err - end - -- Set timeouts - redis_client:set_timeout(tonumber(self.variables["REDIS_TIMEOUT"])) - -- Connect + -- Set options local options = { ssl = self.variables["REDIS_SSL"] == "yes", } @@ -52,22 +56,22 @@ function clusterstore:connect() options.pool = "bw-redis" options.pool_size = tonumber(self.variables["REDIS_KEEPALIVE_POOL"]) end - local ok, err = redis_client:connect(self.variables["REDIS_HOST"], tonumber(self.variables["REDIS_PORT"]), options) + -- Connect + local ok, err = self.redis_client:connect(self.variables["REDIS_HOST"], tonumber(self.variables["REDIS_PORT"]), options) if not ok then return false, err end - self.redis_client = redis_client -- Select database if needed local times, err = self.redis_client:get_reused_times() if err then - self:close() + self.redis_client:close() return false, err end - if times == 0 then + if times < 2 then -- luacheck: ignore 421 local _, err = self.redis_client:select(tonumber(self.variables["REDIS_DATABASE"])) if err then - self:close() + self.redis_client:close() return false, err end end @@ -75,40 +79,40 @@ function clusterstore:connect() end function clusterstore:close() - if self.redis_client then - -- Equivalent to close but keep a pool of connections - if self.pool then - local ok, err = self.redis_client:set_keepalive( - tonumber(self.variables["REDIS_KEEPALIVE_IDLE"]), - tonumber(self.variables["REDIS_KEEPALIVE_POOL"]) - ) - self.redis_client = nil - if not ok then - require("bunkerweb.logger"):new("clusterstore-close"):log(ngx.ERR, err) - end - return ok, err - end - -- Close - local ok, err = self.redis_client:close() - self.redis_client.redis_client = nil - return ok, err + -- Check if client is created + if not self.redis_client then + return false, "client is not instantiated" end - return false, "not connected" + -- Pool case + local ok, err + if self.pool then + ok, err = self.redis_client:set_keepalive( + tonumber(self.variables["REDIS_KEEPALIVE_IDLE"]), + tonumber(self.variables["REDIS_KEEPALIVE_POOL"]) + ) + -- No pool + else + ok, err = self.redis_client:close() + end + if err then + logger:log(ERR, "error while closing redis_client : " .. err) + end + return ok ~= nil, err end function clusterstore:call(method, ...) - -- Check if we are connected + -- Check if client is created if not self.redis_client then - return false, "not connected" + return false, "client is not instantiated" end -- Call method return self.redis_client[method](self.redis_client, ...) end function clusterstore:multi(calls) - -- Check if we are connected + -- Check if client is created if not self.redis_client then - return false, "not connected" + return false, "client is not instantiated" end -- Start transaction local ok, err = self.redis_client:multi() @@ -121,7 +125,7 @@ function clusterstore:multi(calls) local args = unpack(call[2]) ok, err = self.redis_client[method](self.redis_client, args) if not ok then - return false, method + "() failed : " .. err + return false, method .. "() failed : " .. err end end -- Exec transaction diff --git a/src/bw/lua/bunkerweb/datastore.lua b/src/bw/lua/bunkerweb/datastore.lua index 1eae070c0..c720d453a 100644 --- a/src/bw/lua/bunkerweb/datastore.lua +++ b/src/bw/lua/bunkerweb/datastore.lua @@ -1,18 +1,25 @@ +local ngx = ngx local class = require "middleclass" +local clogger = require "bunkerweb.logger" local lrucache = require "resty.lrucache" local datastore = class("datastore") -local lru, err = lrucache.new(100000) +local logger = clogger:new("DATASTORE") + +local ERR = ngx.ERR +local subsystem = ngx.config.subsystem +local shared = ngx.shared + +local lru, err_lru = lrucache.new(100000) if not lru then - require "bunkerweb.logger" - :new("DATASTORE") - :log(ngx.ERR, "failed to instantiate LRU cache : " .. (err or "unknown error")) + logger:log(ERR, "failed to instantiate LRU cache : " .. err_lru) end function datastore:initialize() - self.dict = ngx.shared.datastore - if not self.dict then - self.dict = ngx.shared.datastore_stream + if subsystem == "http" then + self.dict = shared.datastore + else + self.dict = shared.datastore_stream end end @@ -20,6 +27,9 @@ function datastore:get(key, worker) -- luacheck: ignore 431 local value, err if worker then + if not lru then + return nil, "lru is not instantiated" + end value, err = lru:get(key) return value, err or "not found" end @@ -32,6 +42,9 @@ end function datastore:set(key, value, exptime, worker) if worker then + if not lru then + return false, "lru is not instantiated" + end lru:set(key, value, exptime) return true, "success" end @@ -41,6 +54,9 @@ end function datastore:delete(key, worker) if worker then + if not lru then + return false, "lru is not instantiated" + end lru:delete(key) return true, "success" end @@ -50,6 +66,9 @@ end function datastore:keys(worker) if worker then + if not lru then + return false, "lru is not instantiated" + end return lru:keys(0) end return self.dict:get_keys(0) @@ -70,6 +89,9 @@ end function datastore:delete_all(pattern, worker) local keys if worker then + if not lru then + return false, "lru is not instantiated" + end keys = lru:keys(0) else keys = self.dict:get_keys(0) @@ -84,6 +106,9 @@ end -- luacheck: ignore 212 function datastore:flush_lru() + if not lru then + return false, "lru is not instantiated" + end lru:flush_all() end diff --git a/src/bw/lua/bunkerweb/helpers.lua b/src/bw/lua/bunkerweb/helpers.lua index c80955df0..f7f83a61f 100644 --- a/src/bw/lua/bunkerweb/helpers.lua +++ b/src/bw/lua/bunkerweb/helpers.lua @@ -1,18 +1,37 @@ +local ngx = ngx local cjson = require "cjson" local utils = require "bunkerweb.utils" local bwctx = require "bunkerweb.ctx" local base = require "resty.core.base" +local open = io.open +local decode = cjson.decode +local encode = cjson.encode +local tostring = tostring +local get_phases = utils.get_phases +local get_request = base.get_request +local apply_ref = bwctx.apply_ref +local stash_ref = bwctx.stash_ref +local subsystem = ngx.config.subsystem +local var = ngx.var +local req = ngx.req +local ip_is_global = utils.ip_is_global +local get_integration = utils.get_integration +local get_version = utils.get_version +local is_ipv4 = utils.is_ipv4 +local is_ipv6 = utils.is_ipv6 +local get_variable = utils.get_variable + local helpers = {} helpers.load_plugin = function(json) -- Open file - local file, err, nb = io.open(json, "r") + local file, err, nb = open(json, "r") if not file then return false, "can't load JSON at " .. json .. " : " .. err .. " (nb = " .. tostring(nb) .. ")" end -- Decode JSON - local ok, plugin = pcall(cjson.decode, file:read("*a")) + local ok, plugin = pcall(decode, file:read("*a")) file:close() if not ok then return false, "invalid JSON at " .. json .. " : " .. err @@ -26,7 +45,7 @@ helpers.load_plugin = function(json) end end if #missing_fields > 0 then - return false, "missing field(s) " .. cjson.encode(missing_fields) .. " for JSON at " .. json + return false, "missing field(s) " .. encode(missing_fields) .. " for JSON at " .. json end -- Try require local plugin_lua, err = helpers.require_plugin(plugin.id) @@ -34,7 +53,7 @@ helpers.load_plugin = function(json) return false, err end -- Fill phases - local phases = utils.get_phases() + local phases = get_phases() plugin.phases = {} if plugin_lua then for _, phase in ipairs(phases) do @@ -49,11 +68,11 @@ end helpers.order_plugins = function(plugins) -- Extract orders - local file, err, nb = io.open("/usr/share/bunkerweb/core/order.json", "r") + local file, err, nb = open("/usr/share/bunkerweb/core/order.json", "r") if not file then return false, err .. " (nb = " .. tostring(nb) .. ")" end - local ok, orders = pcall(cjson.decode, file:read("*a")) + local ok, orders = pcall(decode, file:read("*a")) file:close() if not ok then return false, "invalid order.json : " .. err @@ -68,7 +87,7 @@ helpers.order_plugins = function(plugins) end -- Order result local result_orders = {} - for _, phase in ipairs(utils.get_phases()) do + for _, phase in ipairs(get_phases()) do result_orders[phase] = {} end -- Fill order first @@ -82,7 +101,7 @@ helpers.order_plugins = function(plugins) end end -- Then append missing plugins to the end - for _, phase in ipairs(utils.get_phases()) do + for _, phase in ipairs(get_phases()) do for id, plugin in pairs(plugins_phases) do if plugin[phase] then table.insert(result_orders[phase], id) @@ -141,7 +160,7 @@ helpers.call_plugin = function(plugin, method) end end if #missing_values > 0 then - return false, "missing required return value(s) : " .. cjson.encode(missing_values) + return false, "missing required return value(s) : " .. encode(missing_values) end -- Return return true, ret @@ -151,64 +170,66 @@ helpers.fill_ctx = function() -- Return errors as table local errors = {} -- Try to load saved ctx - if base.get_request() then - bwctx.apply_ref() + local request = get_request() + if request then + apply_ref() end local ctx = ngx.ctx -- Check if ctx is already filled if not ctx.bw then -- Instantiate bw table local data = {} - -- Common vars - data.kind = "http" - if ngx.shared.datastore_stream then - data.kind = "stream" + if request then + -- Common vars + data.kind = "http" + if subsystem == "stream" then + data.kind = "stream" + end + data.remote_addr = var.remote_addr + data.server_name = var.server_name + if data.kind == "http" then + data.uri = var.uri + data.request_uri = var.request_uri + data.request_method = var.request_method + data.http_user_agent = var.http_user_agent + data.http_host = var.http_host + data.http_content_type = var.http_content_type + data.http_content_length = var.http_content_length + data.http_origin = var.http_origin + data.http_version = req.http_version() + data.scheme = var.scheme + end + -- IP data : global + local ip_global, err = ip_is_global(data.remote_addr) + if ip_global == nil then + table.insert(errors, "can't check if IP is global : " .. err) + else + data.ip_is_global = ip_global + end + -- IP data : v4 / v6 + data.ip_is_ipv4 = is_ipv4(data.ip) + data.ip_is_ipv6 = is_ipv6(data.ip) + -- Misc info + data.integration = get_integration() + data.version = get_version() end - data.remote_addr = ngx.var.remote_addr - data.server_name = ngx.var.server_name - if data.kind == "http" then - data.uri = ngx.var.uri - data.request_uri = ngx.var.request_uri - data.request_method = ngx.var.request_method - data.http_user_agent = ngx.var.http_user_agent - data.http_host = ngx.var.http_host - data.server_name = ngx.var.server_name - data.http_content_type = ngx.var.http_content_type - data.http_content_length = ngx.var.http_content_length - data.http_origin = ngx.var.http_origin - data.http_version = ngx.req.http_version() - data.scheme = ngx.var.scheme - end - -- IP data : global - local ip_is_global, err = utils.ip_is_global(data.remote_addr) - if ip_is_global == nil then - table.insert(errors, "can't check if IP is global : " .. err) - else - data.ip_is_global = ip_is_global - end - -- IP data : v4 / v6 - data.ip_is_ipv4 = utils.is_ipv4(data.ip) - data.ip_is_ipv6 = utils.is_ipv6(data.ip) - -- Misc info - data.integration = utils.get_integration() - data.version = utils.get_version() -- Fill ctx ctx.bw = data end -- Always create new objects for current phases in case of cosockets - local use_redis, err = utils.get_variable("USE_REDIS", false) + local use_redis, err = get_variable("USE_REDIS", false) if not use_redis then table.insert(errors, "can't get variable from datastore : " .. err) end ctx.bw.datastore = require "bunkerweb.datastore":new() ctx.bw.clusterstore = require "bunkerweb.clusterstore":new() - ctx.bw.cachestore = require "bunkerweb.cachestore":new(use_redis == "yes") + ctx.bw.cachestore = require "bunkerweb.cachestore":new(use_redis == "yes", ctx) return true, "ctx filled", errors, ctx end helpers.save_ctx = function(ctx) - if base.get_request() then - bwctx.stash_ref(ctx) + if get_request() then + stash_ref(ctx) end end @@ -222,11 +243,11 @@ function helpers.load_variables(all_variables, plugins) end end end - local file = io.open("/usr/share/bunkerweb/settings.json") + local file = open("/usr/share/bunkerweb/settings.json") if not file then return false, "can't open settings.json" end - local ok, settings = pcall(cjson.decode, file:read("*a")) + local ok, settings = pcall(decode, file:read("*a")) file:close() if not ok then return false, "invalid settings.json : " .. settings diff --git a/src/bw/lua/bunkerweb/logger.lua b/src/bw/lua/bunkerweb/logger.lua index c71c64f27..e38111449 100644 --- a/src/bw/lua/bunkerweb/logger.lua +++ b/src/bw/lua/bunkerweb/logger.lua @@ -2,12 +2,15 @@ local class = require "middleclass" local errlog = require "ngx.errlog" local logger = class("logger") +local upper = string.upper +local raw_log = errlog.raw_log + function logger:initialize(prefix) - self.prefix = string.upper(prefix) + self.prefix = upper(prefix) end function logger:log(level, msg) - errlog.raw_log(level, "[" .. self.prefix .. "] " .. msg) + raw_log(level, "[" .. self.prefix .. "] " .. msg) end return logger diff --git a/src/bw/lua/bunkerweb/plugin.lua b/src/bw/lua/bunkerweb/plugin.lua index 473714a7c..78edaa029 100644 --- a/src/bw/lua/bunkerweb/plugin.lua +++ b/src/bw/lua/bunkerweb/plugin.lua @@ -1,3 +1,4 @@ +local ngx = ngx local cachestore = require "bunkerweb.cachestore" local class = require "middleclass" local clusterstore = require "bunkerweb.clusterstore" @@ -6,50 +7,55 @@ local logger = require "bunkerweb.logger" local utils = require "bunkerweb.utils" local plugin = class("plugin") +local ERR = ngx.ERR +local get_phase = ngx.get_phase +local get_variable = utils.get_variable +local get_ctx_obj = utils.get_ctx_obj +local subsystem = ngx.config.subsystem + function plugin:initialize(id, ctx) -- Store common, values self.id = id - local multisite = false - local current_phase = ngx.get_phase() + local is_request = false + local current_phase = get_phase() for _, check_phase in ipairs { "set", + "rewrite", "access", "content", "header_filter", + "body_filter", "log", - "preread", - "log_stream", - "log_default", + "preread" } do if current_phase == check_phase then - multisite = true + is_request = true break end end - self.is_request = multisite + self.is_request = is_request -- Store common objects self.logger = logger:new(self.id) - local use_redis, err = utils.get_variable("USE_REDIS", false) + local use_redis, err = get_variable("USE_REDIS", false) if not use_redis then - self.logger:log(ngx.ERR, err) + self.logger:log(ERR, err) end self.use_redis = use_redis == "yes" if self.is_request then - -- Store ctx self.ctx = ctx or ngx.ctx - self.datastore = utils.get_ctx_obj("datastore", self.ctx) or datastore:new() - self.cachestore = utils.get_ctx_obj("cachestore", self.ctx) - or cachestore:new(use_redis == "yes", true, self.ctx) - self.clusterstore = utils.get_ctx_obj("clusterstore", self.ctx) or clusterstore:new(false) + self.datastore = get_ctx_obj("datastore", self.ctx) or datastore:new() + self.cachestore = get_ctx_obj("cachestore", self.ctx) + or cachestore:new(use_redis == "yes", self.ctx) + self.clusterstore = get_ctx_obj("clusterstore", self.ctx) or clusterstore:new() else self.datastore = datastore:new() - self.cachestore = cachestore:new(use_redis == "yes", true) + self.cachestore = cachestore:new(use_redis == "yes") self.clusterstore = clusterstore:new(false) end -- Get metadata local metadata, err = self.datastore:get("plugin_" .. id, true) if not metadata then - self.logger:log(ngx.ERR, err) + self.logger:log(ERR, err) return end -- Store variables @@ -57,21 +63,22 @@ function plugin:initialize(id, ctx) self.multiples = {} local value for k, v in pairs(metadata.settings) do - value, err = utils.get_variable(k, v.context == "multisite" and multisite) + value, err = get_variable(k, v.context == "multisite" and self.is_request) if value == nil then - self.logger:log(ngx.ERR, "can't get " .. k .. " variable : " .. err) + self.logger:log(ERR, "can't get " .. k .. " variable : " .. err) end self.variables[k] = value end -- Is loading - local is_loading, err = utils.get_variable("IS_LOADING", false) + local is_loading, err = get_variable("IS_LOADING", false) if is_loading == nil then - self.logger:log(ngx.ERR, "can't get IS_LOADING variable : " .. err) + self.logger:log(ERR, "can't get IS_LOADING variable : " .. err) end self.is_loading = is_loading == "yes" -- Kind of server - self.kind = "http" - if ngx.shared.datastore_stream then + if subsystem == "http" then + self.kind = "http" + else self.kind = "stream" end end diff --git a/src/bw/lua/bunkerweb/utils.lua b/src/bw/lua/bunkerweb/utils.lua index 77382757c..4538192ff 100644 --- a/src/bw/lua/bunkerweb/utils.lua +++ b/src/bw/lua/bunkerweb/utils.lua @@ -1,3 +1,4 @@ +local ngx = ngx local cdatastore = require "bunkerweb.datastore" local clogger = require "bunkerweb.logger" local mmdb = require "bunkerweb.mmdb" @@ -10,11 +11,32 @@ local session = require "resty.session" local logger = clogger:new("UTILS") local datastore = cdatastore:new() +local var = ngx.var +local ERR = ngx.ERR +local INFO = ngx.INFO +local WARN = ngx.WARN +local null = ngx.null +local re_match = ngx.re.match +local subsystem = ngx.config.subsystem +local get_phase = ngx.get_phase +local kill = ngx.thread.kill +local ipmatcher_new = ipmatcher.new +local parse_ipv4 = ipmatcher.parse_ipv4 +local parse_ipv6 = ipmatcher.parse_ipv6 +local open = io.open +local encode = cjson.encode +local decode = cjson.decode +local char = string.char +local random = math.random +local session_start = session.start +local session_open = session.open +local tonumber = tonumber + local utils = {} math.randomseed(os.time()) -utils.get_variable = function(var, site_search) +utils.get_variable = function(variable, site_search, ctx) -- Default site search to true if site_search == nil then site_search = true @@ -24,20 +46,27 @@ utils.get_variable = function(var, site_search) if not variables then return nil, "can't access variables from datastore : " .. err end - local value = variables["global"][var] + local value = variables["global"][variable] -- Site search case - local multisite = site_search and variables["global"]["MULTISITE"] == "yes" and ngx.var.server_name ~= "_" - if multisite then - value = variables[ngx.var.server_name][var] + if site_search and variables["global"]["MULTISITE"] == "yes" then + local server_name + if ctx and ctx.bw then + server_name = ctx.bw.server_name + else + server_name = var.server_name + end + if variables[server_name] then + value = variables[server_name][variable] + end end return value, "success" end -utils.has_variable = function(var, value) +utils.has_variable = function(variable, value) -- Get global variable local variables, err = datastore:get("variables", true) if not variables then - return nil, "can't access variables " .. var .. " from datastore : " .. err + return nil, "can't access variables " .. variable .. " from datastore : " .. err end -- Multisite case local multisite = variables["global"]["MULTISITE"] == "yes" @@ -45,7 +74,7 @@ utils.has_variable = function(var, value) local servers = variables["global"]["SERVER_NAME"] -- Check each server for server in servers:gmatch("%S+") do - if variables[server][var] == value then + if variables[server][variable] == value then return true, "success" end end @@ -53,14 +82,14 @@ utils.has_variable = function(var, value) return false, "success" end end - return variables["global"][var] == value, "success" + return variables["global"][variable] == value, "success" end -utils.has_not_variable = function(var, value) +utils.has_not_variable = function(variable, value) -- Get global variable local variables, err = datastore:get("variables", true) if not variables then - return nil, "can't access variables " .. var .. " from datastore : " .. err + return nil, "can't access variables " .. variable .. " from datastore : " .. err end -- Multisite case local multisite = variables["global"]["MULTISITE"] == "yes" @@ -68,7 +97,7 @@ utils.has_not_variable = function(var, value) local servers = variables["global"]["SERVER_NAME"] -- Check each server for server in servers:gmatch("%S+") do - if variables[server][var] ~= "value" then + if variables[server][variable] ~= "value" then return true, "success" end end @@ -76,7 +105,7 @@ utils.has_not_variable = function(var, value) return false, "success" end end - return variables["global"][var] ~= value, "success" + return variables["global"][variable] ~= value, "success" end utils.get_multiple_variables = function(vars) @@ -90,8 +119,8 @@ utils.get_multiple_variables = function(vars) result[scope] = {} -- Loop on vars for variable, value in pairs(scoped_vars) do - for _, var in ipairs(vars) do - if variable:find("^" .. var .. "_?[0-9]*$") then + for _, tvar in ipairs(vars) do + if variable:find("^" .. tvar .. "_?[0-9]*$") then result[scope][variable] = value end end @@ -102,7 +131,7 @@ end utils.is_ip_in_networks = function(ip, networks) -- Instantiate ipmatcher - local ipm, err = ipmatcher.new(networks) + local ipm, err = ipmatcher_new(networks) if not ipm then return nil, "can't instantiate ipmatcher : " .. err end @@ -115,11 +144,11 @@ utils.is_ip_in_networks = function(ip, networks) end utils.is_ipv4 = function(ip) - return ipmatcher.parse_ipv4(ip) + return parse_ipv4(ip) end utils.is_ipv6 = function(ip) - return ipmatcher.parse_ipv6(ip) + return parse_ipv6(ip) end utils.ip_is_global = function(ip) @@ -157,7 +186,7 @@ utils.ip_is_global = function(ip) "ff00::/8", } -- Instantiate ipmatcher - local ipm, err = ipmatcher.new(reserved_ips) + local ipm, err = ipmatcher_new(reserved_ips) if not ipm then return nil, "can't instantiate ipmatcher : " .. err end @@ -177,7 +206,7 @@ utils.get_integration = function() end local variables, err = datastore:get("variables", true) if not variables then - logger:log(ngx.ERR, "can't get variables from datastore : " .. err) + logger:log(ERR, "can't get variables from datastore : " .. err) return "unknown" end -- Swarm @@ -193,12 +222,12 @@ utils.get_integration = function() integration = "autoconf" else -- Already present (e.g. : linux) - local f, _ = io.open("/usr/share/bunkerweb/INTEGRATION", "r") + local f, _ = open("/usr/share/bunkerweb/INTEGRATION", "r") if f then integration = f:read("*a"):gsub("[\n\r]", "") f:close() else - f, _ = io.open("/etc/os-release", "r") + f, _ = open("/etc/os-release", "r") if f then local data = f:read("*a") f:close() @@ -217,7 +246,7 @@ utils.get_integration = function() -- Save integration local ok, err = datastore:set("misc_integration", integration, nil, true) if not ok then - logger:log(ngx.ERR, "can't cache integration to datastore : " .. err) + logger:log(ERR, "can't cache integration to datastore : " .. err) end return integration end @@ -229,9 +258,9 @@ utils.get_version = function() return version end -- Read VERSION file - local f, err = io.open("/usr/share/bunkerweb/VERSION", "r") + local f, err = open("/usr/share/bunkerweb/VERSION", "r") if not f then - logger:log(ngx.ERR, "can't read VERSION file : " .. err) + logger:log(ERR, "can't read VERSION file : " .. err) return nil end version = f:read("*a"):gsub("[\n\r]", "") @@ -239,36 +268,54 @@ utils.get_version = function() -- Save it to datastore local ok, err = datastore:set("misc_version", version, nil, true) if not ok then - logger:log(ngx.ERR, "can't cache version to datastore : " .. err) + logger:log(ERR, "can't cache version to datastore : " .. err) end return version end utils.get_reason = function(ctx) -- ngx.ctx - if ctx.bw.reason then + if ctx and ctx.bw and ctx.bw.reason then return ctx.bw.reason end -- ngx.var - if ngx.var.reason and ngx.var.reason ~= "" then - return ngx.var.reason + if var.reason and var.reason ~= "" then + return var.reason end -- os.getenv if os.getenv("REASON") == "modsecurity" then return "modsecurity" end -- datastore ban - local banned, _ = datastore:get("bans_ip_" .. ngx.var.remote_addr) + local ip + if ctx and ctx.bw then + ip = ctx.bw.remote_addr + else + ip = var.remote_addr + end + local banned, _ = datastore:get("bans_ip_" .. ip) if banned then return banned end -- unknown - if ngx.status == utils.get_deny_status(ctx) then + if ngx.status == utils.get_deny_status() then return "unknown" end return nil end +utils.is_whitelisted = function(ctx) + -- ngx.ctx + if ctx and ctx.bw and ctx.bw.is_whitelisted then + return ctx.bw.is_whitelisted + end + -- ngx.var + if var.is_whitelisted and var.is_whitelisted == "yes" then + return true + end + return false +end + utils.get_resolvers = function() -- Get resolvers from datastore if existing local resolvers, _ = datastore:get("misc_resolvers", true) @@ -278,7 +325,7 @@ utils.get_resolvers = function() -- Otherwise extract DNS_RESOLVERS variable local variables, err = datastore:get("variables", true) if not variables then - logger:log(ngx.ERR, "can't get variables from datastore : " .. err) + logger:log(ERR, "can't get variables from datastore : " .. err) return "unknown" end -- Make table for resolver1 resolver2 ... string @@ -289,19 +336,19 @@ utils.get_resolvers = function() -- Add it to the datastore local ok, err = datastore:set("misc_resolvers", resolvers, nil, true) if not ok then - logger:log(ngx.ERR, "can't save misc_resolvers to datastore : " .. err) + logger:log(ERR, "can't save misc_resolvers to datastore : " .. err) end return resolvers end -utils.get_rdns = function(ip) +utils.get_rdns = function(ip, ctx, pool) -- Check cache - local cachestore = utils.new_cachestore() + local cachestore = utils.new_cachestore(ctx, pool) local ok, value = cachestore:get("rdns_" .. ip) if not ok then - logger:log(ngx.ERR, "can't get rdns from cachestore : " .. value) + logger:log(ERR, "can't get rdns from cachestore : " .. value) elseif value then - return cjson.decode(value), "success" + return decode(value), "success" end -- Get resolvers local resolvers, err = utils.get_resolvers() @@ -323,7 +370,7 @@ utils.get_rdns = function(ip) -- Do rDNS query local answers, err = rdns:reverse_query(ip) if not answers then - logger:log(ngx.ERR, "error while doing reverse DNS query for " .. ip .. " : " .. err) + logger:log(ERR, "error while doing reverse DNS query for " .. ip .. " : " .. err) ret_err = err else if answers.errcode then @@ -337,21 +384,21 @@ utils.get_rdns = function(ip) end end -- Save to cache - ok, err = cachestore:set("rdns_" .. ip, cjson.encode(ptrs), 3600) + ok, err = cachestore:set("rdns_" .. ip, encode(ptrs), 3600) if not ok then - logger:log(ngx.ERR, "can't set rdns into cachestore : " .. err) + logger:log(ERR, "can't set rdns into cachestore : " .. err) end return ptrs, ret_err end -utils.get_ips = function(fqdn, ipv6) +utils.get_ips = function(fqdn, ipv6, ctx, pool) -- Check cache - local cachestore = utils.new_cachestore() + local cachestore = utils.new_cachestore(ctx, pool) local ok, value = cachestore:get("dns_" .. fqdn) if not ok then - logger:log(ngx.ERR, "can't get dns from cachestore : " .. value) + logger:log(ERR, "can't get dns from cachestore : " .. value) elseif value then - return cjson.decode(value), "success" + return decode(value), "success" end -- By default perform ipv6 lookups (only if USE_IPV6=yes) if ipv6 == nil then @@ -377,7 +424,7 @@ utils.get_ips = function(fqdn, ipv6) -- luacheck: ignore 421 local use_ipv6, err = utils.get_variable("USE_IPV6", false) if not use_ipv6 then - logger:log(ngx.ERR, "can't get USE_IPV6 variable " .. err) + logger:log(ERR, "can't get USE_IPV6 variable " .. err) elseif use_ipv6 == "yes" then table.insert(qtypes, res.TYPE_AAAA) end @@ -401,7 +448,7 @@ utils.get_ips = function(fqdn, ipv6) end end for qtype, error in pairs(res_errors) do - logger:log(ngx.ERR, "error while doing " .. qtype .. " DNS query for " .. fqdn .. " : " .. error) + logger:log(ERR, "error while doing " .. qtype .. " DNS query for " .. fqdn .. " : " .. error) end -- Extract all IPs local ips = {} @@ -414,11 +461,11 @@ utils.get_ips = function(fqdn, ipv6) end end -- Save to cache - ok, err = cachestore:set("dns_" .. fqdn, cjson.encode(ips), 3600) + ok, err = cachestore:set("dns_" .. fqdn, encode(ips), 3600) if not ok then - logger:log(ngx.ERR, "can't set dns into cachestore : " .. err) + logger:log(ERR, "can't set dns into cachestore : " .. err) end - return ips, cjson.encode(res_errors) .. " " .. cjson.encode(ans_errors) + return ips, encode(res_errors) .. " " .. encode(ans_errors) end utils.get_country = function(ip) @@ -458,38 +505,36 @@ utils.rand = function(nb, no_numbers) -- lowers, uppers and numbers if not no_numbers then for i = 48, 57 do - table.insert(charset, string.char(i)) + table.insert(charset, char(i)) end end for i = 65, 90 do - table.insert(charset, string.char(i)) + table.insert(charset, char(i)) end for i = 97, 122 do - table.insert(charset, string.char(i)) + table.insert(charset, char(i)) end local result = "" for _ = 1, nb do - result = result .. charset[math.random(1, #charset)] + result = result .. charset[random(1, #charset)] end return result end -utils.get_deny_status = function(ctx) - -- Stream case - if ctx.bw and ctx.bw.kind == "stream" then - return 444 +utils.get_deny_status = function() + if subsystem == "http" then + local variables, err = datastore:get("variables", true) + if not variables then + logger:log(ERR, "can't get variables from datastore : " .. err) + return 403 + end + return tonumber(variables["global"]["DENY_HTTP_STATUS"]) end - -- http case - local variables, err = datastore:get("variables", true) - if not variables then - logger:log(ngx.ERR, "can't get variables from datastore : " .. err) - return 403 - end - return tonumber(variables["global"]["DENY_HTTP_STATUS"]) + return 444 end utils.check_session = function(ctx) - local _session, _, exists, _ = session.start({ audience = "metadata" }) + local _session, _, exists, _ = session_start({ audience = "metadata" }) if exists then for _, check in ipairs(ctx.bw.sessions_checks) do local key = check[1] @@ -500,7 +545,7 @@ utils.check_session = function(ctx) if not ok then return false, "session:destroy() error : " .. err end - logger:log(ngx.WARN, "session check " .. key .. " failed, destroying session") + logger:log(WARN, "session check " .. key .. " failed, destroying session") return utils.check_session(ctx) end end @@ -527,9 +572,9 @@ utils.get_session = function(audience, ctx) end end -- Open session with specific audience - local _session, err, _ = session.open({ audience = audience }) + local _session, err, _ = session_open({ audience = audience }) if err then - logger:log(ngx.INFO, "session:open() error : " .. err) + logger:log(INFO, "session:open() error : " .. err) end return _session end @@ -607,7 +652,7 @@ utils.is_banned = function(ip) elseif data.err then clusterstore:close() return nil, "redis script error : " .. data.err - elseif data[1] ~= ngx.null then + elseif data[1] ~= null then clusterstore:close() -- Update local cache ok, err = datastore:set("bans_ip_" .. ip, data[1], data[2]) @@ -649,16 +694,17 @@ utils.add_ban = function(ip, reason, ttl) return true, "success" end -utils.new_cachestore = function() +utils.new_cachestore = function(ctx, pool) -- Check if redis is used local use_redis, err = utils.get_variable("USE_REDIS", false) if not use_redis then - logger:log(ngx.ERR, "can't get USE_REDIS variable : " .. err) + logger:log(ERR, "can't get USE_REDIS variable : " .. err) + use_redis = false else use_redis = use_redis == "yes" end -- Instantiate - return require "bunkerweb.cachestore":new(use_redis, true) + return require "bunkerweb.cachestore":new(use_redis, ctx, pool == nil or pool) end utils.regex_match = function(str, regex, options) @@ -666,9 +712,9 @@ utils.regex_match = function(str, regex, options) if options then all_options = all_options .. options end - local match, err = ngx.re.match(str, regex, all_options) + local match, err = re_match(str, regex, all_options) if err then - logger:log(ngx.ERR, "error while matching regex " .. regex .. "with string " .. str) + logger:log(ERR, "error while matching regex " .. regex .. "with string " .. str) return nil end return match @@ -680,6 +726,7 @@ utils.get_phases = function() "init_worker", "set", "access", + "content", "ssl_certificate", "header", "log", @@ -696,7 +743,7 @@ utils.is_cosocket_available = function() "ssl_certificate", "preread", } - local current_phase = ngx.get_phase() + local current_phase = get_phase() for _, phase in ipairs(phases) do if current_phase == phase then return true @@ -707,16 +754,17 @@ end utils.kill_all_threads = function(threads) for _, thread in ipairs(threads) do - local ok, err = ngx.thread.kill(thread) + local ok, err = kill(thread) if not ok then - logger:log(ngx.ERR, "error while killing thread : " .. err) + logger:log(ERR, "error while killing thread : " .. err) end end end -utils.get_ctx_obj = function(obj) - if ngx.ctx and ngx.ctx.bw then - return ngx.ctx.bw[obj] +utils.get_ctx_obj = function(obj, ctx) + local vctx = ctx or ngx.ctx + if vctx and vctx.bw then + return vctx.bw[obj] end return nil end diff --git a/src/common/confs/api.conf b/src/common/confs/api.conf index 80b60a0ef..89f6f6101 100644 --- a/src/common/confs/api.conf +++ b/src/common/confs/api.conf @@ -19,53 +19,61 @@ server { local logger = require "bunkerweb.logger":new("API") local api = require "bunkerweb.api":new() local helpers = require "bunkerweb.helpers" + + local ngx = ngx + local INFO = ngx.INFO + local ERR = ngx.ERR + local WARN = ngx.WARN + local NOTICE = ngx.NOTICE + local HTTP_CLOSE = ngx.HTTP_CLOSE + local exit = ngx.exit + local say = ngx.say + local fill_ctx = helpers.fill_ctx + local tostring = tostring -- Start API handler - logger:log(ngx.INFO, "API handler started") + logger:log(INFO, "API handler started") -- Fill ctx - logger:log(ngx.INFO, "filling ngx.ctx ...") - local ok, ret, errors, ctx = helpers.fill_ctx() + logger:log(INFO, "filling ngx.ctx ...") + local ok, ret, errors, ctx = fill_ctx() if not ok then - logger:log(ngx.ERR, "fill_ctx() failed : " .. ret) + logger:log(ERR, "fill_ctx() failed : " .. ret) elseif errors then for i, error in ipairs(errors) do - logger:log(ngx.ERR, "fill_ctx() error " .. tostring(i) .. " : " .. error) + logger:log(ERR, "fill_ctx() error " .. tostring(i) .. " : " .. error) end end - logger:log(ngx.INFO, "ngx.ctx filled (ret = " .. ret .. ")") + logger:log(INFO, "ngx.ctx filled (ret = " .. ret .. ")") -- Check host header if not ctx.bw.http_host or ctx.bw.http_host ~= "{{ API_SERVER_NAME }}" then - logger:log(ngx.WARN, "wrong Host header from IP " .. ctx.bw.remote_addr) - return ngx.exit(ngx.HTTP_CLOSE) + logger:log(WARN, "wrong Host header from IP " .. ctx.bw.remote_addr) + return exit(HTTP_CLOSE) end -- Check IP local ok, err = api:is_allowed_ip() if not ok then - logger:log(ngx.WARN, "can't validate access from IP " .. ctx.bw.remote_addr .. " : " .. err) - return ngx.exit(ngx.HTTP_CLOSE) + logger:log(WARN, "can't validate access from IP " .. ctx.bw.remote_addr .. " : " .. err) + return exit(HTTP_CLOSE) end - logger:log(ngx.NOTICE, "validated access from IP " .. ctx.bw.remote_addr) + logger:log(NOTICE, "validated access from IP " .. ctx.bw.remote_addr) -- Do API call local ok, err, status, resp = api:do_api_call() if not ok then - logger:log(ngx.WARN, "call from " .. ctx.bw.remote_addr .. " on " .. ctx.bw.uri .. " failed : " .. err) + logger:log(WARN, "call from " .. ctx.bw.remote_addr .. " on " .. ctx.bw.uri .. " failed : " .. err) else - logger:log(ngx.NOTICE, "successful call from " .. ctx.bw.remote_addr .. " on " .. ctx.bw.uri .. " : " .. err) + logger:log(NOTICE, "successful call from " .. ctx.bw.remote_addr .. " on " .. ctx.bw.uri .. " : " .. err) end - -- Start API handler - logger:log(ngx.INFO, "API handler ended") - - -- Save ctx - ngx.ctx = ctx + -- Stop API handler + logger:log(INFO, "API handler ended") -- Send response ngx.status = status - ngx.say(resp) - return ngx.exit(status) + say(resp) + return exit(status) } } diff --git a/src/common/confs/default-server-http.conf b/src/common/confs/default-server-http.conf index f1d0b06f4..84bc51da4 100644 --- a/src/common/confs/default-server-http.conf +++ b/src/common/confs/default-server-http.conf @@ -45,70 +45,78 @@ server { local helpers = require "bunkerweb.helpers" local cjson = require "cjson" + local ngx = ngx + local INFO = ngx.INFO + local ERR = ngx.ERR + local fill_ctx = helpers.fill_ctx + local tostring = tostring + local get_reason = utils.get_reason + local require_plugin = helpers.require_plugin + local new_plugin = helpers.new_plugin + local call_plugin = helpers.call_plugin + -- Start log phase local logger = clogger:new("LOG-DEFAULT") local datastore = cdatastore:new() - logger:log(ngx.INFO, "log_default phase started") + logger:log(INFO, "log_default phase started") -- Fill ctx - logger:log(ngx.INFO, "filling ngx.ctx ...") - local ok, ret, errors, ctx = helpers.fill_ctx() + logger:log(INFO, "filling ngx.ctx ...") + local ok, ret, errors, ctx = fill_ctx() if not ok then - logger:log(ngx.ERR, "fill_ctx() failed : " .. ret) + logger:log(ERR, "fill_ctx() failed : " .. ret) elseif errors then for i, error in ipairs(errors) do - logger:log(ngx.ERR, "fill_ctx() error " .. tostring(i) .. " : " .. error) + logger:log(ERR, "fill_ctx() error " .. tostring(i) .. " : " .. error) end end - logger:log(ngx.INFO, "ngx.ctx filled (ret = " .. ret .. ")") + logger:log(INFO, "ngx.ctx filled (ret = " .. ret .. ")") -- Get plugins order local order, err = datastore:get("plugins_order", true) if not order then - logger:log(ngx.ERR, "can't get plugins order from datastore : " .. err) + logger:log(ERR, "can't get plugins order from datastore : " .. err) return end -- Call log_default() methods - logger:log(ngx.INFO, "calling log_default() methods of plugins ...") + logger:log(INFO, "calling log_default() methods of plugins ...") for i, plugin_id in ipairs(order.log_default) do -- Require call - local plugin_lua, err = helpers.require_plugin(plugin_id) + local plugin_lua, err = require_plugin(plugin_id) if plugin_lua == false then - logger:log(ngx.ERR, err) + logger:log(ERR, err) elseif plugin_lua == nil then - logger:log(ngx.INFO, err) + logger:log(INFO, err) else -- Check if plugin has log method if plugin_lua.log_default ~= nil then -- New call - local ok, plugin_obj = helpers.new_plugin(plugin_lua) + local ok, plugin_obj = new_plugin(plugin_lua, ctx) if not ok then - logger:log(ngx.ERR, plugin_obj) + logger:log(ERR, plugin_obj) else - local ok, ret = helpers.call_plugin(plugin_obj, "log_default") + local ok, ret = call_plugin(plugin_obj, "log_default") if not ok then - logger:log(ngx.ERR, ret) + logger:log(ERR, ret) else - logger:log(ngx.INFO, plugin_id .. ":log_default() call successful : " .. ret.msg) + logger:log(INFO, plugin_id .. ":log_default() call successful : " .. ret.msg) end end else - logger:log(ngx.INFO, "skipped execution of " .. plugin_id .. " because method log_default() is not defined") + logger:log(INFO, "skipped execution of " .. plugin_id .. " because method log_default() is not defined") end end end - logger:log(ngx.INFO, "called log_default() methods of plugins") + logger:log(INFO, "called log_default() methods of plugins") -- Display reason at info level - if ctx.reason then - logger:log(ngx.INFO, "client was denied with reason : " .. reason) + local reason = get_reason(ctx) + if reason then + logger:log(INFO, "client was denied with reason : " .. reason) end - -- Save ctx - ngx.ctx = ctx - - logger:log(ngx.INFO, "log_default phase ended") + logger:log(INFO, "log_default phase ended") } diff --git a/src/common/confs/init-lua.conf b/src/common/confs/init-lua.conf index bdcd80529..a8811b535 100644 --- a/src/common/confs/init-lua.conf +++ b/src/common/confs/init-lua.conf @@ -5,57 +5,71 @@ init_by_lua_block { local cdatastore = require "bunkerweb.datastore" local cjson = require "cjson" + local ngx = ngx + local INFO = ngx.INFO + local ERR = ngx.ERR + local NOTICE = ngx.NOTICE + local popen = io.popen + local open = io.open + local load_plugin = helpers.load_plugin + local load_variables = helpers.load_variables + local order_plugins = helpers.order_plugins + local require_plugin = helpers.require_plugin + local new_plugin = helpers.new_plugin + local call_plugin = helpers.call_plugin + local encode = cjson.encode + -- Start init phase local logger = clogger:new("INIT") local datastore = cdatastore:new() - logger:log(ngx.NOTICE, "init phase started") + logger:log(NOTICE, "init phase started") -- Remove previous data from the datastore - logger:log(ngx.NOTICE, "deleting old keys from datastore ...") + logger:log(NOTICE, "deleting old keys from datastore ...") datastore:flush_lru() local data_keys = { "^plugin", "^misc_" } for i, key in pairs(data_keys) do local ok, err = datastore:delete_all(key) if not ok then - logger:log(ngx.ERR, "can't delete " .. key .. " from datastore : " .. err) + logger:log(ERR, "can't delete " .. key .. " from datastore : " .. err) return false end - logger:log(ngx.INFO, "deleted " .. key .. " from datastore") + logger:log(INFO, "deleted " .. key .. " from datastore") end - logger:log(ngx.NOTICE, "deleted old keys from datastore") + logger:log(NOTICE, "deleted old keys from datastore") -- Load plugins into the datastore - logger:log(ngx.NOTICE, "saving plugins into datastore ...") + logger:log(NOTICE, "saving plugins into datastore ...") local plugins = {} local plugin_paths = { "/usr/share/bunkerweb/core", "/etc/bunkerweb/plugins" } for i, plugin_path in ipairs(plugin_paths) do - local paths = io.popen("find -L " .. plugin_path .. " -maxdepth 1 -type d ! -path " .. plugin_path) + local paths = popen("find -L " .. plugin_path .. " -maxdepth 1 -type d ! -path " .. plugin_path) for path in paths:lines() do - local ok, plugin = helpers.load_plugin(path .. "/plugin.json") + local ok, plugin = load_plugin(path .. "/plugin.json") if not ok then - logger:log(ngx.ERR, plugin) + logger:log(ERR, plugin) else local ok, err = datastore:set("plugin_" .. plugin.id, plugin, nil, true) if not ok then - logger:log(ngx.ERR, "can't save " .. plugin.id .. " into datastore : " .. err) + logger:log(ERR, "can't save " .. plugin.id .. " into datastore : " .. err) else table.insert(plugins, plugin) - logger:log(ngx.NOTICE, "loaded plugin " .. plugin.id .. " v" .. plugin.version) + logger:log(NOTICE, "loaded plugin " .. plugin.id .. " v" .. plugin.version) end end end end local ok, err = datastore:set("plugins", plugins, nil, true) if not ok then - logger:log(ngx.ERR, "can't save plugins into datastore : " .. err) + logger:log(ERR, "can't save plugins into datastore : " .. err) return false end -- Load variables into the datastore - logger:log(ngx.NOTICE, "saving variables into datastore ...") - local file = io.open("/etc/nginx/variables.env") + logger:log(NOTICE, "saving variables into datastore ...") + local file = open("/etc/nginx/variables.env") if not file then - logger:log(ngx.ERR, "can't open /etc/nginx/variables.env file") + logger:log(ERR, "can't open /etc/nginx/variables.env file") return false end file:close() @@ -64,73 +78,73 @@ init_by_lua_block { local variable, value = line:match("^([^=]+)=(.*)$") all_variables[variable] = value end - local ok, variables = helpers.load_variables(all_variables, plugins) + local ok, variables = load_variables(all_variables, plugins) if not ok then - logger:log(ngx.ERR, "error while loading variables : " .. variables) + logger:log(ERR, "error while loading variables : " .. variables) return false end local ok, err = datastore:set("variables", variables, nil, true) if not ok then - logger:log(ngx.ERR, "can't save plugins into datastore : " .. err) + logger:log(ERR, "can't save plugins into datastore : " .. err) return false end - logger:log(ngx.NOTICE, "saved variables into datastore") + logger:log(NOTICE, "saved variables into datastore") -- Purge cache - local cachestore = require "bunkerweb.cachestore":new(false, true) + local cachestore = require "bunkerweb.cachestore":new(false) local ok, err = cachestore:purge() if not ok then - logger:log(ngx.ERR, "can't purge cachestore : " .. err) + logger:log(ERR, "can't purge cachestore : " .. err) end - logger:log(ngx.NOTICE, "saving plugins order into datastore ...") - local ok, order = helpers.order_plugins(plugins) + logger:log(NOTICE, "saving plugins order into datastore ...") + local ok, order = order_plugins(plugins) if not ok then - logger:log(ngx.ERR, "can't compute plugins order : " .. err) + logger:log(ERR, "can't compute plugins order : " .. err) return false end for phase, id_list in pairs(order) do - logger:log(ngx.NOTICE, "plugins order for phase " .. phase .. " : " .. cjson.encode(id_list)) + logger:log(NOTICE, "plugins order for phase " .. phase .. " : " .. encode(id_list)) end local ok, err = datastore:set("plugins_order", order, nil, true) if not ok then - logger:log(ngx.ERR, "can't save plugins order into datastore : " .. err) + logger:log(ERR, "can't save plugins order into datastore : " .. err) return false end - logger:log(ngx.NOTICE, "saved plugins order into datastore") + logger:log(NOTICE, "saved plugins order into datastore") -- Call init() method - logger:log(ngx.NOTICE, "calling init() methods of plugins ...") + logger:log(NOTICE, "calling init() methods of plugins ...") for i, plugin_id in ipairs(order["init"]) do -- Require call - local plugin_lua, err = helpers.require_plugin(plugin_id) + local plugin_lua, err = require_plugin(plugin_id) if plugin_lua == false then - logger:log(ngx.ERR, err) + logger:log(ERR, err) elseif plugin_lua == nil then - logger:log(ngx.NOTICE, err) + logger:log(NOTICE, err) else -- Check if plugin has init method if plugin_lua.init ~= nil then -- New call - local ok, plugin_obj = helpers.new_plugin(plugin_lua) + local ok, plugin_obj = new_plugin(plugin_lua) if not ok then - logger:log(ngx.ERR, plugin_obj) + logger:log(ERR, plugin_obj) else - local ok, ret = helpers.call_plugin(plugin_obj, "init") + local ok, ret = call_plugin(plugin_obj, "init") if not ok then - logger:log(ngx.ERR, ret) + logger:log(ERR, ret) elseif not ret.ret then - logger:log(ngx.ERR, plugin_id .. ":init() call failed : " .. ret.msg) + logger:log(ERR, plugin_id .. ":init() call failed : " .. ret.msg) else - logger:log(ngx.NOTICE, plugin_id .. ":init() call successful : " .. ret.msg) + logger:log(NOTICE, plugin_id .. ":init() call successful : " .. ret.msg) end end else - logger:log(ngx.NOTICE, "skipped execution of " .. plugin.id .. " because method init() is not defined") + logger:log(NOTICE, "skipped execution of " .. plugin.id .. " because method init() is not defined") end end end - logger:log(ngx.NOTICE, "called init() methods of plugins") + logger:log(NOTICE, "called init() methods of plugins") - logger:log(ngx.NOTICE, "init phase ended") + logger:log(NOTICE, "init phase ended") } diff --git a/src/common/confs/init-stream-lua.conf b/src/common/confs/init-stream-lua.conf index 3598f5bb1..737238cb7 100644 --- a/src/common/confs/init-stream-lua.conf +++ b/src/common/confs/init-stream-lua.conf @@ -5,57 +5,71 @@ init_by_lua_block { local cdatastore = require "bunkerweb.datastore" local cjson = require "cjson" + local ngx = ngx + local INFO = ngx.INFO + local ERR = ngx.ERR + local NOTICE = ngx.NOTICE + local popen = io.popen + local open = io.open + local load_plugin = helpers.load_plugin + local load_variables = helpers.load_variables + local order_plugins = helpers.order_plugins + local require_plugin = helpers.require_plugin + local new_plugin = helpers.new_plugin + local call_plugin = helpers.call_plugin + local encode = cjson.encode + -- Start init phase local logger = clogger:new("INIT") local datastore = cdatastore:new() - logger:log(ngx.NOTICE, "init-stream phase started") + logger:log(NOTICE, "init-stream phase started") -- Remove previous data from the datastore - logger:log(ngx.NOTICE, "deleting old keys from datastore ...") + logger:log(NOTICE, "deleting old keys from datastore ...") datastore:flush_lru() local data_keys = { "^plugin", "^misc_" } for i, key in pairs(data_keys) do local ok, err = datastore:delete_all(key) if not ok then - logger:log(ngx.ERR, "can't delete " .. key .. " from datastore : " .. err) + logger:log(ERR, "can't delete " .. key .. " from datastore : " .. err) return false end - logger:log(ngx.INFO, "deleted " .. key .. " from datastore") + logger:log(INFO, "deleted " .. key .. " from datastore") end - logger:log(ngx.NOTICE, "deleted old keys from datastore") + logger:log(NOTICE, "deleted old keys from datastore") -- Load plugins into the datastore - logger:log(ngx.NOTICE, "saving plugins into datastore ...") + logger:log(NOTICE, "saving plugins into datastore ...") local plugins = {} local plugin_paths = { "/usr/share/bunkerweb/core", "/etc/bunkerweb/plugins" } for i, plugin_path in ipairs(plugin_paths) do - local paths = io.popen("find -L " .. plugin_path .. " -maxdepth 1 -type d ! -path " .. plugin_path) + local paths = popen("find -L " .. plugin_path .. " -maxdepth 1 -type d ! -path " .. plugin_path) for path in paths:lines() do - local ok, plugin = helpers.load_plugin(path .. "/plugin.json") + local ok, plugin = load_plugin(path .. "/plugin.json") if not ok then - logger:log(ngx.ERR, plugin) + logger:log(ERR, plugin) else local ok, err = datastore:set("plugin_" .. plugin.id, plugin, true) if not ok then - logger:log(ngx.ERR, "can't save " .. plugin.id .. " into datastore : " .. err) + logger:log(ERR, "can't save " .. plugin.id .. " into datastore : " .. err) else table.insert(plugins, plugin) - logger:log(ngx.NOTICE, "loaded plugin " .. plugin.id .. " v" .. plugin.version) + logger:log(NOTICE, "loaded plugin " .. plugin.id .. " v" .. plugin.version) end end end end local ok, err = datastore:set("plugins", plugins, nil, true) if not ok then - logger:log(ngx.ERR, "can't save plugins into datastore : " .. err) + logger:log(ERR, "can't save plugins into datastore : " .. err) return false end -- Load variables into the datastore logger:log(ngx.NOTICE, "saving variables into datastore ...") - local file = io.open("/etc/nginx/variables.env") + local file = open("/etc/nginx/variables.env") if not file then - logger:log(ngx.ERR, "can't open /etc/nginx/variables.env file") + logger:log(ERR, "can't open /etc/nginx/variables.env file") return false end file:close() @@ -64,73 +78,73 @@ init_by_lua_block { local variable, value = line:match("^([^=]+)=(.*)$") all_variables[variable] = value end - local ok, variables = helpers.load_variables(all_variables, plugins) + local ok, variables = load_variables(all_variables, plugins) if not ok then - logger:log(ngx.ERR, "error while loading variables : " .. variables) + logger:log(ERR, "error while loading variables : " .. variables) return false end local ok, err = datastore:set("variables", variables, nil, true) if not ok then - logger:log(ngx.ERR, "can't save plugins into datastore : " .. err) + logger:log(ERR, "can't save plugins into datastore : " .. err) return false end - logger:log(ngx.NOTICE, "saved variables into datastore") + logger:log(NOTICE, "saved variables into datastore") -- Purge cache - local cachestore = require "bunkerweb.cachestore":new(false, true) + local cachestore = require "bunkerweb.cachestore":new(false) local ok, err = cachestore:purge() if not ok then - logger:log(ngx.ERR, "can't purge cachestore : " .. err) + logger:log(ERR, "can't purge cachestore : " .. err) end - logger:log(ngx.NOTICE, "saving plugins order into datastore ...") - local ok, order = helpers.order_plugins(plugins) + logger:log(NOTICE, "saving plugins order into datastore ...") + local ok, order = order_plugins(plugins) if not ok then - logger:log(ngx.ERR, "can't compute plugins order : " .. err) + logger:log(ERR, "can't compute plugins order : " .. err) return false end for phase, id_list in pairs(order) do - logger:log(ngx.NOTICE, "plugins order for phase " .. phase .. " : " .. cjson.encode(id_list)) + logger:log(NOTICE, "plugins order for phase " .. phase .. " : " .. encode(id_list)) end local ok, err = datastore:set("plugins_order", order, nil, true) if not ok then - logger:log(ngx.ERR, "can't save plugins order into datastore : " .. err) + logger:log(ERR, "can't save plugins order into datastore : " .. err) return false end - logger:log(ngx.NOTICE, "saved plugins order into datastore") + logger:log(NOTICE, "saved plugins order into datastore") -- Call init() method - logger:log(ngx.NOTICE, "calling init() methods of plugins ...") + logger:log(NOTICE, "calling init() methods of plugins ...") for i, plugin_id in ipairs(order["init"]) do -- Require call - local plugin_lua, err = helpers.require_plugin(plugin_id) + local plugin_lua, err = require_plugin(plugin_id) if plugin_lua == false then - logger:log(ngx.ERR, err) + logger:log(ERR, err) elseif plugin_lua == nil then - logger:log(ngx.NOTICE, err) + logger:log(NOTICE, err) else -- Check if plugin has init method if plugin_lua.init ~= nil then -- New call - local ok, plugin_obj = helpers.new_plugin(plugin_lua) + local ok, plugin_obj = new_plugin(plugin_lua) if not ok then - logger:log(ngx.ERR, plugin_obj) + logger:log(ERR, plugin_obj) else - local ok, ret = helpers.call_plugin(plugin_obj, "init") + local ok, ret = call_plugin(plugin_obj, "init") if not ok then - logger:log(ngx.ERR, ret) + logger:log(ERR, ret) elseif not ret.ret then - logger:log(ngx.ERR, plugin_id .. ":init() call failed : " .. ret.msg) + logger:log(ERR, plugin_id .. ":init() call failed : " .. ret.msg) else - logger:log(ngx.NOTICE, plugin_id .. ":init() call successful : " .. ret.msg) + logger:log(NOTICE, plugin_id .. ":init() call successful : " .. ret.msg) end end else - logger:log(ngx.NOTICE, "skipped execution of " .. plugin.id .. " because method init() is not defined") + logger:log(NOTICE, "skipped execution of " .. plugin.id .. " because method init() is not defined") end end end - logger:log(ngx.NOTICE, "called init() methods of plugins") + logger:log(NOTICE, "called init() methods of plugins") - logger:log(ngx.NOTICE, "init-stream phase ended") + logger:log(NOTICE, "init-stream phase ended") } diff --git a/src/common/confs/init-worker-lua.conf b/src/common/confs/init-worker-lua.conf index f2a3edf86..01d3f29cc 100644 --- a/src/common/confs/init-worker-lua.conf +++ b/src/common/confs/init-worker-lua.conf @@ -5,16 +5,23 @@ init_worker_by_lua_block { local ready_work = function(premature) -- Libs local helpers = require "bunkerweb.helpers" - local cjson = require "cjson" -- Instantiate objects local logger = require "bunkerweb.logger":new("INIT-WORKER") local datastore = require "bunkerweb.datastore":new() + local ngx = ngx + local INFO = ngx.INFO + local ERR = ngx.ERR + local NOTICE = ngx.NOTICE + local require_plugin = helpers.require_plugin + local new_plugin = helpers.new_plugin + local call_plugin = helpers.call_plugin + -- Don't go further we are in loading state local is_loading, err = require "bunkerweb.utils".get_variable("IS_LOADING", false) if not is_loading then - logger:log(ngx.ERR, "utils.get_variable() failed : " .. err) + logger:log(ERR, "utils.get_variable() failed : " .. err) return elseif is_loading == "yes" then return @@ -23,92 +30,92 @@ init_worker_by_lua_block { -- Instantiate lock local lock = require "resty.lock":new("worker_lock", { timeout = 10 }) if not lock then - logger:log(ngx.ERR, "lock:new() failed : " .. err) + logger:log(ERR, "lock:new() failed : " .. err) return end -- Acquire lock local elapsed, err = lock:lock("ready") if elapsed == nil then - logger:log(ngx.ERR, "lock:lock() failed : " .. err) + logger:log(ERR, "lock:lock() failed : " .. err) return end -- Check if work is done local ok, err = datastore:get("misc_ready") if not ok and err ~= "not found" then - logger:log(ngx.ERR, "datastore:get() failed : " .. err) + logger:log(ERR, "datastore:get() failed : " .. err) local ok, err = lock:unlock() if not ok then - logger:log(ngx.ERR, "lock:unlock() failed : " .. err) + logger:log(ERR, "lock:unlock() failed : " .. err) end return end if ok then local ok, err = lock:unlock() if not ok then - logger:log(ngx.ERR, "lock:unlock() failed : " .. err) + logger:log(ERR, "lock:unlock() failed : " .. err) end return end - logger:log(ngx.INFO, "init_worker phase started") + logger:log(INFO, "init_worker phase started") -- Get plugins order local order, err = datastore:get("plugins_order", true) if not order then - logger:log(ngx.ERR, "can't get plugins order from datastore : " .. err) + logger:log(ERR, "can't get plugins order from datastore : " .. err) local ok, err = lock:unlock() if not ok then - logger:log(ngx.ERR, "lock:unlock() failed : " .. err) + logger:log(ERR, "lock:unlock() failed : " .. err) end return end -- Call init_worker() methods - logger:log(ngx.INFO, "calling init_worker() methods of plugins ...") + logger:log(INFO, "calling init_worker() methods of plugins ...") for i, plugin_id in ipairs(order.init_worker) do -- Require call - local plugin_lua, err = helpers.require_plugin(plugin_id) + local plugin_lua, err = require_plugin(plugin_id) if plugin_lua == false then - logger:log(ngx.ERR, err) + logger:log(ERR, err) elseif plugin_lua == nil then - logger:log(ngx.INFO, err) + logger:log(INFO, err) else -- Check if plugin has init_worker method if plugin_lua.init_worker ~= nil then -- New call - local ok, plugin_obj = helpers.new_plugin(plugin_lua) + local ok, plugin_obj = new_plugin(plugin_lua) if not ok then - logger:log(ngx.ERR, plugin_obj) + logger:log(ERR, plugin_obj) else - local ok, ret = helpers.call_plugin(plugin_obj, "init_worker") + local ok, ret = call_plugin(plugin_obj, "init_worker") if not ok then - logger:log(ngx.ERR, ret) + logger:log(ERR, ret) elseif not ret.ret then - logger:log(ngx.ERR, plugin_id .. ":init_worker() call failed : " .. ret.msg) + logger:log(ERR, plugin_id .. ":init_worker() call failed : " .. ret.msg) else - logger:log(ngx.INFO, plugin_id .. ":init_worker() call successful : " .. ret.msg) + logger:log(INFO, plugin_id .. ":init_worker() call successful : " .. ret.msg) end end else - logger:log(ngx.INFO, "skipped execution of " .. plugin_id .. " because method init_worker() is not defined") + logger:log(INFO, "skipped execution of " .. plugin_id .. " because method init_worker() is not defined") end end end - logger:log(ngx.INFO, "called init_worker() methods of plugins") + logger:log(INFO, "called init_worker() methods of plugins") -- End local ok, err = datastore:set("misc_ready", "ok") if not ok then - logger:log(ngx.ERR, "datastore:set() failed : " .. err) + logger:log(ERR, "datastore:set() failed : " .. err) end local ok, err = lock:unlock() if not ok then - logger:log(ngx.ERR, "lock:unlock() failed : " .. err) + logger:log(ERR, "lock:unlock() failed : " .. err) end - logger:log(ngx.INFO, "init phase ended") - logger:log(ngx.NOTICE, "BunkerWeb is ready to fool hackers ! πŸš€") + logger:log(INFO, "init phase ended") + logger:log(NOTICE, "BunkerWeb is ready to fool hackers ! πŸš€") end -- Start timer diff --git a/src/common/confs/server-http/access-lua.conf b/src/common/confs/server-http/access-lua.conf index 0c2b3a61e..d838a8298 100644 --- a/src/common/confs/server-http/access-lua.conf +++ b/src/common/confs/server-http/access-lua.conf @@ -7,114 +7,134 @@ access_by_lua_block { local cclusterstore = require "bunkerweb.clusterstore" local cjson = require "cjson" + local ngx = ngx + local ngx_req = ngx.req + local is_internal = ngx_req.is_internal + local exit = ngx.exit + local ngx_redirect = ngx.redirect + local ERR = ngx.ERR + local INFO = ngx.INFO + local WARN = ngx.WARN + local NOTICE = ngx.NOTICE + local fill_ctx = helpers.fill_ctx + local save_ctx = helpers.save_ctx + local require_plugin = helpers.require_plugin + local new_plugin = helpers.new_plugin + local call_plugin = helpers.call_plugin + local is_whitelisted = utils.is_whitelisted + local is_banned = utils.is_banned + local get_deny_status = utils.get_deny_status + local tostring = tostring + -- Don't process internal requests local logger = clogger:new("ACCESS") - if ngx.req.is_internal() then - logger:log(ngx.INFO, "skipped access phase because request is internal") + if is_internal() then + logger:log(INFO, "skipped access phase because request is internal") return true end -- Start access phase local datastore = cdatastore:new() - logger:log(ngx.INFO, "access phase started") + logger:log(INFO, "access phase started") -- Fill ctx - logger:log(ngx.INFO, "filling ngx.ctx ...") - local ok, ret, errors, ctx = helpers.fill_ctx() + logger:log(INFO, "filling ngx.ctx ...") + local ok, ret, errors, ctx = fill_ctx() if not ok then - logger:log(ngx.ERR, "fill_ctx() failed : " .. ret) + logger:log(ERR, "fill_ctx() failed : " .. ret) elseif errors then for i, error in ipairs(errors) do - logger:log(ngx.ERR, "fill_ctx() error " .. tostring(i) .. " : " .. error) + logger:log(ERR, "fill_ctx() error " .. tostring(i) .. " : " .. error) end end - logger:log(ngx.INFO, "ngx.ctx filled (ret = " .. ret .. ")") + logger:log(INFO, "ngx.ctx filled (ret = " .. ret .. ")") -- Process bans as soon as possible - if ctx.bw.is_whitelisted ~= "yes" then - local banned, reason, ttl = utils.is_banned(ctx.bw.remote_addr) + if not is_whitelisted(ctx) then + local banned, reason, ttl = is_banned(ctx.bw.remote_addr) if banned == nil then - logger:log(ngx.ERR, "can't check if IP " .. ctx.bw.remote_addr .. " is banned : " .. reason) + logger:log(ERR, "can't check if IP " .. ctx.bw.remote_addr .. " is banned : " .. reason) elseif banned then ctx.bw.is_banned = true - helpers.save_ctx(ctx) - logger:log(ngx.WARN, + ctx.bw.reason = reason + save_ctx(ctx) + logger:log(WARN, "IP " .. ctx.bw.remote_addr .. " is banned with reason " .. reason .. " (" .. tostring(ttl) .. "s remaining)") - return ngx.exit(utils.get_deny_status(ctx)) + return exit(get_deny_status()) else - logger:log(ngx.INFO, "IP " .. ctx.bw.remote_addr .. " is not banned") + logger:log(INFO, "IP " .. ctx.bw.remote_addr .. " is not banned") end end -- Get plugins order local order, err = datastore:get("plugins_order", true) if not order then - logger:log(ngx.ERR, "can't get plugins order from datastore : " .. err) + logger:log(ERR, "can't get plugins order from datastore : " .. err) return end -- Call access() methods - logger:log(ngx.INFO, "calling access() methods of plugins ...") + logger:log(INFO, "calling access() methods of plugins ...") local status = nil local redirect = nil for i, plugin_id in ipairs(order.access) do -- Require call - local plugin_lua, err = helpers.require_plugin(plugin_id) + local plugin_lua, err = require_plugin(plugin_id) if plugin_lua == false then - logger:log(ngx.ERR, err) + logger:log(ERR, err) elseif plugin_lua == nil then - logger:log(ngx.INFO, err) + logger:log(INFO, err) else -- Check if plugin has access method if plugin_lua.access ~= nil then -- New call - local ok, plugin_obj = helpers.new_plugin(plugin_lua, ctx) + local ok, plugin_obj = new_plugin(plugin_lua, ctx) if not ok then - logger:log(ngx.ERR, plugin_obj) + logger:log(ERR, plugin_obj) else - local ok, ret = helpers.call_plugin(plugin_obj, "access") + local ok, ret = call_plugin(plugin_obj, "access") if not ok then - logger:log(ngx.ERR, ret) + logger:log(ERR, ret) elseif not ret.ret then - logger:log(ngx.ERR, plugin_id .. ":access() call failed : " .. ret.msg) + logger:log(ERR, plugin_id .. ":access() call failed : " .. ret.msg) else - logger:log(ngx.INFO, plugin_id .. ":access() call successful : " .. ret.msg) + logger:log(INFO, plugin_id .. ":access() call successful : " .. ret.msg) end if ret.status then - if ret.status == utils.get_deny_status(ctx) then + if ret.status == get_deny_status() then ctx.bw.reason = plugin_id - logger:log(ngx.WARN, "denied access from " .. plugin_id .. " : " .. ret.msg) + logger:log(WARN, "denied access from " .. plugin_id .. " : " .. ret.msg) else - logger:log(ngx.NOTICE, plugin_id .. " returned status " .. tostring(ret.status) .. " : " .. ret.msg) + logger:log(NOTICE, plugin_id .. " returned status " .. tostring(ret.status) .. " : " .. ret.msg) end status = ret.status break elseif ret.redirect then - logger:log(ngx.NOTICE, plugin_id .. " redirect to " .. ret.redirect .. " : " .. ret.msg) + logger:log(NOTICE, plugin_id .. " redirect to " .. ret.redirect .. " : " .. ret.msg) redirect = ret.redirect break end end else - logger:log(ngx.INFO, "skipped execution of " .. plugin_id .. " because method access() is not defined") + logger:log(INFO, "skipped execution of " .. plugin_id .. " because method access() is not defined") end end end - logger:log(ngx.INFO, "called access() methods of plugins") + logger:log(INFO, "called access() methods of plugins") -- Save ctx - helpers.save_ctx(ctx) + save_ctx(ctx) - logger:log(ngx.INFO, "access phase ended") + logger:log(INFO, "access phase ended") -- Return status if needed if status then - return ngx.exit(status) + return exit(status) end -- Redirect if needed if redirect then - return ngx.redirect(redirect) + return ngx_redirect(redirect) end return true diff --git a/src/common/confs/server-http/header-lua.conf b/src/common/confs/server-http/header-lua.conf index 83fca0b10..4e6707624 100644 --- a/src/common/confs/server-http/header-lua.conf +++ b/src/common/confs/server-http/header-lua.conf @@ -1,69 +1,77 @@ header_filter_by_lua_block { - local class = require "middleclass" local clogger = require "bunkerweb.logger" local helpers = require "bunkerweb.helpers" local cdatastore = require "bunkerweb.datastore" - local cjson = require "cjson" + + local ngx = ngx + local ERR = ngx.ERR + local INFO = ngx.INFO + local fill_ctx = helpers.fill_ctx + local save_ctx = helpers.save_ctx + local require_plugin = helpers.require_plugin + local new_plugin = helpers.new_plugin + local call_plugin = helpers.call_plugin + local tostring = tostring -- Start set phase local logger = clogger:new("HEADER") local datastore = cdatastore:new() - logger:log(ngx.INFO, "header phase started") + logger:log(INFO, "header phase started") -- Fill ctx - logger:log(ngx.INFO, "filling ngx.ctx ...") - local ok, ret, errors, ctx = helpers.fill_ctx() + logger:log(INFO, "filling ngx.ctx ...") + local ok, ret, errors, ctx = fill_ctx() if not ok then - logger:log(ngx.ERR, "fill_ctx() failed : " .. ret) + logger:log(ERR, "fill_ctx() failed : " .. ret) elseif errors then for i, error in ipairs(errors) do - logger:log(ngx.ERR, "fill_ctx() error " .. tostring(i) .. " : " .. error) + logger:log(ERR, "fill_ctx() error " .. tostring(i) .. " : " .. error) end end - logger:log(ngx.INFO, "ngx.ctx filled (ret = " .. ret .. ")") + logger:log(INFO, "ngx.ctx filled (ret = " .. ret .. ")") -- Get plugins order local order, err = datastore:get("plugins_order", true) if not order then - logger:log(ngx.ERR, "can't get plugins order from datastore : " .. err) + logger:log(ERR, "can't get plugins order from datastore : " .. err) return end -- Call header() methods - logger:log(ngx.INFO, "calling header() methods of plugins ...") + logger:log(INFO, "calling header() methods of plugins ...") for i, plugin_id in ipairs(order.header) do -- Require call - local plugin_lua, err = helpers.require_plugin(plugin_id) + local plugin_lua, err = require_plugin(plugin_id) if plugin_lua == false then - logger:log(ngx.ERR, err) + logger:log(ERR, err) elseif plugin_lua == nil then - logger:log(ngx.INFO, err) + logger:log(INFO, err) else -- Check if plugin has header method if plugin_lua.header ~= nil then -- New call - local ok, plugin_obj = helpers.new_plugin(plugin_lua, ctx) + local ok, plugin_obj = new_plugin(plugin_lua, ctx) if not ok then - logger:log(ngx.ERR, plugin_obj) + logger:log(ERR, plugin_obj) else - local ok, ret = helpers.call_plugin(plugin_obj, "header") + local ok, ret = call_plugin(plugin_obj, "header") if not ok then - logger:log(ngx.ERR, ret) + logger:log(ERR, ret) elseif not ret.ret then - logger:log(ngx.ERR, plugin_id .. ":header() call failed : " .. ret.msg) + logger:log(ERR, plugin_id .. ":header() call failed : " .. ret.msg) else - logger:log(ngx.INFO, plugin_id .. ":header() call successful : " .. ret.msg) + logger:log(INFO, plugin_id .. ":header() call successful : " .. ret.msg) end end else - logger:log(ngx.INFO, "skipped execution of " .. plugin_id .. " because method header() is not defined") + logger:log(INFO, "skipped execution of " .. plugin_id .. " because method header() is not defined") end end end - logger:log(ngx.INFO, "called header() methods of plugins") + logger:log(INFO, "called header() methods of plugins") -- Save ctx - helpers.save_ctx(ctx) + save_ctx(ctx) return true } diff --git a/src/common/confs/server-http/log-lua.conf b/src/common/confs/server-http/log-lua.conf index d69a13961..8ec1328b0 100644 --- a/src/common/confs/server-http/log-lua.conf +++ b/src/common/confs/server-http/log-lua.conf @@ -1,71 +1,81 @@ -log_by_lua_block { - local class = require "middleclass" +--log_by_lua_block { local clogger = require "bunkerweb.logger" local helpers = require "bunkerweb.helpers" local cdatastore = require "bunkerweb.datastore" - local cjson = require "cjson" + local utils = require "bunkerweb.utils" + + local ngx = ngx + local ERR = ngx.ERR + local INFO = ngx.INFO + local fill_ctx = helpers.fill_ctx + local get_reason = utils.get_reason + local require_plugin = helpers.require_plugin + local new_plugin = helpers.new_plugin + local call_plugin = helpers.call_plugin + local tostring = tostring -- Start log phase local logger = clogger:new("LOG") local datastore = cdatastore:new() - logger:log(ngx.INFO, "log phase started") + logger:log(INFO, "log phase started") -- Fill ctx - logger:log(ngx.INFO, "filling ngx.ctx ...") - local ok, ret, errors, ctx = helpers.fill_ctx() + logger:log(INFO, "filling ngx.ctx ...") + local ok, ret, errors, ctx = fill_ctx() if not ok then - logger:log(ngx.ERR, "fill_ctx() failed : " .. ret) + logger:log(ERR, "fill_ctx() failed : " .. ret) elseif errors then for i, error in ipairs(errors) do - logger:log(ngx.ERR, "fill_ctx() error " .. tostring(i) .. " : " .. error) + logger:log(ERR, "fill_ctx() error " .. tostring(i) .. " : " .. error) end end - logger:log(ngx.INFO, "ngx.ctx filled (ret = " .. ret .. ")") + logger:log(INFO, "ngx.ctx filled (ret = " .. ret .. ")") -- Get plugins order local order, err = datastore:get("plugins_order", true) if not order then - logger:log(ngx.ERR, "can't get plugins order from datastore : " .. err) + logger:log(ERR, "can't get plugins order from datastore : " .. err) return end -- Call log() methods - logger:log(ngx.INFO, "calling log() methods of plugins ...") + logger:log(INFO, "calling log() methods of plugins ...") for i, plugin_id in ipairs(order.log) do -- Require call - local plugin_lua, err = helpers.require_plugin(plugin_id) + local plugin_lua, err = require_plugin(plugin_id) if plugin_lua == false then - logger:log(ngx.ERR, err) + logger:log(ERR, err) elseif plugin_lua == nil then - logger:log(ngx.INFO, err) + logger:log(INFO, err) else -- Check if plugin has log method if plugin_lua.log ~= nil then -- New call - local ok, plugin_obj = helpers.new_plugin(plugin_lua, ctx) + local ok, plugin_obj = new_plugin(plugin_lua, ctx) if not ok then - logger:log(ngx.ERR, plugin_obj) + logger:log(ERR, plugin_obj) else - local ok, ret = helpers.call_plugin(plugin_obj, "log") + local ok, ret = call_plugin(plugin_obj, "log") if not ok then - logger:log(ngx.ERR, ret) + logger:log(ERR, ret) elseif not ret.ret then - logger:log(ngx.ERR, plugin_id .. ":log() call failed : " .. ret.msg) + logger:log(ERR, plugin_id .. ":log() call failed : " .. ret.msg) else - logger:log(ngx.INFO, plugin_id .. ":log() call successful : " .. ret.msg) + logger:log(INFO, plugin_id .. ":log() call successful : " .. ret.msg) end end else - logger:log(ngx.INFO, "skipped execution of " .. plugin_id .. " because method log() is not defined") + logger:log(INFO, "skipped execution of " .. plugin_id .. " because method log() is not defined") end end end - logger:log(ngx.INFO, "called log() methods of plugins") + logger:log(INFO, "called log() methods of plugins") -- Display reason at info level - if ctx.bw.reason then - logger:log(ngx.INFO, "client was denied with reason : " .. ctx.bw.reason) + local reason = get_reason(ctx) + if reason then + logger:log(INFO, "client was denied with reason : " .. reason) end - logger:log(ngx.INFO, "log phase ended") + logger:log(INFO, "log phase ended") } diff --git a/src/common/confs/server-http/set-lua.conf b/src/common/confs/server-http/set-lua.conf index 15ff0f89a..19bd6e245 100644 --- a/src/common/confs/server-http/set-lua.conf +++ b/src/common/confs/server-http/set-lua.conf @@ -1,46 +1,56 @@ -set $dummy_set ""; -set_by_lua_block $dummy_set { - local class = require "middleclass" +--set $dummy_set ""; +--set_by_lua_block $dummy_set { local clogger = require "bunkerweb.logger" local helpers = require "bunkerweb.helpers" local cdatastore = require "bunkerweb.datastore" local ccachestore = require "bunkerweb.cachestore" - local cjson = require "cjson" + + local ngx = ngx + local ngx_req = ngx.req + local is_internal = ngx_req.is_internal + local ERR = ngx.ERR + local INFO = ngx.INFO + local fill_ctx = helpers.fill_ctx + local save_ctx = helpers.save_ctx + local require_plugin = helpers.require_plugin + local new_plugin = helpers.new_plugin + local call_plugin = helpers.call_plugin + local tostring = tostring -- Don't process internal requests local logger = clogger:new("SET") - if ngx.req.is_internal() then - logger:log(ngx.INFO, "skipped set phase because request is internal") + if is_internal() then + logger:log(INFO, "skipped set phase because request is internal") return true end -- Start set phase local datastore = cdatastore:new() - logger:log(ngx.INFO, "set phase started") + logger:log(INFO, "set phase started") -- Update cachestore only once and before any other code - local cachestore = ccachestore:new() + local cachestore = ccachestore:new(false) local ok, err = cachestore.cache:update() if not ok then - logger:log(ngx.ERR, "can't update cachestore : " .. err) + logger:log(ERR, "can't update cachestore : " .. err) end -- Fill ctx - logger:log(ngx.INFO, "filling ngx.ctx ...") - local ok, ret, errors, ctx = helpers.fill_ctx() + logger:log(INFO, "filling ngx.ctx ...") + local ok, ret, errors, ctx = fill_ctx() if not ok then - logger:log(ngx.ERR, "fill_ctx() failed : " .. ret) + logger:log(ERR, "fill_ctx() failed : " .. ret) elseif errors then for i, error in ipairs(errors) do - logger:log(ngx.ERR, "fill_ctx() error " .. tostring(i) .. " : " .. error) + logger:log(ERR, "fill_ctx() error " .. tostring(i) .. " : " .. error) end end - logger:log(ngx.INFO, "ngx.ctx filled (ret = " .. ret .. ")") + logger:log(INFO, "ngx.ctx filled (ret = " .. ret .. ")") -- Get plugins order local order, err = datastore:get("plugins_order", true) if not order then - logger:log(ngx.ERR, "can't get plugins order from datastore : " .. err) + logger:log(ERR, "can't get plugins order from datastore : " .. err) return end @@ -48,37 +58,37 @@ set_by_lua_block $dummy_set { logger:log(ngx.INFO, "calling set() methods of plugins ...") for i, plugin_id in ipairs(order.set) do -- Require call - local plugin_lua, err = helpers.require_plugin(plugin_id) + local plugin_lua, err = require_plugin(plugin_id) if plugin_lua == false then - logger:log(ngx.ERR, err) + logger:log(ERR, err) elseif plugin_lua == nil then - logger:log(ngx.INFO, err) + logger:log(INFO, err) else -- Check if plugin has set method if plugin_lua.set ~= nil then -- New call - local ok, plugin_obj = helpers.new_plugin(plugin_lua, ctx) + local ok, plugin_obj = new_plugin(plugin_lua, ctx) if not ok then - logger:log(ngx.ERR, plugin_obj) + logger:log(ERR, plugin_obj) else - local ok, ret = helpers.call_plugin(plugin_obj, "set") + local ok, ret = call_plugin(plugin_obj, "set") if not ok then - logger:log(ngx.ERR, ret) + logger:log(ERR, ret) elseif not ret.ret then - logger:log(ngx.ERR, plugin_id .. ":set() call failed : " .. ret.msg) + logger:log(ERR, plugin_id .. ":set() call failed : " .. ret.msg) else - logger:log(ngx.INFO, plugin_id .. ":set() call successful : " .. ret.msg) + logger:log(INFO, plugin_id .. ":set() call successful : " .. ret.msg) end end else - logger:log(ngx.INFO, "skipped execution of " .. plugin_id .. " because method set() is not defined") + logger:log(INFO, "skipped execution of " .. plugin_id .. " because method set() is not defined") end end end - logger:log(ngx.INFO, "called set() methods of plugins") + logger:log(INFO, "called set() methods of plugins") -- Save ctx - helpers.save_ctx(ctx) + save_ctx(ctx) return true } diff --git a/src/common/confs/server-http/ssl-certificate-lua.conf b/src/common/confs/server-http/ssl-certificate-lua.conf index 5a1b5981b..b4c7ebfef 100644 --- a/src/common/confs/server-http/ssl-certificate-lua.conf +++ b/src/common/confs/server-http/ssl-certificate-lua.conf @@ -27,51 +27,63 @@ ssl_certificate_by_lua_block { local cjson = require "cjson" local ssl = require "ngx.ssl" + local ngx = ngx + local ngx_req = ngx.req + local is_internal = ngx_req.is_internal + local ERR = ngx.ERR + local INFO = ngx.INFO + local set_cert = ssl.set_cert + local set_priv_key = ssl.set_priv_key + local require_plugin = helpers.require_plugin + local new_plugin = helpers.new_plugin + local call_plugin = helpers.call_plugin + local tostring = tostring + -- Start ssl_certificate phase local logger = clogger:new("SSL-CERTIFICATE") local datastore = cdatastore:new() - logger:log(ngx.INFO, "ssl_certificate phase started") + logger:log(INFO, "ssl_certificate phase started") -- Get plugins order local order, err = datastore:get("plugins_order", true) if not order then - logger:log(ngx.ERR, "can't get plugins order from datastore : " .. err) + logger:log(ERR, "can't get plugins order from datastore : " .. err) return end -- Call ssl_certificate() methods - logger:log(ngx.INFO, "calling ssl_certificate() methods of plugins ...") + logger:log(INFO, "calling ssl_certificate() methods of plugins ...") for i, plugin_id in ipairs(order.ssl_certificate) do -- Require call - local plugin_lua, err = helpers.require_plugin(plugin_id) + local plugin_lua, err = require_plugin(plugin_id) if plugin_lua == false then - logger:log(ngx.ERR, err) + logger:log(ERR, err) elseif plugin_lua == nil then - logger:log(ngx.INFO, err) + logger:log(INFO, err) else -- Check if plugin has ssl_certificate method if plugin_lua.ssl_certificate ~= nil then -- New call - local ok, plugin_obj = helpers.new_plugin(plugin_lua) + local ok, plugin_obj = new_plugin(plugin_lua) if not ok then - logger:log(ngx.ERR, plugin_obj) + logger:log(ERR, plugin_obj) else - local ok, ret = helpers.call_plugin(plugin_obj, "ssl_certificate") + local ok, ret = call_plugin(plugin_obj, "ssl_certificate") if not ok then - logger:log(ngx.ERR, ret) + logger:log(ERR, ret) elseif not ret.ret then - logger:log(ngx.ERR, plugin_id .. ":ssl_certificate() call failed : " .. ret.msg) + logger:log(ERR, plugin_id .. ":ssl_certificate() call failed : " .. ret.msg) else - logger:log(ngx.INFO, plugin_id .. ":ssl_certificate() call successful : " .. ret.msg) + logger:log(INFO, plugin_id .. ":ssl_certificate() call successful : " .. ret.msg) if ret.status then - logger:log(ngx.INFO, plugin_id .. " is setting certificate/key : " .. ret.msg) - local ok, err = ssl.set_cert(ret.status[1]) + logger:log(INFO, plugin_id .. " is setting certificate/key : " .. ret.msg) + local ok, err = set_cert(ret.status[1]) if not ok then - logger:log(ngx.ERR, "error while setting certificate : " .. err) + logger:log(ERR, "error while setting certificate : " .. err) else - local ok, err = ssl.set_priv_key(ret.status[2]) + local ok, err = set_priv_key(ret.status[2]) if not ok then - logger:log(ngx.ERR, "error while setting private key : " .. err) + logger:log(ERR, "error while setting private key : " .. err) else return true end @@ -80,13 +92,13 @@ ssl_certificate_by_lua_block { end end else - logger:log(ngx.INFO, "skipped execution of " .. plugin_id .. " because method ssl_certificate() is not defined") + logger:log(INFO, "skipped execution of " .. plugin_id .. " because method ssl_certificate() is not defined") end end end - logger:log(ngx.INFO, "called ssl_certificate() methods of plugins") + logger:log(INFO, "called ssl_certificate() methods of plugins") - logger:log(ngx.INFO, "ssl_certificate phase ended") + logger:log(INFO, "ssl_certificate phase ended") return true } diff --git a/src/common/core/antibot/antibot.lua b/src/common/core/antibot/antibot.lua index fe5b1880f..0036db580 100644 --- a/src/common/core/antibot/antibot.lua +++ b/src/common/core/antibot/antibot.lua @@ -7,9 +7,30 @@ local plugin = require "bunkerweb.plugin" local sha256 = require "resty.sha256" local str = require "resty.string" local utils = require "bunkerweb.utils" + +local ngx = ngx +local subsystem = ngx.config.subsystem +local HTTP_INTERNAL_SERVER_ERROR = ngx.HTTP_INTERNAL_SERVER_ERROR +local OK = ngx.OK +local tonumber = tonumber +local tostring = tostring +local get_session = utils.get_session +local get_session_data = utils.get_session_data +local set_session_data = utils.set_session_data +local get_deny_status = utils.get_deny_status +local rand = utils.rand +local now = ngx.now +local captcha_new = captcha.new +local base64_encode = base64.encode +local to_hex = str.to_hex +local http_new = http.new +local decode = cjson.decode + local template = nil -if ngx.shared.datastore then +local render = nil +if subsystem == "http" then template = require "resty.template" + render = template.render end local antibot = class("antibot", plugin) @@ -30,12 +51,12 @@ function antibot:header() end -- Get session data - local session, err = utils.get_session("antibot", self.ctx) + local session, err = get_session("antibot", self.ctx) if not session then - return self:ret(false, "can't get session : " .. err, ngx.HTTP_INTERNAL_SERVER_ERROR) + return self:ret(false, "can't get session : " .. err, HTTP_INTERNAL_SERVER_ERROR) end self.session = session - self.session_data = utils.get_session_data(self.session, true, self.ctx) + self.session_data = get_session_data(self.session, true, self.ctx) -- Check if session is valid self:check_session() @@ -48,7 +69,7 @@ function antibot:header() end if self.ctx.bw.uri ~= self.variables["ANTIBOT_URI"] then - return self:ret(true, "Not antibot uri") + return self:ret(true, "not antibot uri") end local header = "Content-Security-Policy" @@ -97,12 +118,12 @@ function antibot:access() end -- Get session data - local session, err = utils.get_session("antibot", self.ctx) + local session, err = get_session("antibot", self.ctx) if not session then - return self:ret(false, "can't get session : " .. err, ngx.HTTP_INTERNAL_SERVER_ERROR) + return self:ret(false, "can't get session : " .. err, HTTP_INTERNAL_SERVER_ERROR) end self.session = session - self.session_data = utils.get_session_data(self.session, true, self.ctx) + self.session_data = get_session_data(self.session, true, self.ctx) -- Check if session is valid self:check_session() @@ -118,7 +139,7 @@ function antibot:access() self:prepare_challenge() local ok, err = self:set_session_data() if not ok then - return self:ret(false, "can't save session : " .. err, ngx.HTTP_INTERNAL_SERVER_ERROR) + return self:ret(false, "can't save session : " .. err, HTTP_INTERNAL_SERVER_ERROR) end -- Redirect to challenge page @@ -143,10 +164,10 @@ function antibot:access() local ok, err, redirect = self:check_challenge() local set_ok, set_err = self:set_session_data() if not set_ok then - return self:ret(false, "can't save session : " .. set_err, ngx.HTTP_INTERNAL_SERVER_ERROR) + return self:ret(false, "can't save session : " .. set_err, HTTP_INTERNAL_SERVER_ERROR) end if ok == nil then - return self:ret(false, "check challenge error : " .. err, ngx.HTTP_INTERNAL_SERVER_ERROR) + return self:ret(false, "check challenge error : " .. err, HTTP_INTERNAL_SERVER_ERROR) elseif not ok then self.logger:log(ngx.WARN, "client failed challenge : " .. err) end @@ -156,14 +177,14 @@ function antibot:access() self:prepare_challenge() ok, err = self:set_session_data() if not ok then - return self:ret(false, "can't save session : " .. err, ngx.HTTP_INTERNAL_SERVER_ERROR) + return self:ret(false, "can't save session : " .. err, HTTP_INTERNAL_SERVER_ERROR) end self.ctx.bw.antibot_display_content = true - return self:ret(true, "displaying challenge to client", ngx.OK) + return self:ret(true, "displaying challenge to client", OK) end -- Method is suspicious, let's deny the request - return self:ret(true, "unsupported HTTP method for antibot", utils.get_deny_status(self.ctx)) + return self:ret(true, "unsupported HTTP method for antibot", get_deny_status()) end function antibot:content() @@ -178,12 +199,12 @@ function antibot:content() end -- Get session data - local session, err = utils.get_session("antibot", self.ctx) + local session, err = get_session("antibot", self.ctx) if not session then - return self:ret(false, "can't get session : " .. err, ngx.HTTP_INTERNAL_SERVER_ERROR) + return self:ret(false, "can't get session : " .. err, HTTP_INTERNAL_SERVER_ERROR) end self.session = session - self.session_data = utils.get_session_data(self.session, true, self.ctx) + self.session_data = get_session_data(self.session, true, self.ctx) -- Direct access without session if not self.session_data.prepared then @@ -228,7 +249,7 @@ end function antibot:set_session_data() if self.session_updated then - local ok, err = utils.set_session_data(self.session, self.session_data, true, self.ctx) + local ok, err = set_session_data(self.session, self.session_data, true, self.ctx) if not ok then return false, err end @@ -246,18 +267,18 @@ function antibot:prepare_challenge() self.session_data.type = self.variables["USE_ANTIBOT"] self.session_data.resolved = false self.session_data.original_uri = self.ctx.bw.request_uri - self.session_data.nonce_script = utils.rand(16) - self.session_data.nonce_style = utils.rand(16) + self.session_data.nonce_script = rand(16) + self.session_data.nonce_style = rand(16) if self.ctx.bw.uri == self.variables["ANTIBOT_URI"] then self.session_data.original_uri = "/" end if self.session_data.type == "cookie" then self.session_data.resolved = true - self.session_data.time_valid = ngx.now() + self.session_data.time_valid = now() elseif self.session_data.type == "javascript" then - self.session_data.random = utils.rand(20) + self.session_data.random = rand(20) elseif self.session_data.type == "captcha" then - self.session_data.captcha = utils.rand(6, true) + self.session_data.captcha = rand(6, true) end end end @@ -282,11 +303,11 @@ function antibot:display_challenge() -- Captcha case if self.session_data.type == "captcha" then - local chall_captcha = captcha.new() + local chall_captcha = captcha_new() chall_captcha:font("/usr/share/bunkerweb/core/antibot/files/font.ttf") chall_captcha:string(self.session_data.captcha) chall_captcha:generate() - template_vars.captcha = base64.encode(chall_captcha:jpegStr(70)) + template_vars.captcha = base64_encode(chall_captcha:jpegStr(70)) end -- reCAPTCHA case @@ -305,7 +326,7 @@ function antibot:display_challenge() end -- Render content - template.render(self.session_data.type .. ".html", template_vars) + render(self.session_data.type .. ".html", template_vars) return true, "displayed challenge" end @@ -317,33 +338,35 @@ function antibot:check_challenge() end local resolved - + local ngx_req = ngx.req + local read_body = ngx_req.read_body + local get_post_args = ngx_req.get_post_args self.session_data.prepared = false self.session_updated = true -- Javascript case if self.session_data.type == "javascript" then - ngx.req.read_body() - local args, err = ngx.req.get_post_args(1) + read_body() + local args, err = get_post_args(1) if err == "truncated" or not args or not args["challenge"] then return nil, "missing challenge arg" end local hash = sha256:new() hash:update(self.session_data.random .. args["challenge"]) local digest = hash:final() - resolved = str.to_hex(digest):find("^0000") ~= nil + resolved = to_hex(digest):find("^0000") ~= nil if not resolved then return false, "wrong value" end self.session_data.resolved = true - self.session_data.time_valid = ngx.now() + self.session_data.time_valid = now() return true, "resolved", self.session_data.original_uri end -- Captcha case if self.session_data.type == "captcha" then - ngx.req.read_body() - local args, err = ngx.req.get_post_args(1) + read_body() + local args, err = get_post_args(1) if err == "truncated" or not args or not args["captcha"] then return nil, "missing challenge arg", nil end @@ -351,18 +374,18 @@ function antibot:check_challenge() return false, "wrong value", nil end self.session_data.resolved = true - self.session_data.time_valid = ngx.now() + self.session_data.time_valid = now() return true, "resolved", self.session_data.original_uri end -- reCAPTCHA case if self.session_data.type == "recaptcha" then - ngx.req.read_body() - local args, err = ngx.req.get_post_args(1) + read_body() + local args, err = get_post_args(1) if err == "truncated" or not args or not args["token"] then return nil, "missing challenge arg", nil end - local httpc, err = http.new() + local httpc, err = http_new() if not httpc then return nil, "can't instantiate http object : " .. err, nil, nil end @@ -382,7 +405,7 @@ function antibot:check_challenge() if not res then return nil, "can't send request to reCAPTCHA API : " .. err, nil end - local ok, rdata = pcall(cjson.decode, res.body) + local ok, rdata = pcall(decode, res.body) if not ok then return nil, "error while decoding JSON from reCAPTCHA API : " .. rdata, nil end @@ -390,18 +413,18 @@ function antibot:check_challenge() return false, "client failed challenge with score " .. tostring(rdata.score), nil end self.session_data.resolved = true - self.session_data.time_valid = ngx.now() + self.session_data.time_valid = now() return true, "resolved", self.session_data.original_uri end -- hCaptcha case if self.session_data.type == "hcaptcha" then - ngx.req.read_body() - local args, err = ngx.req.get_post_args(1) + read_body() + local args, err = get_post_args(1) if err == "truncated" or not args or not args["token"] then return nil, "missing challenge arg", nil end - local httpc, err = http.new() + local httpc, err = http_new() if not httpc then return nil, "can't instantiate http object : " .. err, nil, nil end @@ -421,7 +444,7 @@ function antibot:check_challenge() if not res then return nil, "can't send request to hCaptcha API : " .. err, nil end - local ok, hdata = pcall(cjson.decode, res.body) + local ok, hdata = pcall(decode, res.body) if not ok then return nil, "error while decoding JSON from hCaptcha API : " .. hdata, nil end @@ -429,18 +452,18 @@ function antibot:check_challenge() return false, "client failed challenge", nil end self.session_data.resolved = true - self.session_data.time_valid = ngx.now() + self.session_data.time_valid = now() return true, "resolved", self.session_data.original_uri end -- Turnstile case if self.session_data.type == "turnstile" then - ngx.req.read_body() - local args, err = ngx.req.get_post_args(1) + read_body() + local args, err = get_post_args(1) if err == "truncated" or not args or not args["token"] then return nil, "missing challenge arg", nil end - local httpc, err = http.new() + local httpc, err = http_new() if not httpc then return nil, "can't instantiate http object : " .. err, nil, nil end @@ -460,7 +483,7 @@ function antibot:check_challenge() if not res then return nil, "can't send request to Turnstile API : " .. err, nil end - local ok, tdata = pcall(cjson.decode, res.body) + local ok, tdata = pcall(decode, res.body) if not ok then return nil, "error while decoding JSON from Turnstile API : " .. tdata, nil end @@ -468,7 +491,7 @@ function antibot:check_challenge() return false, "client failed challenge", nil end self.session_data.resolved = true - self.session_data.time_valid = ngx.now() + self.session_data.time_valid = now() return true, "resolved", self.session_data.original_uri end diff --git a/src/common/core/antibot/confs/server-http/antibot.conf b/src/common/core/antibot/confs/server-http/antibot.conf index 2d6601ac4..ab097496c 100644 --- a/src/common/core/antibot/confs/server-http/antibot.conf +++ b/src/common/core/antibot/confs/server-http/antibot.conf @@ -5,22 +5,30 @@ location {{ ANTIBOT_URI }} { content_by_lua_block { local logger = require "bunkerweb.logger":new("ANTIBOT") local helpers = require "bunkerweb.helpers" - local ok, ret, errors, ctx = helpers.fill_ctx() + + local ngx = ngx + local ERR = ngx.ERR + local INFO = ngx.INFO + local fill_ctx = helpers.fill_ctx + local save_ctx = helpers.save_ctx + local tostring = tostring + + local ok, ret, errors, ctx = fill_ctx() if not ok then - logger:log(ngx.ERR, "fill_ctx() failed : " .. ret) + logger:log(ERR, "fill_ctx() failed : " .. ret) elseif errors then for i, error in ipairs(errors) do - logger:log(ngx.ERR, "fill_ctx() error " .. tostring(i) .. " : " .. error) + logger:log(ERR, "fill_ctx() error " .. tostring(i) .. " : " .. error) end end local antibot = require "antibot.antibot":new(ctx) local ret = antibot:content() if not ret.ret then - logger:log(ngx.ERR, "antibot:content() failed : " .. ret.msg) + logger:log(ERR, "antibot:content() failed : " .. ret.msg) else - logger:log(ngx.INFO, "antibot:content() success : " .. ret.msg) + logger:log(INFO, "antibot:content() success : " .. ret.msg) end - ngx.ctx = ctx + save_ctx(ctx) } } {% endif %} diff --git a/src/common/core/badbehavior/badbehavior.lua b/src/common/core/badbehavior/badbehavior.lua index 0a3184686..f0766f409 100644 --- a/src/common/core/badbehavior/badbehavior.lua +++ b/src/common/core/badbehavior/badbehavior.lua @@ -4,6 +4,16 @@ local utils = require "bunkerweb.utils" local badbehavior = class("badbehavior", plugin) +local ngx +local ERR = ngx.ERR +local WARN = ngx.WARN +local NOTICE = ngx.NOTICE +local timer_at = ngx.timer.at +local add_ban = utils.add_ban +local is_whitelisted = utils.is_whitelisted +local is_banned = utils.is_banned +local tostring = tostring + function badbehavior:initialize(ctx) -- Call parent initialize plugin.initialize(self, "badbehavior", ctx) @@ -11,7 +21,7 @@ end function badbehavior:log() -- Check if we are whitelisted - if self.ctx.bw.is_whitelisted == "yes" then + if is_whitelisted(self.ctx) == "yes" then return self:ret(true, "client is whitelisted") end -- Check if bad behavior is activated @@ -23,11 +33,11 @@ function badbehavior:log() return self:ret(true, "not increasing counter") end -- Check if we are already banned - if self.ctx.bw.is_banned then + if is_banned(self.ctx.bw.remote_addr) then return self:ret(true, "already banned") end -- Call increase function later and with cosocket enabled - local ok, err = ngx.timer.at( + local ok, err = timer_at( 0, badbehavior.increase, self.ctx.bw.remote_addr, @@ -55,13 +65,14 @@ function badbehavior.increase(premature, ip, count_time, ban_time, threshold, us -- Instantiate objects local logger = require "bunkerweb.logger":new("badbehavior") local datastore = require "bunkerweb.datastore":new() + -- Declare counter local counter = false -- Redis case if use_redis then local redis_counter, err = badbehavior.redis_increase(ip, count_time, ban_time) if not redis_counter then - logger:log(ngx.ERR, "(increase) redis_increase failed, falling back to local : " .. err) + logger:log(ERR, "(increase) redis_increase failed, falling back to local : " .. err) else counter = redis_counter end @@ -70,7 +81,7 @@ function badbehavior.increase(premature, ip, count_time, ban_time, threshold, us if not counter then local local_counter, err = datastore:get("plugin_badbehavior_count_" .. ip) if not local_counter and err ~= "not found" then - logger:log(ngx.ERR, "(increase) can't get counts from the datastore : " .. err) + logger:log(ERR, "(increase) can't get counts from the datastore : " .. err) end if local_counter == nil then local_counter = 0 @@ -78,25 +89,25 @@ function badbehavior.increase(premature, ip, count_time, ban_time, threshold, us counter = local_counter + 1 end -- Call decrease later - local ok, err = ngx.timer.at(count_time, badbehavior.decrease, ip, count_time, threshold, use_redis) + local ok, err = timer_at(count_time, badbehavior.decrease, ip, count_time, threshold, use_redis) if not ok then - logger:log(ngx.ERR, "(increase) can't create decrease timer : " .. err) + logger:log(ERR, "(increase) can't create decrease timer : " .. err) end -- Store local counter local ok, err = datastore:set("plugin_badbehavior_count_" .. ip, counter, count_time) if not ok then - logger:log(ngx.ERR, "(increase) can't save counts to the datastore : " .. err) + logger:log(ERR, "(increase) can't save counts to the datastore : " .. err) return end -- Store local ban if counter > threshold then - ok, err = utils.add_ban(ip, "bad behavior", ban_time) + ok, err = add_ban(ip, "bad behavior", ban_time) if not ok then - logger:log(ngx.ERR, "(increase) can't save ban : " .. err) + logger:log(ERR, "(increase) can't save ban : " .. err) return end logger:log( - ngx.WARN, + WARN, "IP " .. ip .. " is banned for " @@ -109,7 +120,7 @@ function badbehavior.increase(premature, ip, count_time, ban_time, threshold, us ) end logger:log( - ngx.NOTICE, + NOTICE, "increased counter for IP " .. ip .. " (" .. tostring(counter) .. "/" .. tostring(threshold) .. ")" ) end @@ -124,7 +135,7 @@ function badbehavior.decrease(premature, ip, count_time, threshold, use_redis) if use_redis then local redis_counter, err = badbehavior.redis_decrease(ip, count_time) if not redis_counter then - logger:log(ngx.ERR, "(decrease) redis_decrease failed, falling back to local : " .. err) + logger:log(ERR, "(decrease) redis_decrease failed, falling back to local : " .. err) else counter = redis_counter end @@ -133,7 +144,7 @@ function badbehavior.decrease(premature, ip, count_time, threshold, use_redis) if not counter then local local_counter, err = datastore:get("plugin_badbehavior_count_" .. ip) if not local_counter and err ~= "not found" then - logger:log(ngx.ERR, "(decrease) can't get counts from the datastore : " .. err) + logger:log(ERR, "(decrease) can't get counts from the datastore : " .. err) end if local_counter == nil or local_counter <= 1 then counter = 0 @@ -148,19 +159,19 @@ function badbehavior.decrease(premature, ip, count_time, threshold, use_redis) else local ok, err = datastore:set("plugin_badbehavior_count_" .. ip, counter, count_time) if not ok then - logger:log(ngx.ERR, "(decrease) can't save counts to the datastore : " .. err) + logger:log(ERR, "(decrease) can't save counts to the datastore : " .. err) return end end logger:log( - ngx.NOTICE, + NOTICE, "decreased counter for IP " .. ip .. " (" .. tostring(counter) .. "/" .. tostring(threshold) .. ")" ) end function badbehavior.redis_increase(ip, count_time, ban_time) -- Instantiate objects - local clusterstore = require "bunkerweb.clusterstore":new(false) + local clusterstore = require "bunkerweb.clusterstore":new() -- Our LUA script to execute on redis local redis_script = [[ local ret_incr = redis.pcall("INCR", KEYS[1]) @@ -201,7 +212,7 @@ end function badbehavior.redis_decrease(ip, count_time) -- Instantiate objects - local clusterstore = require "bunkerweb.clusterstore":new(false) + local clusterstore = require "bunkerweb.clusterstore":new() -- Our LUA script to execute on redis local redis_script = [[ local ret_decr = redis.pcall("DECR", KEYS[1]) diff --git a/src/common/core/blacklist/blacklist.lua b/src/common/core/blacklist/blacklist.lua index 2e082d0ad..5e7785f7c 100644 --- a/src/common/core/blacklist/blacklist.lua +++ b/src/common/core/blacklist/blacklist.lua @@ -5,14 +5,26 @@ local utils = require "bunkerweb.utils" local blacklist = class("blacklist", plugin) +local ngx = ngx +local ERR = ngx.ERR +local get_phase = ngx.get_phase +local has_variable = utils.has_variable +local get_deny_status = utils.get_deny_status +local get_rdns = utils.get_rdns +local get_asn = utils.get_asn +local regex_match = utils.regex_match +local ipmatcher_new = ipmatcher.new +local tostring = tostring +local open = io.open + function blacklist:initialize(ctx) -- Call parent initialize plugin.initialize(self, "blacklist", ctx) -- Decode lists - if ngx.get_phase() ~= "init" and self:is_needed() then + if get_phase() ~= "init" and self:is_needed() then local lists, err = self.datastore:get("plugin_blacklist_lists", true) if not lists then - self.logger:log(ngx.ERR, err) + self.logger:log(ERR, err) self.lists = {} else self.lists = lists @@ -50,9 +62,9 @@ function blacklist:is_needed() return self.variables["USE_BLACKLIST"] == "yes" end -- Other cases : at least one service uses it - local is_needed, err = utils.has_variable("USE_BLACKLIST", "yes") + local is_needed, err = has_variable("USE_BLACKLIST", "yes") if is_needed == nil then - self.logger:log(ngx.ERR, "can't check USE_BLACKLIST variable : " .. err) + self.logger:log(ERR, "can't check USE_BLACKLIST variable : " .. err) end return is_needed end @@ -78,7 +90,7 @@ function blacklist:init() } local i = 0 for kind, _ in pairs(blacklists) do - local f, _ = io.open("/var/cache/bunkerweb/blacklist/" .. kind .. ".list", "r") + local f, _ = open("/var/cache/bunkerweb/blacklist/" .. kind .. ".list", "r") if f then for line in f:lines() do table.insert(blacklists[kind], line) @@ -118,12 +130,12 @@ function blacklist:access() for k, v in pairs(checks) do local ok, cached = self:is_in_cache(v) if not ok then - self.logger:log(ngx.ERR, "error while checking cache : " .. cached) + self.logger:log(ERR, "error while checking cache : " .. cached) elseif cached and cached ~= "ok" then return self:ret( true, k .. " is in cached blacklist (info : " .. cached .. ")", - utils.get_deny_status(self.ctx) + get_deny_status() ) end if ok and cached then @@ -139,18 +151,18 @@ function blacklist:access() if not already_cached[k] then local ok, blacklisted = self:is_blacklisted(k) if ok == nil then - self.logger:log(ngx.ERR, "error while checking if " .. k .. " is blacklisted : " .. blacklisted) + self.logger:log(ERR, "error while checking if " .. k .. " is blacklisted : " .. blacklisted) else -- luacheck: ignore 421 local ok, err = self:add_to_cache(self:kind_to_ele(k), blacklisted) if not ok then - self.logger:log(ngx.ERR, "error while adding element to cache : " .. err) + self.logger:log(ERR, "error while adding element to cache : " .. err) end if blacklisted ~= "ok" then return self:ret( true, k .. " is blacklisted (info : " .. blacklisted .. ")", - utils.get_deny_status(self.ctx) + get_deny_status() ) end end @@ -204,7 +216,7 @@ end function blacklist:is_blacklisted_ip() -- Check if IP is in ignore list - local ipm, err = ipmatcher.new(self.lists["IGNORE_IP"]) + local ipm, err = ipmatcher_new(self.lists["IGNORE_IP"]) if not ipm then return nil, err end @@ -235,7 +247,7 @@ function blacklist:is_blacklisted_ip() if check_rdns then -- Get rDNS -- luacheck: ignore 421 - local rdns_list, err = utils.get_rdns(self.ctx.bw.remote_addr) + local rdns_list, err = get_rdns(self.ctx.bw.remote_addr, self.ctx, true) if rdns_list then -- Check if rDNS is in ignore list local ignore = false @@ -258,13 +270,13 @@ function blacklist:is_blacklisted_ip() end end else - self.logger:log(ngx.ERR, "error while getting rdns : " .. err) + self.logger:log(ERR, "error while getting rdns : " .. err) end end -- Check if ASN is in ignore list if self.ctx.bw.ip_is_global then - local asn, err = utils.get_asn(self.ctx.bw.remote_addr) + local asn, err = get_asn(self.ctx.bw.remote_addr) if not asn then self.logger:log(ngx.ERR, "can't get ASN of IP " .. self.ctx.bw.remote_addr .. " : " .. err) else @@ -294,7 +306,7 @@ function blacklist:is_blacklisted_uri() -- Check if URI is in ignore list local ignore = false for _, ignore_uri in ipairs(self.lists["IGNORE_URI"]) do - if utils.regex_match(self.ctx.bw.uri, ignore_uri) then + if regex_match(self.ctx.bw.uri, ignore_uri) then ignore = true break end @@ -302,7 +314,7 @@ function blacklist:is_blacklisted_uri() -- Check if URI is in blacklist if not ignore then for _, uri in ipairs(self.lists["URI"]) do - if utils.regex_match(self.ctx.bw.uri, uri) then + if regex_match(self.ctx.bw.uri, uri) then return true, "URI " .. uri end end @@ -315,7 +327,7 @@ function blacklist:is_blacklisted_ua() -- Check if UA is in ignore list local ignore = false for _, ignore_ua in ipairs(self.lists["IGNORE_USER_AGENT"]) do - if utils.regex_match(self.ctx.bw.http_user_agent, ignore_ua) then + if regex_match(self.ctx.bw.http_user_agent, ignore_ua) then ignore = true break end @@ -323,7 +335,7 @@ function blacklist:is_blacklisted_ua() -- Check if UA is in blacklist if not ignore then for _, ua in ipairs(self.lists["USER_AGENT"]) do - if utils.regex_match(self.ctx.bw.http_user_agent, ua) then + if regex_match(self.ctx.bw.http_user_agent, ua) then return true, "UA " .. ua end end diff --git a/src/common/core/bunkernet/bunkernet.lua b/src/common/core/bunkernet/bunkernet.lua index 6b603492e..71c196edf 100644 --- a/src/common/core/bunkernet/bunkernet.lua +++ b/src/common/core/bunkernet/bunkernet.lua @@ -6,18 +6,41 @@ local utils = require "bunkerweb.utils" local bunkernet = class("bunkernet", plugin) +local ngx = ngx +local ERR = ngx.ERR +local NOTICE = ngx.NOTICE +local WARN = ngx.WARN +local timer_at = ngx.timer.at +local get_phase = ngx.get_phase +local get_version = utils.get_version +local get_integration = utils.get_integration +local get_deny_status = utils.get_deny_status +local is_ipv4 = utils.is_ipv4 +local is_ipv6 = utils.is_ipv6 +local ip_is_global = utils.ip_is_global +local has_variable = utils.has_variable +local is_whitelisted = utils.is_whitelisted +local is_ip_in_networks = utils.is_ip_in_networks +local get_reason = utils.get_reason +local get_variable = utils.get_variable +local tostring = tostring +local open = io.open +local encode = cjson.encode +local decode = cjson.decode +local http_new = http.new + function bunkernet:initialize(ctx) -- Call parent initialize plugin.initialize(self, "bunkernet", ctx) -- Get BunkerNet ID and save info - if ngx.get_phase() ~= "init" and self:is_needed() then + if get_phase() ~= "init" and self:is_needed() then local id, err = self.datastore:get("plugin_bunkernet_id", true) if id then self.bunkernet_id = id - self.version = (self.ctx and self.ctx.bw.version) or utils.get_version() - self.integration = (self.ctx and self.ctx.bw.integration) or utils.get_integration() + self.version = (self.ctx and self.ctx.bw.version) or get_version() + self.integration = (self.ctx and self.ctx.bw.integration) or get_integration() else - self.logger:log(ngx.ERR, "can't get BunkerNet ID from datastore : " .. err) + self.logger:log(ERR, "can't get BunkerNet ID from datastore : " .. err) end end end @@ -32,9 +55,9 @@ function bunkernet:is_needed() return self.variables["USE_BUNKERNET"] == "yes" end -- Other cases : at least one service uses it - local is_needed, err = utils.has_variable("USE_BUNKERNET", "yes") + local is_needed, err = has_variable("USE_BUNKERNET", "yes") if is_needed == nil then - self.logger:log(ngx.ERR, "can't check USE_BUNKERNET variable : " .. err) + self.logger:log(ERR, "can't check USE_BUNKERNET variable : " .. err) end return is_needed end @@ -59,7 +82,7 @@ function bunkernet:init_worker() "received status " .. tostring(status) .. " from API using instance ID " .. self.bunkernet_id ) end - self.logger:log(ngx.NOTICE, "connectivity with API using instance ID " .. self.bunkernet_id .. " is successful") + self.logger:log(NOTICE, "connectivity with API using instance ID " .. self.bunkernet_id .. " is successful") return self:ret(true, "connectivity with API using instance ID " .. self.bunkernet_id .. " is successful") end @@ -69,7 +92,7 @@ function bunkernet:init() return self:ret(true, "no service uses BunkerNet, skipping init") end -- Check if instance ID is present - local f, err = io.open("/var/cache/bunkerweb/bunkernet/instance.id", "r") + local f, err = open("/var/cache/bunkerweb/bunkernet/instance.id", "r") if not f then return self:ret(false, "can't read instance id : " .. err) end @@ -87,12 +110,12 @@ function bunkernet:init() local db = { ip = {}, } - local f, err = io.open("/var/cache/bunkerweb/bunkernet/ip.list", "r") + local f, err = open("/var/cache/bunkerweb/bunkernet/ip.list", "r") if not f then ret = false else for line in f:lines() do - if (utils.is_ipv4(line) or utils.is_ipv6(line)) and utils.ip_is_global(line) then + if (is_ipv4(line) or is_ipv6(line)) and ip_is_global(line) then table.insert(db.ip, line) i = i + 1 end @@ -123,7 +146,7 @@ function bunkernet:access() return self:ret(true, "IP is not global") end -- Check if whitelisted - if self.ctx.bw.is_whitelisted == "yes" then + if is_whitelisted(self.ctx) then return self:ret(true, "client is whitelisted") end -- Extract DB @@ -132,12 +155,12 @@ function bunkernet:access() -- Check if is IP is present if #db.ip > 0 then -- luacheck: ignore 421 - local present, err = utils.is_ip_in_networks(self.ctx.bw.remote_addr, db.ip) + local present, err = is_ip_in_networks(self.ctx.bw.remote_addr, db.ip) if present == nil then return self:ret(false, "can't check if ip is in db : " .. err) end if present then - return self:ret(true, "ip is in db", utils.get_deny_status(self.ctx)) + return self:ret(true, "ip is in db", get_deny_status()) end end else @@ -158,7 +181,7 @@ function bunkernet:log(bypass_checks) end end -- Check if IP has been blocked - local reason = utils.get_reason(self.ctx) + local reason = get_reason(self.ctx) if not reason then return self:ret(true, "ip is not blocked") end @@ -169,20 +192,30 @@ function bunkernet:log(bypass_checks) if not self.ctx.bw.ip_is_global then return self:ret(true, "IP is not global") end - -- TODO : check if IP has been reported recently + -- Check if IP has been reported recently + local ok, data = self.cachestore:get("plugin_bunkernet_" .. self.ctx.bw.remote_addr .. "_" .. reason) + if not ok then + self.logger:log(ERR, "can't check cachestore : " .. data) + elseif data then + return self:ret(true, "already reported recently") + end -- luacheck: ignore 212 431 - local function report_callback(premature, obj, ip, reason, method, url, headers) + local function report_callback(premature, obj, ip, reason, method, url, headers, use_redis) local ok, err, status, _ = obj:report(ip, reason, method, url, headers) if status == 429 then - obj.logger:log(ngx.WARN, "bunkernet API is rate limiting us") + obj.logger:log(WARN, "bunkernet API is rate limiting us") elseif not ok then - obj.logger:log(ngx.ERR, "can't report IP : " .. err) + obj.logger:log(ERR, "can't report IP : " .. err) else - obj.logger:log(ngx.NOTICE, "successfully reported IP " .. ip .. " (reason : " .. reason .. ")") + obj.logger:log(NOTICE, "successfully reported IP " .. ip .. " (reason : " .. reason .. ")") + local cachestore = require "bunkerweb.cachestore":new(use_redis, nil, true) + local ok, err = cachestore:set("plugin_bunkernet_" .. ip .. "_" .. reason) + if not ok then + obj.logger:log(ERR, "error from cachestore : " .. err) + end end end - - local hdr, err = ngx.timer.at( + local hdr, err = timer_at( 0, report_callback, self, @@ -208,7 +241,7 @@ function bunkernet:log_default() return self:ret(false, "missing instance ID") end -- Check if default server is disabled - local check, err = utils.get_variable("DISABLE_DEFAULT_SERVER", false) + local check, err = get_variable("DISABLE_DEFAULT_SERVER", false) if check == nil then return self:ret(false, "error while getting variable DISABLE_DEFAULT_SERVER : " .. err) end @@ -224,7 +257,7 @@ function bunkernet:log_stream() end function bunkernet:request(method, url, data) - local httpc, err = http.new() + local httpc, err = http_new() if not httpc then return false, "can't instantiate http object : " .. err end @@ -240,7 +273,7 @@ function bunkernet:request(method, url, data) end local res, err = httpc:request_uri(self.variables["BUNKERNET_SERVER"] .. url, { method = method, - body = cjson.encode(all_data), + body = encode(all_data), headers = { ["Content-Type"] = "application/json", ["User-Agent"] = "BunkerWeb/" .. self.version, @@ -253,7 +286,7 @@ function bunkernet:request(method, url, data) if res.status ~= 200 then return false, "status code != 200", res.status, nil end - local ok, ret = pcall(cjson.decode, res.body) + local ok, ret = pcall(decode, res.body) if not ok then return false, "error while decoding json : " .. ret end diff --git a/src/common/core/cors/cors.lua b/src/common/core/cors/cors.lua index fc2e1a00f..aeaa44dc1 100644 --- a/src/common/core/cors/cors.lua +++ b/src/common/core/cors/cors.lua @@ -4,6 +4,12 @@ local utils = require "bunkerweb.utils" local cors = class("cors", plugin) +local ngx = ngx +local HTTP_NO_CONTENT = ngx.HTTP_NO_CONTENT +local WARN = ngx.WARN +local regex_match = utils.regex_match +local get_deny_status = utils.get_deny_status + function cors:initialize(ctx) -- Call parent initialize plugin.initialize(self, "cors", ctx) @@ -31,50 +37,51 @@ function cors:header() return self:ret(true, "origin header not present") end -- Always include Vary header to prevent caching - local vary = ngx.header.Vary + local ngx_header = ngx.header + local vary = ngx_header.Vary if vary then if type(vary) == "string" then - ngx.header.Vary = { vary, "Origin" } + ngx_header.Vary = { vary, "Origin" } else table.insert(vary, "Origin") - ngx.header.Vary = vary + ngx_header.Vary = vary end else - ngx.header.Vary = "Origin" + ngx_header.Vary = "Origin" end -- Check if Origin is allowed if self.ctx.bw.http_origin and self.variables["CORS_DENY_REQUEST"] == "yes" and self.variables["CORS_ALLOW_ORIGIN"] ~= "*" - and not utils.regex_match(self.ctx.bw.http_origin, self.variables["CORS_ALLOW_ORIGIN"]) + and not regex_match(self.ctx.bw.http_origin, self.variables["CORS_ALLOW_ORIGIN"]) then - self.logger:log(ngx.WARN, "origin " .. self.ctx.bw.http_origin .. " is not allowed") + self.logger:log(WARN, "origin " .. self.ctx.bw.http_origin .. " is not allowed") return self:ret(true, "origin " .. self.ctx.bw.http_origin .. " is not allowed") end -- Set headers if self.variables["CORS_ALLOW_ORIGIN"] == "*" then - ngx.header["Access-Control-Allow-Origin"] = "*" + ngx_header["Access-Control-Allow-Origin"] = "*" else - ngx.header["Access-Control-Allow-Origin"] = self.ctx.bw.http_origin + ngx_header["Access-Control-Allow-Origin"] = self.ctx.bw.http_origin end for variable, header in pairs(self.all_headers) do if self.variables[variable] ~= "" then - ngx.header[header] = self.variables[variable] + ngx_header[header] = self.variables[variable] end end if self.ctx.bw.request_method == "OPTIONS" then for variable, header in pairs(self.preflight_headers) do if variable == "CORS_ALLOW_CREDENTIALS" then if self.variables["CORS_ALLOW_CREDENTIALS"] == "yes" then - ngx.header[header] = "true" + ngx_header[header] = "true" end elseif self.variables[variable] ~= "" then - ngx.header[header] = self.variables[variable] + ngx_header[header] = self.variables[variable] end end - ngx.header["Content-Type"] = "text/html; charset=UTF-8" - ngx.header["Content-Length"] = "0" + ngx_header["Content-Type"] = "text/html; charset=UTF-8" + ngx_header["Content-Length"] = "0" return self:ret(true, "edited headers for preflight request") end return self:ret(true, "edited headers for standard request") @@ -90,17 +97,17 @@ function cors:access() self.ctx.bw.http_origin and self.variables["CORS_DENY_REQUEST"] == "yes" and self.variables["CORS_ALLOW_ORIGIN"] ~= "*" - and not utils.regex_match(self.ctx.bw.http_origin, self.variables["CORS_ALLOW_ORIGIN"]) + and not regex_match(self.ctx.bw.http_origin, self.variables["CORS_ALLOW_ORIGIN"]) then return self:ret( true, "origin " .. self.ctx.bw.http_origin .. " is not allowed, denying access", - utils.get_deny_status(self.ctx) + get_deny_status() ) end -- Send CORS policy with a 204 (no content) status if self.ctx.bw.request_method == "OPTIONS" and self.ctx.bw.http_origin then - return self:ret(true, "preflight request", ngx.HTTP_NO_CONTENT) + return self:ret(true, "preflight request", HTTP_NO_CONTENT) end return self:ret(true, "standard request") end diff --git a/src/common/core/country/country.lua b/src/common/core/country/country.lua index 6f697b154..299f3316a 100644 --- a/src/common/core/country/country.lua +++ b/src/common/core/country/country.lua @@ -5,6 +5,11 @@ local utils = require "bunkerweb.utils" local country = class("country", plugin) +local ngx = ngx +local get_deny_status = utils.get_deny_status +local decode = cjson.decode +local get_country = cjson.get_country + function country:initialize(ctx) -- Call parent initialize plugin.initialize(self, "country", ctx) @@ -18,7 +23,7 @@ function country:access() -- Check if IP is in cache local _, data = self:is_in_cache(self.ctx.bw.remote_addr) if data then - data = cjson.decode(data) + data = decode(data) if data.result == "ok" then return self:ret( true, @@ -36,7 +41,7 @@ function country:access() .. " is in country cache (blacklisted, country = " .. data.country .. ")", - utils.get_deny_status(self.ctx) + get_deny_status() ) end @@ -50,7 +55,7 @@ function country:access() end -- Get the country of client - local country_data, err = utils.get_country(self.ctx.bw.remote_addr) + local country_data, err = get_country(self.ctx.bw.remote_addr) if not country_data then return self:ret(false, "can't get country of client IP " .. self.ctx.bw.remote_addr .. " : " .. err) end @@ -78,7 +83,7 @@ function country:access() return self:ret( true, "client IP " .. self.ctx.bw.remote_addr .. " is not whitelisted (country = " .. country_data .. ")", - utils.get_deny_status(self.ctx) + get_deny_status() ) end @@ -93,7 +98,7 @@ function country:access() return self:ret( true, "client IP " .. self.ctx.bw.remote_addr .. " is blacklisted (country = " .. country_data .. ")", - utils.get_deny_status(self.ctx) + get_deny_status() ) end end @@ -125,7 +130,7 @@ end function country:add_to_cache(ip, country_data, result) local ok, err = self.cachestore:set( "plugin_country_" .. self.ctx.bw.server_name .. ip, - cjson.encode { country = country_data, result = result }, + encode { country = country_data, result = result }, 86400 ) if not ok then diff --git a/src/common/core/customcert/customcert.lua b/src/common/core/customcert/customcert.lua index f21f5cee0..7a05262ae 100644 --- a/src/common/core/customcert/customcert.lua +++ b/src/common/core/customcert/customcert.lua @@ -5,6 +5,16 @@ local ssl = require "ngx.ssl" local customcert = class("customcert", plugin) +local ngx = ngx +local ERR = ngx.ERR +local parse_pem_cert = ssl.parse_pem_cert +local parse_pem_priv_key = ssl.parse_pem_priv_key +local ssl_server_name = ssl.server_name +local get_variable = utils.get_variable +local get_multiple_variables = utils.get_multiple_variables +local has_variable = utils.has_variable +local open = io.open + function customcert:initialize(ctx) -- Call parent initialize plugin.initialize(self, "customcert", ctx) @@ -12,13 +22,13 @@ end function customcert:init() local ret_ok, ret_err = true, "success" - if utils.has_variable("USE_CUSTOM_SSL", "yes") then - local multisite, err = utils.get_variable("MULTISITE", false) + if has_variable("USE_CUSTOM_SSL", "yes") then + local multisite, err = get_variable("MULTISITE", false) if not multisite then return self:ret(false, "can't get MULTISITE variable : " .. err) end if multisite == "yes" then - local vars, err = utils.get_multiple_variables({"USE_CUSTOM_SSL", "SERVER_NAME"}) + local vars, err = get_multiple_variables({"USE_CUSTOM_SSL", "SERVER_NAME"}) if not vars then return self:ret(false, "can't get USE_CUSTOM_SSL variables : " .. err) end @@ -26,13 +36,13 @@ function customcert:init() if multisite_vars["USE_CUSTOM_SSL"] == "yes" and server_name ~= "global" then local check, data = self:read_files(server_name) if not check then - self.logger:log(ngx.ERR, "error while reading files : " .. data) + self.logger:log(ERR, "error while reading files : " .. data) ret_ok = false ret_err = "error reading files" else local check, err = self:load_data(data, multisite_vars["SERVER_NAME"]) if not check then - self.logger:log(ngx.ERR, "error while loading data : " .. err) + self.logger:log(ERR, "error while loading data : " .. err) ret_ok = false ret_err = "error loading data" end @@ -40,19 +50,19 @@ function customcert:init() end end else - local server_name, err = utils.get_variable("SERVER_NAME", false) + local server_name, err = get_variable("SERVER_NAME", false) if not server_name then return self:ret(false, "can't get SERVER_NAME variable : " .. err) end local check, data = self:read_files(server_name:match("%S+")) if not check then - self.logger:log(ngx.ERR, "error while reading files : " .. data) + self.logger:log(ERR, "error while reading files : " .. data) ret_ok = false ret_err = "error reading files" else local check, err = self:load_data(data, server_name) if not check then - self.logger:log(ngx.ERR, "error while loading data : " .. err) + self.logger:log(ERR, "error while loading data : " .. err) ret_ok = false ret_err = "error loading data" end @@ -65,7 +75,7 @@ function customcert:init() end function customcert:ssl_certificate() - local server_name, err = ssl.server_name() + local server_name, err = ssl_server_name() if not server_name then return self:ret(false, "can't get server_name : " .. err) end @@ -86,7 +96,7 @@ function customcert:read_files(server_name) } local data = {} for i, file in ipairs(files) do - local f, err = io.open(file, "r") + local f, err = open(file, "r") if not f then return false, file .. " = " .. err end @@ -98,12 +108,12 @@ end function customcert:load_data(data, server_name) -- Load certificate - local cert_chain, err = ssl.parse_pem_cert(data[1]) + local cert_chain, err = parse_pem_cert(data[1]) if not cert_chain then return false, "error while parsing pem cert : " .. err end -- Load key - local priv_key, err = ssl.parse_pem_priv_key(data[2]) + local priv_key, err = parse_pem_priv_key(data[2]) if not priv_key then return false, "error while parsing pem priv key : " .. err end diff --git a/src/common/core/dnsbl/dnsbl.lua b/src/common/core/dnsbl/dnsbl.lua index 90bca0e60..d02bdcf18 100644 --- a/src/common/core/dnsbl/dnsbl.lua +++ b/src/common/core/dnsbl/dnsbl.lua @@ -5,9 +5,20 @@ local utils = require "bunkerweb.utils" local dnsbl = class("dnsbl", plugin) +local ngx = ngx +local ERR = ngx.ERR +local NOTICE = ngx.NOTICE +local spawn = ngx.thread.spawn +local wait = ngx.thread.wait +local arpa_str = resolver.arpa_str +local get_ips = utils.get_ips +local has_variable = utils.has_variable +local get_deny_status = utils.get_deny_status +local kill_all_threads = utils.kill_all_threads + local is_in_dnsbl = function(addr, server) - local request = resolver.arpa_str(addr):gsub("%.in%-addr%.arpa", ""):gsub("%.ip6%.arpa", "") .. "." .. server - local ips, err = utils.get_ips(request, false) + local request = arpa_str(addr):gsub("%.in%-addr%.arpa", ""):gsub("%.ip6%.arpa", "") .. "." .. server + local ips, err = get_ips(request, false, nil, true) if not ips then return nil, server, err end @@ -30,7 +41,7 @@ function dnsbl:init_worker() return self:ret(false, "BW is loading") end -- Check if at least one service uses it - local is_needed, err = utils.has_variable("USE_DNSBL", "yes") + local is_needed, err = has_variable("USE_DNSBL", "yes") if is_needed == nil then return self:ret(false, "can't check USE_DNSBL variable : " .. err) elseif not is_needed then @@ -40,21 +51,21 @@ function dnsbl:init_worker() local threads = {} for server in self.variables["DNSBL_LIST"]:gmatch("%S+") do -- Create thread - local thread = ngx.thread.spawn(is_in_dnsbl, "127.0.0.2", server) + local thread = spawn(is_in_dnsbl, "127.0.0.2", server) threads[server] = thread end -- Wait for threads for data, thread in pairs(threads) do -- luacheck: ignore 421 - local ok, result, server, err = ngx.thread.wait(thread) + local ok, result, server, err = wait(thread) if not ok then - self.logger:log(ngx.ERR, "error while waiting thread of " .. data .. " check : " .. result) + self.logger:log(ERR, "error while waiting thread of " .. data .. " check : " .. result) elseif result == nil then - self.logger:log(ngx.ERR, "error while sending DNS request to " .. server .. " : " .. err) + self.logger:log(ERR, "error while sending DNS request to " .. server .. " : " .. err) elseif not result then - self.logger:log(ngx.ERR, "dnsbl check for " .. server .. " failed") + self.logger:log(ERR, "dnsbl check for " .. server .. " failed") else - self.logger:log(ngx.NOTICE, "dnsbl check for " .. server .. " is successful") + self.logger:log(NOTICE, "dnsbl check for " .. server .. " is successful") end end return self:ret(true, "success") @@ -83,14 +94,14 @@ function dnsbl:access() return self:ret( true, "client IP " .. self.ctx.bw.remote_addr .. " is in DNSBL cache (server = " .. cached .. ")", - utils.get_deny_status(self.ctx) + get_deny_status() ) end -- Loop on DNSBL list local threads = {} for server in self.variables["DNSBL_LIST"]:gmatch("%S+") do -- Create thread - local thread = ngx.thread.spawn(is_in_dnsbl, self.ctx.bw.remote_addr, server) + local thread = spawn(is_in_dnsbl, self.ctx.bw.remote_addr, server) threads[server] = thread end -- Wait for threads @@ -109,7 +120,7 @@ function dnsbl:access() end -- Wait for first thread -- luacheck: ignore 421 - local ok, result, server, err = ngx.thread.wait(unpack(wait_threads)) + local ok, result, server, err = wait(unpack(wait_threads)) -- Error case if not ok then ret_threads = false @@ -120,7 +131,7 @@ function dnsbl:access() threads[server] = nil -- DNS error if result == nil then - self.logger:log(ngx.ERR, "error while sending DNS request to " .. server .. " : " .. err) + self.logger:log(ERR, "error while sending DNS request to " .. server .. " : " .. err) end -- IP is in DNSBL if result then @@ -137,7 +148,7 @@ function dnsbl:access() for _, thread in pairs(threads) do table.insert(wait_threads, thread) end - utils.kill_all_threads(wait_threads) + kill_all_threads(wait_threads) end -- Blacklisted by a server : add to cache and deny access if ret_threads then @@ -145,7 +156,7 @@ function dnsbl:access() if not ok then return self:ret(false, "error while adding element to cache : " .. err) end - return self:ret(true, "IP is blacklisted by " .. ret_server, utils.get_deny_status(self.ctx)) + return self:ret(true, "IP is blacklisted by " .. ret_server, get_deny_status()) end -- Error case return self:ret(false, ret_err) diff --git a/src/common/core/errors/errors.lua b/src/common/core/errors/errors.lua index 05aea4bc5..6e3023bf5 100644 --- a/src/common/core/errors/errors.lua +++ b/src/common/core/errors/errors.lua @@ -1,8 +1,14 @@ local class = require "middleclass" local plugin = require "bunkerweb.plugin" + +local ngx = ngx +local subsystem = ngx.config.subsystem + local template = nil -if ngx.shared.datastore then +local render = nil +if subsystem == "http" then template = require "resty.template" + render = template.render end local errors = class("errors", plugin) @@ -65,7 +71,7 @@ end function errors:render_template(code) -- Render template - template.render("error.html", { + render("error.html", { title = code .. " - " .. self.default_errors[code].title, error_title = self.default_errors[code].title, error_code = code, diff --git a/src/common/core/greylist/greylist.lua b/src/common/core/greylist/greylist.lua index da68426f5..5496e1c49 100644 --- a/src/common/core/greylist/greylist.lua +++ b/src/common/core/greylist/greylist.lua @@ -5,14 +5,26 @@ local utils = require "bunkerweb.utils" local greylist = class("greylist", plugin) +local ngx = ngx +local ERR = ngx.ERR +local get_phase = ngx.get_phase +local has_variable = utils.has_variable +local get_deny_status = utils.get_deny_status +local get_rdns = utils.get_rdns +local get_asn = utils.get_asn +local regex_match = utils.regex_match +local ipmatcher_new = ipmatcher.new +local tostring = tostring +local open = io.open + function greylist:initialize(ctx) -- Call parent initialize plugin.initialize(self, "greylist", ctx) -- Decode lists - if ngx.get_phase() ~= "init" and self:is_needed() then + if get_phase() ~= "init" and self:is_needed() then local lists, err = self.datastore:get("plugin_greylist_lists", true) if not lists then - self.logger:log(ngx.ERR, err) + self.logger:log(ERR, err) self.lists = {} else self.lists = lists @@ -45,9 +57,9 @@ function greylist:is_needed() return self.variables["USE_GREYLIST"] == "yes" end -- Other cases : at least one service uses it - local is_needed, err = utils.has_variable("USE_GREYLIST", "yes") + local is_needed, err = has_variable("USE_GREYLIST", "yes") if is_needed == nil then - self.logger:log(ngx.ERR, "can't check USE_GREYLIST variable : " .. err) + self.logger:log(ERR, "can't check USE_GREYLIST variable : " .. err) end return is_needed end @@ -67,7 +79,7 @@ function greylist:init() } local i = 0 for kind, _ in pairs(greylists) do - local f, _ = io.open("/var/cache/bunkerweb/greylist/" .. kind .. ".list", "r") + local f, _ = open("/var/cache/bunkerweb/greylist/" .. kind .. ".list", "r") if f then for line in f:lines() do table.insert(greylists[kind], line) @@ -107,7 +119,7 @@ function greylist:access() for k, v in pairs(checks) do local ok, cached = self:is_in_cache(v) if not ok then - self.logger:log(ngx.ERR, "error while checking cache : " .. cached) + self.logger:log(ERR, "error while checking cache : " .. cached) elseif cached and cached ~= "ko" then return self:ret(true, k .. " is in cached greylist (info : " .. cached .. ")") end @@ -124,12 +136,12 @@ function greylist:access() if not already_cached[k] then local ok, greylisted = self:is_greylisted(k) if ok == nil then - self.logger:log(ngx.ERR, "error while checking if " .. k .. " is greylisted : " .. greylisted) + self.logger:log(ERR, "error while checking if " .. k .. " is greylisted : " .. greylisted) else -- luacheck: ignore 421 local ok, err = self:add_to_cache(self:kind_to_ele(k), greylisted) if not ok then - self.logger:log(ngx.ERR, "error while adding element to cache : " .. err) + self.logger:log(ERR, "error while adding element to cache : " .. err) end if greylisted ~= "ko" then return self:ret(true, k .. " is in greylist") @@ -139,7 +151,7 @@ function greylist:access() end -- Return - return self:ret(true, "not in greylist", utils.get_deny_status(self.ctx)) + return self:ret(true, "not in greylist", get_deny_status()) end function greylist:preread() @@ -169,7 +181,7 @@ end function greylist:is_greylisted_ip() -- Check if IP is in greylist - local ipm, err = ipmatcher.new(self.lists["IP"]) + local ipm, err = ipmatcher_new(self.lists["IP"]) if not ipm then return nil, err end @@ -189,7 +201,7 @@ function greylist:is_greylisted_ip() if check_rdns then -- Get rDNS -- luacheck: ignore 421 - local rdns_list, err = utils.get_rdns(self.ctx.bw.remote_addr) + local rdns_list, err = get_rdns(self.ctx.bw.remote_addr, self.ctx, true) -- Check if rDNS is in greylist if rdns_list then for _, rdns in ipairs(rdns_list) do @@ -200,15 +212,15 @@ function greylist:is_greylisted_ip() end end else - self.logger:log(ngx.ERR, "error while getting rdns : " .. err) + self.logger:log(ERR, "error while getting rdns : " .. err) end end -- Check if ASN is in greylist if self.ctx.bw.ip_is_global then - local asn, err = utils.get_asn(self.ctx.bw.remote_addr) + local asn, err = get_asn(self.ctx.bw.remote_addr) if not asn then - self.logger:log(ngx.ERR, "can't get ASN of IP " .. self.ctx.bw.remote_addr .. " : " .. err) + self.logger:log(ERR, "can't get ASN of IP " .. self.ctx.bw.remote_addr .. " : " .. err) else for _, bl_asn in ipairs(self.lists["ASN"]) do if bl_asn == tostring(asn) then @@ -225,7 +237,7 @@ end function greylist:is_greylisted_uri() -- Check if URI is in greylist for _, uri in ipairs(self.lists["URI"]) do - if utils.regex_match(self.ctx.bw.uri, uri) then + if regex_match(self.ctx.bw.uri, uri) then return true, "URI " .. uri end end @@ -236,7 +248,7 @@ end function greylist:is_greylisted_ua() -- Check if UA is in greylist for _, ua in ipairs(self.lists["USER_AGENT"]) do - if utils.regex_match(self.ctx.bw.http_user_agent, ua) then + if regex_match(self.ctx.bw.http_user_agent, ua) then return true, "UA " .. ua end end diff --git a/src/common/core/headers/headers.lua b/src/common/core/headers/headers.lua index b006c0679..c50041fe7 100644 --- a/src/common/core/headers/headers.lua +++ b/src/common/core/headers/headers.lua @@ -4,6 +4,13 @@ local utils = require "bunkerweb.utils" local headers = class("headers", plugin) +local ngx = ngx +local ERR = ngx.ERR +local get_phase = ngx.get_phase +local regex_match = utils.regex_match +local get_multiple_variables = utils.get_multiple_variables +local tostring = tostring + function headers:initialize(ctx) -- Call parent initialize plugin.initialize(self, "headers", ctx) @@ -18,11 +25,11 @@ function headers:initialize(ctx) ["X_XSS_PROTECTION"] = "X-XSS-Protection", } -- Load data from datastore if needed - if ngx.get_phase() ~= "init" then + if get_phase() ~= "init" then -- Get custom headers from datastore local custom_headers, err = self.datastore:get("plugin_headers_custom_headers", true) if not custom_headers then - self.logger:log(ngx.ERR, err) + self.logger:log(ERR, err) return end self.custom_headers = {} @@ -43,7 +50,7 @@ end function headers:init() -- Get variables - local variables, err = utils.get_multiple_variables({ "CUSTOM_HEADER" }) + local variables, err = get_multiple_variables({ "CUSTOM_HEADER" }) if variables == nil then return self:ret(false, err) end @@ -55,7 +62,7 @@ function headers:init() if data[srv] == nil then data[srv] = {} end - local m = utils.regex_match(value, "([\\w-]+): ([^,]+)") + local m = regex_match(value, "([\\w-]+): ([^,]+)") if m then data[srv][m[1]] = m[2] end @@ -72,14 +79,15 @@ end function headers:header() -- Override upstream headers if needed + local ngx_header = ngx.header local ssl = self.ctx.bw.scheme == "https" for variable, header in pairs(self.all_headers) do if - ngx.header[header] == nil + ngx_header[header] == nil or ( self.variables[variable] ~= "" and self.variables["KEEP_UPSTREAM_HEADERS"] ~= "*" - and utils.regex_match(self.variables["KEEP_UPSTREAM_HEADERS"], "(^| )" .. header .. "($| )") == nil + and regex_match(self.variables["KEEP_UPSTREAM_HEADERS"], "(^| )" .. header .. "($| )") == nil ) then if header ~= "Strict-Transport-Security" or ssl then @@ -87,21 +95,21 @@ function headers:header() header == "Content-Security-Policy" and self.variables["CONTENT_SECURITY_POLICY_REPORT_ONLY"] == "yes" then - ngx.header["Content-Security-Policy-Report-Only"] = self.variables[variable] + ngx_header["Content-Security-Policy-Report-Only"] = self.variables[variable] else - ngx.header[header] = self.variables[variable] + ngx_header[header] = self.variables[variable] end end end end -- Add custom headers for header, value in pairs(self.custom_headers) do - ngx.header[header] = value + ngx_header[header] = value end -- Remove headers if self.variables["REMOVE_HEADERS"] ~= "" then for header in self.variables["REMOVE_HEADERS"]:gmatch("%S+") do - ngx.header[header] = nil + ngx_header[header] = nil end end return self:ret(true, "edited headers for request") diff --git a/src/common/core/letsencrypt/letsencrypt.lua b/src/common/core/letsencrypt/letsencrypt.lua index 76c5ecc36..d7cad3caf 100644 --- a/src/common/core/letsencrypt/letsencrypt.lua +++ b/src/common/core/letsencrypt/letsencrypt.lua @@ -6,6 +6,27 @@ local ssl = require "ngx.ssl" local letsencrypt = class("letsencrypt", plugin) +local ngx = ngx +local ERR = ngx.ERR +local NOTICE = ngx.NOTICE +local OK = ngx.OK +local HTTP_NOT_FOUND = ngx.HTTP_NOT_FOUND +local HTTP_OK = ngx.HTTP_OK +local HTTP_BAD_REQUEST = ngx.HTTP_BAD_REQUEST +local HTTP_INTERNAL_SERVER_ERROR = ngx.HTTP_INTERNAL_SERVER_ERROR +local parse_pem_cert = ssl.parse_pem_cert +local parse_pem_priv_key = ssl.parse_pem_priv_key +local ssl_server_name = ssl.server_name +local get_variable = utils.get_variable +local get_multiple_variables = utils.get_multiple_variables +local has_variable = utils.has_variable +local open = io.open +local sub = string.sub +local match = string.match +local decode = cjson.decode +local execute = os.execute +local remove = os.remove + function letsencrypt:initialize(ctx) -- Call parent initialize plugin.initialize(self, "letsencrypt", ctx) @@ -13,13 +34,13 @@ end function letsencrypt:init() local ret_ok, ret_err = true, "success" - if utils.has_variable("AUTO_LETS_ENCRYPT", "yes") then - local multisite, err = utils.get_variable("MULTISITE", false) + if has_variable("AUTO_LETS_ENCRYPT", "yes") then + local multisite, err = get_variable("MULTISITE", false) if not multisite then return self:ret(false, "can't get MULTISITE variable : " .. err) end if multisite == "yes" then - local vars, err = utils.get_multiple_variables({"AUTO_LETS_ENCRYPT", "SERVER_NAME"}) + local vars, err = get_multiple_variables({"AUTO_LETS_ENCRYPT", "SERVER_NAME"}) if not vars then return self:ret(false, "can't get AUTO_LETS_ENCRYPT variables : " .. err) end @@ -27,13 +48,13 @@ function letsencrypt:init() if multisite_vars["AUTO_LETS_ENCRYPT"] == "yes" and server_name ~= "global" then local check, data = self:read_files(server_name) if not check then - self.logger:log(ngx.ERR, "error while reading files : " .. data) + self.logger:log(ERR, "error while reading files : " .. data) ret_ok = false ret_err = "error reading files" else local check, err = self:load_data(data, multisite_vars["SERVER_NAME"]) if not check then - self.logger:log(ngx.ERR, "error while loading data : " .. err) + self.logger:log(ERR, "error while loading data : " .. err) ret_ok = false ret_err = "error loading data" end @@ -41,19 +62,19 @@ function letsencrypt:init() end end else - local server_name, err = utils.get_variable("SERVER_NAME", false) + local server_name, err = get_variable("SERVER_NAME", false) if not server_name then return self:ret(false, "can't get SERVER_NAME variable : " .. err) end local check, data = self:read_files(server_name:match("%S+")) if not check then - self.logger:log(ngx.ERR, "error while reading files : " .. data) + self.logger:log(ERR, "error while reading files : " .. data) ret_ok = false ret_err = "error reading files" else local check, err = self:load_data(data, server_name) if not check then - self.logger:log(ngx.ERR, "error while loading data : " .. err) + self.logger:log(ERR, "error while loading data : " .. err) ret_ok = false ret_err = "error loading data" end @@ -66,7 +87,7 @@ function letsencrypt:init() end function letsencrypt:ssl_certificate() - local server_name, err = ssl.server_name() + local server_name, err = ssl_server_name() if not server_name then return self:ret(false, "can't get server_name : " .. err) end @@ -87,7 +108,7 @@ function letsencrypt:read_files(server_name) } local data = {} for i, file in ipairs(files) do - local f, err = io.open(file, "r") + local f, err = open(file, "r") if not f then return false, file .. " = " .. err end @@ -99,12 +120,12 @@ end function letsencrypt:load_data(data, server_name) -- Load certificate - local cert_chain, err = ssl.parse_pem_cert(data[1]) + local cert_chain, err = parse_pem_cert(data[1]) if not cert_chain then return false, "error while parsing pem cert : " .. err end -- Load key - local priv_key, err = ssl.parse_pem_priv_key(data[2]) + local priv_key, err = parse_pem_priv_key(data[2]) if not priv_key then return false, "error while parsing pem priv key : " .. err end @@ -120,48 +141,45 @@ function letsencrypt:load_data(data, server_name) end function letsencrypt:access() - if string.sub(self.ctx.bw.uri, 1, string.len("/.well-known/acme-challenge/")) == "/.well-known/acme-challenge/" then - self.logger:log(ngx.NOTICE, "got a visit from Let's Encrypt, let's whitelist it") - return self:ret(true, "visit from LE", ngx.OK) + if sub(self.ctx.bw.uri, 1, string.len("/.well-known/acme-challenge/")) == "/.well-known/acme-challenge/" then + self.logger:log(NOTICE, "got a visit from Let's Encrypt, let's whitelist it") + return self:ret(true, "visit from LE", OK) end return self:ret(true, "success") end -- luacheck: ignore 212 -function letsencrypt:api(ctx) +function letsencrypt:api() if - not string.match(ctx.bw.uri, "^/lets%-encrypt/challenge$") - or (ctx.bw.request_method ~= "POST" and ctx.bw.request_method ~= "DELETE") + not match(self.ctx.bw.uri, "^/lets%-encrypt/challenge$") + or (self.ctx.bw.request_method ~= "POST" and self.ctx.bw.request_method ~= "DELETE") then - return false, nil, nil + return self:ret(false, "success") end local acme_folder = "/var/tmp/bunkerweb/lets-encrypt/.well-known/acme-challenge/" - ngx.req.read_body() - local ret, data = pcall(cjson.decode, ngx.req.get_body_data()) + local ngx_req = ngx.req + ngx_req.read_body() + local ret, data = pcall(decode, ngx_req.get_body_data()) if not ret then - return true, ngx.HTTP_BAD_REQUEST, { status = "error", msg = "json body decoding failed" } + return self:ret(true, "json body decoding failed", HTTP_BAD_REQUEST) end - os.execute("mkdir -p " .. acme_folder) - if ctx.bw.request_method == "POST" then - local file, err = io.open(acme_folder .. data.token, "w+") + execute("mkdir -p " .. acme_folder) + if self.ctx.bw.request_method == "POST" then + local file, err = open(acme_folder .. data.token, "w+") if not file then - return true, - ngx.HTTP_INTERNAL_SERVER_ERROR, - { status = "error", msg = "can't write validation token : " .. err } + return self:ret(true, "can't write validation token : " .. err, HTTP_INTERNAL_SERVER_ERROR) end file:write(data.validation) file:close() - return true, ngx.HTTP_OK, { status = "success", msg = "validation token written" } + return self:ret(true, "validation token written", HTTP_OK) elseif ctx.bw.request_method == "DELETE" then - local ok, err = os.remove(acme_folder .. data.token) + local ok, err = remove(acme_folder .. data.token) if not ok then - return true, - ngx.HTTP_INTERNAL_SERVER_ERROR, - { status = "error", msg = "can't remove validation token : " .. err } + return self:ret(true, "can't remove validation token : " .. err, HTTP_INTERNAL_SERVER_ERROR) end - return true, ngx.HTTP_OK, { status = "success", msg = "validation token removed" } + return true, HTTP_OK, { status = "success", msg = "validation token removed" } end - return true, ngx.HTTP_NOT_FOUND, { status = "error", msg = "unknown request" } + return true, HTTP_NOT_FOUND, { status = "error", msg = "unknown request" } end return letsencrypt diff --git a/src/common/core/limit/limit.lua b/src/common/core/limit/limit.lua index 20f70f642..11ec29a75 100644 --- a/src/common/core/limit/limit.lua +++ b/src/common/core/limit/limit.lua @@ -5,11 +5,24 @@ local utils = require "bunkerweb.utils" local limit = class("limit", plugin) +local ngx = ngx +local ERR = ngx.ERR +local HTTP_TOO_MANY_REQUESTS = ngx.HTTP_TOO_MANY_REQUESTS +local get_phase = ngx.get_phase +local has_variable = utils.has_variable +local get_multiple_variables = utils.get_multiple_variables +local is_whitelisted = utils.is_whitelisted +local regex_match = utils.regex_match +local time = os.time +local date = os.date +local encode = cjson.encode +local decode = cjson.decode + local limit_req_timestamps = function(rate_max, rate_time, timestamps) -- Compute new timestamps local updated = false local new_timestamps = {} - local current_timestamp = os.time(os.date "!*t") + local current_timestamp = time(date("!*t")) local delay = 0 if rate_time == "s" then delay = 1 @@ -40,11 +53,11 @@ function limit:initialize(ctx) -- Call parent initialize plugin.initialize(self, "limit", ctx) -- Load rules if needed - if ngx.get_phase() ~= "init" and self:is_needed() then + if get_phase() ~= "init" and self:is_needed() then -- Get all rules from datastore local all_rules, err = self.datastore:get("plugin_limit_rules", true) if not all_rules then - self.logger:log(ngx.ERR, err) + self.logger:log(ERR, err) return end self.rules = {} @@ -73,7 +86,7 @@ function limit:is_needed() return self.variables["USE_LIMIT_REQ"] == "yes" end -- Other cases : at least one service uses it - local is_needed, err = utils.has_variable("USE_LIMIT_REQ", "yes") + local is_needed, err = has_variable("USE_LIMIT_REQ", "yes") if is_needed == nil then self.logger:log(ngx.ERR, "can't check USE_LIMIT_REQ variable : " .. err) end @@ -86,7 +99,7 @@ function limit:init() return self:ret(true, "no service uses limit for requests, skipping init") end -- Get variables - local variables, err = utils.get_multiple_variables({ "LIMIT_REQ_URL", "LIMIT_REQ_RATE" }) + local variables, err = get_multiple_variables({ "LIMIT_REQ_URL", "LIMIT_REQ_RATE" }) if variables == nil then return self:ret(false, err) end @@ -95,7 +108,7 @@ function limit:init() local i = 0 for srv, vars in pairs(variables) do for var, value in pairs(vars) do - if utils.regex_match(var, "LIMIT_REQ_URL") then + if regex_match(var, "LIMIT_REQ_URL") then local url = value local rate = vars[var:gsub("URL", "RATE")] if data[srv] == nil then @@ -115,7 +128,7 @@ end function limit:access() -- Check if we are whitelisted - if self.ctx.bw.is_whitelisted == "yes" then + if is_whitelisted(self.ctx) then return self:ret(true, "client is whitelisted") end -- Check if access is needed @@ -125,7 +138,7 @@ function limit:access() -- Check if URI is limited local rate for k, v in pairs(self.rules) do - if k ~= "/" and utils.regex_match(self.ctx.bw.uri, k) then + if k ~= "/" and regex_match(self.ctx.bw.uri, k) then rate = v break end @@ -158,7 +171,7 @@ function limit:access() .. " and max rate = " .. rate .. ")", - ngx.HTTP_TOO_MANY_REQUESTS + HTTP_TOO_MANY_REQUESTS ) end -- Limit not reached @@ -184,14 +197,14 @@ function limit:limit_req(rate_max, rate_time) if self.use_redis then local redis_timestamps, err = self:limit_req_redis(rate_max, rate_time) if redis_timestamps == nil then - self.logger:log(ngx.ERR, "limit_req_redis failed, falling back to local : " .. err) + self.logger:log(ERR, "limit_req_redis failed, falling back to local : " .. err) else timestamps = redis_timestamps -- Save the new timestamps -- luacheck: ignore 421 local ok, err = self.datastore:set( "plugin_limit_" .. self.ctx.bw.server_name .. self.ctx.bw.remote_addr .. self.ctx.bw.uri, - cjson.encode(timestamps), + encode(timestamps), delay ) if not ok then @@ -222,7 +235,7 @@ function limit:limit_req_local(rate_max, rate_time) elseif err == "not found" then timestamps = "{}" end - timestamps = cjson.decode(timestamps) + timestamps = decode(timestamps) -- Compute new timestamps local updated, new_timestamps, delay = limit_req_timestamps(rate_max, rate_time, timestamps) -- Save new timestamps if needed @@ -230,7 +243,7 @@ function limit:limit_req_local(rate_max, rate_time) -- luacheck: ignore 421 local ok, err = self.datastore:set( "plugin_limit_" .. self.ctx.bw.server_name .. self.ctx.bw.remote_addr .. self.ctx.bw.uri, - cjson.encode(new_timestamps), + encode(new_timestamps), delay ) if not ok then @@ -303,7 +316,7 @@ function limit:limit_req_redis(rate_max, rate_time) "plugin_limit_" .. self.ctx.bw.server_name .. self.ctx.bw.remote_addr .. self.ctx.bw.uri, rate_max, rate_time, - os.time(os.date("!*t")) + time(date("!*t")) ) if not timestamps then self.clusterstore:close() diff --git a/src/common/core/misc/misc.lua b/src/common/core/misc/misc.lua index 1067faf92..40c16fbaf 100644 --- a/src/common/core/misc/misc.lua +++ b/src/common/core/misc/misc.lua @@ -4,6 +4,11 @@ local utils = require "bunkerweb.utils" local misc = class("misc", plugin) +local ngx = ngx +local HTTP_NOT_ALLOWED = ngx.HTTP_NOT_ALLOWED +local HTTP_BAD_REQUEST = ngx.HTTP_BAD_REQUEST +local regex_match = utils.regex_match + function misc:initialize(ctx) -- Call parent initialize plugin.initialize(self, "misc", ctx) @@ -12,8 +17,8 @@ end function misc:access() -- Check if method is valid local method = self.ctx.bw.request_method - if not method or not utils.regex_match(method, "^[A-Z]+$") then - return self:ret(true, "method is not valid", ngx.HTTP_BAD_REQUEST) + if not method or not regex_match(method, "^[A-Z]+$") then + return self:ret(true, "method is not valid", HTTP_BAD_REQUEST) end -- Check if method is allowed for allowed_method in self.variables["ALLOWED_METHODS"]:gmatch("[^|]+") do @@ -21,7 +26,7 @@ function misc:access() return self:ret(true, "method " .. method .. " is allowed") end end - return self:ret(true, "method " .. method .. " is not allowed", ngx.HTTP_NOT_ALLOWED) + return self:ret(true, "method " .. method .. " is not allowed", HTTP_NOT_ALLOWED) end return misc diff --git a/src/common/core/redis/redis.lua b/src/common/core/redis/redis.lua index e011f58a6..dc3e905a7 100644 --- a/src/common/core/redis/redis.lua +++ b/src/common/core/redis/redis.lua @@ -3,6 +3,9 @@ local plugin = require "bunkerweb.plugin" local redis = class("redis", plugin) +local ngx = ngx +local NOTICE = ngx.NOTICE + function redis:initialize(ctx) -- Call parent initialize plugin.initialize(self, "redis", ctx) @@ -27,7 +30,7 @@ function redis:init_worker() if not ok then return self:ret(false, "redis ping command failed") end - self.logger:log(ngx.NOTICE, "connectivity with redis server " .. self.variables["REDIS_HOST"] .. " is successful") + self.logger:log(NOTICE, "connectivity with redis server " .. self.variables["REDIS_HOST"] .. " is successful") return self:ret(true, "success") end diff --git a/src/common/core/reversescan/reversescan.lua b/src/common/core/reversescan/reversescan.lua index 10107e2ca..864ee1836 100644 --- a/src/common/core/reversescan/reversescan.lua +++ b/src/common/core/reversescan/reversescan.lua @@ -4,6 +4,14 @@ local utils = require "bunkerweb.utils" local reversescan = class("reversescan", plugin) +local ngx = ngx +local spawn = ngx.thread.spawn +local wait = ngx.thread.wait +local ngx_socket = ngx.socket +local kill_all_threads = utils.kill_all_threads +local get_deny_status = utils.get_deny_status +local tonumber = tonumber + function reversescan:initialize(ctx) -- Call parent initialize plugin.initialize(self, "reversescan", ctx) @@ -32,7 +40,7 @@ function reversescan:access() break -- Perform scan in a thread elseif not cached then - local thread = ngx.thread.spawn( + local thread = spawn( self.scan, self.ctx.bw.remote_addr, tonumber(port), @@ -47,11 +55,11 @@ function reversescan:access() for _, thread in pairs(threads) do table.insert(wait_threads, thread) end - utils.kill_all_threads(wait_threads) + kill_all_threads(wait_threads) end -- Open port case if ret_threads then - return self:ret(true, ret_err, utils.get_deny_status(self.ctx)) + return self:ret(true, ret_err, get_deny_status()) end -- Error case return self:ret(false, ret_err) @@ -71,7 +79,7 @@ function reversescan:access() break end -- Wait for first thread - local ok, open, port = ngx.thread.wait(unpack(wait_threads)) + local ok, open, port = wait(unpack(wait_threads)) -- Error case if not ok then ret_threads = false @@ -100,7 +108,7 @@ function reversescan:access() for _, thread in pairs(threads) do table.insert(wait_threads, thread) end - utils.kill_all_threads(wait_threads) + kill_all_threads(wait_threads) end -- Cache results for port, result in pairs(results) do @@ -112,7 +120,7 @@ function reversescan:access() if ret_threads ~= nil then -- Open port case if ret_threads then - return self:ret(true, ret_err, utils.get_deny_status(self.ctx)) + return self:ret(true, ret_err, get_deny_status()) end -- Error case return self:ret(false, ret_err) @@ -126,7 +134,7 @@ function reversescan:preread() end function reversescan.scan(ip, port, timeout) - local tcpsock = ngx.socket.tcp() + local tcpsock = ngx_socket.tcp() tcpsock:settimeout(timeout) local ok, _ = tcpsock:connect(ip, port) tcpsock:close() diff --git a/src/common/core/selfsigned/selfsigned.lua b/src/common/core/selfsigned/selfsigned.lua index b2288b1c5..bf5fab29a 100644 --- a/src/common/core/selfsigned/selfsigned.lua +++ b/src/common/core/selfsigned/selfsigned.lua @@ -5,6 +5,16 @@ local ssl = require "ngx.ssl" local selfsigned = class("selfsigned", plugin) +local ngx = ngx +local ERR = ngx.ERR +local parse_pem_cert = ssl.parse_pem_cert +local parse_pem_priv_key = ssl.parse_pem_priv_key +local ssl_server_name = ssl.server_name +local get_variable = utils.get_variable +local get_multiple_variables = utils.get_multiple_variables +local has_variable = utils.has_variable +local open = io.open + function selfsigned:initialize(ctx) -- Call parent initialize plugin.initialize(self, "selfsigned", ctx) @@ -12,13 +22,13 @@ end function selfsigned:init() local ret_ok, ret_err = true, "success" - if utils.has_variable("GENERATE_SELF_SIGNED_SSL", "yes") then - local multisite, err = utils.get_variable("MULTISITE", false) + if has_variable("GENERATE_SELF_SIGNED_SSL", "yes") then + local multisite, err = get_variable("MULTISITE", false) if not multisite then return self:ret(false, "can't get MULTISITE variable : " .. err) end if multisite == "yes" then - local vars, err = utils.get_multiple_variables({"GENERATE_SELF_SIGNED_SSL", "SERVER_NAME"}) + local vars, err = get_multiple_variables({"GENERATE_SELF_SIGNED_SSL", "SERVER_NAME"}) if not vars then return self:ret(false, "can't get GENERATE_SELF_SIGNED_SSL variables : " .. err) end @@ -26,13 +36,13 @@ function selfsigned:init() if multisite_vars["GENERATE_SELF_SIGNED_SSL"] == "yes" and server_name ~= "global" then local check, data = self:read_files(server_name) if not check then - self.logger:log(ngx.ERR, "error while reading files : " .. data) + self.logger:log(ERR, "error while reading files : " .. data) ret_ok = false ret_err = "error reading files" else local check, err = self:load_data(data, multisite_vars["SERVER_NAME"]) if not check then - self.logger:log(ngx.ERR, "error while loading data : " .. err) + self.logger:log(ERR, "error while loading data : " .. err) ret_ok = false ret_err = "error loading data" end @@ -40,19 +50,19 @@ function selfsigned:init() end end else - local server_name, err = utils.get_variable("SERVER_NAME", false) + local server_name, err = get_variable("SERVER_NAME", false) if not server_name then return self:ret(false, "can't get SERVER_NAME variable : " .. err) end local check, data = self:read_files(server_name:match("%S+")) if not check then - self.logger:log(ngx.ERR, "error while reading files : " .. data) + self.logger:log(ERR, "error while reading files : " .. data) ret_ok = false ret_err = "error reading files" else local check, err = self:load_data(data, server_name) if not check then - self.logger:log(ngx.ERR, "error while loading data : " .. err) + self.logger:log(ERR, "error while loading data : " .. err) ret_ok = false ret_err = "error loading data" end @@ -65,7 +75,7 @@ function selfsigned:init() end function selfsigned:ssl_certificate() - local server_name, err = ssl.server_name() + local server_name, err = ssl_server_name() if not server_name then return self:ret(false, "can't get server_name : " .. err) end @@ -86,7 +96,7 @@ function selfsigned:read_files(server_name) } local data = {} for i, file in ipairs(files) do - local f, err = io.open(file, "r") + local f, err = open(file, "r") if not f then return false, file .. " = " .. err end @@ -98,12 +108,12 @@ end function selfsigned:load_data(data, server_name) -- Load certificate - local cert_chain, err = ssl.parse_pem_cert(data[1]) + local cert_chain, err = parse_pem_cert(data[1]) if not cert_chain then return false, "error while parsing pem cert : " .. err end -- Load key - local priv_key, err = ssl.parse_pem_priv_key(data[2]) + local priv_key, err = parse_pem_priv_key(data[2]) if not priv_key then return false, "error while parsing pem priv key : " .. err end diff --git a/src/common/core/sessions/sessions.lua b/src/common/core/sessions/sessions.lua index a5ad86280..9014b327d 100644 --- a/src/common/core/sessions/sessions.lua +++ b/src/common/core/sessions/sessions.lua @@ -5,6 +5,12 @@ local utils = require "bunkerweb.utils" local sessions = class("sessions", plugin) +local ngx = ngx +local ERR = ngx.ERR +local get_variable = utils.get_variable +local session_init = session.init +local tonumber = tonumber + function sessions:initialize(ctx) -- Call parent initialize plugin.initialize(self, "sessions", ctx) @@ -57,7 +63,7 @@ function sessions:init() ["REDIS_KEEPALIVE_POOL"] = "", } for k, _ in pairs(redis_vars) do - local value, err = utils.get_variable(k, false) + local value, err = get_variable(k, false) if value == nil then return self:ret(false, "can't get " .. k .. " variable : " .. err) end @@ -78,7 +84,7 @@ function sessions:init() config.secret = utils.rand(16) local ok, err = self.datastore:set("storage_sessions_SESSIONS_SECRET", config.secret) if not ok then - self.logger:log(ngx.ERR, "error from datastore:set : " .. err) + self.logger:log(ERR, "error from datastore:set : " .. err) end end end @@ -89,7 +95,7 @@ function sessions:init() config.cookie_name = utils.rand(16) local ok, err = self.datastore:set("storage_sessions_SESSIONS_NAME", config.cookie_name) if not ok then - self.logger:log(ngx.ERR, "error from datastore:set : " .. err) + self.logger:log(ERR, "error from datastore:set : " .. err) end end end @@ -111,7 +117,7 @@ function sessions:init() database = tonumber(redis_vars["REDIS_DATABASE"]), } end - session.init(config) + session_init(config) return self:ret(true, "sessions init successful") end diff --git a/src/common/core/whitelist/whitelist.lua b/src/common/core/whitelist/whitelist.lua index b74f1ec4c..416014ebf 100644 --- a/src/common/core/whitelist/whitelist.lua +++ b/src/common/core/whitelist/whitelist.lua @@ -6,14 +6,29 @@ local utils = require "bunkerweb.utils" local whitelist = class("whitelist", plugin) +local ngx = ngx +local ERR = ngx.ERR +local OK = ngx.OK +local WARN = ngx.WARN +local get_phase = ngx.get_phase +local has_variable = utils.has_variable +local get_ips = utils.get_ips +local get_rdns = utils.get_rdns +local get_asn = utils.get_asn +local regex_match = utils.regex_match +local ipmatcher_new = ipmatcher.new +local tostring = tostring +local open = io.open +local env_set = env.set + function whitelist:initialize(ctx) -- Call parent initialize plugin.initialize(self, "whitelist", ctx) -- Decode lists - if ngx.get_phase() ~= "init" and self:is_needed() then + if get_phase() ~= "init" and self:is_needed() then local lists, err = self.datastore:get("plugin_whitelist_lists", true) if not lists then - self.logger:log(ngx.ERR, err) + self.logger:log(ERR, err) self.lists = {} else self.lists = lists @@ -46,9 +61,9 @@ function whitelist:is_needed() return self.variables["USE_WHITELIST"] == "yes" end -- Other cases : at least one service uses it - local is_needed, err = utils.has_variable("USE_WHITELIST", "yes") + local is_needed, err = has_variable("USE_WHITELIST", "yes") if is_needed == nil then - self.logger:log(ngx.ERR, "can't check USE_WHITELIST variable : " .. err) + self.logger:log(ERR, "can't check USE_WHITELIST variable : " .. err) end return is_needed end @@ -68,7 +83,7 @@ function whitelist:init() } local i = 0 for kind, _ in pairs(whitelists) do - local f, _ = io.open("/var/cache/bunkerweb/whitelist/" .. kind .. ".list", "r") + local f, _ = open("/var/cache/bunkerweb/whitelist/" .. kind .. ".list", "r") if f then for line in f:lines() do table.insert(whitelists[kind], line) @@ -86,10 +101,11 @@ function whitelist:init() end function whitelist:set() + local ngx_var = ngx.var -- Set default value - ngx.var.is_whitelisted = "no" + ngx_var.is_whitelisted = "no" self.ctx.bw.is_whitelisted = "no" - env.set("is_whitelisted", "no") + env_set("is_whitelisted", "no") -- Check if set is needed if not self:is_needed() then return self:ret(true, "whitelist not activated") @@ -99,9 +115,9 @@ function whitelist:set() if whitelisted == nil then return self:ret(false, err) elseif whitelisted then - ngx.var.is_whitelisted = "yes" + ngx_var.is_whitelisted = "yes" self.ctx.bw.is_whitelisted = "yes" - env.set("is_whitelisted", "yes") + env_set("is_whitelisted", "yes") return self:ret(true, err) end return self:ret(true, "not in whitelist cache") @@ -113,14 +129,15 @@ function whitelist:access() return self:ret(true, "whitelist not activated") end -- Check cache + local ngx_var = ngx.var local whitelisted, err, already_cached = self:check_cache() if whitelisted == nil then return self:ret(false, err) elseif whitelisted then - ngx.var.is_whitelisted = "yes" + ngx_var.is_whitelisted = "yes" self.ctx.bw.is_whitelisted = "yes" - env.set("is_whitelisted", "yes") - return self:ret(true, err, ngx.OK) + env_set("is_whitelisted", "yes") + return self:ret(true, err, OK) end -- Perform checks local ok @@ -128,16 +145,16 @@ function whitelist:access() if not already_cached[k] then ok, whitelisted = self:is_whitelisted(k) if ok == nil then - self.logger:log(ngx.ERR, "error while checking if " .. k .. " is whitelisted : " .. whitelisted) + self.logger:log(ERR, "error while checking if " .. k .. " is whitelisted : " .. whitelisted) else ok, err = self:add_to_cache(self:kind_to_ele(k), whitelisted) if not ok then - self.logger:log(ngx.ERR, "error while adding element to cache : " .. err) + self.logger:log(ERR, "error while adding element to cache : " .. err) end if whitelisted ~= "ok" then - ngx.var.is_whitelisted = "yes" + ngx_var.is_whitelisted = "yes" self.ctx.bw.is_whitelisted = "yes" - env.set("is_whitelisted", "yes") + env_set("is_whitelisted", "yes") return self:ret(true, k .. " is whitelisted (info : " .. whitelisted .. ")", ngx.OK) end end @@ -179,7 +196,7 @@ function whitelist:check_cache() for k, v in pairs(checks) do local ok, cached = self:is_in_cache(v) if not ok then - self.logger:log(ngx.ERR, "error while checking cache : " .. cached) + self.logger:log(ERR, "error while checking cache : " .. cached) elseif cached and cached ~= "ok" then return true, k .. " is in cached whitelist (info : " .. cached .. ")" end @@ -224,7 +241,7 @@ end function whitelist:is_whitelisted_ip() -- Check if IP is in whitelist - local ipm, err = ipmatcher.new(self.lists["IP"]) + local ipm, err = ipmatcher_new(self.lists["IP"]) if not ipm then return nil, err end @@ -244,7 +261,7 @@ function whitelist:is_whitelisted_ip() if check_rdns then -- Get rDNS -- luacheck: ignore 421 - local rdns_list, err = utils.get_rdns(self.ctx.bw.remote_addr) + local rdns_list, err = get_rdns(self.ctx.bw.remote_addr, self.ctx, true) -- Check if rDNS is in whitelist if rdns_list then local forward_check = nil @@ -262,7 +279,7 @@ function whitelist:is_whitelisted_ip() end end if forward_check then - local ip_list, err = utils.get_ips(forward_check) + local ip_list, err = get_ips(forward_check, nil, self.ctx, true) if ip_list then for _, ip in ipairs(ip_list) do if ip == self.ctx.bw.remote_addr then @@ -270,23 +287,23 @@ function whitelist:is_whitelisted_ip() end end self.logger:log( - ngx.WARN, + WARN, "IP " .. self.ctx.bw.remote_addr .. " may spoof reverse DNS " .. forward_check ) else - self.logger:log(ngx.ERR, "error while getting rdns (forward check) : " .. err) + self.logger:log(ERR, "error while getting rdns (forward check) : " .. err) end end else - self.logger:log(ngx.ERR, "error while getting rdns : " .. err) + self.logger:log(ERR, "error while getting rdns : " .. err) end end -- Check if ASN is in whitelist if self.ctx.bw.ip_is_global then - local asn, err = utils.get_asn(self.ctx.bw.remote_addr) + local asn, err = get_asn(self.ctx.bw.remote_addr) if not asn then - self.logger:log(ngx.ERR, "can't get ASN of IP " .. self.ctx.bw.remote_addr .. " : " .. err) + self.logger:log(ERR, "can't get ASN of IP " .. self.ctx.bw.remote_addr .. " : " .. err) else for _, bl_asn in ipairs(self.lists["ASN"]) do if bl_asn == tostring(asn) then @@ -303,7 +320,7 @@ end function whitelist:is_whitelisted_uri() -- Check if URI is in whitelist for _, uri in ipairs(self.lists["URI"]) do - if utils.regex_match(self.ctx.bw.uri, uri) then + if regex_match(self.ctx.bw.uri, uri) then return true, "URI " .. uri end end @@ -314,7 +331,7 @@ end function whitelist:is_whitelisted_ua() -- Check if UA is in whitelist for _, ua in ipairs(self.lists["USER_AGENT"]) do - if utils.regex_match(self.ctx.bw.http_user_agent, ua) then + if regex_match(self.ctx.bw.http_user_agent, ua) then return true, "UA " .. ua end end From a4f72f1c1e5ef9b3be8aa7c37206aee9112f6f0b Mon Sep 17 00:00:00 2001 From: florian Date: Sat, 30 Dec 2023 17:09:04 +0100 Subject: [PATCH 088/154] bw - various fixes after LUA improvements --- CHANGELOG.md | 1 + src/bw/lua/bunkerweb/cachestore.lua | 16 +++++++----- src/bw/lua/bunkerweb/clusterstore.lua | 15 +++++++----- src/bw/lua/bunkerweb/helpers.lua | 5 ---- src/bw/lua/bunkerweb/utils.lua | 27 +++++++++++++++++---- src/common/confs/api.conf | 2 +- src/common/confs/server-http/log-lua.conf | 2 +- src/common/confs/server-http/set-lua.conf | 6 ++--- src/common/core/badbehavior/badbehavior.lua | 2 +- src/common/core/bunkernet/bunkernet.lua | 4 +-- 10 files changed, 50 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c46b36878..04f310f33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - [FEATURE] Add profile page to web ui and the possibility to activate the 2FA - [FEATURE] Add setting REVERSE_PROXY_INCLUDES to manually add "include" directives in the reverse proxies - [MISC] Fallback to default HTTPS certificate to prevent errors +- [MISC] Various internal improvements in LUA code - [MISC] Updated Python Docker image to 3.12.1-alpine3.18 in Dockerfiles - [DEPS] Updated ModSecurity to v3.0.11 diff --git a/src/bw/lua/bunkerweb/cachestore.lua b/src/bw/lua/bunkerweb/cachestore.lua index e349d51d8..c7cca0baa 100644 --- a/src/bw/lua/bunkerweb/cachestore.lua +++ b/src/bw/lua/bunkerweb/cachestore.lua @@ -102,9 +102,9 @@ function cachestore:get(key) -- luacheck: ignore 431 local value, err, hit_level if self.use_redis and is_cosocket_available() then - value, err, hit_level = self.cache:get(key, nil, callback, key, self.clusterstore) + value, err, hit_level = cache:get(key, nil, callback, key, self.clusterstore) else - value, err, hit_level = self.cache:get(key, nil, callback_no_miss) + value, err, hit_level = cache:get(key, nil, callback_no_miss) end if value == nil and err ~= nil then return false, err @@ -123,9 +123,9 @@ function cachestore:set(key, value, ex) end end if ex then - ok, err = self.cache:set(key, { ttl = ex }, value) + ok, err = cache:set(key, { ttl = ex }, value) else - ok, err = self.cache:set(key, nil, value) + ok, err = cache:set(key, nil, value) end if not ok then return false, err @@ -160,7 +160,7 @@ function cachestore:delete(key) logger:log(ERR, err) end end - ok, err = self.cache:delete(key) + ok, err = cache:delete(key) if not ok then return false, err end @@ -185,7 +185,11 @@ function cachestore:del_redis(key) end function cachestore:purge() - return self.cache:purge(true) + return cache:purge(true) +end + +function cachestore:update() + return cache:update() end return cachestore diff --git a/src/bw/lua/bunkerweb/clusterstore.lua b/src/bw/lua/bunkerweb/clusterstore.lua index 306613553..0d57bb691 100644 --- a/src/bw/lua/bunkerweb/clusterstore.lua +++ b/src/bw/lua/bunkerweb/clusterstore.lua @@ -9,6 +9,7 @@ local clusterstore = class("clusterstore") local logger = clogger:new("CLUSTERSTORE") local get_variable = utils.get_variable +local is_cosocket_available = utils.is_cosocket_available local ERR = ngx.ERR local tonumber = tonumber @@ -34,13 +35,15 @@ function clusterstore:initialize(pool) end -- Instantiate object self.pool = pool == nil or pool - local redis_client, err = redis:new() - self.redis_client = redis_client - if self.redis_client == nil then - logger:log(ERR, "can't instantiate redis object : " .. err) - return + if is_cosocket_available() then + local redis_client, err = redis:new() + self.redis_client = redis_client + if self.redis_client == nil then + logger:log(ERR, "can't instantiate redis object : " .. err) + return + end + self.redis_client:set_timeout(tonumber(self.variables["REDIS_TIMEOUT"])) end - self.redis_client:set_timeout(tonumber(self.variables["REDIS_TIMEOUT"])) end function clusterstore:connect() diff --git a/src/bw/lua/bunkerweb/helpers.lua b/src/bw/lua/bunkerweb/helpers.lua index f7f83a61f..f7253c4a8 100644 --- a/src/bw/lua/bunkerweb/helpers.lua +++ b/src/bw/lua/bunkerweb/helpers.lua @@ -16,8 +16,6 @@ local subsystem = ngx.config.subsystem local var = ngx.var local req = ngx.req local ip_is_global = utils.ip_is_global -local get_integration = utils.get_integration -local get_version = utils.get_version local is_ipv4 = utils.is_ipv4 local is_ipv6 = utils.is_ipv6 local get_variable = utils.get_variable @@ -209,9 +207,6 @@ helpers.fill_ctx = function() -- IP data : v4 / v6 data.ip_is_ipv4 = is_ipv4(data.ip) data.ip_is_ipv6 = is_ipv6(data.ip) - -- Misc info - data.integration = get_integration() - data.version = get_version() end -- Fill ctx ctx.bw = data diff --git a/src/bw/lua/bunkerweb/utils.lua b/src/bw/lua/bunkerweb/utils.lua index 4538192ff..b9f6f65f2 100644 --- a/src/bw/lua/bunkerweb/utils.lua +++ b/src/bw/lua/bunkerweb/utils.lua @@ -198,7 +198,11 @@ utils.ip_is_global = function(ip) return not matched, "success" end -utils.get_integration = function() +utils.get_integration = function(ctx) + -- Check if already in ctx + if ctx and ctx.bw.integration then + return ctx.bw.integration + end -- Check if already in datastore local integration, _ = datastore:get("misc_integration", true) if integration then @@ -248,10 +252,17 @@ utils.get_integration = function() if not ok then logger:log(ERR, "can't cache integration to datastore : " .. err) end + if ctx then + ctx.bw.integration = integration + end return integration end -utils.get_version = function() +utils.get_version = function(ctx) + -- Check if already in ctx + if ctx and ctx.bw.version then + return ctx.bw.version + end -- Check if already in datastore local version, _ = datastore:get("misc_version", true) if version then @@ -265,11 +276,14 @@ utils.get_version = function() end version = f:read("*a"):gsub("[\n\r]", "") f:close() - -- Save it to datastore + -- Save version local ok, err = datastore:set("misc_version", version, nil, true) if not ok then logger:log(ERR, "can't cache version to datastore : " .. err) end + if ctx then + ctx.bw.version = version + end return version end @@ -725,6 +739,7 @@ utils.get_phases = function() "init", "init_worker", "set", + "rewrite", "access", "content", "ssl_certificate", @@ -732,16 +747,18 @@ utils.get_phases = function() "log", "preread", "log_stream", - "log_default", + "log_default" } end utils.is_cosocket_available = function() local phases = { "timer", + "rewrite", "access", + "content", "ssl_certificate", - "preread", + "preread" } local current_phase = get_phase() for _, phase in ipairs(phases) do diff --git a/src/common/confs/api.conf b/src/common/confs/api.conf index 89f6f6101..d3a04af0b 100644 --- a/src/common/confs/api.conf +++ b/src/common/confs/api.conf @@ -17,7 +17,6 @@ server { access_by_lua_block { -- Instantiate objects and import required modules local logger = require "bunkerweb.logger":new("API") - local api = require "bunkerweb.api":new() local helpers = require "bunkerweb.helpers" local ngx = ngx @@ -53,6 +52,7 @@ server { end -- Check IP + local api = require "bunkerweb.api":new(ctx) local ok, err = api:is_allowed_ip() if not ok then logger:log(WARN, "can't validate access from IP " .. ctx.bw.remote_addr .. " : " .. err) diff --git a/src/common/confs/server-http/log-lua.conf b/src/common/confs/server-http/log-lua.conf index 8ec1328b0..cb545a064 100644 --- a/src/common/confs/server-http/log-lua.conf +++ b/src/common/confs/server-http/log-lua.conf @@ -1,4 +1,4 @@ ---log_by_lua_block { +log_by_lua_block { local clogger = require "bunkerweb.logger" local helpers = require "bunkerweb.helpers" local cdatastore = require "bunkerweb.datastore" diff --git a/src/common/confs/server-http/set-lua.conf b/src/common/confs/server-http/set-lua.conf index 19bd6e245..4c9efa7b1 100644 --- a/src/common/confs/server-http/set-lua.conf +++ b/src/common/confs/server-http/set-lua.conf @@ -1,5 +1,5 @@ ---set $dummy_set ""; ---set_by_lua_block $dummy_set { +set $dummy_set ""; +set_by_lua_block $dummy_set { local clogger = require "bunkerweb.logger" local helpers = require "bunkerweb.helpers" local cdatastore = require "bunkerweb.datastore" @@ -30,7 +30,7 @@ -- Update cachestore only once and before any other code local cachestore = ccachestore:new(false) - local ok, err = cachestore.cache:update() + local ok, err = cachestore:update() if not ok then logger:log(ERR, "can't update cachestore : " .. err) end diff --git a/src/common/core/badbehavior/badbehavior.lua b/src/common/core/badbehavior/badbehavior.lua index f0766f409..4e3f2f8c1 100644 --- a/src/common/core/badbehavior/badbehavior.lua +++ b/src/common/core/badbehavior/badbehavior.lua @@ -4,7 +4,7 @@ local utils = require "bunkerweb.utils" local badbehavior = class("badbehavior", plugin) -local ngx +local ngx = ngx local ERR = ngx.ERR local WARN = ngx.WARN local NOTICE = ngx.NOTICE diff --git a/src/common/core/bunkernet/bunkernet.lua b/src/common/core/bunkernet/bunkernet.lua index 71c196edf..652920250 100644 --- a/src/common/core/bunkernet/bunkernet.lua +++ b/src/common/core/bunkernet/bunkernet.lua @@ -37,8 +37,8 @@ function bunkernet:initialize(ctx) local id, err = self.datastore:get("plugin_bunkernet_id", true) if id then self.bunkernet_id = id - self.version = (self.ctx and self.ctx.bw.version) or get_version() - self.integration = (self.ctx and self.ctx.bw.integration) or get_integration() + self.version = get_version(self.ctx) + self.integration = get_integration(self.ctx) else self.logger:log(ERR, "can't get BunkerNet ID from datastore : " .. err) end From af8fa60e284a9e0af925ec3d3c526c0c8d653a96 Mon Sep 17 00:00:00 2001 From: florian Date: Sat, 30 Dec 2023 17:57:32 +0100 Subject: [PATCH 089/154] bw - fix is_whitelisted function and fix typo in country core --- src/bw/lua/bunkerweb/utils.lua | 2 +- src/common/core/country/country.lua | 5 +-- src/common/core/redis/plugin.json | 54 +++++++++++++++++++++++++++++ src/deps/deps.json | 6 ++++ src/deps/init_deps.sh | 8 +++-- src/deps/install.sh | 6 ++++ 6 files changed, 75 insertions(+), 6 deletions(-) diff --git a/src/bw/lua/bunkerweb/utils.lua b/src/bw/lua/bunkerweb/utils.lua index b9f6f65f2..2153dc528 100644 --- a/src/bw/lua/bunkerweb/utils.lua +++ b/src/bw/lua/bunkerweb/utils.lua @@ -321,7 +321,7 @@ end utils.is_whitelisted = function(ctx) -- ngx.ctx if ctx and ctx.bw and ctx.bw.is_whitelisted then - return ctx.bw.is_whitelisted + return ctx.bw.is_whitelisted == "yes" end -- ngx.var if var.is_whitelisted and var.is_whitelisted == "yes" then diff --git a/src/common/core/country/country.lua b/src/common/core/country/country.lua index 299f3316a..66bb046d7 100644 --- a/src/common/core/country/country.lua +++ b/src/common/core/country/country.lua @@ -6,9 +6,10 @@ local utils = require "bunkerweb.utils" local country = class("country", plugin) local ngx = ngx +local get_country = utils.get_country local get_deny_status = utils.get_deny_status local decode = cjson.decode -local get_country = cjson.get_country +local encode = cjson.encode function country:initialize(ctx) -- Call parent initialize @@ -130,7 +131,7 @@ end function country:add_to_cache(ip, country_data, result) local ok, err = self.cachestore:set( "plugin_country_" .. self.ctx.bw.server_name .. ip, - encode { country = country_data, result = result }, + encode({ country = country_data, result = result }), 86400 ) if not ok then diff --git a/src/common/core/redis/plugin.json b/src/common/core/redis/plugin.json index e29c7c7cb..4fa38219f 100644 --- a/src/common/core/redis/plugin.json +++ b/src/common/core/redis/plugin.json @@ -76,6 +76,60 @@ "label": "Redis keepalive pool", "regex": "^[0-9]+$", "type": "text" + }, + "REDIS_USERNAME": { + "context": "global", + "default": "", + "help": "Redis username used in AUTH command.", + "id": "redis-username", + "label": "Redis username", + "regex": "^.*$", + "type": "text" + }, + "REDIS_PASSWORD": { + "context": "global", + "default": "", + "help": "Redis password used in AUTH command.", + "id": "redis-password", + "label": "Redis password", + "regex": "^.*$", + "type": "password" + }, + "REDIS_SENTINEL_HOSTS": { + "context": "global", + "default": "", + "help": "Redis sentinel hosts with format host:[port] separated with spaces.", + "id": "redis-sentinel-hosts", + "label": "Redis sentinel hosts", + "regex": "^.*$", + "type": "text" + }, + "REDIS_SENTINEL_USERNAME": { + "context": "global", + "default": "", + "help": "Redis sentinel username.", + "id": "redis-sentinel-username", + "label": "Redis sentinel username", + "regex": "^.*$", + "type": "text" + }, + "REDIS_SENTINEL_PASSWORD": { + "context": "global", + "default": "", + "help": "Redis sentinel password.", + "id": "redis-sentinel-password", + "label": "Redis sentinel password", + "regex": "^.*$", + "type": "password" + }, + "REDIS_SENTINEL_MASTER": { + "context": "global", + "default": "", + "help": "Redis sentinel master name.", + "id": "redis-sentinel-master", + "label": "Redis sentinel master", + "regex": "^.*$", + "type": "text" } } } diff --git a/src/deps/deps.json b/src/deps/deps.json index 589147007..fa7712eba 100644 --- a/src/deps/deps.json +++ b/src/deps/deps.json @@ -234,6 +234,12 @@ "name": "zlib v1.3", "url": "https://github.com/madler/zlib.git", "commit": "09155eaa2f9270dc4ed1fa13e2b4b2613e6e4851" + }, + { + "id": "lua-resty-redis-connector", + "name": "lua-resty-redis-connector v0.11.0", + "url": "https://github.com/ledgetech/lua-resty-redis-connector.git", + "commit": "02a29f93253d1f6ad392c5ac2b643c57e62b5979" } ] } diff --git a/src/deps/init_deps.sh b/src/deps/init_deps.sh index b3c2fbe2e..269a24a07 100755 --- a/src/deps/init_deps.sh +++ b/src/deps/init_deps.sh @@ -43,22 +43,24 @@ do url="$(echo "$repo" | jq -r .url)" commit="$(echo "$repo" | jq -r .commit)" post_install="$(echo "$repo" | jq -r .post_install)" + post="no" echo "ℹ️ Clone ${name} from $url at commit/version $commit" if [ ! -d "src/deps/src/$id" ] ; then do_and_check_cmd git subtree add --prefix "src/deps/src/$id" "$url" "$commit" --squash + post="yes" else echo "⚠️ Skipping clone of $url because target directory is already present" - echo "ℹ️ Updating ${name} from $url at commit/version $commit" - do_and_check_cmd git subtree pull --prefix "src/deps/src/$id" "$url" "$commit" --squash + # echo "ℹ️ Updating ${name} from $url at commit/version $commit" + # do_and_check_cmd git subtree pull --prefix "src/deps/src/$id" "$url" "$commit" --squash fi if [ -d "src/deps/src/$id/.git" ] ; then do_and_check_cmd rm -rf "src/deps/src/$id/.git" fi - if [ "$post_install" != "null" ] ; then + if [ "$post_install" != "null" ] && [ "$post" != "no" ]; then echo "ℹ️ Running post install script for ${name}" bash -c "$post_install" fi diff --git a/src/deps/install.sh b/src/deps/install.sh index 0e589bd3e..4ccfc77f9 100755 --- a/src/deps/install.sh +++ b/src/deps/install.sh @@ -183,6 +183,12 @@ export CHANGE_DIR="/tmp/bunkerweb/deps/src/lua-resty-signal" do_and_check_cmd make PREFIX=/usr/share/bunkerweb/deps -j "$NTASK" do_and_check_cmd make PREFIX=/usr/share/bunkerweb/deps LUA_LIB_DIR=/usr/share/bunkerweb/deps/lib/lua install +# Installing lua-resty-redis-connector +echo "ℹ️ Installing lua-resty-redis-connector" +export CHANGE_DIR="/tmp/bunkerweb/deps/src/lua-resty-redis-connector" +do_and_check_cmd make PREFIX=/usr/share/bunkerweb/deps LUA_LIB_DIR=/usr/share/bunkerweb/deps/lib/lua install + +# Patch modsec module export CHANGE_DIR="/tmp/bunkerweb/deps/misc" do_and_check_cmd bash -c "mv ngx_http_modsecurity_access.c /tmp/bunkerweb/deps/src/modsecurity-nginx/src/" From 8f051820b9c885fd6bbe4c8fdbb0dc1f888aaae2 Mon Sep 17 00:00:00 2001 From: florian Date: Sat, 30 Dec 2023 17:57:49 +0100 Subject: [PATCH 090/154] Squashed 'src/deps/src/lua-resty-redis-connector/' content from commit 02a29f93 git-subtree-dir: src/deps/src/lua-resty-redis-connector git-subtree-split: 02a29f93253d1f6ad392c5ac2b643c57e62b5979 --- .gitattributes | 1 + .github/FUNDING.yml | 1 + .gitignore | 5 + .luacheckrc | 2 + .luacov | 4 + .travis.yml | 84 ++++ Makefile | 189 ++++++++ README.md | 312 +++++++++++++ dist.ini | 9 + lib/resty/redis/connector.lua | 459 ++++++++++++++++++++ lib/resty/redis/sentinel.lua | 63 +++ lua-resty-redis-connector-0.11.0-0.rockspec | 27 ++ t/config.t | 229 ++++++++++ t/connector.t | 442 +++++++++++++++++++ t/proxy.t | 156 +++++++ t/sentinel.t | 279 ++++++++++++ util/lua-releng | 63 +++ 17 files changed, 2325 insertions(+) create mode 100644 .gitattributes create mode 100644 .github/FUNDING.yml create mode 100644 .gitignore create mode 100644 .luacheckrc create mode 100644 .luacov create mode 100644 .travis.yml create mode 100644 Makefile create mode 100644 README.md create mode 100644 dist.ini create mode 100644 lib/resty/redis/connector.lua create mode 100644 lib/resty/redis/sentinel.lua create mode 100644 lua-resty-redis-connector-0.11.0-0.rockspec create mode 100644 t/config.t create mode 100644 t/connector.t create mode 100644 t/proxy.t create mode 100644 t/sentinel.t create mode 100755 util/lua-releng diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..eeb90a6cb --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.t linguist-language=lua diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..5f95a1089 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: pintsized diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..09095e038 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +t/servroot/ +t/error.log +luacov.* +*.src.rock +lua-resty-redis-connector*.tar.gz diff --git a/.luacheckrc b/.luacheckrc new file mode 100644 index 000000000..77ab5dfda --- /dev/null +++ b/.luacheckrc @@ -0,0 +1,2 @@ +std = "ngx_lua" +redefined = false diff --git a/.luacov b/.luacov new file mode 100644 index 000000000..71fc093bd --- /dev/null +++ b/.luacov @@ -0,0 +1,4 @@ +modules = { + ["resty.redis.connector"] = "lib/resty/redis/connector.lua", + ["resty.redis.sentinel"] = "lib/resty/redis/sentinel.lua", +} diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..0c342c66f --- /dev/null +++ b/.travis.yml @@ -0,0 +1,84 @@ +sudo: required +dist: focal + +os: linux + +language: c + +compiler: gcc + +addons: + apt: + sources: + - sourceline: 'ppa:redislabs/redis' + packages: + - luarocks + - lsof + +cache: + directories: + - download-cache + +env: + global: + - JOBS=3 + - NGX_BUILD_JOBS=$JOBS + - LUAJIT_PREFIX=/opt/luajit21 + - LUAJIT_LIB=$LUAJIT_PREFIX/lib + - LUAJIT_INC=$LUAJIT_PREFIX/include/luajit-2.1 + - LUA_INCLUDE_DIR=$LUAJIT_INC + - OPENSSL_PREFIX=/opt/ssl + - OPENSSL_LIB=$OPENSSL_PREFIX/lib + - OPENSSL_INC=$OPENSSL_PREFIX/include + - OPENSSL_VER=1.1.1f + - LD_LIBRARY_PATH=$LUAJIT_LIB:$LD_LIBRARY_PATH + - TEST_NGINX_SLEEP=0.006 + - LUACHECK_VER=0.21.1 + jobs: + - NGINX_VERSION=1.19.9 + +before_install: + # we can't update redis in addons.apt.packages as updated package automatically tries to start and immediately fails + - echo exit 101 | sudo tee /usr/sbin/policy-rc.d + - sudo chmod +x /usr/sbin/policy-rc.d + - sudo apt-get install -y redis-server + - sudo luarocks install luacov + - sudo luarocks install lua-resty-redis + - sudo luarocks install luacheck $LUACHECK_VER + - luacheck -q . + +install: + - if [ ! -d download-cache ]; then mkdir download-cache; fi + - if [ ! -f download-cache/openssl-$OPENSSL_VER.tar.gz ]; then wget -O download-cache/openssl-$OPENSSL_VER.tar.gz https://www.openssl.org/source/openssl-$OPENSSL_VER.tar.gz; fi + - sudo apt-get install -qq -y cpanminus axel + - sudo cpanm --notest Test::Nginx > build.log 2>&1 || (cat build.log && exit 1) + - git clone https://github.com/openresty/openresty.git ../openresty + - git clone https://github.com/openresty/nginx-devel-utils.git + - git clone https://github.com/openresty/lua-cjson.git + - git clone https://github.com/openresty/lua-nginx-module.git ../lua-nginx-module + - git clone https://github.com/openresty/stream-lua-nginx-module.git ../stream-lua-nginx-module + - git clone https://github.com/openresty/lua-resty-core.git ../lua-resty-core + - git clone https://github.com/openresty/lua-resty-lrucache.git ../lua-resty-lrucache + - git clone https://github.com/openresty/echo-nginx-module.git ../echo-nginx-module + - git clone https://github.com/openresty/no-pool-nginx.git ../no-pool-nginx + - git clone -b v2.1-agentzh https://github.com/openresty/luajit2.git + +script: + - sudo iptables -A OUTPUT -p tcp --dst 127.0.0.2 --dport 12345 -j DROP + - cd luajit2/ + - make -j$JOBS CCDEBUG=-g Q= PREFIX=$LUAJIT_PREFIX CC=$CC XCFLAGS='-DLUA_USE_APICHECK -DLUA_USE_ASSERT' > build.log 2>&1 || (cat build.log && exit 1) + - sudo make install PREFIX=$LUAJIT_PREFIX > build.log 2>&1 || (cat build.log && exit 1) + - cd ../lua-cjson && make && sudo PATH=$PATH make install && cd .. + - tar zxf download-cache/openssl-$OPENSSL_VER.tar.gz + - cd openssl-$OPENSSL_VER/ + - ./config shared --prefix=$OPENSSL_PREFIX -DPURIFY > build.log 2>&1 || (cat build.log && exit 1) + - make -j$JOBS > build.log 2>&1 || (cat build.log && exit 1) + - sudo make PATH=$PATH install_sw > build.log 2>&1 || (cat build.log && exit 1) + - cd .. + - export PATH=$PWD/work/nginx/sbin:$PWD/nginx-devel-utils:$PATH + - export NGX_BUILD_CC=$CC + - ngx-build $NGINX_VERSION --with-ipv6 --with-http_realip_module --with-http_ssl_module --with-cc-opt="-I$OPENSSL_INC" --with-ld-opt="-L$OPENSSL_LIB -Wl,-rpath,$OPENSSL_LIB" --add-module=../echo-nginx-module --add-module=../lua-nginx-module --add-module=../stream-lua-nginx-module --with-stream --with-stream_ssl_module --with-debug > build.log 2>&1 || (cat build.log && exit 1) + - nginx -V + - ldd `which nginx`|grep -E 'luajit|ssl|pcre' + - mkdir -p tmp + - TMP_DIR=$PWD/tmp make test_all diff --git a/Makefile b/Makefile new file mode 100644 index 000000000..f2647be6c --- /dev/null +++ b/Makefile @@ -0,0 +1,189 @@ +SHELL := /bin/bash # Cheat by using bash :) + +OPENRESTY_PREFIX = /usr/local/openresty + +TEST_FILE ?= t +TMP_DIR ?= /tmp + +REDIS_CMD = redis-server +SENTINEL_CMD = $(REDIS_CMD) --sentinel + +REDIS_SOCK = /redis.sock +REDIS_PID = /redis.pid +REDIS_LOG = /redis.log +REDIS_PREFIX = $(TMP_DIR)/redis- + +# Overrideable redis test variables +TEST_REDIS_PORT ?= 6380 +TEST_REDIS_PORT_SL1 ?= 6381 +TEST_REDIS_PORT_SL2 ?= 6382 +TEST_REDIS_PORT_AUTH ?= 6383 +TEST_REDIS_PORTS ?= $(TEST_REDIS_PORT) $(TEST_REDIS_PORT_SL1) $(TEST_REDIS_PORT_SL2) +TEST_REDIS_PORTS_ALL ?= $(TEST_REDIS_PORTS) $(TEST_REDIS_PORT_AUTH) +TEST_REDIS_DATABASE ?= 1 +TEST_REDIS_SOCKET ?= $(REDIS_PREFIX)$(TEST_REDIS_PORT)$(REDIS_SOCK) + +REDIS_SLAVE_ARG := --slaveof 127.0.0.1 $(TEST_REDIS_PORT) +REDIS_CLI := redis-cli -p $(TEST_REDIS_PORT) -n $(TEST_REDIS_DATABASE) + +# Overrideable redis + sentinel test variables +TEST_SENTINEL_PORT1 ?= 6390 +TEST_SENTINEL_PORT2 ?= 6391 +TEST_SENTINEL_PORT3 ?= 6392 +TEST_SENTINEL_PORT_AUTH ?= 6393 +TEST_SENTINEL_PORTS ?= $(TEST_SENTINEL_PORT1) $(TEST_SENTINEL_PORT2) $(TEST_SENTINEL_PORT3) +TEST_SENTINEL_PORTS_ALL ?= $(TEST_SENTINEL_PORTS) $(TEST_SENTINEL_PORT_AUTH) +TEST_SENTINEL_MASTER_NAME ?= mymaster +TEST_SENTINEL_PROMOTION_TIME ?= 20 + +# Command line arguments for redis tests +TEST_REDIS_VARS = PATH=$(OPENRESTY_PREFIX)/nginx/sbin:$(PATH) \ +TEST_NGINX_REDIS_PORT=$(TEST_REDIS_PORT) \ +TEST_NGINX_REDIS_PORT_SL1=$(TEST_REDIS_PORT_SL1) \ +TEST_NGINX_REDIS_PORT_SL2=$(TEST_REDIS_PORT_SL2) \ +TEST_NGINX_REDIS_PORT_AUTH=$(TEST_REDIS_PORT_AUTH) \ +TEST_NGINX_REDIS_SOCKET=unix:$(TEST_REDIS_SOCKET) \ +TEST_NGINX_REDIS_DATABASE=$(TEST_REDIS_DATABASE) \ +TEST_NGINX_NO_SHUFFLE=1 + +# Command line arguments for sentinel tests +TEST_SENTINEL_VARS = PATH=$(OPENRESTY_PREFIX)/nginx/sbin:$(PATH) \ +TEST_NGINX_REDIS_PORT=$(TEST_NGINX_REDIS_PORT) \ +TEST_NGINX_REDIS_PORT_SL1=$(TEST_NGINX_REDIS_PORT_SL1) \ +TEST_NGINX_REDIS_PORT_SL2=$(TEST_NGINX_REDIS_PORT_SL2) \ +TEST_NGINX_SENTINEL_PORT1=$(TEST_NGINX_SENTINEL_PORT1) \ +TEST_NGINX_SENTINEL_PORT2=$(TEST_NGINX_SENTINEL_PORT2) \ +TEST_NGINX_SENTINEL_PORT3=$(TEST_NGINX_SENTINEL_PORT3) \ +TEST_NGINX_SENTINEL_PORT_AUTH=$(TEST_NGINX_SENTINEL_AUTH) \ +TEST_NGINX_SENTINEL_MASTER_NAME=$(TEST_NGINX_SENTINEL_MASTER_NAME) \ +TEST_NGINX_REDIS_DATABASE=$(TEST_NGINX_REDIS_DATABASE) \ +TEST_NGINX_NO_SHUFFLE=1 + +# Sentinel configuration can only be set by a config file +define TEST_SENTINEL_CONFIG +sentinel monitor $(TEST_SENTINEL_MASTER_NAME) 127.0.0.1 $(TEST_REDIS_PORT) 2 +sentinel down-after-milliseconds $(TEST_SENTINEL_MASTER_NAME) 2000 +sentinel failover-timeout $(TEST_SENTINEL_MASTER_NAME) 10000 +sentinel parallel-syncs $(TEST_SENTINEL_MASTER_NAME) 5 +endef +define TEST_SENTINEL_AUTH_CONFIG +sentinel monitor $(TEST_SENTINEL_MASTER_NAME) 127.0.0.1 $(TEST_REDIS_PORT_AUTH) 1 +endef + +export TEST_SENTINEL_CONFIG TEST_SENTINEL_AUTH_CONFIG + +SENTINEL_CONFIG_FILE = /tmp/sentinel-test-config +SENTINEL_AUTH_CONFIG_FILE = /tmp/sentinel-auth-test-config + + +PREFIX ?= /usr/local +LUA_INCLUDE_DIR ?= $(PREFIX)/include +LUA_LIB_DIR ?= $(PREFIX)/lib/lua/$(LUA_VERSION) +PROVE ?= prove -I ../test-nginx/lib +INSTALL ?= install + +.PHONY: all install test test_all start_redis_instances stop_redis_instances \ + start_redis_instance stop_redis_instance cleanup_redis_instance flush_db \ + create_sentinel_config delete_sentinel_config check_ports test_redis \ + test_sentinel sleep + +all: ; + +install: all + $(INSTALL) -d $(DESTDIR)/$(LUA_LIB_DIR)/resty/redis + $(INSTALL) lib/resty/redis/*.lua $(DESTDIR)/$(LUA_LIB_DIR)/resty/redis + +test: test_redis +test_all: start_redis_instances sleep test_redis stop_redis_instances + +check: + luacheck lib + +sleep: + sleep 3 + +start_redis_instances: check_ports create_sentinel_config + $(REDIS_CMD) --version + + @$(foreach port,$(TEST_REDIS_PORTS), \ + [[ "$(port)" != "$(TEST_REDIS_PORT)" ]] && \ + SLAVE="$(REDIS_SLAVE_ARG)" || \ + SLAVE="" && \ + $(MAKE) start_redis_instance args="$$SLAVE" port=$(port) \ + prefix=$(REDIS_PREFIX)$(port) && \ + ) true + + $(MAKE) start_redis_instance \ + args="--user redisuser on '>redisuserpass' '~*' '&*' '+@all'" \ + port=$(TEST_REDIS_PORT_AUTH) \ + prefix=$(REDIS_PREFIX)$(TEST_REDIS_PORT_AUTH) + + @$(foreach port,$(TEST_SENTINEL_PORTS), \ + $(MAKE) start_redis_instance \ + port=$(port) args="$(SENTINEL_CONFIG_FILE) --sentinel" \ + prefix=$(REDIS_PREFIX)$(port) && \ + ) true + + $(MAKE) start_redis_instance \ + args="$(SENTINEL_AUTH_CONFIG_FILE) --sentinel --user sentineluser on '>sentineluserpass' '~*' '&*' '+@all'" \ + port=$(TEST_SENTINEL_PORT_AUTH) \ + prefix=$(REDIS_PREFIX)$(TEST_SENTINEL_PORT_AUTH) + +stop_redis_instances: delete_sentinel_config + -@$(foreach port,$(TEST_REDIS_PORTS_ALL) $(TEST_SENTINEL_PORTS_ALL), \ + $(MAKE) stop_redis_instance cleanup_redis_instance port=$(port) \ + prefix=$(REDIS_PREFIX)$(port) && \ + ) true 2>&1 > /dev/null + + +start_redis_instance: + -@echo "Starting redis on port $(port) with args: \"$(args)\"" + -@mkdir -p $(prefix) + $(REDIS_CMD) $(args) \ + --pidfile $(prefix)$(REDIS_PID) \ + --bind 127.0.0.1 --port $(port) \ + --unixsocket $(prefix)$(REDIS_SOCK) \ + --unixsocketperm 777 \ + --dir $(prefix) \ + --logfile $(prefix)$(REDIS_LOG) \ + --loglevel debug \ + --daemonize yes + +stop_redis_instance: + -@echo "Stopping redis on port $(port)" + -@[[ -f "$(prefix)$(REDIS_PID)" ]] && kill -QUIT \ + `cat $(prefix)$(REDIS_PID)` 2>&1 > /dev/null || true + +cleanup_redis_instance: stop_redis_instance + -@echo "Cleaning up redis files in $(prefix)" + -@rm -rf $(prefix) + +flush_db: + -@echo "Flushing Redis DB" + @$(REDIS_CLI) flushdb + +create_sentinel_config: + -@echo "Creating $(SENTINEL_CONFIG_FILE)" + @echo "$$TEST_SENTINEL_CONFIG" > $(SENTINEL_CONFIG_FILE) + -@echo "Creating $(SENTINEL_AUTH_CONFIG_FILE)" + @echo "$$TEST_SENTINEL_AUTH_CONFIG" > $(SENTINEL_AUTH_CONFIG_FILE) + +delete_sentinel_config: + -@echo "Removing $(SENTINEL_CONFIG_FILE)" + @rm -f $(SENTINEL_CONFIG_FILE) + -@echo "Removing $(SENTINEL_AUTH_CONFIG_FILE)" + @rm -f $(SENTINEL_AUTH_CONFIG_FILE) + +check_ports: + -@echo "Checking ports $(TEST_REDIS_PORTS_ALL) $(TEST_SENTINEL_PORTS_ALL)" + @$(foreach port,$(TEST_REDIS_PORTS_ALL) $(TEST_SENTINEL_PORTS_ALL),! lsof -i :$(port) &&) true 2>&1 > /dev/null + +test_redis: flush_db + util/lua-releng + @rm -f luacov.stats.out + $(TEST_REDIS_VARS) $(PROVE) $(TEST_FILE) + @luacov + @tail -7 luacov.report.out + +test_leak: flush_db + $(TEST_REDIS_VARS) TEST_NGINX_CHECK_LEAK=1 $(PROVE) $(TEST_FILE) diff --git a/README.md b/README.md new file mode 100644 index 000000000..fe2976c54 --- /dev/null +++ b/README.md @@ -0,0 +1,312 @@ +# lua-resty-redis-connector + +[![Build +Status](https://travis-ci.org/ledgetech/lua-resty-redis-connector.svg?branch=master)](https://travis-ci.org/ledgetech/lua-resty-redis-connector) + +Connection utilities for +[lua-resty-redis](https://github.com/openresty/lua-resty-redis), making it easy +and reliable to connect to Redis hosts, either directly or via [Redis +Sentinel](http://redis.io/topics/sentinel). + + +## Synopsis + +Quick and simple authenticated connection on localhost to DB 2: + +```lua +local redis, err = require("resty.redis.connector").new({ + url = "redis://PASSWORD@127.0.0.1:6379/2", +}):connect() +``` + +More verbose configuration, with timeouts and a default password: + +```lua +local rc = require("resty.redis.connector").new({ + connect_timeout = 50, + send_timeout = 5000, + read_timeout = 5000, + keepalive_timeout = 30000, + password = "mypass", +}) + +local redis, err = rc:connect({ + url = "redis://127.0.0.1:6379/2", +}) + +-- ... + +local ok, err = rc:set_keepalive(redis) -- uses keepalive params +``` + +Keep all config in a table, to easily create / close connections as needed: + +```lua +local rc = require("resty.redis.connector").new({ + connect_timeout = 50, + send_timeout = 5000, + read_timeout = 5000, + keepalive_timeout = 30000, + + host = "127.0.0.1", + port = 6379, + db = 2, + password = "mypass", +}) + +local redis, err = rc:connect() + +-- ... + +local ok, err = rc:set_keepalive(redis) +``` + +[connect](#connect) can be used to override some defaults given in [new](#new), +which are pertinent to this connection only. + + +```lua +local rc = require("resty.redis.connector").new({ + host = "127.0.0.1", + port = 6379, + db = 2, +}) + +local redis, err = rc:connect({ + db = 5, +}) +``` + + +## DSN format + +If the `params.url` field is present then it will be parsed to set the other +params. Any manually specified params will override values given in the DSN. + +*Note: this is a behaviour change as of v0.06. Previously, the DSN values would +take precedence.* + +### Direct Redis connections + +The format for connecting directly to Redis is: + +`redis://USERNAME:PASSWORD@HOST:PORT/DB` + +The `USERNAME`, `PASSWORD` and `DB` fields are optional, all other components +are required. + +Use of username requires Redis 6.0.0 or newer. + +### Connections via Redis Sentinel + +When connecting via Redis Sentinel, the format is as follows: + +`sentinel://USERNAME:PASSWORD@MASTER_NAME:ROLE/DB` + +Again, `USERNAME`, `PASSWORD` and `DB` are optional. `ROLE` must be either `m` +or `s` for master / slave respectively. + +On versions of Redis newer than 5.0.1, Sentinels can optionally require their +own password. If enabled, provide this password in the `sentinel_password` +parameter. On Redis 6.2.0 and newer you can pass username using +`sentinel_username` parameter. + +A table of `sentinels` must also be supplied. e.g. + +```lua +local redis, err = rc:connect{ + url = "sentinel://mymaster:a/2", + sentinels = { + { host = "127.0.0.1", port = 26379 }, + }, + sentinel_username = "default", + sentinel_password = "password" +} +``` + +## Proxy Mode + +Enable the `connection_is_proxied` parameter if connecting to Redis through a +proxy service (e.g. Twemproxy). These proxies generally only support a limited +sub-set of Redis commands, those which do not require state and do not affect +multiple keys. Databases and transactions are also not supported. + +Proxy mode will disable switching to a DB on connect. Unsupported commands +(defaults to those not supported by Twemproxy) will return `nil, err` +immediately rather than being sent to the proxy, which can result in dropped +connections. + +`discard` will not be sent when adding connections to the keepalive pool + + +## Disabled commands + +If configured as a table of commands, the command methods will be replaced by a +function which immediately returns `nil, err` without forwarding the command to +the server + +## Default Parameters + + +```lua +{ + connect_timeout = 100, + send_timeout = 1000, + read_timeout = 1000, + keepalive_timeout = 60000, + keepalive_poolsize = 30, + + -- ssl, ssl_verify, server_name, pool, pool_size, backlog + -- see: https://github.com/openresty/lua-resty-redis#connect + connection_options = {}, + + host = "127.0.0.1", + port = "6379", + path = "", -- unix socket path, e.g. /tmp/redis.sock + username = "", + password = "", + sentinel_username = "", + sentinel_password = "", + db = 0, + + master_name = "mymaster", + role = "master", -- master | slave + sentinels = {}, + + connection_is_proxied = false, + + disabled_commands = {}, +} +``` + + +## API + +* [new](#new) +* [connect](#connect) +* [set_keepalive](#set_keepalive) +* [Utilities](#utilities) + * [connect_via_sentinel](#connect_via_sentinel) + * [try_hosts](#try_hosts) + * [connect_to_host](#connect_to_host) + * [sentinel.get_master](#sentinelget_master) + * [sentinel.get_slaves](#sentinelget_slaves) + + +### new + +`syntax: rc = redis_connector.new(params)` + +Creates the Redis Connector object, overring default params with the ones given. +In case of failures, returns `nil` and a string describing the error. + + +### connect + +`syntax: redis, err = rc:connect(params)` + +Attempts to create a connection, according to the [params](#parameters) +supplied, falling back to defaults given in `new` or the predefined defaults. If +a connection cannot be made, returns `nil` and a string describing the reason. + +Note that `params` given here do not change the connector's own configuration, +and are only used to alter this particular connection operation. As such, the +following parameters have no meaning when given in `connect`. + +* `keepalive_poolsize` +* `keepalive_timeout` +* `connection_is_proxied` +* `disabled_commands` + + +### set_keepalive + +`syntax: ok, err = rc:set_keepalive(redis)` + +Attempts to place the given Redis connection on the keepalive pool, according to +timeout and poolsize params given in `new` or the predefined defaults. + +This allows an application to release resources without having to keep track of +application wide keepalive settings. + +Returns `1` or in the case of error, `nil` and a string describing the error. + + +## Utilities + +The following methods are not typically needed, but may be useful if a custom +interface is required. + + +### connect_via_sentinel + +`syntax: redis, err = rc:connect_via_sentinel(params)` + +Returns a Redis connection by first accessing a sentinel as supplied by the +`params.sentinels` table, and querying this with the `params.master_name` and +`params.role`. + + +### try_hosts + +`syntax: redis, err = rc:try_hosts(hosts)` + +Tries the hosts supplied in order and returns the first successful connection. + + +### connect_to_host + +`syntax: redis, err = rc:connect_to_host(host)` + +Attempts to connect to the supplied `host`. + + +### sentinel.get_master + +`syntax: master, err = sentinel.get_master(sentinel, master_name)` + +Given a connected Sentinel instance and a master name, will return the current +master Redis instance. + + +### sentinel.get_slaves + +`syntax: slaves, err = sentinel.get_slaves(sentinel, master_name)` + +Given a connected Sentinel instance and a master name, will return a list of +registered slave Redis instances. + + +# Author + +James Hurst + + +# Licence + +This module is licensed under the 2-clause BSD license. + +Copyright (c) James Hurst + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/dist.ini b/dist.ini new file mode 100644 index 000000000..d8c65b938 --- /dev/null +++ b/dist.ini @@ -0,0 +1,9 @@ +name=lua-resty-redis-connector +abstract=Connection utilities for lua-resty-redis, making it easy and reliable to connect to Redis hosts, either directly or via Redis Sentinel. +author=James Hurst +is_original=yes +license=2bsd +lib_dir=lib +doc_dir=lib +repo_link=https://github.com/ledgetech/lua-resty-redis-connector +main_module=lib/resty/redis/connector.lua diff --git a/lib/resty/redis/connector.lua b/lib/resty/redis/connector.lua new file mode 100644 index 000000000..ee148079b --- /dev/null +++ b/lib/resty/redis/connector.lua @@ -0,0 +1,459 @@ +local ipairs, pcall, error, tostring, type, next, setmetatable, getmetatable = + ipairs, pcall, error, tostring, type, next, setmetatable, getmetatable + +local ngx_log = ngx.log +local ngx_ERR = ngx.ERR +local ngx_re_match = ngx.re.match + +local str_find = string.find +local str_sub = string.sub +local tbl_remove = table.remove +local tbl_sort = table.sort +local ok, tbl_new = pcall(require, "table.new") +if not ok then + tbl_new = function (narr, nrec) return {} end -- luacheck: ignore 212 +end + +local redis = require("resty.redis") +redis.add_commands("sentinel") + +local get_master = require("resty.redis.sentinel").get_master +local get_slaves = require("resty.redis.sentinel").get_slaves + + +-- A metatable which prevents undefined fields from being created / accessed +local fixed_field_metatable = { + __index = + function(t, k) -- luacheck: ignore 212 + error("field " .. tostring(k) .. " does not exist", 3) + end, + __newindex = + function(t, k, v) -- luacheck: ignore 212 + error("attempt to create new field " .. tostring(k), 3) + end, +} + + +-- Returns a new table, recursively copied from the one given, retaining +-- metatable assignment. +-- +-- @param table table to be copied +-- @return table +local function tbl_copy(orig) + local orig_type = type(orig) + local copy + if orig_type == "table" then + copy = {} + for orig_key, orig_value in next, orig, nil do + copy[tbl_copy(orig_key)] = tbl_copy(orig_value) + end + setmetatable(copy, tbl_copy(getmetatable(orig))) + else -- number, string, boolean, etc + copy = orig + end + return copy +end + + +-- Returns a new table, recursively copied from the combination of the given +-- table `t1`, with any missing fields copied from `defaults`. +-- +-- If `defaults` is of type "fixed field" and `t1` contains a field name not +-- present in the defults, an error will be thrown. +-- +-- @param table t1 +-- @param table defaults +-- @return table a new table, recursively copied and merged +local function tbl_copy_merge_defaults(t1, defaults) + if t1 == nil then t1 = {} end + if defaults == nil then defaults = {} end + if type(t1) == "table" and type(defaults) == "table" then + local copy = {} + for t1_key, t1_value in next, t1, nil do + copy[tbl_copy(t1_key)] = tbl_copy_merge_defaults( + t1_value, tbl_copy(defaults[t1_key]) + ) + end + for defaults_key, defaults_value in next, defaults, nil do + if t1[defaults_key] == nil then + copy[tbl_copy(defaults_key)] = tbl_copy(defaults_value) + end + end + return copy + else + return t1 -- not a table + end +end + + +local DEFAULTS = setmetatable({ + connect_timeout = 100, + read_timeout = 1000, + send_timeout = 1000, + connection_options = {}, -- pool, etc + keepalive_timeout = 60000, + keepalive_poolsize = 30, + + host = "127.0.0.1", + port = 6379, + path = "", -- /tmp/redis.sock + username = "", + password = "", + sentinel_username = "", + sentinel_password = "", + db = 0, + url = "", -- DSN url + + master_name = "mymaster", + role = "master", -- master | slave + sentinels = {}, + + -- Redis proxies typically don't support full Redis capabilities + connection_is_proxied = false, + + disabled_commands = {}, + +}, fixed_field_metatable) + + +-- This is the set of commands unsupported by Twemproxy +local default_disabled_commands = { + "migrate", "move", "object", "randomkey", "rename", "renamenx", "scan", + "bitop", "msetnx", "blpop", "brpop", "brpoplpush", "psubscribe", "publish", + "punsubscribe", "subscribe", "unsubscribe", "discard", "exec", "multi", + "unwatch", "watch", "script", "auth", "echo", "select", "bgrewriteaof", + "bgsave", "client", "config", "dbsize", "debug", "flushall", "flushdb", + "info", "lastsave", "monitor", "save", "shutdown", "slaveof", "slowlog", + "sync", "time" +} + + +local _M = { + _VERSION = '0.11.0', +} + +local mt = { __index = _M } + + +local function parse_dsn(params) + local url = params.url + if url and url ~= "" then + local url_pattern = [[^(?:(redis|sentinel)://)(?:([^@]*)@)?([^:/]+)(?::(\d+|[msa]+))/?(.*)$]] + + local m, err = ngx_re_match(url, url_pattern, "oj") + if not m then + return nil, "could not parse DSN: " .. tostring(err) + end + + -- TODO: Support a 'protocol' for proxied Redis? + local fields + if m[1] == "redis" then + fields = { "password", "host", "port", "db" } + elseif m[1] == "sentinel" then + fields = { "password", "master_name", "role", "db" } + end + + -- username/password may not be present + if #m < 5 then tbl_remove(fields, 1) end + + local roles = { m = "master", s = "slave" } + + local parsed_params = {} + + for i, v in ipairs(fields) do + if v == "db" or v == "port" then + parsed_params[v] = tonumber(m[i + 1]) + else + parsed_params[v] = m[i + 1] + end + + if v == "role" then + parsed_params[v] = roles[parsed_params[v]] + end + end + + local colon_pos = str_find(parsed_params.password or "", ":", 1, true) + if colon_pos then + parsed_params.username = str_sub(parsed_params.password, 1, colon_pos - 1) + parsed_params.password = str_sub(parsed_params.password, colon_pos + 1) + end + + return tbl_copy_merge_defaults(params, parsed_params) + end + + return params +end +_M.parse_dsn = parse_dsn + + +-- Fill out gaps in config with any dsn params +local function apply_dsn(config) + if config and config.url then + local err + config, err = parse_dsn(config) + if err then ngx_log(ngx_ERR, err) end + end + return config +end + + +-- For backwards compatability; previously send_timeout was implicitly the +-- same as read_timeout. So if only the latter is given, ensure the former +-- matches. +local function apply_fallback_send_timeout(config) + if config and not config.send_timeout and config.read_timeout then + config.send_timeout = config.read_timeout + end +end + + +function _M.new(config) + config = apply_dsn(config) + apply_fallback_send_timeout(config) + + local ok, config = pcall(tbl_copy_merge_defaults, config, DEFAULTS) + if not ok then + return nil, config -- err + else + -- In proxied Redis mode disable default commands + if config.connection_is_proxied == true and + not next(config.disabled_commands) then + + config.disabled_commands = default_disabled_commands + end + + return setmetatable({ + config = setmetatable(config, fixed_field_metatable) + }, mt) + end +end + + +function _M.connect(self, params) + params = apply_dsn(params) + apply_fallback_send_timeout(params) + + params = tbl_copy_merge_defaults(params, self.config) + + if #params.sentinels > 0 then + return self:connect_via_sentinel(params) + else + return self:connect_to_host(params) + end +end + + +local function sort_by_localhost(a, b) + if a.host == "127.0.0.1" and b.host ~= "127.0.0.1" then + return true + else + return false + end +end + + +function _M.connect_via_sentinel(self, params) + local sentinels = params.sentinels + local master_name = params.master_name + local role = params.role + local db = params.db + local username = params.username + local password = params.password + local sentinel_username = params.sentinel_username + local sentinel_password = params.sentinel_password + if sentinel_password then + for _, host in ipairs(sentinels) do + host.username = sentinel_username + host.password = sentinel_password + end + end + + local sentnl, err, previous_errors = self:try_hosts(sentinels) + if not sentnl then + return nil, err, previous_errors + end + + if role == "master" then + local master, err = get_master(sentnl, master_name) + if not master then + return nil, err + end + + sentnl:set_keepalive() + + master.db = db + master.username = username + master.password = password + + local redis, err = self:connect_to_host(master) + if not redis then + return nil, err + end + + return redis + else + -- We want a slave + local slaves, err = get_slaves(sentnl, master_name) + if not slaves then + return nil, err + end + + sentnl:set_keepalive() + + -- Put any slaves on 127.0.0.1 at the front + tbl_sort(slaves, sort_by_localhost) + + if db or password then + for _, slave in ipairs(slaves) do + slave.db = db + slave.username = username + slave.password = password + end + end + + local slave, err, previous_errors = self:try_hosts(slaves) + if not slave then + return nil, err, previous_errors + end + + return slave + end +end + + +-- In case of errors, returns "nil, err, previous_errors" where err is +-- the last error received, and previous_errors is a table of the previous errors. +function _M.try_hosts(self, hosts) + local errors = tbl_new(#hosts, 0) + + for i, host in ipairs(hosts) do + local r, err = self:connect_to_host(host) + if r and not err then + return r, nil, errors + else + errors[i] = err + end + end + + return nil, "no hosts available", errors +end + + +function _M.connect_to_host(self, host) + local r = redis.new() + + -- config options in 'host' should override the global defaults + -- host contains keys that aren't in config + -- this can break tbl_copy_merge_defaults, hence the mannual loop here + local config = tbl_copy(self.config) + for k, _ in pairs(config) do + if host[k] then + config[k] = host[k] + end + end + + r:set_timeouts( + config.connect_timeout, + config.send_timeout, + config.read_timeout + ) + + -- Stub out methods for disabled commands + if next(config.disabled_commands) then + for _, cmd in ipairs(config.disabled_commands) do + r[cmd] = function() + return nil, ("Command "..cmd.." is disabled") + end + end + end + + local ok, err + local path = host.path + local opts = config.connection_options + if path and path ~= "" then + if opts then + ok, err = r:connect(path, config.connection_options) + else + ok, err = r:connect(path) + end + else + if opts then + ok, err = r:connect(host.host, host.port, config.connection_options) + else + ok, err = r:connect(host.host, host.port) + end + end + + if not ok then + return nil, err + else + local username = host.username + local password = host.password + if password and password ~= "" then + local res + -- usernames are supported only on Redis 6+, so use new AUTH form only when absolutely necessary + if username and username ~= "" and username ~= "default" then + res, err = r:auth(username, password) + else + res, err = r:auth(password) + end + if err then + return res, err + end + end + + -- No support for DBs in proxied Redis. + if config.connection_is_proxied ~= true and host.db ~= nil then + local res, err = r:select(host.db) + + -- SELECT will fail if we are connected to sentinel: + -- detect it and ignore error message it that's the case + if err and str_find(err, "ERR unknown command") then + local role = r:role() + if role and role[1] == "sentinel" then + err = nil + end + end + if err then + return res, err + end + end + return r, nil + end +end + + +function _M.set_keepalive(self, redis) + -- Restore connection to "NORMAL" before putting into keepalive pool, + -- ignoring any errors. + -- Proxied Redis does not support transactions. + if self.config.connection_is_proxied ~= true then + redis:discard() + end + + local config = self.config + return redis:set_keepalive( + config.keepalive_timeout, config.keepalive_poolsize + ) +end + + +-- Deprecated: use config table in new() or connect() instead. +function _M.set_connect_timeout(self, timeout) + self.config.connect_timeout = timeout +end + + +-- Deprecated: use config table in new() or connect() instead. +function _M.set_read_timeout(self, timeout) + self.config.read_timeout = timeout +end + + +-- Deprecated: use config table in new() or connect() instead. +function _M.set_connection_options(self, options) + self.config.connection_options = options +end + + +return setmetatable(_M, fixed_field_metatable) diff --git a/lib/resty/redis/sentinel.lua b/lib/resty/redis/sentinel.lua new file mode 100644 index 000000000..905fff93d --- /dev/null +++ b/lib/resty/redis/sentinel.lua @@ -0,0 +1,63 @@ +local ipairs, type = ipairs, type + +local ngx_null = ngx.null + +local tbl_insert = table.insert +local ok, tbl_new = pcall(require, "table.new") +if not ok then + tbl_new = function (narr, nrec) return {} end -- luacheck: ignore 212 +end + + +local _M = { + _VERSION = '0.11.0' +} + + +function _M.get_master(sentinel, master_name) + local res, err = sentinel:sentinel( + "get-master-addr-by-name", + master_name + ) + if res and res ~= ngx_null and res[1] and res[2] then + return { host = res[1], port = res[2] } + elseif res == ngx_null then + return nil, "invalid master name" + else + return nil, err + end +end + + +function _M.get_slaves(sentinel, master_name) + local res, err = sentinel:sentinel("slaves", master_name) + + if res and type(res) == "table" then + local hosts = tbl_new(#res, 0) + for _,slave in ipairs(res) do + local num_recs = #slave + local host = tbl_new(0, num_recs + 1) + for i = 1, num_recs, 2 do + host[slave[i]] = slave[i + 1] + end + + local master_link_status_ok = host["master-link-status"] == "ok" + local is_down = host["flags"] and (string.find(host["flags"],"s_down") + or string.find(host["flags"],"disconnected")) + if master_link_status_ok and not is_down then + host.host = host.ip -- for parity with other functions + tbl_insert(hosts, host) + end + end + if hosts[1] ~= nil then + return hosts + else + return nil, "no slaves available" + end + else + return nil, err + end +end + + +return _M diff --git a/lua-resty-redis-connector-0.11.0-0.rockspec b/lua-resty-redis-connector-0.11.0-0.rockspec new file mode 100644 index 000000000..b44c1e93b --- /dev/null +++ b/lua-resty-redis-connector-0.11.0-0.rockspec @@ -0,0 +1,27 @@ +package = "lua-resty-redis-connector" +version = "0.11.0-0" +source = { + url = "git://github.com/ledgetech/lua-resty-redis-connector", + tag = "v0.11.0" +} +description = { + summary = "Connection utilities for lua-resty-redis.", + detailed = [[ + Connection utilities for lua-resty-redis, making it easy and + reliable to connect to Redis hosts, either directly or via Redis + Sentinel. + ]], + homepage = "https://github.com/ledgetech/lua-resty-redis-connector", + license = "2-clause BSD", + maintainer = "James Hurst " +} +dependencies = { + "lua >= 5.1", +} +build = { + type = "builtin", + modules = { + ["resty.redis.connector"] = "lib/resty/redis/connector.lua", + ["resty.redis.sentinel"] = "lib/resty/redis/sentinel.lua" + } +} diff --git a/t/config.t b/t/config.t new file mode 100644 index 000000000..7b31c6098 --- /dev/null +++ b/t/config.t @@ -0,0 +1,229 @@ +use Test::Nginx::Socket::Lua; +use Cwd qw(cwd); + +repeat_each(2); + +plan tests => repeat_each() * blocks() * 2; + +my $pwd = cwd(); + +our $HttpConfig = qq{ +lua_package_path "$pwd/lib/?.lua;;"; +lua_socket_log_errors Off; + +init_by_lua_block { + require("luacov.runner").init() +} +}; + +$ENV{TEST_NGINX_REDIS_PORT} ||= 6380; + +no_long_string(); +run_tests(); + +__DATA__ + +=== TEST 1: Default config +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local rc = assert(require("resty.redis.connector").new()) + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 2: Defaults via new +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local config = { + connect_timeout = 500, + port = $TEST_NGINX_REDIS_PORT, + db = 6, + } + local rc = require("resty.redis.connector").new(config) + + assert(config ~= rc.config, "config should not equal rc.config") + assert(rc.config.connect_timeout == 500, "connect_timeout should be 500") + assert(rc.config.db == 6, "db should be 6") + assert(rc.config.role == "master", "role should be master") + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 3: Config via connect still overrides +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local rc = require("resty.redis.connector").new({ + connect_timeout = 500, + port = $TEST_NGINX_REDIS_PORT, + db = 6, + keepalive_poolsize = 10, + }) + + assert(config ~= rc.config, "config should not equal rc.config") + assert(rc.config.connect_timeout == 500, "connect_timeout should be 500") + assert(rc.config.db == 6, "db should be 6") + assert(rc.config.role == "master", "role should be master") + assert(rc.config.keepalive_poolsize == 10, + "keepalive_poolsize should be 10") + + local redis, err = rc:connect({ + port = $TEST_NGINX_REDIS_PORT, + disabled_commands = { "set" } + }) + + if not redis or err then + ngx.log(ngx.ERR, "connect failed: ", err) + return + end + + local ok, err = redis:set("foo", "bar") + assert( ok == nil and (string.find(err, "disabled") ~= nil) , "Disabled commands not passed through" ) + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 4: Unknown config errors, all config does not error +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local rc, err = require("resty.redis.connector").new({ + connect_timeout = 500, + port = $TEST_NGINX_REDIS_PORT, + db = 6, + foo = "bar", + }) + + assert(rc == nil, "rc should be nil") + assert(string.find(err, "field foo does not exist"), + "err should contain error") + + -- Provide all options, without errors + + assert(require("resty.redis.connector").new({ + connect_timeout = 100, + send_timeout = 500, + read_timeout = 1000, + connection_options = { pool = "::" }, + keepalive_timeout = 60000, + keepalive_poolsize = 30, + + host = "127.0.0.1", + port = $TEST_NGINX_REDIS_PORT, + path = "", + username = "", + password = "", + db = 0, + + url = "", + + master_name = "mymaster", + role = "master", + sentinels = {}, + }), "new should return positively") + + -- Provide all options via connect, without errors + + local rc = require("resty.redis.connector").new() + + assert(rc:connect({ + connect_timeout = 100, + send_timeout = 500, + read_timeout = 1000, + connection_options = { pool = "::" }, + keepalive_timeout = 60000, + keepalive_poolsize = 30, + + host = "127.0.0.1", + port = $TEST_NGINX_REDIS_PORT, + path = "", + username = "", + password = "", + db = 0, + + url = "", + + master_name = "mymaster", + role = "master", + sentinels = {}, + }), "rc:connect should return positively") + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 5: timeout defaults +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + -- global defaults + local rc = require("resty.redis.connector").new({ + port = $TEST_NGINX_REDIS_PORT, + db = 6, + keepalive_poolsize = 10, + }) + + assert(rc.config.connect_timeout == 100, "connect_timeout should be 100") + assert(rc.config.send_timeout == 1000, "send_timeout should be 1000") + assert(rc.config.read_timeout == 1000, "read_timeout should be 1000") + + local redis = assert(rc:connect(), "rc:connect should return positively") + assert(redis:set("foo", "bar")) + rc:set_keepalive(redis) + + -- send_timeout defaults to read_timeout + rc = require("resty.redis.connector").new({ + read_timeout = 500, + port = $TEST_NGINX_REDIS_PORT, + db = 6, + keepalive_poolsize = 10, + }) + + assert(rc.config.connect_timeout == 100, "connect_timeout should be 100") + assert(rc.config.send_timeout == 500, "send_timeout should be 500") + assert(rc.config.read_timeout == 500, "read_timeout should be 500") + + local redis = assert(rc:connect(), "rc:connect should return positively") + assert(redis:set("foo", "bar")) + rc:set_keepalive(redis) + + -- send_timeout can be set separately from read_timeout + rc = require("resty.redis.connector").new({ + send_timeout = 500, + read_timeout = 200, + port = $TEST_NGINX_REDIS_PORT, + db = 6, + keepalive_poolsize = 10, + }) + + assert(rc.config.connect_timeout == 100, "connect_timeout should be 100") + assert(rc.config.send_timeout == 500, "send_timeout should be 500") + assert(rc.config.read_timeout == 200, "read_timeout should be 200") + } +} +--- request +GET /t +--- no_error_log +[error] diff --git a/t/connector.t b/t/connector.t new file mode 100644 index 000000000..dbb9eb222 --- /dev/null +++ b/t/connector.t @@ -0,0 +1,442 @@ +use Test::Nginx::Socket 'no_plan'; +use Cwd qw(cwd); + +my $pwd = cwd(); + +our $HttpConfig = qq{ +lua_package_path "$pwd/lib/?.lua;;"; +lua_socket_log_errors Off; + +init_by_lua_block { + require("luacov.runner").init() +} +}; + +$ENV{TEST_NGINX_RESOLVER} = '8.8.8.8'; +$ENV{TEST_NGINX_REDIS_PORT} ||= 6380; +$ENV{TEST_NGINX_REDIS_PORT_AUTH} ||= 6393; +$ENV{TEST_NGINX_REDIS_SOCKET} ||= 'unix://tmp/redis/redis.sock'; + +no_long_string(); +run_tests(); + +__DATA__ + +=== TEST 1: basic connect +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local rc = require("resty.redis.connector").new({ + port = $TEST_NGINX_REDIS_PORT + }) + + local redis, err = assert(rc:connect(params), + "connect should return positively") + + assert(redis:set("dog", "an animal"), + "redis:set should return positively") + + redis:close() + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 2: try_hosts +--- http_config eval: $::HttpConfig +--- config +location /t { + lua_socket_log_errors off; + content_by_lua_block { + local rc = require("resty.redis.connector").new({ + connect_timeout = 100, + }) + + local hosts = { + { host = "127.0.0.1", port = 1 }, + { host = "127.0.0.1", port = 2 }, + { host = "127.0.0.1", port = $TEST_NGINX_REDIS_PORT }, + } + + local redis, err, previous_errors = rc:try_hosts(hosts) + assert(redis and not err, + "try_hosts should return a connection and no error") + + assert(string.len(previous_errors[1]) > 0, + "previous_errors[1] should contain an error") + assert(string.len(previous_errors[2]) > 0, + "previous_errors[2] should contain an error") + + assert(redis:set("dog", "an animal"), + "redis connection should be working") + + redis:close() + + local hosts = { + { host = "127.0.0.1", port = 1 }, + { host = "127.0.0.1", port = 2 }, + } + + local redis, err, previous_errors = rc:try_hosts(hosts) + assert(not redis and err == "no hosts available", + "no available hosts should return an error") + + assert(string.len(previous_errors[1]) > 0, + "previous_errors[1] should contain an error") + assert(string.len(previous_errors[2]) > 0, + "previous_errors[2] should contain an error") + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 3: connect_to_host +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local rc = require("resty.redis.connector").new() + + local host = { host = "127.0.0.1", port = $TEST_NGINX_REDIS_PORT } + + local redis, err = rc:connect_to_host(host) + assert(redis and not err, + "connect_to_host should return positively") + + assert(redis:set("dog", "an animal"), + "redis connection should be working") + + redis:close() + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 4: connect_to_host options ignore defaults +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local rc = require("resty.redis.connector").new({ + port = $TEST_NGINX_REDIS_PORT, + db = 2, + }) + + local redis, err = assert(rc:connect_to_host({ + host = "127.0.0.1", + db = 1, + port = $TEST_NGINX_REDIS_PORT + }), "connect_to_host should return positively") + + assert(redis:set("dog", "an animal") == "OK", + "set should return 'OK'") + + redis:select(2) + assert(redis:get("dog") == ngx.null, + "dog should not exist in db 2") + + redis:select(1) + assert(redis:get("dog") == "an animal", + "dog should be 'an animal' in db 1") + + redis:close() + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 5: Test set_keepalive method +--- http_config eval: $::HttpConfig +--- config +location /t { + lua_socket_log_errors Off; + content_by_lua_block { + local rc = require("resty.redis.connector").new({ + port = $TEST_NGINX_REDIS_PORT, + }) + + local redis = assert(rc:connect(), + "rc:connect should return positively") + local ok, err = rc:set_keepalive(redis) + assert(not err, "set_keepalive error should be nil") + + local ok, err = redis:set("foo", "bar") + assert(not ok, "ok should be nil") + assert(string.find(err, "closed"), "error should contain 'closed'") + + local redis = assert(rc:connect(), "connect should return positively") + assert(redis:subscribe("channel"), "subscribe should return positively") + + local ok, err = rc:set_keepalive(redis) + assert(not ok, "ok should be nil") + assert(string.find(err, "subscribed state"), + "error should contain 'subscribed state'") + + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 6: password +--- http_config eval: $::HttpConfig +--- config +location /t { + lua_socket_log_errors Off; + content_by_lua_block { + local rc = require("resty.redis.connector").new({ + port = $TEST_NGINX_REDIS_PORT, + password = "foo", + }) + + local redis, err = rc:connect() + assert(not redis and string.find(err, "ERR") and string.find(err, "AUTH"), + "connect should fail with password error") + + } +} +--- request +GET /t +--- no_error_log +[error] + +=== TEST 7: username and password +--- http_config eval: $::HttpConfig +--- config +location /t { + lua_socket_log_errors Off; + content_by_lua_block { + local rc = require("resty.redis.connector").new({ + port = $TEST_NGINX_REDIS_PORT, + username = "x", + password = "foo", + }) + + local redis, err = rc:connect() + assert(not redis and string.find(err, "WRONGPASS"), + "connect should fail with invalid username-password error") + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 8: Bad unix domain socket path should fail +--- http_config eval: $::HttpConfig +--- config +location /t { + lua_socket_log_errors Off; + content_by_lua_block { + local redis, err = require("resty.redis.connector").new({ + path = "unix://GARBAGE_PATH_AKFDKAJSFKJSAFLKJSADFLKJSANCKAJSNCKJSANCLKAJS", + }):connect() + + assert(not redis and err == "no such file or directory", + "bad domain socket should fail") + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 8.1: Good unix domain socket path should succeed +--- http_config eval: $::HttpConfig +--- config +location /t { + lua_socket_log_errors Off; + content_by_lua_block { + local redis, err = require("resty.redis.connector").new({ + path = "$TEST_NGINX_REDIS_SOCKET", + }):connect() + + assert (redis and not err, + "connection should be valid") + + redis:close() + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 9: parse_dsn +--- http_config eval: $::HttpConfig +--- config +location /t { + lua_socket_log_errors Off; + content_by_lua_block { + local rc = require("resty.redis.connector") + + local user_params = { + url = "redis://foo@127.0.0.1:$TEST_NGINX_REDIS_PORT/4" + } + + local params, err = rc.parse_dsn(user_params) + assert(params and not err, + "url should parse without error: " .. tostring(err)) + + assert(params.host == "127.0.0.1", "host should be localhost") + assert(tonumber(params.port) == $TEST_NGINX_REDIS_PORT, + "port should be $TEST_NGINX_REDIS_PORT") + assert(tonumber(params.db) == 4, "db should be 4") + assert(params.password == "foo", "password should be foo") + + + local user_params = { + url = "sentinel://foo:bar@foomaster:s/2" + } + + local params, err = rc.parse_dsn(user_params) + assert(params and not err, + "url should parse without error: " .. tostring(err)) + + assert(params.master_name == "foomaster", "master_name should be foomaster") + assert(params.role == "slave", "role should be slave") + assert(tonumber(params.db) == 2, "db should be 2") + assert(params.username == "foo", "username should be foo") + assert(params.password == "bar", "password should be bar") + + + local params = { + url = "sentinels:/wrongformat", + } + + local ok, err = rc.parse_dsn(params) + assert(not ok and err == "could not parse DSN: nil", + "url should fail to parse") + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 10: params override dsn components +--- http_config eval: $::HttpConfig +--- config +location /t { + lua_socket_log_errors Off; + content_by_lua_block { + local rc = require("resty.redis.connector") + + local user_params = { + url = "redis://foo@127.0.0.1:$TEST_NGINX_REDIS_PORT/4", + db = 2, + password = "bar", + host = "example.com", + } + + local params, err = rc.parse_dsn(user_params) + assert(params and not err, + "url should parse without error: " .. tostring(err)) + + assert(tonumber(params.db) == 2, "db should be 2") + assert(params.password == "bar", "password should be bar") + assert(params.host == "example.com", "host should be example.com") + + assert(tonumber(params.port) == $TEST_NGINX_REDIS_PORT, "port should still be $TEST_NGINX_REDIS_PORT") + + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 11: Integration test for parse_dsn +--- http_config eval: $::HttpConfig +--- config +location /t { + lua_socket_log_errors Off; + content_by_lua_block { + local user_params = { + url = "redis://foo.example:$TEST_NGINX_REDIS_PORT/4", + db = 2, + host = "127.0.0.1", + } + + local rc, err = require("resty.redis.connector").new(user_params) + assert(rc and not err, "new should return positively") + + local redis, err = rc:connect() + assert(redis and not err, "connect should return positively") + assert(redis:set("cat", "dog") and redis:get("cat") == "dog") + + local redis, err = rc:connect({ + url = "redis://foo.example:$TEST_NGINX_REDIS_PORT/4", + db = 2, + host = "127.0.0.1", + }) + assert(redis and not err, "connect should return positively") + assert(redis:set("cat", "dog") and redis:get("cat") == "dog") + + + local rc2, err = require("resty.redis.connector").new() + local redis, err = rc2:connect({ + url = "redis://foo.example:$TEST_NGINX_REDIS_PORT/4", + db = 2, + host = "127.0.0.1", + }) + assert(redis and not err, "connect should return positively") + assert(redis:set("cat", "dog") and redis:get("cat") == "dog") + + local redis, err = rc2:connect({ + url = "redis://redisuser:redisuserpass@127.0.0.1:$TEST_NGINX_REDIS_PORT_AUTH/" + }) + assert(redis and not err, "connect should return positively") + local username = assert(redis:acl("whoami")) + assert(username == "redisuser", "should connect as 'redisuser' but got " .. tostring(username)) + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 12: DSN without DB +--- http_config eval: $::HttpConfig +--- config +location /t { + lua_socket_log_errors Off; + content_by_lua_block { + local user_params = { + url = "redis://foo.example:$TEST_NGINX_REDIS_PORT", + host = "127.0.0.1", + } + + local rc, err = require("resty.redis.connector").new(user_params) + assert(rc and not err, "new should return positively") + + local redis, err = rc:connect() + assert(redis and not err, "connect should return positively") + assert(redis:set("cat", "dog") and redis:get("cat") == "dog") + } +} +--- request +GET /t +--- no_error_log +[error] diff --git a/t/proxy.t b/t/proxy.t new file mode 100644 index 000000000..f775a7db1 --- /dev/null +++ b/t/proxy.t @@ -0,0 +1,156 @@ +use Test::Nginx::Socket 'no_plan'; +use Cwd qw(cwd); + +my $pwd = cwd(); + +our $HttpConfig = qq{ +lua_package_path "$pwd/lib/?.lua;;"; +lua_socket_log_errors Off; + +init_by_lua_block { + require("luacov.runner").init() +} +}; + +$ENV{TEST_NGINX_RESOLVER} = '8.8.8.8'; +$ENV{TEST_NGINX_REDIS_PORT} ||= 6380; + +no_long_string(); +run_tests(); + +__DATA__ + +=== TEST 1: Proxy mode disables commands +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local rc = require("resty.redis.connector").new({ + port = $TEST_NGINX_REDIS_PORT, + connection_is_proxied = true + }) + + local redis, err = assert(rc:connect(params), + "connect should return positively") + + assert(redis:set("dog", "an animal"), + "redis:set should return positively") + + local ok, err = redis:multi() + assert(ok == nil, "redis:multi should return nil") + assert(err == "Command multi is disabled") + + redis:close() + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 2: Proxy mode disables custom commands +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local rc = require("resty.redis.connector").new({ + port = $TEST_NGINX_REDIS_PORT, + connection_is_proxied = true, + disabled_commands = { "foobar", "hget"} + }) + + local redis, err = assert(rc:connect(params), + "connect should return positively") + + assert(redis:set("dog", "an animal"), + "redis:set should return positively") + + assert(redis:multi(), + "redis:multi should return positively") + + local ok, err = redis:hget() + assert(ok == nil, "redis:hget should return nil") + assert(err == "Command hget is disabled") + + local ok, err = redis:foobar() + assert(ok == nil, "redis:foobar should return nil") + assert(err == "Command foobar is disabled") + + redis:close() + } +} +--- request +GET /t +--- no_error_log +[error] + +=== TEST 3: Proxy mode does not switch DB +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local redis = require("resty.redis.connector").new({ + port = $TEST_NGINX_REDIS_PORT, + db = 2 + }):connect() + + local proxy = require("resty.redis.connector").new({ + port = $TEST_NGINX_REDIS_PORT, + connection_is_proxied = true, + db = 2 + }):connect() + + assert(redis:set("proxy", "test"), + "redis:set should return positively") + + assert(proxy:get("proxy") == ngx.null, + "proxy key should not exist in proxy") + + redis:seelct(2) + assert(redis:get("proxy") == "test", + "proxy key should be 'test' in db 1") + + redis:close() + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 4: Commands are disabled without proxy mode +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local rc = require("resty.redis.connector").new({ + port = $TEST_NGINX_REDIS_PORT, + disabled_commands = { "foobar", "hget"} + }) + + local redis, err = assert(rc:connect(params), + "connect should return positively") + + assert(redis:set("dog", "an animal"), + "redis:set should return positively") + + assert(redis:multi(), + "redis:multi should return positively") + + local ok, err = redis:hget() + assert(ok == nil, "redis:hget should return nil") + assert(err == "Command hget is disabled") + + local ok, err = redis:foobar() + assert(ok == nil, "redis:foobar should return nil") + assert(err == "Command foobar is disabled") + + redis:close() + } +} +--- request +GET /t +--- no_error_log +[error] diff --git a/t/sentinel.t b/t/sentinel.t new file mode 100644 index 000000000..2b5d2bc04 --- /dev/null +++ b/t/sentinel.t @@ -0,0 +1,279 @@ +use Test::Nginx::Socket 'no_plan'; +use Cwd qw(cwd); + +my $pwd = cwd(); + +our $HttpConfig = qq{ +lua_package_path "$pwd/lib/?.lua;;"; +lua_socket_log_errors Off; + +init_by_lua_block { + require("luacov.runner").init() +} +}; + +$ENV{TEST_NGINX_RESOLVER} = '8.8.8.8'; +$ENV{TEST_NGINX_REDIS_PORT} ||= 6380; +$ENV{TEST_NGINX_REDIS_PORT_SL1} ||= 6381; +$ENV{TEST_NGINX_REDIS_PORT_SL2} ||= 6382; +$ENV{TEST_NGINX_SENTINEL_PORT1} ||= 6390; +$ENV{TEST_NGINX_SENTINEL_PORT2} ||= 6391; +$ENV{TEST_NGINX_SENTINEL_PORT3} ||= 6392; +$ENV{TEST_NGINX_SENTINEL_PORT_AUTH} ||= 6393; + +no_long_string(); +run_tests(); + +__DATA__ + +=== TEST 1: Get the master +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local rc = require("resty.redis.connector").new() + local rs = require("resty.redis.sentinel") + + local sentinel, err = rc:connect{ url = "redis://127.0.0.1:$TEST_NGINX_SENTINEL_PORT1" } + assert(sentinel and not err, "sentinel should connect without errors but got " .. tostring(err)) + + local master, err = rs.get_master(sentinel, "mymaster") + + assert(master and not err, "get_master should return the master") + + assert(master.host == "127.0.0.1" and tonumber(master.port) == $TEST_NGINX_REDIS_PORT, + "host should be 127.0.0.1 and port should be $TEST_NGINX_REDIS_PORT") + + master, err = rs.get_master(sentinel, "invalid-mymaster") + + assert(not master and err, "invalid master name should result in error") + + sentinel:close() + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 1b: Get the master directly +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local rc = require("resty.redis.connector").new() + + local master, err = rc:connect({ + url = "sentinel://mymaster:m/3", + sentinels = { + { host = "127.0.0.1", port = $TEST_NGINX_SENTINEL_PORT1 } + } + }) + + assert(master and not err, "get_master should return the master") + assert(master:set("foo", "bar"), "set should run without error") + assert(master:get("foo") == "bar", "get(foo) should return bar") + + master:close() + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 2: Get slaves +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local rc = require("resty.redis.connector").new() + local rs = require("resty.redis.sentinel") + + local sentinel, err = rc:connect{ url = "redis://127.0.0.1:$TEST_NGINX_SENTINEL_PORT1" } + assert(sentinel and not err, "sentinel should connect without error") + + local slaves, err = rs.get_slaves(sentinel, "mymaster") + + assert(slaves and not err, "slaves should be returned without error") + + local slaveports = { ["$TEST_NGINX_REDIS_PORT_SL1"] = false, ["$TEST_NGINX_REDIS_PORT_SL2"] = false } + + for _,slave in ipairs(slaves) do + slaveports[tostring(slave.port)] = true + end + + assert(slaveports["$TEST_NGINX_REDIS_PORT_SL1"] == true and slaveports["$TEST_NGINX_REDIS_PORT_SL2"] == true, + "slaves should both be found") + + slaves, err = rs.get_slaves(sentinel, "invalid-mymaster") + + assert(not slaves and err, "invalid master name should result in error") + + sentinel:close() + } +} +--- request + GET /t +--- no_error_log +[error] + + +=== TEST 3: Get only healthy slaves +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local rc = require("resty.redis.connector").new() + + local sentinel, err = rc:connect({ url = "redis://127.0.0.1:$TEST_NGINX_SENTINEL_PORT1" }) + assert(sentinel and not err, "sentinel should connect without error") + + local slaves, err = require("resty.redis.sentinel").get_slaves( + sentinel, + "mymaster" + ) + + assert(slaves and not err, "slaves should be returned without error") + + local slaveports = { ["$TEST_NGINX_REDIS_PORT_SL1"] = false, ["$TEST_NGINX_REDIS_PORT_SL2"] = false } + + for _,slave in ipairs(slaves) do + slaveports[tostring(slave.port)] = true + end + + assert(slaveports["$TEST_NGINX_REDIS_PORT_SL1"] == true and slaveports["$TEST_NGINX_REDIS_PORT_SL2"] == true, + "slaves should both be found") + + -- connect to one and remove it + local r = require("resty.redis.connector").new():connect({ + port = $TEST_NGINX_REDIS_PORT_SL1, + }) + r:slaveof("127.0.0.1", 7000) + + ngx.sleep(9) + + local slaves, err = require("resty.redis.sentinel").get_slaves( + sentinel, + "mymaster" + ) + + assert(slaves and not err, "slaves should be returned without error") + + local slaveports = { ["$TEST_NGINX_REDIS_PORT_SL1"] = false, ["$TEST_NGINX_REDIS_PORT_SL2"] = false } + + for _,slave in ipairs(slaves) do + slaveports[tostring(slave.port)] = true + end + + assert(slaveports["$TEST_NGINX_REDIS_PORT_SL1"] == false and slaveports["$TEST_NGINX_REDIS_PORT_SL2"] == true, + "only $TEST_NGINX_REDIS_PORT_SL2 should be found") + + r:slaveof("127.0.0.1", $TEST_NGINX_REDIS_PORT) + + sentinel:close() + } +} +--- request +GET /t +--- timeout: 10 +--- no_error_log +[error] + + +=== TEST 4: connector.connect_via_sentinel +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local rc = require("resty.redis.connector").new() + + local params = { + sentinels = { + { host = "127.0.0.1", port = $TEST_NGINX_SENTINEL_PORT1 }, + { host = "127.0.0.1", port = $TEST_NGINX_SENTINEL_PORT2 }, + { host = "127.0.0.1", port = $TEST_NGINX_SENTINEL_PORT3 }, + }, + master_name = "mymaster", + role = "master", + } + + local redis, err = rc:connect_via_sentinel(params) + assert(redis and not err, "redis should connect without error") + + params.role = "slave" + + local redis, err = rc:connect_via_sentinel(params) + assert(redis and not err, "redis should connect without error") + } +} +--- request +GET /t +--- no_error_log +[error] + + +=== TEST 5: regression for slave sorting (iss12) +--- http_config eval: $::HttpConfig +--- config +location /t { + lua_socket_log_errors Off; + content_by_lua_block { + local rc = require("resty.redis.connector").new() + + local params = { + sentinels = { + { host = "127.0.0.1", port = $TEST_NGINX_SENTINEL_PORT1 }, + { host = "127.0.0.1", port = $TEST_NGINX_SENTINEL_PORT2 }, + { host = "127.0.0.1", port = $TEST_NGINX_SENTINEL_PORT3 }, + }, + master_name = "mymaster", + role = "slave", + } + + -- hotwire get_slaves to expose sorting issue + local sentinel = require("resty.redis.sentinel") + sentinel.get_slaves = function() + return { + { host = "127.0.0.1", port = $TEST_NGINX_REDIS_PORT_SL1 }, + { host = "127.0.0.1", port = $TEST_NGINX_REDIS_PORT_SL2 }, + { host = "134.123.51.2", port = $TEST_NGINX_REDIS_PORT_SL1 }, + } + end + + local redis, err = rc:connect_via_sentinel(params) + assert(redis and not err, "redis should connect without error") + } +} +--- request +GET /t +--- no_error_log +[error] + +=== TEST 6: connect with acl +--- http_config eval: $::HttpConfig +--- config +location /t { + content_by_lua_block { + local rc = require("resty.redis.connector").new() + local redis, err = rc:connect({ + username = "redisuser", + password = "redisuserpass", + sentinels = { + { host = "127.0.0.1", port = $TEST_NGINX_SENTINEL_PORT_AUTH } + }, + master_name = "mymaster", + sentinel_username = "sentineluser", + sentinel_username = "sentineluserpass", + }) + assert(redis and not err, "redis should connect without error") + local username = assert(redis:acl("whoami")) + assert(username == "redisuser", "should connect as 'redisuser' but got " .. tostring(username)) + } +} +--- request +GET /t +--- no_error_log +[error] diff --git a/util/lua-releng b/util/lua-releng new file mode 100755 index 000000000..3c2973524 --- /dev/null +++ b/util/lua-releng @@ -0,0 +1,63 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +sub file_contains ($$); + +my $version; +for my $file (map glob, qw{ *.lua lib/*.lua lib/*/*.lua lib/*/*/*.lua lib/*/*/*/*.lua lib/*/*/*/*/*.lua }) { + # Check the sanity of each .lua file + open my $in, $file or + die "ERROR: Can't open $file for reading: $!\n"; + my $found_ver; + while (<$in>) { + my ($ver, $skipping); + if (/(?x) (?:_VERSION) \s* = .*? ([\d\.]*\d+) (.*? SKIP)?/) { + my $orig_ver = $ver = $1; + $found_ver = 1; + # $skipping = $2; + $ver =~ s{^(\d+)\.(\d{3})(\d{3})$}{join '.', int($1), int($2), int($3)}e; + warn "$file: $orig_ver ($ver)\n"; + + } elsif (/(?x) (?:_VERSION) \s* = \s* ([a-zA-Z_]\S*)/) { + warn "$file: $1\n"; + $found_ver = 1; + last; + } + + if ($ver and $version and !$skipping) { + if ($version ne $ver) { + # die "$file: $ver != $version\n"; + } + } elsif ($ver and !$version) { + $version = $ver; + } + } + if (!$found_ver) { + warn "WARNING: No \"_VERSION\" or \"version\" field found in `$file`.\n"; + } + close $in; + + #print "Checking use of Lua global variables in file $file ...\n"; + system("luac -p -l $file | grep ETGLOBAL | grep -vE '(require|type|tostring|error|ngx|ndk|jit|setmetatable|getmetatable|string|table|io|os|print|tonumber|math|pcall|xpcall|unpack|pairs|ipairs|assert|module|package|coroutine|[gs]etfenv|next|select|rawset|rawget|debug)\$'"); + #file_contains($file, "attempt to write to undeclared variable"); + system("grep -H -n -E --color '.{120}' $file"); +} + +sub file_contains ($$) { + my ($file, $regex) = @_; + open my $in, $file + or die "Cannot open $file fo reading: $!\n"; + my $content = do { local $/; <$in> }; + close $in; + #print "$content"; + return scalar ($content =~ /$regex/); +} + +if (-d 't') { + for my $file (map glob, qw{ t/*.t t/*/*.t t/*/*/*.t }) { + system(qq{grep -H -n --color -E '\\--- ?(ONLY|LAST)' $file}); + } +} + From aeedf30fac267fd10a9111cb960f2fdb5871d99b Mon Sep 17 00:00:00 2001 From: florian Date: Sat, 30 Dec 2023 20:10:11 +0100 Subject: [PATCH 091/154] bw - redis sentinel support (WIP) --- src/bw/lua/bunkerweb/clusterstore.lua | 127 ++++++++++++++++++-------- 1 file changed, 88 insertions(+), 39 deletions(-) diff --git a/src/bw/lua/bunkerweb/clusterstore.lua b/src/bw/lua/bunkerweb/clusterstore.lua index 0d57bb691..1cf21feeb 100644 --- a/src/bw/lua/bunkerweb/clusterstore.lua +++ b/src/bw/lua/bunkerweb/clusterstore.lua @@ -1,7 +1,8 @@ local ngx = ngx local class = require "middleclass" local clogger = require "bunkerweb.logger" -local redis = require "resty.redis" +local rc = require "resty.redis.connector" +local rs = require("resty.redis.sentinel") local utils = require "bunkerweb.utils" local clusterstore = class("clusterstore") @@ -12,6 +13,7 @@ local get_variable = utils.get_variable local is_cosocket_available = utils.is_cosocket_available local ERR = ngx.ERR local tonumber = tonumber +local random = math.random function clusterstore:initialize(pool) -- Get variables @@ -23,6 +25,12 @@ function clusterstore:initialize(pool) ["REDIS_TIMEOUT"] = "", ["REDIS_KEEPALIVE_IDLE"] = "", ["REDIS_KEEPALIVE_POOL"] = "", + ["REDIS_USERNAME"] = "", + ["REDIS_PASSWORD"] = "", + ["REDIS_SENTINEL_HOSTS"] = "", + ["REDIS_SENTINEL_USERNAME"] = "", + ["REDIS_SENTINEL_PASSWORD"] = "", + ["REDIS_SENTINEL_MASTER"] = "" } -- Set them for later use self.variables = {} @@ -33,55 +41,98 @@ function clusterstore:initialize(pool) end self.variables[k] = value end + -- Compute options + local options = { + connect_timeout = tonumber(self.variables["REDIS_TIMEOUT"]), + read_timeout = tonumber(self.variables["REDIS_TIMEOUT"]), + write_timeout = tonumber(self.variables["REDIS_TIMEOUT"]), + keepalive_timeout = tonumber(self.variables["REDIS_KEEPALIVE_IDLE"]), + keepalive_poolsize = tonumber(self.variables["REDIS_KEEPALIVE_POOL"]), + connection_options = { + ssl = self.variables["REDIS_SSL"] == "yes", + + }, + host = self.variables["REDIS_HOST"], + port = tonumber(self.variables["REDIS_PORT"]), + db = tonumber(self.variables["REDIS_DATABASE"]), + username = self.variables["REDIS_USERNAME"], + password = self.variables["REDIS_PASSWORD"], + sentinel_username = self.variables["REDIS_SENTINEL_USERNAME"], + sentinel_password = self.variables["REDIS_SENTINEL_PASSWORD"], + master_name = self.variables["REDIS_SENTINEL_MASTER"], + role = "master", + sentinels = {} + } + if pool == nil or pool then + options.connection_options.pool = "bw-redis", + options.connection_options.pool_size = tonumber(self.variables["REDIS_KEEPALIVE_POOL"]) + end + if self.variables["REDIS_SENTINEL_HOSTS"] ~= "" then + for sentinel_host in self.variables["REDIS_SENTINEL_HOSTS"]:gmatch("%S+") do + local shost, sport = sentinel_host:match("([^:]+):?(%d*)") + if sport == "" then + sport = 26379 + else + sport = tonumber(sport) + end + table.insert(options.sentinel, {host = shost, port = sport}) + end + end + self.options = options -- Instantiate object - self.pool = pool == nil or pool if is_cosocket_available() then - local redis_client, err = redis:new() - self.redis_client = redis_client - if self.redis_client == nil then + local redis_connector, err = rc:new(self.options) + self.redis_connector = redis_connector + if self.redis_connector == nil then logger:log(ERR, "can't instantiate redis object : " .. err) return end - self.redis_client:set_timeout(tonumber(self.variables["REDIS_TIMEOUT"])) end end -function clusterstore:connect() - -- Check if client is created - if not self.redis_client then - return false, "client is not instantiated" +function clusterstore:connect(readonly) + -- Check if connector is created + if not self.redis_connector then + return false, "connector is not instantiated" end - -- Set options - local options = { - ssl = self.variables["REDIS_SSL"] == "yes", - } - if self.pool then - options.pool = "bw-redis" - options.pool_size = tonumber(self.variables["REDIS_KEEPALIVE_POOL"]) + -- Disconnect if needed + if self.redis_client then + self:close() end - -- Connect - local ok, err = self.redis_client:connect(self.variables["REDIS_HOST"], tonumber(self.variables["REDIS_PORT"]), options) - if not ok then - return false, err - end - -- Select database if needed - local times, err = self.redis_client:get_reused_times() - if err then - self.redis_client:close() - return false, err - end - if times < 2 then - -- luacheck: ignore 421 - local _, err = self.redis_client:select(tonumber(self.variables["REDIS_DATABASE"])) - if err then - self.redis_client:close() - return false, err + -- Connect to sentinels if needed + local redis_client, err + if #self.options.sentinels > 0 then + local redis_sentinel, err = self.redis_connector:connect() + if not redis_sentinel then + return false, "error while connecting to sentinels : " .. err end + if readonly then + redis_clients, err = rs.get_slaves(redis_sentinel, self.options.master_name) + if redis_clients then + redis_client = redis_clients[random(#redis_clients)] + else + redis_client = nil + end + else + redis_client, err = rs.get_master(redis_sentinel, self.options.master_name) + end + -- Classic connection + else + redis_client, err = self.redis_connector:connect() end - return true, "success", times + self.redis_client = redis_client + if not self.redis_client then + return false, "error while getting redis client : " .. err + end + -- Everything went well + return true, "success", self.redis_client:get_reused_times() end function clusterstore:close() + -- Check if connected is created + if not self.redis_connector then + return false, "connector is not instantiated" + end -- Check if client is created if not self.redis_client then return false, "client is not instantiated" @@ -89,14 +140,12 @@ function clusterstore:close() -- Pool case local ok, err if self.pool then - ok, err = self.redis_client:set_keepalive( - tonumber(self.variables["REDIS_KEEPALIVE_IDLE"]), - tonumber(self.variables["REDIS_KEEPALIVE_POOL"]) - ) + ok, err = self.redis_connector:set_keepalive(self.redis_client) -- No pool else ok, err = self.redis_client:close() end + self.redis_client = nil if err then logger:log(ERR, "error while closing redis_client : " .. err) end From 551a0b5205b1407cdb4d93591494bc16b4f00770 Mon Sep 17 00:00:00 2001 From: florian Date: Sun, 31 Dec 2023 09:21:46 +0100 Subject: [PATCH 092/154] bw - clusterstore fixes --- CHANGELOG.md | 2 + docs/settings.md | 40 +- src/bw/lua/bunkerweb/clusterstore.lua | 11 +- tests/core/redis-sentinel/Dockerfile | 27 + tests/core/redis-sentinel/Dockerfile.redis | 9 + .../redis-sentinel/docker-compose.test.yml | 23 + tests/core/redis-sentinel/docker-compose.yml | 135 ++++ tests/core/redis-sentinel/entrypoint.sh | 31 + tests/core/redis-sentinel/index.html | 0 tests/core/redis-sentinel/main.py | 397 ++++++++++++ tests/core/redis-sentinel/ready.conf | 8 + tests/core/redis-sentinel/requirements.in | 5 + tests/core/redis-sentinel/requirements.txt | 612 ++++++++++++++++++ tests/core/redis-sentinel/test-todo.sh | 327 ++++++++++ 14 files changed, 1609 insertions(+), 18 deletions(-) create mode 100644 tests/core/redis-sentinel/Dockerfile create mode 100644 tests/core/redis-sentinel/Dockerfile.redis create mode 100644 tests/core/redis-sentinel/docker-compose.test.yml create mode 100644 tests/core/redis-sentinel/docker-compose.yml create mode 100644 tests/core/redis-sentinel/entrypoint.sh create mode 100644 tests/core/redis-sentinel/index.html create mode 100644 tests/core/redis-sentinel/main.py create mode 100644 tests/core/redis-sentinel/ready.conf create mode 100644 tests/core/redis-sentinel/requirements.in create mode 100644 tests/core/redis-sentinel/requirements.txt create mode 100755 tests/core/redis-sentinel/test-todo.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 04f310f33..7f25b46c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ - [FEATURE] Add support for fallback Referrer-Policies - [FEATURE] Add profile page to web ui and the possibility to activate the 2FA - [FEATURE] Add setting REVERSE_PROXY_INCLUDES to manually add "include" directives in the reverse proxies +- [FEATURE] Add support for Redis Sentinel +- [FEATURE] Add support for tls in Ingress definition - [MISC] Fallback to default HTTPS certificate to prevent errors - [MISC] Various internal improvements in LUA code - [MISC] Updated Python Docker image to 3.12.1-alpine3.18 in Dockerfiles diff --git a/docs/settings.md b/docs/settings.md index 9d8ac806a..3aed4b61b 100644 --- a/docs/settings.md +++ b/docs/settings.md @@ -205,11 +205,13 @@ STREAM support :white_check_mark: Choose custom certificate for HTTPS. -| Setting |Default| Context |Multiple| Description | -|-----------------|-------|---------|--------|--------------------------------------------------------------------------------| -|`USE_CUSTOM_SSL` |`no` |multisite|no |Use custom HTTPS certificate. | -|`CUSTOM_SSL_CERT`| |multisite|no |Full path of the certificate or bundle file (must be readable by the scheduler).| -|`CUSTOM_SSL_KEY` | |multisite|no |Full path of the key file (must be readable by the scheduler). | +| Setting |Default| Context |Multiple| Description | +|----------------------|-------|---------|--------|--------------------------------------------------------------------------------| +|`USE_CUSTOM_SSL` |`no` |multisite|no |Use custom HTTPS certificate. | +|`CUSTOM_SSL_CERT` | |multisite|no |Full path of the certificate or bundle file (must be readable by the scheduler).| +|`CUSTOM_SSL_KEY` | |multisite|no |Full path of the key file (must be readable by the scheduler). | +|`CUSTOM_SSL_CERT_DATA`| |multisite|no |Certificate data encoded in base64. | +|`CUSTOM_SSL_KEY_DATA` | |multisite|no |Key data encoded in base64. | ### DB @@ -425,16 +427,22 @@ STREAM support :white_check_mark: Redis server configuration when using BunkerWeb in cluster mode. -| Setting |Default|Context|Multiple| Description | -|----------------------|-------|-------|--------|------------------------------------------------------------------| -|`USE_REDIS` |`no` |global |no |Activate Redis. | -|`REDIS_HOST` | |global |no |Redis server IP or hostname. | -|`REDIS_PORT` |`6379` |global |no |Redis server port. | -|`REDIS_DATABASE` |`0` |global |no |Redis database number. | -|`REDIS_SSL` |`no` |global |no |Use SSL/TLS connection with Redis server. | -|`REDIS_TIMEOUT` |`1000` |global |no |Redis server timeout (in ms) for connect, read and write. | -|`REDIS_KEEPALIVE_IDLE`|`30000`|global |no |Max idle time (in ms) before closing redis connection in the pool.| -|`REDIS_KEEPALIVE_POOL`|`10` |global |no |Max number of redis connection(s) kept in the pool. | +| Setting |Default|Context|Multiple| Description | +|-------------------------|-------|-------|--------|-------------------------------------------------------------------| +|`USE_REDIS` |`no` |global |no |Activate Redis. | +|`REDIS_HOST` | |global |no |Redis server IP or hostname. | +|`REDIS_PORT` |`6379` |global |no |Redis server port. | +|`REDIS_DATABASE` |`0` |global |no |Redis database number. | +|`REDIS_SSL` |`no` |global |no |Use SSL/TLS connection with Redis server. | +|`REDIS_TIMEOUT` |`1000` |global |no |Redis server timeout (in ms) for connect, read and write. | +|`REDIS_KEEPALIVE_IDLE` |`30000`|global |no |Max idle time (in ms) before closing redis connection in the pool. | +|`REDIS_KEEPALIVE_POOL` |`10` |global |no |Max number of redis connection(s) kept in the pool. | +|`REDIS_USERNAME` | |global |no |Redis username used in AUTH command. | +|`REDIS_PASSWORD` | |global |no |Redis password used in AUTH command. | +|`REDIS_SENTINEL_HOSTS` | |global |no |Redis sentinel hosts with format host:[port] separated with spaces.| +|`REDIS_SENTINEL_USERNAME`| |global |no |Redis sentinel username. | +|`REDIS_SENTINEL_PASSWORD`| |global |no |Redis sentinel password. | +|`REDIS_SENTINEL_MASTER` | |global |no |Redis sentinel master name. | ### Reverse proxy @@ -469,6 +477,7 @@ Manage reverse proxy configurations. |`REVERSE_PROXY_CONNECT_TIMEOUT` |`60s` |multisite|yes |Timeout when connecting to the proxied resource. | |`REVERSE_PROXY_READ_TIMEOUT` |`60s` |multisite|yes |Timeout when reading from the proxied resource. | |`REVERSE_PROXY_SEND_TIMEOUT` |`60s` |multisite|yes |Timeout when sending to the proxied resource. | +|`REVERSE_PROXY_INCLUDES` | |multisite|yes |Additional configuration to include in the location block, separated with spaces. | ### Reverse scan @@ -541,3 +550,4 @@ Allow access based on internal and external IP/network/rDNS/ASN whitelists. |`WHITELIST_USER_AGENT_URLS`| |global |no |List of URLs, separated with spaces, containing good User-Agent to whitelist. | |`WHITELIST_URI` | |multisite|no |List of URI (PCRE regex), separated with spaces, to whitelist. | |`WHITELIST_URI_URLS` | |global |no |List of URLs, separated with spaces, containing bad URI to whitelist. | + diff --git a/src/bw/lua/bunkerweb/clusterstore.lua b/src/bw/lua/bunkerweb/clusterstore.lua index 1cf21feeb..7ae56ae71 100644 --- a/src/bw/lua/bunkerweb/clusterstore.lua +++ b/src/bw/lua/bunkerweb/clusterstore.lua @@ -18,6 +18,7 @@ local random = math.random function clusterstore:initialize(pool) -- Get variables local variables = { + ["USE_REDIS"] = "", ["REDIS_HOST"] = "", ["REDIS_PORT"] = "", ["REDIS_DATABASE"] = "", @@ -41,11 +42,15 @@ function clusterstore:initialize(pool) end self.variables[k] = value end + -- Don't go further if redis is not used + if self.variables["USE_REDIS"] ~= "yes" then + return + end -- Compute options local options = { connect_timeout = tonumber(self.variables["REDIS_TIMEOUT"]), read_timeout = tonumber(self.variables["REDIS_TIMEOUT"]), - write_timeout = tonumber(self.variables["REDIS_TIMEOUT"]), + send_timeout = tonumber(self.variables["REDIS_TIMEOUT"]), keepalive_timeout = tonumber(self.variables["REDIS_KEEPALIVE_IDLE"]), keepalive_poolsize = tonumber(self.variables["REDIS_KEEPALIVE_POOL"]), connection_options = { @@ -64,7 +69,7 @@ function clusterstore:initialize(pool) sentinels = {} } if pool == nil or pool then - options.connection_options.pool = "bw-redis", + options.connection_options.pool = "bw-redis" options.connection_options.pool_size = tonumber(self.variables["REDIS_KEEPALIVE_POOL"]) end if self.variables["REDIS_SENTINEL_HOSTS"] ~= "" then @@ -81,7 +86,7 @@ function clusterstore:initialize(pool) self.options = options -- Instantiate object if is_cosocket_available() then - local redis_connector, err = rc:new(self.options) + local redis_connector, err = rc.new(self.options) self.redis_connector = redis_connector if self.redis_connector == nil then logger:log(ERR, "can't instantiate redis object : " .. err) diff --git a/tests/core/redis-sentinel/Dockerfile b/tests/core/redis-sentinel/Dockerfile new file mode 100644 index 000000000..847ea4e7c --- /dev/null +++ b/tests/core/redis-sentinel/Dockerfile @@ -0,0 +1,27 @@ +FROM python:3.12.1-alpine3.18@sha256:af0d8da43677e3000ebdf4045508d891a87e7bd2d3ec87bc6e40403be97291b8 + +# Install firefox and geckodriver +RUN apk add --no-cache --virtual .build-deps curl grep zip wget && \ + apk add --no-cache firefox + +# Installing geckodriver for firefox... +RUN GECKODRIVER_VERSION=`curl -i https://github.com/mozilla/geckodriver/releases/latest | grep -Po 'v[0-9]+\.[0-9]+\.[0-9]+'` && \ + wget -O geckodriver.tar.gz -w 5 https://github.com/mozilla/geckodriver/releases/download/$GECKODRIVER_VERSION/geckodriver-$GECKODRIVER_VERSION-linux64.tar.gz && \ + tar -C /usr/local/bin -xzvf geckodriver.tar.gz && \ + chmod +x /usr/local/bin/geckodriver && \ + rm geckodriver.tar.gz + +WORKDIR /tmp + +COPY requirements.txt . + +RUN MAKEFLAGS="-j $(nproc)" pip install --no-cache-dir --require-hashes --no-deps -r requirements.txt && \ + rm -f requirements.txt + +WORKDIR /opt/tests + +COPY main.py . + +EXPOSE 8080 + +ENTRYPOINT [ "python3", "main.py" ] diff --git a/tests/core/redis-sentinel/Dockerfile.redis b/tests/core/redis-sentinel/Dockerfile.redis new file mode 100644 index 000000000..5ee0740ad --- /dev/null +++ b/tests/core/redis-sentinel/Dockerfile.redis @@ -0,0 +1,9 @@ +FROM redis:7-alpine@sha256:2d148c557c85309c7cf1bbf15ebc21d5fc370ab1cb913a6c19b74bd29d10801c + +RUN apk add --no-cache bash openssl + +COPY entrypoint.sh . + +RUN chmod +x entrypoint.sh + +ENTRYPOINT [ "./entrypoint.sh" ] diff --git a/tests/core/redis-sentinel/docker-compose.test.yml b/tests/core/redis-sentinel/docker-compose.test.yml new file mode 100644 index 000000000..9cf08e73f --- /dev/null +++ b/tests/core/redis-sentinel/docker-compose.test.yml @@ -0,0 +1,23 @@ +version: "3.5" + +services: + tests: + build: . + environment: + PYTHONUNBUFFERED: "1" + USE_REVERSE_SCAN: "no" + USE_ANTIBOT: "no" + + REDIS_SENTINEL_HOSTS: "bw-sentinel-1 bw-sentinel-2 bw-sentinel-3" + REDIS_SENTINEL_MASTER: "mymasterset" + REDIS_DATABASE: "0" + REDIS_SSL: "no" + extra_hosts: + - "www.example.com:1.0.0.2" + networks: + bw-services: + ipv4_address: 1.0.0.3 + +networks: + bw-services: + external: true diff --git a/tests/core/redis-sentinel/docker-compose.yml b/tests/core/redis-sentinel/docker-compose.yml new file mode 100644 index 000000000..8ad6da081 --- /dev/null +++ b/tests/core/redis-sentinel/docker-compose.yml @@ -0,0 +1,135 @@ +version: "3.5" + +services: + bw: + image: bunkerity/bunkerweb:1.5.4 + pull_policy: never + depends_on: + - bw-redis + labels: + - "bunkerweb.INSTANCE=yes" + volumes: + - ./index.html:/var/www/html/index.html + environment: + API_WHITELIST_IP: "127.0.0.0/8 10.20.30.0/24 1.0.0.3" + HTTP_PORT: "80" + USE_BUNKERNET: "no" + SEND_ANONYMOUS_REPORT: "no" + BLACKLIST_IP_URLS: "" + LOG_LEVEL: "info" + SESSIONS_NAME: "test" + USE_REVERSE_SCAN: "no" + USE_ANTIBOT: "no" + USE_GREYLIST: "yes" + GREYLIST_IP: "0.0.0.0/0" + WHITELIST_COUNTRY: "AU" + + # ? REDIS settings + USE_REDIS: "yes" + REDIS_SENTINEL_HOSTS: "bw-sentinel-1 bw-sentinel-2 bw-sentinel-3" + REDIS_SENTINEL_MASTER: "mymasterset" + REDIS_DATABASE: "0" + REDIS_SSL: "no" + CUSTOM_CONF_SERVER_HTTP_ready: | + location /ready { + default_type 'text/plain'; + rewrite_by_lua_block { + ngx.print('ready') + ngx.flush(true) + ngx.exit(ngx.HTTP_OK) + } + } + networks: + bw-universe: + bw-services: + ipv4_address: 1.0.0.2 + + bw-scheduler: + image: bunkerity/bunkerweb-scheduler:1.5.4 + pull_policy: never + depends_on: + - bw + - bw-docker + environment: + DOCKER_HOST: "tcp://bw-docker:2375" + LOG_LEVEL: "info" + networks: + - bw-universe + - bw-docker + + bw-docker: + image: tecnativa/docker-socket-proxy:nightly + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + environment: + CONTAINERS: "1" + networks: + - bw-docker + + bw-redis-master: + image: 'bitnami/redis:latest' + environment: + - REDIS_REPLICATION_MODE=master + - ALLOW_EMPTY_PASSWORD=yes + networks: + - bw-services + + bw-redis-slave: + image: 'bitnami/redis:latest' + environment: + - REDIS_REPLICATION_MODE=slave + - REDIS_MASTER_HOST=bw-redis-master + - ALLOW_EMPTY_PASSWORD=yes + depends_on: + - bw-redis-master + networks: + - bw-services + + bw-sentinel-1: + image: 'bitnami/redis-sentinel:latest' + environment: + - REDIS_MASTER_HOST=bw-redis-master + - REDIS_MASTER_SET=mymasterset + depends_on: + - bw-redis-master + - bw-redis-slave + networks: + - bw-services + + bw-sentinel-2: + image: 'bitnami/redis-sentinel:latest' + environment: + - REDIS_MASTER_HOST=bw-redis-master + - REDIS_MASTER_SET=mymasterset + depends_on: + - bw-redis-master + - bw-redis-slave + networks: + - bw-services + + bw-sentinel-3: + image: 'bitnami/redis-sentinel:latest' + environment: + - REDIS_MASTER_HOST=bw-redis-master + - REDIS_MASTER_SET=mymasterset + depends_on: + - bw-redis-master + - bw-redis-slave + networks: + - bw-services + +networks: + bw-universe: + name: bw-universe + ipam: + driver: default + config: + - subnet: 10.20.30.0/24 + bw-services: + name: bw-services + ipam: + driver: default + config: + - subnet: 1.0.0.0/24 + bw-docker: + name: bw-docker diff --git a/tests/core/redis-sentinel/entrypoint.sh b/tests/core/redis-sentinel/entrypoint.sh new file mode 100644 index 000000000..dadd79f62 --- /dev/null +++ b/tests/core/redis-sentinel/entrypoint.sh @@ -0,0 +1,31 @@ +#!/bin/bash +set -e + +command="redis-server" + +if [ "$REDIS_SSL" = "yes" ]; then + mkdir /tls + + openssl genrsa -out /tls/ca.key 4096 + openssl req \ + -x509 -new -nodes -sha256 \ + -key /tls/ca.key \ + -days 365 \ + -subj /CN=bw-redis/ \ + -out /tls/ca.crt + + openssl req \ + -x509 -nodes -newkey rsa:4096 \ + -keyout /tls/redis.key \ + -out /tls/redis.pem \ + -days 365 \ + -subj /CN=bw-redis/ + + chmod -R 640 /tls + + command+=" --tls-port ${REDIS_PORT:-6379} --port 0 --tls-cert-file /tls/redis.pem --tls-key-file /tls/redis.key --tls-ca-cert-file /tls/ca.crt --tls-auth-clients no" +else + command+=" --port ${REDIS_PORT:-6379}" +fi + +$command diff --git a/tests/core/redis-sentinel/index.html b/tests/core/redis-sentinel/index.html new file mode 100644 index 000000000..e69de29bb diff --git a/tests/core/redis-sentinel/main.py b/tests/core/redis-sentinel/main.py new file mode 100644 index 000000000..f8fc250c5 --- /dev/null +++ b/tests/core/redis-sentinel/main.py @@ -0,0 +1,397 @@ +from fastapi import FastAPI +from multiprocessing import Process +from os import getenv +from redis import Redis +from requests import get +from selenium import webdriver +from selenium.webdriver.firefox.options import Options +from time import sleep +from traceback import format_exc +from contextlib import suppress +from requests.exceptions import RequestException + +from uvicorn import run + +fastapi_proc = None + +ip_to_check = "1.0.0.3" if getenv("TEST_TYPE", "docker") == "docker" else "127.0.0.1" + +try: + ready = False + retries = 0 + while not ready: + with suppress(RequestException): + resp = get("http://www.example.com/ready", headers={"Host": "www.example.com"}) + status_code = resp.status_code + text = resp.text + + if status_code >= 500: + print("❌ An error occurred with the server, exiting ...", flush=True) + exit(1) + + ready = status_code < 400 or status_code == 403 and text == "ready" + + if retries > 10: + print("❌ The service took too long to be ready, exiting ...", flush=True) + exit(1) + elif not ready: + retries += 1 + print("⚠️ Waiting for the service to be ready, retrying in 5s ...", flush=True) + sleep(5) + + redis_host = getenv("REDIS_HOST", "127.0.0.1") + + if not redis_host: + print("❌ Redis host is not set, exiting ...", flush=True) + exit(1) + + redis_port = getenv("REDIS_PORT", "6379") + + if not redis_port.isdigit(): + print("❌ Redis port doesn't seem to be a number, exiting ...", flush=True) + exit(1) + + redis_port = int(redis_port) + + redis_db = getenv("REDIS_DATABASE", "0") + + if not redis_db.isdigit(): + print("❌ Redis database doesn't seem to be a number, exiting ...", flush=True) + exit(1) + + redis_db = int(redis_db) + + redis_ssl = getenv("REDIS_SSL", "no") == "yes" + + print( + f"ℹ️ Trying to connect to Redis with the following parameters:\nhost: {redis_host}\nport: {redis_port}\ndb: {redis_db}\nssl: {redis_ssl}", + flush=True, + ) + + redis_client = Redis( + host=redis_host, + port=redis_port, + db=redis_db, + ssl=redis_ssl, + socket_timeout=1, + ssl_cert_reqs=None, + ) + + if not redis_client.ping(): + print("❌ Redis is not reachable, exiting ...", flush=True) + exit(1) + + use_reverse_scan = getenv("USE_REVERSE_SCAN", "no") == "yes" + + if use_reverse_scan: + if ip_to_check == "1.0.0.3": + print("ℹ️ Testing Reverse Scan, starting FastAPI ...", flush=True) + app = FastAPI() + fastapi_proc = Process(target=run, args=(app,), kwargs=dict(host="0.0.0.0", port=8080)) + fastapi_proc.start() + + sleep(2) + + print( + "ℹ️ FastAPI started, sending a request to http://www.example.com ...", + flush=True, + ) + + response = get( + "http://www.example.com", + headers={"Host": "www.example.com"}, + ) + + if response.status_code != 403: + response.raise_for_status() + + print("❌ The request was not blocked, exiting ...", flush=True) + exit(1) + + sleep(0.5) + + print("ℹ️ The request was blocked, checking Redis ...", flush=True) + + port_to_check = "8080" if ip_to_check == "1.0.0.3" else "80" + + key_value = redis_client.get(f"plugin_reverse_scan_{ip_to_check}:{port_to_check}") + + if key_value is None: + print( + f'❌ The Reverse Scan key ("plugin_reverse_scan_{ip_to_check}:{port_to_check}") was not found, exiting ...\nkeys: {redis_client.keys()}', + flush=True, + ) + exit(1) + elif key_value != b"open": + print( + f'❌ The Reverse Scan key ("plugin_reverse_scan_{ip_to_check}:{port_to_check}") was found, but the value is not "open" ({key_value.decode()}), exiting ...\nkeys: {redis_client.keys()}', + flush=True, + ) + exit(1) + + print( + f"βœ… The Reverse Scan key was found, the value is {key_value.decode()}", + flush=True, + ) + + exit(0) + + use_antibot = getenv("USE_ANTIBOT", "no") != "no" + + if use_antibot: + print("ℹ️ Testing Antibot ...", flush=True) + + firefox_options = Options() + firefox_options.add_argument("--headless") + + print("ℹ️ Starting Firefox ...", flush=True) + with webdriver.Firefox(options=firefox_options) as driver: + driver.delete_all_cookies() + driver.maximize_window() + + print("ℹ️ Navigating to http://www.example.com ...", flush=True) + driver.get("http://www.example.com") + + sleep(0.5) + + print("ℹ️ Checking Redis ...", flush=True) + + keys = redis_client.keys("sessions_:test:*") + + if not keys: + print( + f"❌ No Antibot keys were found, exiting ...\nkeys: {redis_client.keys()}", + flush=True, + ) + exit(1) + + key_value = redis_client.get(keys[0]) + + if key_value is None: + print( + f"❌ The Antibot key ({keys[0].decode()}) was not found, exiting ...\nkeys: {redis_client.keys()}", + flush=True, + ) + exit(1) + + print( + f"βœ… The Antibot key was found, the value is {key_value.decode()}", + flush=True, + ) + + exit(0) + + print( + "ℹ️ Sending a request to http://www.example.com/?id=/etc/passwd ...", + flush=True, + ) + + response = get( + "http://www.example.com/?id=/etc/passwd", + headers={"Host": "www.example.com"}, + ) + + if response.status_code != 403: + response.raise_for_status() + + print("❌ The request was not blocked, exiting ...", flush=True) + exit(1) + + sleep(0.5) + + print("ℹ️ The request was blocked, checking Redis ...", flush=True) + + key_value = redis_client.get(f"plugin_bad_behavior_{ip_to_check}") + + if key_value is None: + print( + f'❌ The Bad Behavior key ("plugin_bad_behavior_{ip_to_check}") was not found, exiting ...\nkeys: {redis_client.keys()}', + flush=True, + ) + exit(1) + + print( + f"βœ… The Bad Behavior key was found, the value is {key_value.decode()}", + flush=True, + ) + + print( + "ℹ️ Sending another request to http://www.example.com/?id=/etc/passwd ...", + flush=True, + ) + + response = get( + "http://www.example.com/?id=/etc/passwd", + headers={"Host": "www.example.com"}, + ) + + if response.status_code != 403: + response.raise_for_status() + + print("❌ The request was not blocked, exiting ...", flush=True) + exit(1) + + sleep(0.5) + + second_key_value = redis_client.get(f"plugin_bad_behavior_{ip_to_check}") + + if second_key_value <= key_value: + print( + f'❌ The Bad Behavior key ("plugin_bad_behavior_{ip_to_check}") was not incremented, exiting ...\nkeys: {redis_client.keys()}', + flush=True, + ) + exit(1) + + print( + f"βœ… The Bad Behavior key was incremented, the value is {second_key_value.decode()}", + flush=True, + ) + + print( + "ℹ️ Sending requests to http://www.example.com until we reach the limit ...", + flush=True, + ) + status_code = 0 + + while status_code != 429: + response = get( + "http://www.example.com", + headers={"Host": "www.example.com"}, + ) + + if response.status_code not in (200, 429): + response.raise_for_status() + + status_code = response.status_code + + sleep(0.5) + + key_value = redis_client.get(f"plugin_limit_www.example.com{ip_to_check}/") + + if key_value is None: + print( + f'❌ The limit key ("plugin_limit_www.example.com{ip_to_check}/") was not found, exiting ...\nkeys: {redis_client.keys()}', + flush=True, + ) + exit(1) + + print( + f"βœ… The limit key was found, the value is {key_value.decode()}", + flush=True, + ) + + print( + "ℹ️ Checking if the country key was created and has the correct value ...", + flush=True, + ) + + key_value = redis_client.get(f"plugin_country_www.example.com{ip_to_check}") + + if key_value is None: + print( + f'❌ The country key ("plugin_country_www.example.com{ip_to_check}") was not found, exiting ...\nkeys: {redis_client.keys()}', + flush=True, + ) + exit(1) + + print( + f"βœ… The country key was found, the value is {key_value.decode()}", + flush=True, + ) + + print( + "ℹ️ Checking if the whitelist key was created and has the correct value ...", + flush=True, + ) + + key_value = redis_client.get(f"plugin_whitelist_www.example.comip{ip_to_check}") + + if key_value is None: + print( + f'❌ The whitelist key ("plugin_whitelist_www.example.comip{ip_to_check}") was not found, exiting ...\nkeys: {redis_client.keys()}', + flush=True, + ) + exit(1) + if key_value != b"ok": + print( + f'❌ The whitelist key ("plugin_whitelist_www.example.comip{ip_to_check}") was found, but the value is not "ok" ({key_value.decode()}), exiting ...\nkeys: {redis_client.keys()}', + ) + + print( + f"βœ… The whitelist key was found, the value is {key_value.decode()}", + flush=True, + ) + + print( + "ℹ️ Checking if the blacklist key was created and has the correct value ...", + flush=True, + ) + + key_value = redis_client.get(f"plugin_blacklist_www.example.comip{ip_to_check}") + + if key_value is None: + print( + f'❌ The blacklist key ("plugin_blacklist_www.example.comip{ip_to_check}") was not found, exiting ...\nkeys: {redis_client.keys()}', + flush=True, + ) + exit(1) + if key_value != b"ok": + print( + f'❌ The blacklist key ("plugin_blacklist_www.example.comip{ip_to_check}") was found, but the value is not "ok" ({key_value.decode()}), exiting ...\nkeys: {redis_client.keys()}', + ) + + print( + f"βœ… The blacklist key was found, the value is {key_value.decode()}", + flush=True, + ) + + print( + "ℹ️ Checking if the greylist key was created and has the correct value ...", + flush=True, + ) + + key_value = redis_client.get(f"plugin_greylist_www.example.comip{ip_to_check}") + + if key_value is None: + print( + f'❌ The greylist key ("plugin_greylist_www.example.comip{ip_to_check}") was not found, exiting ...\nkeys: {redis_client.keys()}', + flush=True, + ) + exit(1) + if key_value != b"ip": + print( + f'❌ The greylist key ("plugin_greylist_www.example.comip{ip_to_check}") was found, but the value is not "ip" ({key_value.decode()}), exiting ...\nkeys: {redis_client.keys()}', + ) + + print( + f"βœ… The greylist key was found, the value is {key_value.decode()}", + flush=True, + ) + + if ip_to_check == "1.0.0.3": + print( + "ℹ️ Checking if the dnsbl keys were created ...", + flush=True, + ) + + key_value = redis_client.get(f"plugin_dnsbl_www.example.com{ip_to_check}") + + if key_value is None: + print( + f'❌ The dnsbl key ("plugin_dnsbl_www.example.com{ip_to_check}") was not found, exiting ...\nkeys: {redis_client.keys()}', + flush=True, + ) + exit(1) + + print( + f"βœ… The dnsbl key was found, the value is {key_value.decode()}", + flush=True, + ) +except SystemExit as e: + exit(e.code) +except: + print(f"❌ Something went wrong, exiting ...\n{format_exc()}", flush=True) + exit(1) +finally: + if fastapi_proc: + fastapi_proc.terminate() diff --git a/tests/core/redis-sentinel/ready.conf b/tests/core/redis-sentinel/ready.conf new file mode 100644 index 000000000..de1f24404 --- /dev/null +++ b/tests/core/redis-sentinel/ready.conf @@ -0,0 +1,8 @@ +location /ready { + default_type 'text/plain'; + rewrite_by_lua_block { + ngx.print('ready') + ngx.flush(true) + ngx.exit(ngx.HTTP_OK) + } +} diff --git a/tests/core/redis-sentinel/requirements.in b/tests/core/redis-sentinel/requirements.in new file mode 100644 index 000000000..819a03740 --- /dev/null +++ b/tests/core/redis-sentinel/requirements.in @@ -0,0 +1,5 @@ +fastapi==0.108.0 +redis==5.0.1 +requests==2.31.0 +selenium==4.16.0 +uvicorn[standard]==0.25.0 diff --git a/tests/core/redis-sentinel/requirements.txt b/tests/core/redis-sentinel/requirements.txt new file mode 100644 index 000000000..d9ccb813e --- /dev/null +++ b/tests/core/redis-sentinel/requirements.txt @@ -0,0 +1,612 @@ +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# pip-compile --allow-unsafe --generate-hashes --strip-extras requirements.in +# +annotated-types==0.6.0 \ + --hash=sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43 \ + --hash=sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d + # via pydantic +anyio==4.2.0 \ + --hash=sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee \ + --hash=sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f + # via + # starlette + # watchfiles +async-timeout==4.0.3 \ + --hash=sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f \ + --hash=sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028 + # via redis +attrs==23.1.0 \ + --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \ + --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015 + # via + # outcome + # trio +certifi==2023.11.17 \ + --hash=sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1 \ + --hash=sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474 + # via + # requests + # selenium +charset-normalizer==3.3.2 \ + --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ + --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ + --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ + --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ + --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ + --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ + --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ + --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ + --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ + --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ + --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ + --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ + --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ + --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ + --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ + --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ + --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ + --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ + --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ + --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ + --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ + --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ + --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ + --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ + --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ + --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ + --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ + --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ + --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ + --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ + --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ + --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ + --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ + --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ + --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ + --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ + --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ + --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ + --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ + --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ + --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ + --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ + --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ + --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ + --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ + --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ + --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ + --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ + --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ + --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ + --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ + --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ + --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ + --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ + --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ + --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ + --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ + --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ + --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ + --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ + --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ + --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ + --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ + --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ + --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ + --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ + --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ + --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ + --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ + --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ + --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ + --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ + --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ + --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ + --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ + --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ + --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ + --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ + --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ + --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ + --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ + --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ + --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ + --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ + --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ + --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ + --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ + --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ + --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ + --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 + # via requests +click==8.1.7 \ + --hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \ + --hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de + # via uvicorn +exceptiongroup==1.2.0 \ + --hash=sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14 \ + --hash=sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68 + # via + # anyio + # trio + # trio-websocket +fastapi==0.108.0 \ + --hash=sha256:5056e504ac6395bf68493d71fcfc5352fdbd5fda6f88c21f6420d80d81163296 \ + --hash=sha256:8c7bc6d315da963ee4cdb605557827071a9a7f95aeb8fcdd3bde48cdc8764dd7 + # via -r requirements.in +h11==0.14.0 \ + --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ + --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 + # via + # uvicorn + # wsproto +httptools==0.6.1 \ + --hash=sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563 \ + --hash=sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142 \ + --hash=sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d \ + --hash=sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b \ + --hash=sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4 \ + --hash=sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb \ + --hash=sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658 \ + --hash=sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084 \ + --hash=sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2 \ + --hash=sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97 \ + --hash=sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837 \ + --hash=sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3 \ + --hash=sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58 \ + --hash=sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da \ + --hash=sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d \ + --hash=sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90 \ + --hash=sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0 \ + --hash=sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1 \ + --hash=sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2 \ + --hash=sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e \ + --hash=sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0 \ + --hash=sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf \ + --hash=sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc \ + --hash=sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3 \ + --hash=sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503 \ + --hash=sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a \ + --hash=sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3 \ + --hash=sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949 \ + --hash=sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84 \ + --hash=sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb \ + --hash=sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a \ + --hash=sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f \ + --hash=sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e \ + --hash=sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81 \ + --hash=sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185 \ + --hash=sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3 + # via uvicorn +idna==3.6 \ + --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ + --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f + # via + # anyio + # requests + # trio +outcome==1.3.0.post0 \ + --hash=sha256:9dcf02e65f2971b80047b377468e72a268e15c0af3cf1238e6ff14f7f91143b8 \ + --hash=sha256:e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b + # via trio +pydantic==2.5.3 \ + --hash=sha256:b3ef57c62535b0941697cce638c08900d87fcb67e29cfa99e8a68f747f393f7a \ + --hash=sha256:d0caf5954bee831b6bfe7e338c32b9e30c85dfe080c843680783ac2b631673b4 + # via fastapi +pydantic-core==2.14.6 \ + --hash=sha256:00646784f6cd993b1e1c0e7b0fdcbccc375d539db95555477771c27555e3c556 \ + --hash=sha256:00b1087dabcee0b0ffd104f9f53d7d3eaddfaa314cdd6726143af6bc713aa27e \ + --hash=sha256:0348b1dc6b76041516e8a854ff95b21c55f5a411c3297d2ca52f5528e49d8411 \ + --hash=sha256:036137b5ad0cb0004c75b579445a1efccd072387a36c7f217bb8efd1afbe5245 \ + --hash=sha256:095b707bb287bfd534044166ab767bec70a9bba3175dcdc3371782175c14e43c \ + --hash=sha256:0c08de15d50fa190d577e8591f0329a643eeaed696d7771760295998aca6bc66 \ + --hash=sha256:1302a54f87b5cd8528e4d6d1bf2133b6aa7c6122ff8e9dc5220fbc1e07bffebd \ + --hash=sha256:172de779e2a153d36ee690dbc49c6db568d7b33b18dc56b69a7514aecbcf380d \ + --hash=sha256:1b027c86c66b8627eb90e57aee1f526df77dc6d8b354ec498be9a757d513b92b \ + --hash=sha256:1ce830e480f6774608dedfd4a90c42aac4a7af0a711f1b52f807130c2e434c06 \ + --hash=sha256:1fd0c1d395372843fba13a51c28e3bb9d59bd7aebfeb17358ffaaa1e4dbbe948 \ + --hash=sha256:23598acb8ccaa3d1d875ef3b35cb6376535095e9405d91a3d57a8c7db5d29341 \ + --hash=sha256:24368e31be2c88bd69340fbfe741b405302993242ccb476c5c3ff48aeee1afe0 \ + --hash=sha256:26a92ae76f75d1915806b77cf459811e772d8f71fd1e4339c99750f0e7f6324f \ + --hash=sha256:27e524624eace5c59af499cd97dc18bb201dc6a7a2da24bfc66ef151c69a5f2a \ + --hash=sha256:2b8719037e570639e6b665a4050add43134d80b687288ba3ade18b22bbb29dd2 \ + --hash=sha256:2c5bcf3414367e29f83fd66f7de64509a8fd2368b1edf4351e862910727d3e51 \ + --hash=sha256:2dbe357bc4ddda078f79d2a36fc1dd0494a7f2fad83a0a684465b6f24b46fe80 \ + --hash=sha256:2f5fa187bde8524b1e37ba894db13aadd64faa884657473b03a019f625cee9a8 \ + --hash=sha256:2f6ffc6701a0eb28648c845f4945a194dc7ab3c651f535b81793251e1185ac3d \ + --hash=sha256:314ccc4264ce7d854941231cf71b592e30d8d368a71e50197c905874feacc8a8 \ + --hash=sha256:36026d8f99c58d7044413e1b819a67ca0e0b8ebe0f25e775e6c3d1fabb3c38fb \ + --hash=sha256:36099c69f6b14fc2c49d7996cbf4f87ec4f0e66d1c74aa05228583225a07b590 \ + --hash=sha256:36fa402dcdc8ea7f1b0ddcf0df4254cc6b2e08f8cd80e7010d4c4ae6e86b2a87 \ + --hash=sha256:370ffecb5316ed23b667d99ce4debe53ea664b99cc37bfa2af47bc769056d534 \ + --hash=sha256:3860c62057acd95cc84044e758e47b18dcd8871a328ebc8ccdefd18b0d26a21b \ + --hash=sha256:399ac0891c284fa8eb998bcfa323f2234858f5d2efca3950ae58c8f88830f145 \ + --hash=sha256:3a0b5db001b98e1c649dd55afa928e75aa4087e587b9524a4992316fa23c9fba \ + --hash=sha256:3dcf1978be02153c6a31692d4fbcc2a3f1db9da36039ead23173bc256ee3b91b \ + --hash=sha256:4241204e4b36ab5ae466ecec5c4c16527a054c69f99bba20f6f75232a6a534e2 \ + --hash=sha256:438027a975cc213a47c5d70672e0d29776082155cfae540c4e225716586be75e \ + --hash=sha256:43e166ad47ba900f2542a80d83f9fc65fe99eb63ceec4debec160ae729824052 \ + --hash=sha256:478e9e7b360dfec451daafe286998d4a1eeaecf6d69c427b834ae771cad4b622 \ + --hash=sha256:4ce8299b481bcb68e5c82002b96e411796b844d72b3e92a3fbedfe8e19813eab \ + --hash=sha256:4f86f1f318e56f5cbb282fe61eb84767aee743ebe32c7c0834690ebea50c0a6b \ + --hash=sha256:55a23dcd98c858c0db44fc5c04fc7ed81c4b4d33c653a7c45ddaebf6563a2f66 \ + --hash=sha256:599c87d79cab2a6a2a9df4aefe0455e61e7d2aeede2f8577c1b7c0aec643ee8e \ + --hash=sha256:5aa90562bc079c6c290f0512b21768967f9968e4cfea84ea4ff5af5d917016e4 \ + --hash=sha256:64634ccf9d671c6be242a664a33c4acf12882670b09b3f163cd00a24cffbd74e \ + --hash=sha256:667aa2eac9cd0700af1ddb38b7b1ef246d8cf94c85637cbb03d7757ca4c3fdec \ + --hash=sha256:6a31d98c0d69776c2576dda4b77b8e0c69ad08e8b539c25c7d0ca0dc19a50d6c \ + --hash=sha256:6af4b3f52cc65f8a0bc8b1cd9676f8c21ef3e9132f21fed250f6958bd7223bed \ + --hash=sha256:6c8edaea3089bf908dd27da8f5d9e395c5b4dc092dbcce9b65e7156099b4b937 \ + --hash=sha256:71d72ca5eaaa8d38c8df16b7deb1a2da4f650c41b58bb142f3fb75d5ad4a611f \ + --hash=sha256:72f9a942d739f09cd42fffe5dc759928217649f070056f03c70df14f5770acf9 \ + --hash=sha256:747265448cb57a9f37572a488a57d873fd96bf51e5bb7edb52cfb37124516da4 \ + --hash=sha256:75ec284328b60a4e91010c1acade0c30584f28a1f345bc8f72fe8b9e46ec6a96 \ + --hash=sha256:78d0768ee59baa3de0f4adac9e3748b4b1fffc52143caebddfd5ea2961595277 \ + --hash=sha256:78ee52ecc088c61cce32b2d30a826f929e1708f7b9247dc3b921aec367dc1b23 \ + --hash=sha256:7be719e4d2ae6c314f72844ba9d69e38dff342bc360379f7c8537c48e23034b7 \ + --hash=sha256:7e1f4744eea1501404b20b0ac059ff7e3f96a97d3e3f48ce27a139e053bb370b \ + --hash=sha256:7e90d6cc4aad2cc1f5e16ed56e46cebf4877c62403a311af20459c15da76fd91 \ + --hash=sha256:7ebe3416785f65c28f4f9441e916bfc8a54179c8dea73c23023f7086fa601c5d \ + --hash=sha256:7f41533d7e3cf9520065f610b41ac1c76bc2161415955fbcead4981b22c7611e \ + --hash=sha256:7f5025db12fc6de7bc1104d826d5aee1d172f9ba6ca936bf6474c2148ac336c1 \ + --hash=sha256:86c963186ca5e50d5c8287b1d1c9d3f8f024cbe343d048c5bd282aec2d8641f2 \ + --hash=sha256:86ce5fcfc3accf3a07a729779d0b86c5d0309a4764c897d86c11089be61da160 \ + --hash=sha256:8a14c192c1d724c3acbfb3f10a958c55a2638391319ce8078cb36c02283959b9 \ + --hash=sha256:8b93785eadaef932e4fe9c6e12ba67beb1b3f1e5495631419c784ab87e975670 \ + --hash=sha256:8ed1af8692bd8d2a29d702f1a2e6065416d76897d726e45a1775b1444f5928a7 \ + --hash=sha256:92879bce89f91f4b2416eba4429c7b5ca22c45ef4a499c39f0c5c69257522c7c \ + --hash=sha256:94fc0e6621e07d1e91c44e016cc0b189b48db053061cc22d6298a611de8071bb \ + --hash=sha256:982487f8931067a32e72d40ab6b47b1628a9c5d344be7f1a4e668fb462d2da42 \ + --hash=sha256:9862bf828112e19685b76ca499b379338fd4c5c269d897e218b2ae8fcb80139d \ + --hash=sha256:99b14dbea2fdb563d8b5a57c9badfcd72083f6006caf8e126b491519c7d64ca8 \ + --hash=sha256:9c6a5c79b28003543db3ba67d1df336f253a87d3112dac3a51b94f7d48e4c0e1 \ + --hash=sha256:a19b794f8fe6569472ff77602437ec4430f9b2b9ec7a1105cfd2232f9ba355e6 \ + --hash=sha256:a306cdd2ad3a7d795d8e617a58c3a2ed0f76c8496fb7621b6cd514eb1532cae8 \ + --hash=sha256:a3dde6cac75e0b0902778978d3b1646ca9f438654395a362cb21d9ad34b24acf \ + --hash=sha256:a874f21f87c485310944b2b2734cd6d318765bcbb7515eead33af9641816506e \ + --hash=sha256:a983cca5ed1dd9a35e9e42ebf9f278d344603bfcb174ff99a5815f953925140a \ + --hash=sha256:aca48506a9c20f68ee61c87f2008f81f8ee99f8d7f0104bff3c47e2d148f89d9 \ + --hash=sha256:b2602177668f89b38b9f84b7b3435d0a72511ddef45dc14446811759b82235a1 \ + --hash=sha256:b3e5fe4538001bb82e2295b8d2a39356a84694c97cb73a566dc36328b9f83b40 \ + --hash=sha256:b6ca36c12a5120bad343eef193cc0122928c5c7466121da7c20f41160ba00ba2 \ + --hash=sha256:b89f4477d915ea43b4ceea6756f63f0288941b6443a2b28c69004fe07fde0d0d \ + --hash=sha256:b9a9d92f10772d2a181b5ca339dee066ab7d1c9a34ae2421b2a52556e719756f \ + --hash=sha256:c99462ffc538717b3e60151dfaf91125f637e801f5ab008f81c402f1dff0cd0f \ + --hash=sha256:cb92f9061657287eded380d7dc455bbf115430b3aa4741bdc662d02977e7d0af \ + --hash=sha256:cdee837710ef6b56ebd20245b83799fce40b265b3b406e51e8ccc5b85b9099b7 \ + --hash=sha256:cf10b7d58ae4a1f07fccbf4a0a956d705356fea05fb4c70608bb6fa81d103cda \ + --hash=sha256:d15687d7d7f40333bd8266f3814c591c2e2cd263fa2116e314f60d82086e353a \ + --hash=sha256:d5c28525c19f5bb1e09511669bb57353d22b94cf8b65f3a8d141c389a55dec95 \ + --hash=sha256:d5f916acf8afbcab6bacbb376ba7dc61f845367901ecd5e328fc4d4aef2fcab0 \ + --hash=sha256:dab03ed811ed1c71d700ed08bde8431cf429bbe59e423394f0f4055f1ca0ea60 \ + --hash=sha256:db453f2da3f59a348f514cfbfeb042393b68720787bbef2b4c6068ea362c8149 \ + --hash=sha256:de2a0645a923ba57c5527497daf8ec5df69c6eadf869e9cd46e86349146e5975 \ + --hash=sha256:dea7fcd62915fb150cdc373212141a30037e11b761fbced340e9db3379b892d4 \ + --hash=sha256:dfcbebdb3c4b6f739a91769aea5ed615023f3c88cb70df812849aef634c25fbe \ + --hash=sha256:dfcebb950aa7e667ec226a442722134539e77c575f6cfaa423f24371bb8d2e94 \ + --hash=sha256:e0641b506486f0b4cd1500a2a65740243e8670a2549bb02bc4556a83af84ae03 \ + --hash=sha256:e33b0834f1cf779aa839975f9d8755a7c2420510c0fa1e9fa0497de77cd35d2c \ + --hash=sha256:e4ace1e220b078c8e48e82c081e35002038657e4b37d403ce940fa679e57113b \ + --hash=sha256:e4cf2d5829f6963a5483ec01578ee76d329eb5caf330ecd05b3edd697e7d768a \ + --hash=sha256:e574de99d735b3fc8364cba9912c2bec2da78775eba95cbb225ef7dda6acea24 \ + --hash=sha256:e646c0e282e960345314f42f2cea5e0b5f56938c093541ea6dbf11aec2862391 \ + --hash=sha256:e8a5ac97ea521d7bde7621d86c30e86b798cdecd985723c4ed737a2aa9e77d0c \ + --hash=sha256:eedf97be7bc3dbc8addcef4142f4b4164066df0c6f36397ae4aaed3eb187d8ab \ + --hash=sha256:ef633add81832f4b56d3b4c9408b43d530dfca29e68fb1b797dcb861a2c734cd \ + --hash=sha256:f27207e8ca3e5e021e2402ba942e5b4c629718e665c81b8b306f3c8b1ddbb786 \ + --hash=sha256:f85f3843bdb1fe80e8c206fe6eed7a1caeae897e496542cee499c374a85c6e08 \ + --hash=sha256:f8e81e4b55930e5ffab4a68db1af431629cf2e4066dbdbfef65348b8ab804ea8 \ + --hash=sha256:f96ae96a060a8072ceff4cfde89d261837b4294a4f28b84a28765470d502ccc6 \ + --hash=sha256:fd9e98b408384989ea4ab60206b8e100d8687da18b5c813c11e92fd8212a98e0 \ + --hash=sha256:ffff855100bc066ff2cd3aa4a60bc9534661816b110f0243e59503ec2df38421 + # via pydantic +pysocks==1.7.1 \ + --hash=sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299 \ + --hash=sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 \ + --hash=sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0 + # via urllib3 +python-dotenv==1.0.0 \ + --hash=sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba \ + --hash=sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a + # via uvicorn +pyyaml==6.0.1 \ + --hash=sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5 \ + --hash=sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc \ + --hash=sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df \ + --hash=sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741 \ + --hash=sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206 \ + --hash=sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27 \ + --hash=sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595 \ + --hash=sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62 \ + --hash=sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98 \ + --hash=sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696 \ + --hash=sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290 \ + --hash=sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9 \ + --hash=sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d \ + --hash=sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6 \ + --hash=sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867 \ + --hash=sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47 \ + --hash=sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486 \ + --hash=sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6 \ + --hash=sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3 \ + --hash=sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007 \ + --hash=sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938 \ + --hash=sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0 \ + --hash=sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c \ + --hash=sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735 \ + --hash=sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d \ + --hash=sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28 \ + --hash=sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4 \ + --hash=sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba \ + --hash=sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8 \ + --hash=sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5 \ + --hash=sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd \ + --hash=sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3 \ + --hash=sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0 \ + --hash=sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515 \ + --hash=sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c \ + --hash=sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c \ + --hash=sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924 \ + --hash=sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34 \ + --hash=sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43 \ + --hash=sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859 \ + --hash=sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673 \ + --hash=sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54 \ + --hash=sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a \ + --hash=sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b \ + --hash=sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab \ + --hash=sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa \ + --hash=sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c \ + --hash=sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585 \ + --hash=sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d \ + --hash=sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f + # via uvicorn +redis==5.0.1 \ + --hash=sha256:0dab495cd5753069d3bc650a0dde8a8f9edde16fc5691b689a566eda58100d0f \ + --hash=sha256:ed4802971884ae19d640775ba3b03aa2e7bd5e8fb8dfaed2decce4d0fc48391f + # via -r requirements.in +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 + # via -r requirements.in +selenium==4.16.0 \ + --hash=sha256:aec71f4e6ed6cb3ec25c9c1b5ed56ae31b6da0a7f17474c7566d303f84e6219f \ + --hash=sha256:b2e987a445306151f7be0e6dfe2aa72a479c2ac6a91b9d5ef2d6dd4e49ad0435 + # via -r requirements.in +sniffio==1.3.0 \ + --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \ + --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384 + # via + # anyio + # trio +sortedcontainers==2.4.0 \ + --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ + --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 + # via trio +starlette==0.32.0.post1 \ + --hash=sha256:cd0cb10ddb49313f609cedfac62c8c12e56c7314b66d89bb077ba228bada1b09 \ + --hash=sha256:e54e2b7e2fb06dff9eac40133583f10dfa05913f5a85bf26f427c7a40a9a3d02 + # via fastapi +trio==0.23.2 \ + --hash=sha256:5a0b566fa5d50cf231cfd6b08f3b03aa4179ff004b8f3144059587039e2b26d3 \ + --hash=sha256:da1d35b9a2b17eb32cae2e763b16551f9aa6703634735024e32f325c9285069e + # via + # selenium + # trio-websocket +trio-websocket==0.11.1 \ + --hash=sha256:18c11793647703c158b1f6e62de638acada927344d534e3c7628eedcb746839f \ + --hash=sha256:520d046b0d030cf970b8b2b2e00c4c2245b3807853ecd44214acd33d74581638 + # via selenium +typing-extensions==4.9.0 \ + --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ + --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd + # via + # anyio + # fastapi + # pydantic + # pydantic-core + # starlette + # uvicorn +urllib3==2.1.0 \ + --hash=sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3 \ + --hash=sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54 + # via + # requests + # selenium +uvicorn==0.25.0 \ + --hash=sha256:6dddbad1d7ee0f5140aba5ec138ddc9612c5109399903828b4874c9937f009c2 \ + --hash=sha256:ce107f5d9bd02b4636001a77a4e74aab5e1e2b146868ebbad565237145af444c + # via + # -r requirements.in + # uvicorn +uvloop==0.19.0 \ + --hash=sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd \ + --hash=sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec \ + --hash=sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b \ + --hash=sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc \ + --hash=sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797 \ + --hash=sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5 \ + --hash=sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2 \ + --hash=sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d \ + --hash=sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be \ + --hash=sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd \ + --hash=sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12 \ + --hash=sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17 \ + --hash=sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef \ + --hash=sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24 \ + --hash=sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428 \ + --hash=sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1 \ + --hash=sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849 \ + --hash=sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593 \ + --hash=sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd \ + --hash=sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67 \ + --hash=sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6 \ + --hash=sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3 \ + --hash=sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd \ + --hash=sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8 \ + --hash=sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7 \ + --hash=sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533 \ + --hash=sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957 \ + --hash=sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650 \ + --hash=sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e \ + --hash=sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7 \ + --hash=sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256 + # via uvicorn +watchfiles==0.21.0 \ + --hash=sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc \ + --hash=sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365 \ + --hash=sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0 \ + --hash=sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e \ + --hash=sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124 \ + --hash=sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c \ + --hash=sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317 \ + --hash=sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094 \ + --hash=sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7 \ + --hash=sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235 \ + --hash=sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c \ + --hash=sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c \ + --hash=sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c \ + --hash=sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235 \ + --hash=sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293 \ + --hash=sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa \ + --hash=sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef \ + --hash=sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19 \ + --hash=sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8 \ + --hash=sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d \ + --hash=sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915 \ + --hash=sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429 \ + --hash=sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097 \ + --hash=sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe \ + --hash=sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0 \ + --hash=sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d \ + --hash=sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99 \ + --hash=sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1 \ + --hash=sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a \ + --hash=sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895 \ + --hash=sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94 \ + --hash=sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562 \ + --hash=sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab \ + --hash=sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360 \ + --hash=sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1 \ + --hash=sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7 \ + --hash=sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f \ + --hash=sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03 \ + --hash=sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01 \ + --hash=sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58 \ + --hash=sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052 \ + --hash=sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e \ + --hash=sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765 \ + --hash=sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6 \ + --hash=sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137 \ + --hash=sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85 \ + --hash=sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca \ + --hash=sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f \ + --hash=sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214 \ + --hash=sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7 \ + --hash=sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7 \ + --hash=sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3 \ + --hash=sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b \ + --hash=sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7 \ + --hash=sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6 \ + --hash=sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994 \ + --hash=sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9 \ + --hash=sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec \ + --hash=sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128 \ + --hash=sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c \ + --hash=sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2 \ + --hash=sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078 \ + --hash=sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3 \ + --hash=sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e \ + --hash=sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a \ + --hash=sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6 \ + --hash=sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49 \ + --hash=sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b \ + --hash=sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28 \ + --hash=sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9 \ + --hash=sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586 \ + --hash=sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400 \ + --hash=sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165 \ + --hash=sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303 \ + --hash=sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d + # via uvicorn +websockets==12.0 \ + --hash=sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b \ + --hash=sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6 \ + --hash=sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df \ + --hash=sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b \ + --hash=sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205 \ + --hash=sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892 \ + --hash=sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53 \ + --hash=sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2 \ + --hash=sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed \ + --hash=sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c \ + --hash=sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd \ + --hash=sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b \ + --hash=sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931 \ + --hash=sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30 \ + --hash=sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370 \ + --hash=sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be \ + --hash=sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec \ + --hash=sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf \ + --hash=sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62 \ + --hash=sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b \ + --hash=sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402 \ + --hash=sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f \ + --hash=sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123 \ + --hash=sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9 \ + --hash=sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603 \ + --hash=sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45 \ + --hash=sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558 \ + --hash=sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4 \ + --hash=sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438 \ + --hash=sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137 \ + --hash=sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480 \ + --hash=sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447 \ + --hash=sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8 \ + --hash=sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04 \ + --hash=sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c \ + --hash=sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb \ + --hash=sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967 \ + --hash=sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b \ + --hash=sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d \ + --hash=sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def \ + --hash=sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c \ + --hash=sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92 \ + --hash=sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2 \ + --hash=sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113 \ + --hash=sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b \ + --hash=sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28 \ + --hash=sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7 \ + --hash=sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d \ + --hash=sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f \ + --hash=sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468 \ + --hash=sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8 \ + --hash=sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae \ + --hash=sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611 \ + --hash=sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d \ + --hash=sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9 \ + --hash=sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca \ + --hash=sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f \ + --hash=sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2 \ + --hash=sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077 \ + --hash=sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2 \ + --hash=sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6 \ + --hash=sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374 \ + --hash=sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc \ + --hash=sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e \ + --hash=sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53 \ + --hash=sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399 \ + --hash=sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547 \ + --hash=sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3 \ + --hash=sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870 \ + --hash=sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5 \ + --hash=sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8 \ + --hash=sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7 + # via uvicorn +wsproto==1.2.0 \ + --hash=sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065 \ + --hash=sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736 + # via trio-websocket diff --git a/tests/core/redis-sentinel/test-todo.sh b/tests/core/redis-sentinel/test-todo.sh new file mode 100755 index 000000000..4d3695f72 --- /dev/null +++ b/tests/core/redis-sentinel/test-todo.sh @@ -0,0 +1,327 @@ +#!/bin/bash + +integration=$1 + +if [ -z "$integration" ] ; then + echo "🧰 Please provide an integration name as argument ❌" + exit 1 +elif [ "$integration" != "docker" ] && [ "$integration" != "linux" ] ; then + echo "🧰 Integration \"$integration\" is not supported ❌" + exit 1 +fi + +echo "🧰 Building redis stack for integration \"$integration\" ..." + +# Starting stack +if [ "$integration" == "docker" ] ; then + docker compose pull bw-docker + # shellcheck disable=SC2181 + if [ $? -ne 0 ] ; then + echo "🧰 Pull failed ❌" + exit 1 + fi + + echo "🧰 Building custom redis image ..." + docker compose build bw-redis + # shellcheck disable=SC2181 + if [ $? -ne 0 ] ; then + echo "🧰 Build failed ❌" + exit 1 + fi + + echo "🧰 Building tests images ..." + docker compose -f docker-compose.test.yml build + # shellcheck disable=SC2181 + if [ $? -ne 0 ] ; then + echo "🧰 Build failed ❌" + exit 1 + fi +else + sudo systemctl stop bunkerweb + sudo sed -i "/^USE_BLACKLIST=/d" /etc/bunkerweb/variables.env + echo "BLACKLIST_IP_URLS=" | sudo tee -a /etc/bunkerweb/variables.env + echo "SESSIONS_NAME=test" | sudo tee -a /etc/bunkerweb/variables.env + echo "USE_REVERSE_SCAN=no" | sudo tee -a /etc/bunkerweb/variables.env + echo "REVERSE_SCAN_PORTS=80" | sudo tee -a /etc/bunkerweb/variables.env + echo "USE_ANTIBOT=no" | sudo tee -a /etc/bunkerweb/variables.env + echo "USE_GREYLIST=yes" | sudo tee -a /etc/bunkerweb/variables.env + echo "GREYLIST_IP=0.0.0.0/0" | sudo tee -a /etc/bunkerweb/variables.env + echo "WHITELIST_COUNTRY=AU" | sudo tee -a /etc/bunkerweb/variables.env + + echo "🧰 Installing Redis ..." + sudo apt install --no-install-recommends -y redis + redis-server --daemonize yes + # shellcheck disable=SC2181 + if [ $? -ne 0 ] ; then + echo "🧰 Redis start failed ❌" + exit 1 + fi + echo "🧰 Redis installed βœ…" + + echo "🧰 Generating redis certs ..." + mkdir tls + openssl genrsa -out tls/ca.key 4096 + openssl req \ + -x509 -new -nodes -sha256 \ + -key tls/ca.key \ + -days 365 \ + -subj /CN=bw-redis/ \ + -out tls/ca.crt + openssl req \ + -x509 -nodes -newkey rsa:4096 \ + -keyout tls/redis.key \ + -out tls/redis.pem \ + -days 365 \ + -subj /CN=bw-redis/ + sudo chmod -R 777 tls + echo "🧰 Certs generated βœ…" + + echo "USE_REDIS=yes" | sudo tee -a /etc/bunkerweb/variables.env + echo "REDIS_HOST=127.0.0.1" | sudo tee -a /etc/bunkerweb/variables.env + echo "REDIS_PORT=6379" | sudo tee -a /etc/bunkerweb/variables.env + echo "REDIS_DATABASE=0" | sudo tee -a /etc/bunkerweb/variables.env + echo "REDIS_SSL=no" | sudo tee -a /etc/bunkerweb/variables.env + sudo touch /var/www/html/index.html + export TEST_TYPE="linux" + sudo cp ready.conf /etc/bunkerweb/configs/server-http +fi + +manual=0 +end=0 +cleanup_stack () { + exit_code=$? + if [[ $end -eq 1 || $exit_code = 1 ]] || [[ $end -eq 0 && $exit_code = 0 ]] && [ $manual = 0 ] ; then + if [ "$integration" == "docker" ] ; then + find . -type f -name 'docker-compose.*' -exec sed -i 's@USE_REVERSE_SCAN: "yes"@USE_REVERSE_SCAN: "no"@' {} \; + find . -type f -name 'docker-compose.*' -exec sed -i 's@USE_ANTIBOT: "cookie"@USE_ANTIBOT: "no"@' {} \; + find . -type f -name 'docker-compose.*' -exec sed -i 's@REDIS_PORT: "[0-9]*"@REDIS_PORT: "6379"@' {} \; + find . -type f -name 'docker-compose.*' -exec sed -i 's@REDIS_DATABASE: "1"@REDIS_DATABASE: "0"@' {} \; + find . -type f -name 'docker-compose.*' -exec sed -i 's@REDIS_SSL: "yes"@REDIS_SSL: "no"@' {} \; + else + sudo rm -rf tls + sudo sed -i 's@USE_REVERSE_SCAN=.*$@USE_REVERSE_SCAN=no@' /etc/bunkerweb/variables.env + sudo sed -i 's@USE_ANTIBOT=.*$@USE_ANTIBOT=no@' /etc/bunkerweb/variables.env + sudo sed -i 's@REDIS_PORT=.*$@REDIS_PORT=6379@' /etc/bunkerweb/variables.env + sudo sed -i 's@REDIS_DATABASE=.*$@REDIS_DATABASE=0@' /etc/bunkerweb/variables.env + sudo sed -i 's@REDIS_SSL=.*$@REDIS_SSL=no@' /etc/bunkerweb/variables.env + unset USE_REVERSE_SCAN + unset USE_ANTIBOT + unset REDIS_PORT + unset REDIS_DATABASE + unset REDIS_SSL + sudo killall redis-server + fi + if [[ $end -eq 1 && $exit_code = 0 ]] ; then + return + fi + fi + + echo "🧰 Cleaning up current stack ..." + + if [ "$integration" == "docker" ] ; then + docker compose down -v --remove-orphans + else + sudo systemctl stop bunkerweb + sudo truncate -s 0 /var/log/bunkerweb/error.log + fi + + # shellcheck disable=SC2181 + if [ $? -ne 0 ] ; then + echo "🧰 Cleanup failed ❌" + exit 1 + fi + + echo "🧰 Cleaning up current stack done βœ…" +} + +# Cleanup stack on exit +trap cleanup_stack EXIT + +for test in "activated" "reverse_scan" "antibot" "tweaked" +do + if [ "$test" = "activated" ] ; then + echo "🧰 Running tests with redis with default values ..." + elif [ "$test" = "reverse_scan" ] ; then + echo "🧰 Running tests with redis with reverse scan activated ..." + if [ "$integration" == "docker" ] ; then + find . -type f -name 'docker-compose.*' -exec sed -i 's@USE_REVERSE_SCAN: "no"@USE_REVERSE_SCAN: "yes"@' {} \; + else + sudo sed -i 's@USE_REVERSE_SCAN=.*$@USE_REVERSE_SCAN=yes@' /etc/bunkerweb/variables.env + export USE_REVERSE_SCAN="yes" + fi + elif [ "$test" = "antibot" ] ; then + echo "🧰 Running tests with redis with antibot cookie activated ..." + if [ "$integration" == "docker" ] ; then + find . -type f -name 'docker-compose.*' -exec sed -i 's@USE_REVERSE_SCAN: "yes"@USE_REVERSE_SCAN: "no"@' {} \; + find . -type f -name 'docker-compose.*' -exec sed -i 's@USE_ANTIBOT: "no"@USE_ANTIBOT: "cookie"@' {} \; + else + sudo sed -i 's@USE_REVERSE_SCAN=.*$@USE_REVERSE_SCAN=no@' /etc/bunkerweb/variables.env + sudo sed -i 's@USE_ANTIBOT=.*$@USE_ANTIBOT=cookie@' /etc/bunkerweb/variables.env + export USE_REVERSE_SCAN="no" + export USE_ANTIBOT="cookie" + fi + elif [ "$test" = "tweaked" ] ; then + echo "🧰 Running tests with redis' settings tweaked ..." + if [ "$integration" == "docker" ] ; then + find . -type f -name 'docker-compose.*' -exec sed -i 's@USE_ANTIBOT: "cookie"@USE_ANTIBOT: "no"@' {} \; + find . -type f -name 'docker-compose.*' -exec sed -i 's@REDIS_PORT: "[0-9]*"@REDIS_PORT: "6380"@' {} \; + find . -type f -name 'docker-compose.*' -exec sed -i 's@REDIS_DATABASE: "0"@REDIS_DATABASE: "1"@' {} \; + find . -type f -name 'docker-compose.*' -exec sed -i 's@REDIS_SSL: "no"@REDIS_SSL: "yes"@' {} \; + else + sudo sed -i 's@USE_ANTIBOT=.*$@USE_ANTIBOT=no@' /etc/bunkerweb/variables.env + sudo sed -i 's@REDIS_PORT=.*$@REDIS_PORT=6380@' /etc/bunkerweb/variables.env + sudo sed -i 's@REDIS_DATABASE=.*$@REDIS_DATABASE=1@' /etc/bunkerweb/variables.env + sudo sed -i 's@REDIS_SSL=.*$@REDIS_SSL=yes@' /etc/bunkerweb/variables.env + unset USE_ANTIBOT + export REDIS_PORT="6380" + export REDIS_DATABASE="1" + export REDIS_SSL="yes" + + echo "🧰 Stopping redis ..." + sudo killall redis-server + # shellcheck disable=SC2181 + if [ $? -ne 0 ] ; then + echo "🧰 Redis stop failed ❌" + exit 1 + fi + echo "🧰 Redis stopped βœ…" + echo "🧰 Starting redis with tweaked settings ..." + redis-server --tls-port 6380 --port 0 --tls-cert-file tls/redis.pem --tls-key-file tls/redis.key --tls-ca-cert-file tls/ca.crt --tls-auth-clients no --daemonize yes + # shellcheck disable=SC2181 + if [ $? -ne 0 ] ; then + echo "🧰 Redis start failed ❌" + exit 1 + fi + echo "🧰 Redis started βœ…" + fi + fi + + echo "🧰 Starting stack ..." + if [ "$integration" == "docker" ] ; then + docker compose up -d + # shellcheck disable=SC2181 + if [ $? -ne 0 ] ; then + echo "🧰 Up failed, retrying ... ⚠️" + manual=1 + cleanup_stack + manual=0 + docker compose up -d + # shellcheck disable=SC2181 + if [ $? -ne 0 ] ; then + echo "🧰 Up failed ❌" + exit 1 + fi + fi + else + sudo systemctl start bunkerweb + # shellcheck disable=SC2181 + if [ $? -ne 0 ] ; then + echo "🧰 Start failed ❌" + exit 1 + fi + fi + + # Check if stack is healthy + echo "🧰 Waiting for stack to be healthy ..." + i=0 + if [ "$integration" == "docker" ] ; then + while [ $i -lt 120 ] ; do + containers=("redis-bw-1" "redis-bw-scheduler-1") + healthy="true" + for container in "${containers[@]}" ; do + check="$(docker inspect --format "{{json .State.Health }}" "$container" | grep "healthy")" + if [ "$check" = "" ] ; then + healthy="false" + break + fi + done + if [ "$healthy" = "true" ] ; then + echo "🧰 Docker stack is healthy βœ…" + break + fi + sleep 1 + i=$((i+1)) + done + if [ $i -ge 120 ] ; then + docker compose logs + echo "🧰 Docker stack is not healthy ❌" + exit 1 + fi + else + healthy="false" + retries=0 + while [[ $healthy = "false" && $retries -lt 5 ]] ; do + while [ $i -lt 120 ] ; do + if sudo grep -q "BunkerWeb is ready" "/var/log/bunkerweb/error.log" ; then + echo "🧰 Linux stack is healthy βœ…" + break + fi + sleep 1 + i=$((i+1)) + done + if [ $i -ge 120 ] ; then + sudo journalctl -u bunkerweb --no-pager + echo "πŸ›‘οΈ Showing BunkerWeb error logs ..." + sudo cat /var/log/bunkerweb/error.log + echo "πŸ›‘οΈ Showing BunkerWeb access logs ..." + sudo cat /var/log/bunkerweb/access.log + echo "🧰 Linux stack is not healthy ❌" + exit 1 + fi + + if sudo journalctl -u bunkerweb --no-pager | grep -q "SYSTEMCTL - ❌ " ; then + echo "🧰 ⚠ Linux stack got an issue, restarting ..." + sudo journalctl --rotate + sudo journalctl --vacuum-time=1s + manual=1 + cleanup_stack + manual=0 + sudo systemctl start bunkerweb + retries=$((retries+1)) + else + healthy="true" + fi + done + if [ "$retries" -ge 5 ] ; then + echo "🧰 Linux stack could not be healthy ❌" + exit 1 + fi + fi + + # Start tests + + if [ "$integration" == "docker" ] ; then + docker compose -f docker-compose.test.yml up --abort-on-container-exit --exit-code-from tests + else + python3 main.py + fi + + # shellcheck disable=SC2181 + if [ $? -ne 0 ] ; then + echo "🧰 Test \"$test\" failed ❌" + echo "πŸ›‘οΈ Showing BunkerWeb and BunkerWeb Scheduler logs ..." + if [ "$integration" == "docker" ] ; then + docker compose logs bw bw-scheduler + else + sudo journalctl -u bunkerweb --no-pager + echo "πŸ›‘οΈ Showing BunkerWeb error logs ..." + sudo cat /var/log/bunkerweb/error.log + echo "πŸ›‘οΈ Showing BunkerWeb access logs ..." + sudo cat /var/log/bunkerweb/access.log + echo "πŸ›‘οΈ Showing Geckodriver logs ..." + sudo cat geckodriver.log + fi + exit 1 + else + echo "🧰 Test \"$test\" succeeded βœ…" + fi + + manual=1 + cleanup_stack + manual=0 + + echo " " +done + +end=1 +echo "🧰 Tests are done ! βœ…" From 379cf17e765c04905006a4388d496360e6266cde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Tue, 2 Jan 2024 11:03:12 +0000 Subject: [PATCH 093/154] Update tests ui linux workflow file to have the right BunkerWeb config --- .github/workflows/tests-ui-linux.yml | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/.github/workflows/tests-ui-linux.yml b/.github/workflows/tests-ui-linux.yml index c6e7280cc..d1fa6dfee 100644 --- a/.github/workflows/tests-ui-linux.yml +++ b/.github/workflows/tests-ui-linux.yml @@ -72,28 +72,20 @@ jobs: echo "127.0.0.1 www.example.com" | sudo tee -a /etc/hosts echo "127.0.0.1 app1.example.com" | sudo tee -a /etc/hosts # BunkerWeb - echo "SERVER_NAME=www.example.com" | sudo tee /etc/bunkerweb/variables.env + echo "SERVER_NAME=" | sudo tee /etc/bunkerweb/variables.env echo "HTTP_PORT=80" | sudo tee -a /etc/bunkerweb/variables.env - echo "HTTPS_PORT=443" | sudo tee -a /etc/bunkerweb/variables.env echo 'DNS_RESOLVERS=9.9.9.9 8.8.8.8 8.8.4.4' | sudo tee -a /etc/bunkerweb/variables.env echo 'API_LISTEN_IP=127.0.0.1' | sudo tee -a /etc/bunkerweb/variables.env echo "MULTISITE=yes" | sudo tee -a /etc/bunkerweb/variables.env echo "LOG_LEVEL=info" | sudo tee -a /etc/bunkerweb/variables.env echo "USE_BUNKERNET=no" | sudo tee -a /etc/bunkerweb/variables.env echo "USE_BLACKLIST=no" | sudo tee -a /etc/bunkerweb/variables.env + echo "SEND_ANONYMOUS_REPORT=no" | sudo tee -a /etc/bunkerweb/variables.env echo "DISABLE_DEFAULT_SERVER=yes" | sudo tee -a /etc/bunkerweb/variables.env echo "USE_CLIENT_CACHE=yes" | sudo tee -a /etc/bunkerweb/variables.env echo "USE_GZIP=yes" | sudo tee -a /etc/bunkerweb/variables.env echo "DATASTORE_MEMORY_SIZE=384m" | sudo tee -a /etc/bunkerweb/variables.env - echo "www.example.com_USE_UI=yes" | sudo tee -a /etc/bunkerweb/variables.env - echo "www.example.com_SERVE_FILES=no" | sudo tee -a /etc/bunkerweb/variables.env - echo "www.example.com_USE_REVERSE_PROXY=yes" | sudo tee -a /etc/bunkerweb/variables.env - echo "www.example.com_REVERSE_PROXY_URL=/admin" | sudo tee -a /etc/bunkerweb/variables.env - echo "www.example.com_REVERSE_PROXY_HOST=http://127.0.0.1:7000" | sudo tee -a /etc/bunkerweb/variables.env - echo "www.example.com_INTERCEPTED_ERROR_CODES=400 405 413 429 500 501 502 503 504" | sudo tee -a /etc/bunkerweb/variables.env - - echo "ADMIN_USERNAME=admin" | sudo tee /etc/bunkerweb/ui.env - echo "ADMIN_PASSWORD=S\$cr3tP@ssw0rd" | sudo tee -a /etc/bunkerweb/ui.env + echo "UI_HOST=http://127.0.0.1:7000" | sudo tee -a /etc/bunkerweb/variables.env sudo chown nginx:nginx /etc/bunkerweb/variables.env /etc/bunkerweb/ui.env sudo chmod 777 /etc/bunkerweb/variables.env /etc/bunkerweb/ui.env From 9356509007d79b91ef6030c83ad0d6a258722018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9ophile=20Diot?= Date: Tue, 2 Jan 2024 11:04:16 +0000 Subject: [PATCH 094/154] Update cached mmdb files --- src/bw/misc/asn.mmdb | Bin 8544946 -> 8547143 bytes src/bw/misc/country.mmdb | Bin 7811137 -> 7766977 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/bw/misc/asn.mmdb b/src/bw/misc/asn.mmdb index abb1d410f959f56a250d2924d5152e1f43dc65bc..dd1ec81f94d3fd232efea35594856d4d6e4747bf 100644 GIT binary patch literal 8547143 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

TrClg5Miq-feX(@H_BjE&sW*UiWkjNlW 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 z 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 z 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%0Dd-KgD#FS(Y!CrX1*>V;B2lzNl&q4s6Y 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%0Af85R}t%p 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%0ALg{VpM4Pa zp_KHW@xlvuVQT3S*cV|Rg-tWqG1w+hy4KdBiIi~ha|%0JRAExl+&m~^^Hn8isCCj*>}(U&hsoxdhEUbG6F%y4qS$pR-QFZw2& ztZ=gNqD?5k$qpw65oy6Mgt1?CMk<$rlN(Ml90^X87i|eAA~1aZLxjeLC@98@{sSjP z+Fl6dDG7-*+J>VEiJqooz%hw)+EFAlLJFyZI09XPp1`<3UtmB;S>Tiq(UNc~ z3PPb3;q{6A5;Ba1o^Ku%eTY#Fx;k=S2 zc@<7A;=JeyA%7jt0XVhc^np_c&ew42!ub@=8*m!JsR!rn@S@#$QyQqlsW0#?LTL*P zgLin*Cve_{^FA-;!g-G{?5vPCNN_kG!1<6DYe-j;;dpaCg7Yz)#&8a+LxEB_sI@DVSuxnqJr#|HdAf)g*7Z!9?pJgWOGs0LAd$h9D;KV z&S5yG;2eQ-9L`ZV$6}rOaV-zmN^n{-=bV6Zl54%CZk@QcIa;k4oYQcq*UrE>%e4z! z&&2h7Tqon_;ar77)w=}eB9+4RaI)q4PjD{7xk7}3kPM1Vr4fD|t_0@>oJVkO!g&bi z7Mwe9ZYSL;O=^U2?!vhb=N{Kras4PEoCm@}_`-tgPq>i;=P?{2mNb$~J%yVC&NEK$ z5S{06GYaw|L^qv42uu$*LukQxBY|);33+CLSp;SkmZkFZdTX2gd2sfK^vlCneE?HB#IVO_s z+eo_F(P5oAJ)(3CxMks*aLd58;0ADQxE@>wu9*7Fz0%2KZr+6(hwF1I5?0SDDy{hk zZYtc8oE|~AB?v`rOTi8MMVj~|R!xpps3ASg&#nG&%fT(rt!dGp>%y%N+qDXAMYxqY z-PyU72!&1JRT3O-HMn))R)<>??n`iMzz@=~vZbP^O;C=v?+WsNjuRy!&yI;cnI8tFO+(wad z+u%~4ekRB#a6ctNAzHNv+|S`Qh1=vmiO~6il8A7p33vX6+YIjSaGS&ZHrnJe+^;!J zhVD1qnJ*os5?g?F?{{0mZ4I|o^phSG;C>g9W|iT#f!hvlTZ(cz(qA-!`#szrxN|;M zVH0=3T?UtW>KC};y31`3w*zTL+g2rIvLL$eSGd207FGc}yBIJ$y~zjtloMdOQ*C1h~`T5}5*b65Pqu_Ap~HNu*AN zJ1x8^@Jb~Oni<|zxijF-3O@jJXC_{nNOvjMY`PN^6_^WmDcpH*7r~v+y|>{m5V(*q zsegV#5nT*-NrICQZg?liy+*?AE8y;cyAtkJxO8Z&hr2rZ(^0r<;I5VKEQ@}7l@RVa z5(=^b?k2b!DayTmlnQrqc>UmRA>`gf!NY+EcRLL*?#&T=XVOXPJL;ERaCgJqBW-FW zqI(I`_GLOH^YHC(<=?@>94k z;6CH=>lENV=YCf1mkYUnxLS{grGn%o;+es~2Uwfls_SX`dLD+Eu0R~TL~ zctzk9l}047RajlVNXl~no(a#A#^jHH zhsH-OhUdU@rCV#GB|hZAn>_dwUL0O+cs{&}@B(-h;HAPV53dBgQt(PjOVfp6$$ogH z;gur}uZ+O5LOvmpN+XsBKT3Oa9{dHb61>;pRhF(-hF1mNEAXnqdl_E%v<+T$c;Nz3 z9t`*o;njdwlcGYhg9kg{y-FNjErG9*gr}xU;j^S}OW@UkR}WrYcyI93`aHEsq;6H7 z`XjtI;nfeH)u#@E_f~j*^xl>Zt)c+$9f9w{qXF@Tk)pORIi>_X(jOF;lN z>RHi*=J5W6_cgqqBlP&r`v%^(@W^Hhc&(!yY5cT=7cL4C{5wLCs|~#G;kBixkhe?7 z)6{+x!k-dC!P~>@z*8TIyuXMUfI9Toa6<5Y6ZkvL3Gn{-cV_UYvpP!aw}g|w_ct$* z5#B$PmjW+A!>lvBOYpkD>kh9gyl&xsr`J0~8LH|GU<`X8O@D{?O<7iQ&&i52V4VU~6Uj}cD$g*7E3V16M zdEwC@T%9l|a;;4m6l&|?Z4qPxyp1At6TI-@&;MB73U3FzaHX73*q%s*w-erOk#`qK z1ldDKL8$G6cY+2XJUV`9LO2ZXATOyeQ2k(MVIG-lDNH)V^9~N;L-cxv2;N5|Dm6wdeyT(h_fp;C=4I;ec=kRU{$t_Xa z+k_N^LMNpi6=0QxKBi+hD9Krig<~H1o4t-bqH?(5HEvxMa0V@UIFoPLQ@fojzc-4eLqK$}GNBqsCTdfhNE_fO7*Q2d2AYKFUnu5F{@Ku4e5PvOv z&fn@n0uiq*&C*7ttmHn+p6w z;FkiwLcE#uB%9#P1%8eAHzYy)+k`wVwWUaHCGb0etp&Cb*cS12X`0^)$q$JCDD3={ zCjXh_LPFK+h4?RscSZbH#Q#E^I{go6!AQh^CzMvz7W~gN(h>1aLh?6B5dVjeml}w8 z=TJG!6)pi4ga%$uLAoQ}BTN;h((Lp`d>G<=5Fa3P`U>nPus<0TB!PnvA0ncI|Fsa7 zGL$4?lqL`&bmonZhGkB?kLRG? z3lTqz_#(u2A-))K8azu7UqNb!FGYMA;>$&rO9@1LB`r6PP_A=Vd;GpA&wrNR@D&D?(a)2Xnh$;<`1#=%NJvDX1=CUs!!MGSrD#G(2){Ud6TS?e+7h0o zg-}f>z}Mj$iCk$COPICcyMj0gx!_(x6TT0>B>aG)LY^wHL|SSo5iLz9NSQRt<=|I? zU!HzZ0lxzL%J3_~uOv-BMXT?mj=Ol7W$>%OuS)A%Vn@G|E|e3R)#2}h{}TL(@Lz`i z3j7-IYew63OFF$b^3q&h<}mzM;eP?YmUOoW{MX>q0{++GzX`v#G-EgXIs)qw3PPpV z3powxe+{P9(vn_5Yv3e~+T@-xt^bej`B|3j9FehXOwm_%UI^Ed0jsKMAA% zPx6`2`CMQVflU*s@V}G}{{sIj_~NmQ-;9@e4!=44ui<|WpT=Y>iMF%$zlGlde#@A3 zIi~K5IN}Md{~i3c@LR)g!^`I3W#dx!t@LyYemh>aIxpLvm+cGx2P!B^7pwH|MgJ$# zp*L$ur>KkD!yf>@1N@Fj*U!VJI{XU%x9Ef=)C%~&!~YBZAMpPS7ZT7dg#{!0!#eC;VQa zohfz05SG#>+OrZbdo~n?uI`s~tsDIQ(O3swE;Bs~f1XUAaOHi70P` z4|)6v(H={9xmoZh!CwM@GW;ph-j?)Y0{&F^v!#E2foZ08>N@-zR2(nAHfbUq`!}VTJK^7=rw8!ETLAdt z6EOcS{CnZi7fSB)@&^QYh+rE0M+j&QKh^4SBu`V&FGu~S@Sh9*Oj`AxwD2h}{}}!Y z1nCe!TF{y#Bu9{*NVGr%K}G~k5M)A75%brEnvY1TUk@*>DbB#hGe zz2r><1rQWQP!K^OUZIt+Q7z3gbogVhD=!3O9Mh+`M8SN>LE#2vh`GH2*VR z@g-jI(-`e_5Kuko%|vemCITxq?pp-m#Xkav){Tct&FR?hu>gUGAdVn4T$&R20s~&L zgCHdcdBskGmqPFsg3<^oBPfHQtTeq6uh^GYoP?kpg7OHcr4@L^O%y~al=>g9g5V_t zRe8nB2&ze&pCYIpwysiUUWuCgGOt9&YapnNpeBM^2wp+(Dz8+JS87UX(U%t@cn!hp zywcCS(uCOFH+ZE*2}&P31@!7m8DK=3_+FA;pjE00gQ*&RVMUYXq6 z96>7tUnBUISH6Vc8$w~H1rZ@>Nl`(*6Y|yw+9GI^P)pNkmxvZy3f`LMTd^ISxXElPs2!`;gCrK#ej}TDa;k;T(xFELs zSYD0B#z+K{5sX4WgKac|anUB!(lH3e5}_bU8INE>?6>T^8o7NUVS@8&zwv4`TBabF z%BvmZ)z0v0Pk42PU^)WwjF|res?0nDvk=S)@2Y~?|K39da}z`e=Z9R}TZI=kp{p06 zL?Hx=kxJdP1gUhGFGX+{!7>DE5zrW09c@qEUV&gGuWnL6u!=BJSCQt^uw28dSLM}T zN3agTDFo~3K!RrNwQ8a9>Dhzu({hf)fZ1A~+)Chs5wW91fM?fmg{|MA}0bzDEeIBe)U1N(lK)fwu(S7I=qHlztDX*%91FY9<5^r2TY!Jw$3c zUY-2#NZ?}xPY^sq@RXty=wb=Ma|AEKC*E}7Brw!Wg~0Sk&5+PUYDQ8Z9!dHdshN?Q zh2A5CuM$$T3d}~xtDi$^4y4BD780pBk(vwtN7i{jO-;Pt-z(Uaec$E90i-AbUlj|Q zY|6H5$u7P3-h1!8sVIU<7Z4CEsMxSKEGQ_VVnIPvP(MNBJq`4~=~AA&k0_uj|A3A9)dZF^o$@P}hTTX{axwb2*GFU>Gp!>xXW1*(=Gb zgvXx8F-#b-APK{QVF#LFE{s7i;xO7O|5_Lc7)cmSV5DH=VWeSXVCeZDJ#UlYM3A9p zfnabdSY~MqA4XA6*BFH$3`PSOjp#HCoyNzC>#(LUTEb`sqXmrSIzZNQ#tSQNB}o{q z10P14&~FE$Cye$mdg!l!(E&zB7~NpVChG#DvzU6(WxF2NOzNMg;*_{=2x0Vs(O>y% zVe}^Z!01cSPr{V{6pQEs7L0*()>03KF&f5@=vj?m423ZQhU{s>mH&$>REu_N9QnB# zjFB)#sX|H>`bSS)Qt4FLYGdR)N>@^t3S%6M@$$P#pH>+YU_1q5B8)XKCc#*&3ds7J7=*ZF$ zbZ&rg6O6eqZiF#U993*bY61CCU@TzRd{rDyu@J^0HX%tJ31bP2rK)(7DoSr}QN?#) zEQ7HU#`4mm()ktStwLGk!!o&wTn*#4<30>o=Xb)m9mXB1_`PaSUNxw!8pzHgANfAj zKz4?8Fz!|j`Y3sV-nfUnmt3#cp*HV_@tA5L)jj~@K^PCic&O~3*I;ZAss^tJnS4Yv zj7I}UHINQJ&W-p)begRBC!^EaQ9KRf3mDJ9*bYO+f7v%S!gv9OtnKGjgFjS5OE#Zs zDBpz_VQf+j2daiMqH7)1@Cg_%!;mI6!`Px4ZdVNtsYb!K`&AfQRilP7#;QiLhe+SH z!FVIOY7dOph5EMq4-||yg{qNkthZo%1mkTOJ7Gva-)BGHg|S05TBRR0G4wF28f{dK zK2(kVfUyh4Zq+yn;{(;Wu4;UxYAoL-Jq4s1_lNN@jQudAtxs6bUe$O;w9@-9K2?on z2iT_?uaO1DXR7fQiqByjP>tn*-^Hqlp_&w6d!CZ_;0GoF4aV;l95*Qk;uQd!Z;)+ z127J&rZHJy{2n=2p5jj!f2pP&VH^>vrlVl|4dWlxbiQi(jB5HpWS^|(e_>XDc@oUC zU;^eDFi%!Ze}!2N=BbcNUFIoetBzEBNq>bSFI0hf8qCw>aiOxmwyI|J^do_LK7)B? zWZrhY_nK$JJV!Olt7h|5v)fg(r(i~4R)krin!T=?eG0Qwe%-)~>fboBVw)X;Sq8Hb z%=2KL3$wCbx2Dor&FjLH=BkPalB#(cW;K}AqcQ!1BJg3>gt-Lf`7ke#$%N7x@2Tdk zVb+3Nm^0hMtPRtJSqJ82Fr~svU`qWL!@Q`Z_G)=1sO*kb(JMZaJql($n3u{gan*c; zOcko;vtV8h^GcXkz^os6WrS*eqiVi3@}xLd!E{Q}vStjJCQJ)vEV5ePC?$kxYc2oY zD4erho)3ZtFO7%my&qz-$P!wQ5lcvk}b3Fk436>;$t3*%W3o9ju+^WD8;FvP+Mg{NA`8tVXa0?dvu2f>sYdco`rvrBYk4b@__YB3LHSD4*k_JG-4 zCOTx%cRJl%A7)Q|7I9x+n7v{4Q7!IQEjGdIt6KaGvmeX>F#D^Pr%N}4FggA+33D*a zkuZnA93f)@%%Q5KY`bCPaG?|_Ij?)g!6(BU1#@gk`Q|W3!<3glREdswCHlY9N;hqV zIZm~dZ82Ub@h~UCl&(&KIRoZom{X!dZcr^-!{kJhIgK&Xg|euY@^NOuydLH()p88X zt6|QDc@4~KBj1mZ`$_cj{Ro)XF*x9DFz3LOI-gQ4-+(z+ez420MVL3jTnO_fm^aJw zcWh<8YPk>Q0+u~YN4D=`)v9LMiXGZ)<-%MFa~sTCV7>}-8O&E;E{C}u<_ef=qSK#- zc`LaR=BnuQPhqYmZxf17y_UQk<~=a)fVmFlopkOxA?EJmnpyV-NtpM+dcd>G~<#~qlD!F&Ry9{htC5ip;G`IIDC&(lE`^|LTH!hDHZ z_TlGYz6euKScxNK*-aF4W8Yb=+aKdP1Nz^}vH z4pX+mo2u2AXlAO+mPFpW4(3}hzl?T~74kMr`5Jx<^Ibh_WbT0Z0mXYT--o#i=Fb0{ zL25OfS-Z&($&Z3u)k-$X9+;oe+)I7}^HYj_LCmqKDsw;0&&dPi7r{IgKj~L6zlQm} zYV`=rZ^&<9ey3W!Dq6LAm(C9`4~hfxN1A(R{tT-w%wG_bz4}+grosFT=Ap6~QT-gZ zc^I)NFn>qvN|=8jRs!=+#LAaGd@0N$F#n?XTS)N_%%c?l9&=(R>0}J#$z(a9?r`iB zCQl_#6H=T`oyUNHApRoii-lng_2>jOTtyK5Nkl+L@Y*OA?6`wQ#(Qmmy9E(um2*JBvWCFX~_+BhLKss^vOSUp7hBASroE{ zhKRL5tP#z|h&7{Vf>=`#VNCPmnz=2>R%C0kjgYmqL#!WS?GfvNSO>(qAl8uqorDyf z!^p0o(~Z79{|}v>i1k9OcNp0x^!tWRf5gTjHUP09hz$&L2eAW#PpD@oV#C7R;UW+l zL5@Uh6oW?x!HA6!Kh)z88_%!_h)trHctV|%gGj`tM(dQxBBu(`QI8@vJvwN-TysHe zCStE5HVd)a5xW|(wb8S_LF^jDu0?DiVzUvO7kT(z#I8f^dc@|aR$noBgOFmbu;kp! zsBc8|Sy`c^`Q{ z`2hJK`4G8*d{`*8$s!`qh&`@nGh$EZnGG!hK1KaB`3(6ixsiMhF@66h^$SALh;5Re zZ>n`y#9l(|Wf9by$t~n7LPl_^0Y zhfICPenaeM#C{2K8KCF?DGrf`g|e_V8UO!AOve8sfy02m!uWrfJoVN8j{i(siJor+|ckfIWK zE~&`MWEHZikY%gEs-s$e3adJ-8v4qVRg*kFTFsXQ)&;O?QCt{0wdIj*t>yhE@{Skl ze{e2_brI}KVTo7=>k?R3!Kw%A3Rst_*5AUq407*N>u;m!`LfWdA0%O2843f|C|D+} zwyFd#-AGN%SJl;mgfkR+p0Q{Z-o*s%`J+0I9YctiiCl!|DyINA#NUuzIp@y-KRi z5Fv!s2bOfZFa3V7r1&`1_Bz$}E;<8Y4N`44s5bSU13032QFoZZvBitQ%GPP0d;1#s>2XcnqCIEt;o6+)(X{OWn^1_#%lp<6)b6Y zHLTkro1au2?v`_4SZicX4Axp$w~J66o@eq-Sa+$8<)m!cf(5E$4On->`UloMuwI5G zJJ<$T>tQ_r>pocbM@N>bj)v;kGV0WU^&l*L@~=9Mk-KoCcgd=I7}iEukHC5s)}#8j znDrPe4&4^#f2=1Yo-6YySWkL@*VfqaqNq&jXE zp*rp<{i+1kW>}xY+5+n%Sg*j^2J2PT@hjEwZ&+Jly(U6+Dq-?pj&;_KJ64y$frH>eNbg8m>CcDf>!xp7&vW0Ba|#U8>W)s?&DW>4@rl zHmu#SK2)7+s?N3~Rp(}~K8Cd))*jVa_O89KK2e>oR-I+L%UHB8&`f?NRGpX0eUGa1 zL$D6O`X1I7u)c%!C9JPueH9(_cvN1GATJhZTo-cJljgU2#;No6$h!ASD!QZx=#CS`Dv!QL{%3Xb_Lj_up_Wb z^pj9s+RL2`dW+am*cDZmUJ@Uzw^4PO0J{?G^I)F~yD}?Lkw50EE(>5+fn8N~c{n=b z4tYRWfA{Tbu+N8G9d=FFHB^_^RF{u+JyZ6`tsSs0fL#}ME!CBWD*Hm%wPDv$U8|_B zSE;TA)pay%>Ey+*FVdawx<<;f#Y@O~Le=$t$PHTd*RU^#JqPv`u&2PT54#)eD`7W< zeHH99Yy-9f+thCuvtzL3^IFmC*UQ`6^tIzf`&pq2JIR1J?1Tu_buW`CxwNXoxt=CIqtZUMWE zek{mt3A+{S*3zydWnoX+GOL|Xbvv871N*>>zjmkNJz*n3ot8Uw14~8w< zWeDsMs@oT^hr%8fy;L^+@aUyoxQHI92ReI{>h@RUww+}Q4!|A*dxBgYfISxWIN0M= z_lu6z-#rC;BJ9bqC#mj@RQJx>ziFco_Egx{!=9$PU#q%Hh0|frfPEe8nXs=>-JgLy zi~iNB`;O9655c|`_H5PtCz;xccAG0g^(e1;oUeMgsz+PcH^5#EdoJu1u;;;E4*N#c zV?6AeU@y@pA@k&_F@sL$8)O3m&{s9-a;r{dlT$uR8Lul&%%Bl_D0yxsa|KOUX=pEegXE2s@Dao*JS}A_c8WzVZRJ}3+&DE zAgAu!2lg)2TlN{*!#`BL7sK8y z7 zRDJ5IK3A$fvafz6W^~diu)l$GI_z)Z0QPsVe}nzKT)izhOTIflkO#>hVgCgC7uY{b zQuUcHr2i|E>tV}EJ{)DS$N!T&LjDz5^o9uPe_$UC^}njm zey#hK=q%@CIH$oWr=RPQ&O7DdoFanyRMj`B`nFbmyXkXj=L|R(z&R666*yaQ1n1mPE9O=X;!ETp=u}mGuZD9T zoN92+r>+jChU)tgoSKs4@{uH&RSQntXi)+#gi~Af{Toglp)7i9I{%Ao`325Jx=6oE z7=H=eD4cq5w!*m-PDePG!MR-D$?%e_%q#R|Zl^w+B%CYZ*!nJd=PEb`g$XBi?2dZJ z3Iu&eNa2!kI0+GY&R-W#!D$314abM$!O7Ch1i92XGA|SpP618>I{I2Lg}(nk)Q#b^ zgwq60GdN8HlcmD@|D6_r$%3umw1(4;x((Sjs0vPdI2{5V*4znB=Mrz2Je&om3!KSt zy22R+xzX3@52rhv9;#nV^^*?tjI5X7UU2%r>8<+lf^WZmaQedOr}{l}f-?Zlz+mbd z&LB9lgAIl=6plV>sDAoc133ERKS-*6d*O_LGm^<8%pDC!_Ac4k#_Nk^&R96(N@@>N z{gvu}c}e}Ak)2!NOoTJ3tlssif1&jIN29rYaHhby1I|=9bKp#ab9JfQv*gG=JOj>5 zsW#fl=LGEXEo`&-*9DV*D)_*;mjiTW^7e>AS zXEU4^;k-nDQ{b~>FCWu7ehZve;Jm5^+G=2D8HLn9+2XIk`3=rCIG@0IJu<&7oHyXS z3+GKZ@94{v&UQF&QM@hW(pbNFV<4a4c6Pvd56;JM-iNar&Q3<|g7ZOiR9>GRzfh&D zPn_n5l7#b7V8Yo$bFcoJ30QT_l{}I%{ z`3LS9YH$n4?bgn}a8HAK65Lba0&aP@C#%7oWr3@IJcjxd5t58v&!2nl=~A4zE#RIB zw-oMK(Se`BJzMUwhIk=u{e;N8(1?t)tp?o7C4aGSxc z1Xl*(bK(9Eu7X<~Ze@K_v|B}*fLj%AH8rF%-1CIul=Rg5l^T+RTLW%QxOL#35BI{z z!S--3fLlw18q%I+Ym3%PaGvkh)k23|1ovWj$BP;=OkRjontcUsJ-BJOm%_aq?q%|o ziFW=_4Y>~P6>#~IPq)5)MW=fusb2vK*HA-lr-;E#!nNSKaP4ykFN5m{)sSbUiLyIC zhZ|>S5<(_ZC5e~x#nV-z;CgU#YRCb&88zfE+^kRyJyRdw-8@_$ZWFi#xDE6~u3J@w+GzbaC^e-rG{GKur@8=_6f8a z+92|W0k=Qgp>PMl9Rhb?kK zJ`HyS+>vmnz?IcC0j~6I9NaN*$I9$nfdhdV?2QskRgOKQrtn*~?C8dt-88SXW3pMrZW+*{$!hPwi;>m$Pl|I^7u^e77*v_XZm7eQ+OU?)~Hga32g~9-^}$h@^gmlvlDyZI8j# zqXG33aGwmc5Uy;sjc}iV`>dQOs$mzaVVTHs*^Qrrt0(`}uqJBQAh<8cyc66P;cgN^ z{gR%E8Yb&@Gu*G>Zh`wLT=~fFzTMc(B+}GK}YveZ8CgvM(--7!l-0f=Eel_e* z&EXfy0{3k#hV6&@t{U#a-2qqD=X-E>!F?a@PBpxj8a|6lFSs9^pg)AW2ku93KMr!k zn7wd6`LDAN?w9&yP3~vA+8L_23`*re0+3vypuj;rC0-wJT>A$xJMC} zf$Lwyt0R6A;-@1H#7{x|WW@EzU;6cZk(RENvrO}I` zlTTsm7pu`PA3HSg)j9e>GMbZHRayHFjJ{YIAg1 zPsAG|-URVxYV1tJS^3zR)XjB6+H8qL1G2sLy;(t_%O&rO!47}&q90z;!|1S zNW@1WJ_&Js7(#puIhGtpa`4w#6A;()|D_e~razgSqMdav^)$&sd^+MYDfBf95z)rg znYY`B;v9)pAu7+lAZ$)e{kUq<{D#5Xf+i|~YAy-HKprpEt;_%_7fr1LuYhW00%3VHcY z{B6YF3X;rv2l02+gbUS#v?RlI_#Wc2AwEESr#AK0+*Pu4L72On&WFO1!4mT^;y)n1 z2l3Ak-y6n%g7~M1?<;wwao|W<#P=iq72=;G{srO(0>9*@ptdj7gno>X5B?qE-yr_2 znlMvh)P%LA_sFLIo?5RQSr9)+{)qTbi2p+Uv(7rU5B#boe5I3mXFi1ZVeX&5BmO6y zKZLSN(>y}T8q?oR>VL?iMjY9sE!0LO(tptCK9@=EJ$2H)*>$y1{ESvN7|(+F+GsD2#HIPxL8c~ z=Mu7>P}Ud{myws#yaI^=67`WtAaNxU77|w>VX`ViO{_o>6RL^&@&OVy5-t)Bod!ah zaW!!QYfB=LLn4Jl28lEhUa3)EO}t%V$_@urWlNs=T}|Yz@`*gl`fB2*YT{2w6p?6y zL<1z6A<+aaYEm7>H!b;YCPi~3S|Y)pX_Ja-(r_eNA<)0ro z=!3*`B>EyTm3}`Y`XezGi2=Goy%!B62a$uxA>>eU7&)9AL5?Ixk)x5&c=+arL2j051OM1Piivxfl%486Bpzkt{YX4O@gNc#AkVJyd0UA`;$b8n3F3p|43m%iIK>l4 zJVo*3@m!XA28q{^covBlnY$5*=O~^RQpoeae6}~S2?=@5S9<#r68hm^>dnDDlSsUR z#8x``5nwTq;PbzUZ9$S*Zy@mw#hXZM7eW0N`F7aKyGZC;J(1W!zDK?1f3&VjIT}2)3d}sNE}5{#{7T93@Qu+k|*n6`7R{OAz41uryzN1s87>E z_Wa}-NLJS$BzY!z7LsR+pgsr53KWshDPgh{$!O?Qq*I1urO-K-jv^}~StazV(m4;w zYJtP<)j;xc`ZbX}AM(&~@`5nF7X1s!+GHKFF8Mzs^|eCLdMza{5kbEmlKOr^>dV61 zD?+C}l0n#2NG6dq7-k}AQ^ZIsC`Ij%E|Q%5N$Sa;AQ$q;b25))T9SMl&WGBiV$aDcKCk_DD9@F*>*f*^+EUwnnlI zh5icwigs#p^-y;}vLnq-WarTDf@D`Za@$f+s=Ej^Ifi6UB!@Ap7m~e8*G-fK$v$LX zB>PeHCkK!N$wA~`a)^*(s4()FY|!CIK8fTAB=13TB$88*9EId$J%A@ilVixSUw9|D+!LnbhOIn%s-YpOKu3N7%qAU41%|^O0PDEdWsjAvlW)gjB$t$4 z_dsb+SqYL{TDoCb>4WzoxeUoWkz9`C8YEXBxe7@c|5qN1l;8~#uv+RD2g%!XaVc0q zKH6GRzP5Mh+zNWSfNS6`B-c^s6(Wm1w@KbB-yoXnk-QJd`{gvLblv4hJ|Lx#)bl?` zJ|yH9Z3B`IBl#GTk1+YDP%nA}cs$TZJ|RiwK82K`cpAxPkbIf?S#l$i&rv)tq9d9yw#O>RNzWF%if@;fA7Me<`Lw<7s2lCL58h74#(ZbR~QJ+g6BMDk4} z-$rsfl5YjhaU%JS{y4hG4kSN7@;xMXGWmWGgXAs|q2A4`50U&Ra6*3%lAj~F7s*fb zN6@u>isWZV?mHevbAK3r0LibA zl#Tn7ZZ15&aO?bv{Nvcl42}iKzmWVF$-je0B>zG3sMg$S zy28{+x>O26Cd(mJhE#c^B1oNr)LBUB@gJ$vkUE3n^yBp-CF8%|`t;8x&q1n!c7nYk zRYJ3rjA~z3RZ$Dsi&B-?qW%VnLtPoEOOdLA)Oko%4R_|Bk*bDNZKSG)HPk?=CaXH1 zynw7l%HYo~9qT|Hr0UY=E}goF`eO1Dvfh8=FB6kJxdH>%AXOi|l1N>NCJ~xfA!WcH zh?I%+jY!3iJ{KuV{`?&&8>yK{IY;L)s!|!wMVK0QhM@-$xcF9 zSb3MoeW`nry^!in(I+y!L1cPOAyWP5^cPB!T2|c*qy`~1 z1*yT1d$&?UkQx@5_ykfz_5UePe1dv7QX`NWqyKX`HIf`fjuxsZ1E|L`avV8c7u3PB zOe)>^y!4ix*Hb_hi_*|k?M%EGscGc&;2*lRIkkw?ETq;T#oxTCYgq7FayEG#Qnw;? zJyHvinuC;7asyJb_2(irPfgLYPXUqA_e9w(n5pCq3m zpC+FnpG9ip@tTo(p5_Zk?MLcGq+Vlk6H+gUpnjR$jMNtP`IVq7Qm-Pl^>{sukzM+A zq~51~1F1JfP;V#SBHt$8A>T!6M_Ai?;;{amNbNytmrm+W^Z~h>lrPsujQRM#?e0a2 z=l>~v{?EvLNPTuZ2J#k&)Q?CVKf-4O03LKrLC{hx!LP2ZiDw z_0zH9TK|I7QRe=Nls@^VK7`a^ir>jU$UlV?N09m}jQpFq@hin zJQ?Y7rPW`jE-wuAsYsuO^qEMX9!8#VtlIQhNLOV1+2lE71u{aGkfmf)s9R5$A*~1h zAjvF+baQ>^Pgh2|3ep!MU6sl6$ZDjX)S{?C)+EnI`hw7}B|=S^i*#*f)j>LobX~|> zbkfo&r#{jbA$>7(FG2b;r0eOjx=Z>efY!PXmy=fnS=3jOSCIy3k}+XW5NVr^L%K-E zkxnC>VCBg$CUq=cx9Bk|6K3U*ZisZA#eK3s7IhKbs|ISyL!oX&r!m=tY>ITVpek0| zLLZgVEh7_ZA>9h;&PcZ|Jv%Q8(rw7LWIM7w*#T*N2%zpHWIbJwo`7^$qz5D2O-$=kRFNj80t|KzmVY3YU)tdFjh^Sg7i2c#dtOKI*N%% zUxV}{q^C#5JcjgSatf&r0Z32Nt&Dk$&J3jWVV8Oqd9}_u=3Gl>HqzHoT#xh(NYBv$ z{}(ftS@Qx1>6?&w7U`Rj>5KGyc(O|`fG6Ltg-HL6^dh9cMS3yPn~`3E^n*w*Mf!H6 zZ$bK2q?bj;A3=J#kYa_f;vMplS0a5I(yM5$4sz+Qp|ds!qrL;_^+?}|^xa6`6+|Mv zE(k#S9>&}&Wdn!F`^fu|e&7W2A*5y1Z4igK4DOs) zWmT^sy)CGU$v2RG7wI>VejDlSNWT@-76c&uj)+k2VElVQGVqb!NplzZ0l7Qu&qqjq zf%L~n??ZYIv-TqWDbk;a{%E9*E3jaX*PiE=nDE2se0#xS4LJM&lQRfuQD5s{ivk_STmtVh#?&J(4gJgET?y|Bc=dz$ z6A90NmxO1+bK%9{+3+k0I35Gf2{gQT;KNGR%qd@LB{yNWT@l*6`XKH>EhdcJMmGYY(p@ zybi~+7~d(ZzYDzX@bsPluiJlPdIU*$z2HrO*BjmlczxjYXK-J#Ul=n0-Y|Fr;SGj2 zNX*b50&nPlKhbbWhOLi;Hv!%#Ry7*lSc)-W?l^ez=a0v}j6o@Q6B#oJ-eeI$F1)Gm z=D?c_)9*^j1zKa!Mg_D)h9UD!n+>cY)4xA3;XTOYL-6!~4^JNg z;5~doE04l^4Bq2mydM99TzF5x+Y0Y#crU?w2A&@6;XMm)V;Jz<3BfPGdl8-<{KY)M ze;M9p7Tf~wRSJ3QxNhQjB)r$?Z-e(bytm=K0dG5I={Jq_xnf&nBxaxh3OcdT8c)!Bi3wb%A_X)fM@IHmNAKpF&>+xTfumhim z;tS?}3GZtPeF!+AC*Q*Rk^Xn&_waszcksV4JT!PeGvJpK%KnB-d3cB5{RQtZJP!EY z@9_SR$e;!mIi}(LjSS%Z1Mgq@N00R|qsRaMi_e^_b2H__+*6P_8<|s)(FY@BPDAGO z|Hhvwk;t4C#-D>s2{ILe7-S-W&$6XqOhsg_K&A|t3y`UV%z4P1i%ez4$bWZp^v+aa zvZ^q2sv%Pond;&&t45F|xyYO!Xk=<3a}hEZB2yQc+6>c!e~`=M{{oH7#mHPr=MrS< zNhM(`mx)RL^3bV|Od6Rhk+G4v3Yi!(1_MlC5W}Pu#yiL)=(xzlMFe5UBx$CCB((>5 zHDyL02$;+wlM8fMl~2EbO!2>dL;8)##>g~5rZX~4k!giYGn)E9K%ox-$g~WOc$UG>HEXX_*`VTXy4+j*FhW_JB>hT|$C&S#Qka;@P&&cVVKIO}7gnt$? z&mp%Jndgyv7?~H4{ScWKk!^y^CS+yLe@Xu|%e;(i6=XIe^8qqjkl7xYAQiqszDjN- zUn94Xuaj?(Zwgt@TUzL{ZBwC|mfelaugFOEzD4FEWIki= z$K)PzFZl`iDKh(l8p3+^)Bl`2Kz@PDmtpQ#biO9P5r+PEbiOBlAPXuEu|ABE0SeoCGuQSAzL|!XIoWio`I&x8C$A*0 zA`Q|+R^R_4I*hmJJETj-$po1sQ)HU-$c#|epjU4W**vlZYJC+zXX#!Qk!?WH5ZOk7 zk8I;0m%&ZRX2{-%Y;$A>BijPmcF4;7j}&i(Y#U@-AFEI|)K-^e{m8aQwnL~pBHM#S zI+2~pE@W4-8`)jR7JDK)h)yrEH`#~mOZFrClLN?s!V`Kj1lc*r4n=k{vcr%a!D@$x z{TYeuB$gUQjwZ*DW04&fhK;8)ft)Bjq5dhz>Ny`|c?m$Tjp@i<&&V0%OmY@^HF*tr zEjgRKPIy9{H?YFF+R-)73$l>C3E8E{-i+)5Wal3*g6u+MmoRb>x%hY%lee&mWyn5{ z>~du9Lv{tSx6{0pTuH7XSChAqYsj_2umg9{xs$w$Tu0tb-b3Dt?D`;{t>2IAh`M8-0%dS&si%J^mxRoz#Z_WZxF@Grp^Zc6N~Ok?)f`$z9|JhYJaShc=Q5Jxf9^`^t4M=1$rx#oHt7h%R^oIx{^vOU z=Tdaiq(^4REONP^6no_(*PMQVERqe#hGZjB9|DkTLN+Cv3B%S~(BUB<*NVC|*@kS3 zT)Qx`y*O;QBXYx#>x5h%#&jk*{^vOU=ep79PWB*slD&}Y9n==q*_VDlvOhV1)Z;&L zgUG?;5ajf%zG(JgIC2x|k03{qqsYw3r;^ji>EsM@ zCOJ#U)~{jmTI5zBHygS6OkPJ`PtGB4Am@_v$Q#LD;P?URNv0Rpe^&HgXNQmb{(3Lm1X`7jo-#QrB=dc@KFnxt_d_yq|o4 znPJk<(-hAj_abu7A}1&Oy#A~E@LX8@ zg%iqdVm#0Pb1#byW45qnef<}?S5Jt44f!vT+lIVspx2Qfh};{<_eAbZ#&1WyHgazv zcL=$+k=sr49r9gr2l*cPKFRSvw~P7%AzS-c z{YUO|ItR!v$S=vS$gjz7$Zv&Vsqg9hKprH2B!41*CVwG+C4UpLw}+9BBKJG;p#KM{ z$A9FGkbjYXlmC!Mk^A>pyZMvE(e>m{MxG;izMPK9mnTmlPbE)7{&Ys_i@(U98PpIE z`Lh|r@jqXIIzpC^r9zgfhU3(5HOceI3&>i? zUwFJ%$k(A+7x_H$(qR|*i;%yP=EdYCWIggy@-pNvXFv7*pLFUALwyw;gEUEw|9Ou8 zc^i4>cBA>WvhO-P>q=Xw42 zSPdb7J%Qjh=0cMyiTo#=EXyO3SUZpe3Mi#>wKFuoUady_nN z7u?jQj}5ziH^EhXw)24?}+V@nGafB0m}VQH&X_eH}c8 z97~QP$CDGtiKHI?+0Q9j9MjVRjr?@vXM{bUiTo@^>g)K(>-&Gg_}R!GK>j-9Iojv1 zM_v#9VZph`FOekVZ$9!jBENw8Ch}(F^?^e#$JX{j`iqcXeB4KVDe`-ezXkcnnY#@6 z<;d$X9QhUGt>j8_6}g(cja-BLTK4(&6Z(87@*L0ecQIxic{h0v$?-qG9{Kx@m!kgw z$?-q`5Vaovk$;$cgnX2IOvrYhVDd@iWk8n5O-w#bK0`iBZX};0pC?}+Ulay?K>j5< zFO!?eE#xcYtK?SlH6dG<@&7$KZ;)@2+sU`cx5;Xu*LW3>?C)QACSAr56O?n zkA-Y;FO#1j{}~0x|NOBjAmsOlVS4-zTlpe1ze4^WkO<@tAJ0Ypk1*>`Wc) zIl}uV=>Q+($z-`882%}tI2HbB%+lk(F7BTJ|Nq8+_-DiK2mc)SP2g96e9lwIBYu@T<~M@GDd3`G3h0GI<{SYVh?uKm6+O_2fVNn!+H4mFTO$ z@M{Go{Mzts_;uj(+OA(0zI?`u8FSGIr7j6H{7d1R@GpaZCH%`7c12iK{Xo#X3cjBI z53^!4tsqJ5z)w@S@Z%z=c}2ia!q@ZvvP4@y2j7FAgCEZS``NH3dH4-j%7AJ`G3C!d|prSTfuJ~6p?uNZKAF93_tvKBrgj1 zod5SbvNoM7OV~;m_+8=mgs&(6S)@Ds9>)Xd^n$PF|Ec@H*B5_}wJ0|r`Tf<@4e$p< z+itA5<8t_eP`CsBU=(hLKLiEYyN1HQ5B{){f0w}@Ueh_J(L7{MqntP}BZ|e_h4(XTra};y&5FbJX;z zYI+*}T=;jvm#!{{eb@Na@YAO6j97n3Yy?N+j%3)J*p`d%!55&Wg_7sFp7S*6&e zZ+6=GJp5bWFB4sHUEQD*{1xz5!@m{&O8L)635LH)sQ>>_*K-?uS#N9LuMOgbY)Dq= zozb^jNAA)yhiba?ZJnC_5&XN!d&qm?uU9i5S}!w#Z~gu7AAm0#NCy8}YKDA^9};=ttlBD|^c`LW*a}jpTFM z)En*v_?zLsSh`tO#U>VfNoVOAUJh!IBy(SZ|8`{hL-1dPzZL!)YDNtHYw)*;pnhG* zI^Tr<7K?1xHOLq>T|R;YzXN|4{CDB+gues+dy(n08TP&e=!KEu(EI@Y?m)9qS#>|d z{}}#P@b|#~4E|pDpEB|j382`=_!*4f5C04JpTj>8%=S-^2eF z{&)XhqtX&8AzmmVfKLr1<=!&mOoxg|T4@p+sDjV?# z{J+9|<8KrI{~!2A)r<~mhE%T4|J96zD4ZlzGghH+G76`lP_A@aI~2+bWzp+LhdqbF zX()6-;dB)0qHqQZ)loRJG@3)T3Wvd1rLRbQMi(km!MD& zh5FQ&l9!>t^Z$ZA|36+g^poNCpw*l;>dzRR}{LHwb_M2cN8Y0&;x~uDD*^O z7z({m=#N5g6#AmjN6k1`x^;&Tg?^>)?XLL7R5i0o>6;r+7=Xe+6b7l8DK)b-3Nro= zQ8VYLnUA9|R2b;eeXy41Ihq_pjzvKq2&l)C6NK#Qq|&9omTj4-X6`^? z3JPl=e->6)hQc%yZa`r=3fHQc2T+)S!b}vdMq!qkRaG3#S+dJrLtU48HVW6FaD5Pf z!kj=bYc2{4DCVJXBMLWD-xLI(Fke@~I#G~s*%HwxEFu>NKI50txkVWLCy&B%ouwmJ zpl~Y+tN3wNiX(!W_x~4e3mg>m`G25G{*iMh`C{IQ1`gye&x&%rUXtrjxEqBxQMd;M zS)+=+`1I6teX?C>Bwyi{j-dN+&Nt@glZ(vE<4k4KZ1d zEndogUM3F9UV-9ODAuRecce=UwSi(BMH58_#TbeR6dR)08O25@wnVWpJKO}tra|i{Hbb!m zip_)MaiZ9YHMEBOJ7KYnXeQf+9cYhYM-)3qLt$H;Bugq6qS!_1L9wflqMJ~{Q0yU< zQ1lE-^+s_6ihWR&nV(wB>WAV(DE3G378D1dI91J>h~hvL2cb9)#lcJtL2)FCLm_{a zsB@*=YeZ0w2sDbLP#hx~#nH^t0Vs|=A#yy56HuH?U$Q2h5H{rmJq^X6>~s`o(3jwu zD9ZRR;_4G3uSM|&nzK>7E{wdMjvNA{d(xS?C@w;A9^`Kvb@3a+-rkJj0u<*5r9yLI zSZZ#r_nVs+{(R@;+;iv7 zos!AqH`&R)eIE_fx~sPdsGNk#d8s$QLgi#sPC?}?@~NnthRPY_(^JRaBZPdWB21!k zHY(>N`rL!``KVk#^Frd2iRY=RdPWts?$4s~S)|WG<#R~Ot+xo3-=K0aD&I%t^Qe3W zl`qh<1eLFlEJfuqk{45>WF9UjzC>I>TuEF-Tuodgo z_I0+nB)awjUciGiN4h}((sIC0>NcCnSOlY+aEu8zuYQTZF4dr-L-mEV!? zOFZ8*`2#9{JgA0#vWAujF2C*se%%tYC_TlyTN&qexTq|Zb8BBWLPr{0Ws0n!)7iuyBBIaCq# z{Gad^$V^81Ql$S=ztfVw4C%{}enS0CZn`DXt&r}BbZev?q_03)NBT;nuR^+w{JE~y z{eAUEyYeqw(;1|%QGcbIu0%Smb^lcT-ENOYf)umFoJuNx9%=raZ@NI;K)NVI>(QD? z{_$_Rq|B;9{t0l8Zb-XGw@2DTIzrk{as#A8#g9KDQQB%frXYPS((RDGuKYe#kJcmZ z=k-Y6g7ghY-y|Z^H_ACCr8-c#ndZ-AaI_v@Lw-On{Q%OprACcF`gWx6r`QSUJA{zm zNxX~LnRqwS_eizm_Y&_Tb`gwq)uO8KL8Kodd6?Lh_z1C^AjzY|$B2(BQH@@Aq~{~u z1L@&N_e6Rq(!G%GOHXfNpTyY@=|M>MSA(Nk96%hHSmWzf4cRhV)vbUuTgw z;vx#w9D9?fIQ#H6((m%T-bv2uJ)}QCdOgw`kXEy_tj~@Ei1bFJKSKIL)zANR_2aVN z)=3iSPmul=>CH&*M0yJwQuiIwpCSDP(p!=KJnmuA&o7bQ!Jcm;eueaQ@gMAA@m)xN zErk3Vq<6<$Q}^H=q<=$tFVg#w-iP!L^n6GBUhCN>b|U>Fm7h{y98U6cqW^;QufnyS zGsKLvM4P{8_yg%bsjp}9Z{k11f2q$9EW7U^WDY?F$n-^~8ZwQMITV@0%F9;E$4O)k zN2VN^Bak@;nd-cH6;s~V~J%|y0WE^IYH~y z5Sd!YR3Os`nc5YrT31ZF4VgN~)Fsh~#}VrZlGI10LBgf@@rqABR#5A8s*1Xq6Nx8j zz1nEKZXrJznfs7ACDrI?WSSsjB6BJ-mB@%$dfp3}(}`ygn-b4N<}C4(pG`c6crNig zLDtp`nainMK)jH65#(Q5SCzelN^@ch;-$pP1QSn7Dy@jEk+~w#ucRVpAw9f`cs21F zLAIV2LM21Y5_3eIm?sv92C*o}vKBITBU3`=T4Zbynd=Z;qDSl# z(~l>|idFs`tk(q+b8f2y-GbdGjJTlXenNBhTnVI6O zSbaJ&vqX_MBgo8_q=?8!Kc7TqUTWPL$jq<3w6+|`EFdlvq~|HEx7;k!#4@dSb7Y=D z=2>K(Czt*&B3Udb2mLQlSwdWTK-YSQ$h=5gj?7DRu0UoLGAo6vV}Ogy>Vx>p$V%LJ zMe98PnOBk7gUoBlypPQ5$jG+O_sF~pAoEF5)s};*{S28eSm##a=W%C* z$3zgBuaNl~neD2S>evqAPU0>><&@pF%s0sFmL$2_9im|`GC!(Kt;{~+cgRR3lKesK zaUJ>*>;DOvzmVCF%&*M)nfObR`x}$oc2foaVDis6mreYQ%s3G)9T3uF(` zdXE;5pd83nV}CwE_An7u4O#UHIN{Z)94RQG>Qc4_vPUDg57}do-H&WdWS>CxSY#`a zEkpJ!WXq9lgltM)Lm*oV+2cqmh_#7zh;@A#o8Z>gNTJJ)L+4u_^IPLDqRTvMrE32iXg#pNs5yLdefY zwpnaTlnbd}M7$W;OX7x*Z64c@y%gCin0p!Va$-wlTd}Ryu|FwwC3D*#dsU)bP30Ov z`qRip$Yzi&P|qTp6GE;N^MZ65$U4ZX-+!QPB5P4E5pBW5=_VeJPM;Vc8y@6oi|oC~ zUW;reWZNOz0om(lYme+r$X?GnZ;1WK-Y8kZljO~kr1=(PJ0g2K`K`p;1P?f=+<~n8 z5RhD;yF^E}b5hCO$leok>h~f0Fl}9sl^_3!>wf^*2Pr;ukh3e5M~K~$+T{0tq>0Cn zef%J2cVw3!+XLC@$o52b46?nD?T>74G1K1%*}iPO-$A7YAUh1%fiw(CoP(Jhg6z;( zVX5Is?g(T@QW+K3gY0O@O88i0$00j~HH=4g0-Y0ylM>J5gZxwJJa9E+`PO^jg&cwNk;@63PH?rR&`z^&i$nHaSZ|oFg!S9lS zKhX1IlKd&D;b-I?M)nuvBu4#;TngFWkUI+5-;t|^>>tQVkpEN6EdCd=e~Ira09%OQ6@aw@7L*9~72+(qJ7- zk&BSaBWEMWr6Fg~pTz&1$)rUrC8Zo8R9xg#@F!>d&jrYZvBDPHB6kOJ*CKZ#a_ti5 zb;z}6k?WKGsIR!te-rf%$lZ$E%~Wn7c8r~ZOx{Mko!Ci`rS3#dg>>ZZLasB(-N@aC zTvhx>?p_ha%u-$AQnWpQ+=CPkivPK;$jw9U5#+`q*A2OTbUupQW61R+e;m0dSgJd* zM_gfy$n`?5cf$K1*Z2SD_D602a>G~;mw?4e$c;lT9*XhEO-O2+h@6W5$W2acTqAN*#Xx;};+(;@W)f#1H=AS*J#*u- z0eKLUy%9-$bE&}M&v$0PQ`!beuUh|iC?V+bZ$;^w;=Z^a?*j%sBa}! z#ed;Ueo5RW$O^Y3_cd}mk{Wg*w=2$~jmt!CH=W;7*+cwa{73FP=+%(>9ytl=Kcv=O zkKB*Q{X+5+a{Ebs7Swt_r}bXPelBE78a(^ZKZ>_h|k^7hUUzM&O z0v$0I1N1|oAEgZXVbBjJIf7U{_CP;Uh}NeG#Tvw;iN_FY5|0(s`m}~#j`mxjr(k^! zy%vnepjRM24SH?p6QS2pA0qU+(C>n-LB9n0anMhNUJrU>==D>LJ40_kY)CvF`bp3m zvD69B)#i`ra%g>Wa>PmKCqq94dXrdB#M8t8{dDN^W1eR~Kaa_##50L!L09|#(E0rz zU48#Y^cdNCGvWor3**Y6Uj+T)m{V^Ky#T!h^j6R>O`Z6l9MCU=emP0YSV^5Y9J&ln zmf{t}D~WBOUqy1YAjvhvO6Y0!Eh8vOjL_wbbQEicBo=fJdI`G2q%Fuk zxPm;SlRorz&;#n~UjRUl*ot(uEyZgEV}+HphkhG$nI|2Xyn%Ql^qW|@>LK)-p?8FS zORTVxTMy#5vq&f69kCAmPO(vuOMiE&{zJ8k??b-_`n^)2*5?N3_dy>5y^H!EYWn@q zdqIBy`lHb06uLrxi2B2Va%g>?VDb@Sw}#72S6VTeIWEfu|LMdFckVI=)>Yt(1#0wK7u$hc9M@KjvL0J`(}>fd&mfseoF&60gjZn>bO|YQp}zrr9`vQq z=Rm!vchWc+N;Q@iC3jD1#RBMSSny@&uRwoIvY@|Owr^{BtKHCF zm!vvg51_Awz8U(P&^JPV3;H|dC%1&Yj&1S#y6QyUWmWG%-vE6*v)+$8Ajqr_k`wt5 z`p3}KK8Dt}LhIWI`li&QKSBRQ>)R^sHuNpfw?Y3D`e$0-j#}To(6^Rfalh7g1oY3L ze?ju4AP?!bT$f#`dCj12*ZRu&?ts2ih#YMCYv_B*`pfvuKsH3YSOoyd>T`gPa(%|`xMk;cC-yl{5kv|^!Mq0nUTK{TV|C5kE0r?Y=KS}FfSsrab zzOi7!PeHx~@=cI$iu|dm0S)CqUe4(BgsZOrQ9Kj*3y?nx`E!{(8+jG~lic%=Z$|xm z!2>##3z5GF`Ad+$Sds^Fk#8Pz@cS|+cgM5g5gnV1A|42zvxt7>2)!-kJ_Q-cc{(ABokne!}jpR28 z@`!CWQ@kZ9bu03nkiU)M?FXF5-$CV0YfPLjDQz?!+F*_Y@L4wf=jN z?~QyvX7xe7uMjzEryC&OKjz2}NR&ayk3xR1B#|G2{BV+?wMTz~{4ix6Aa}$FiX&B0 z>QPyvk)J?u3~?;-2sXUMT3)%qnuO(tcekt{3#21Oni7yF~tRSweUHF$|HS%vFzXtg?n0%S| z3i7X#yheOoP!1`A{8~99;XE%nwGAZekbj%bcZly2-xDNRPkdic8_*W{4_IU)@k3^P zBuMfx@|zO=i4eB91^FGwe~SE9$bXjPZbklc7WpDkzC?ao%#%~wE=|z0lWpxn{yXHq zrt%GOckD<0TPF7qWxnl;b#1^V{w5fA zfXP3Ie-i&9{!RRcDC7Ab3WsO|7D!SXuuh4EYQ#fPI1+`!$PXtTL98w)hZ>o}QB-OW zk0u@?NKzApV`ENdISTbqNU3uv)S{t6IFq$es6$dWQ8Xrx(+2!XQXhrWS)>694N+)J z@pu#(k(@w0k$94z9NNHoOrA_U1%)OgrwWpsrVYH1#m069u(NV1(GiSoD0ozSL2ckD6hahk zLLoxoI_hnS*Am+avfcJ5+(6~}M7c306gv=aCf<^?(lIuma2pB_qi{P4chS%Zg*$|h z->D6JN*lNgh0Z8EfWqA<+>63JajrJ-Qxxt)p-WQX{jr`TA4K7y0}2XVQRv1x9}!HM zyHI!(g(pyWEJ;2tL>u@63f+b9qI+Aq7YYkd=#7GmMjsT0q0kqFK`8V?VE_&N zRoOvla`~?@YP3-pjKWZoA=)4{0&=A4e@10E3L|0#g^}g$_fs5=!W0z7pfDbVu}SVY zZBTD*&|DNIpfCxAiLtH?dIN>Y!c&vKVcDrD%pjSD!gL|ppxsQ)L_x~VBA-p16L*g% zI1h#SB9^~(xi+}EHdrS7LKI#^;Yk!0qwo~{PowZG$uol5U>$|$P*_B+=7}~~uFLZ% zEJfi3Ny>r35^eA}l4Y?{>tDIwm!q%-g_lrR$*dJBYofZ)D6Ar`R!Y~|D7=h-3Y$>ah(cWa!^Hows-fzNe1gIj*0wpxl_~dGa(%Zdr|SRbN$!`4BEjJ+ z;o9K;XxM?mHz@2(a(7YuS|vZOMZOz_Z&BEb!X8O#Lrzjzs^)##kme-c!#D&5nVb?C zenjDC6n>(vW{w=%kPayPLgiN`dyxN*!apedfx=%*{;3U_MDjO13k8|{m-t`Rc^QCl z42)_ps>3)G#^Ea0I80EDr*VW3IkX`gVH^pg28^Q;`-p-o8|3Cf`j zy$ptQuL+EkV4Mu2vE1X-i!e?RlAPVCFitDK;r+N2jMM449Y#|a=fXHM(ParZ8^$@z z?I*}yod@Fr80Sk8Mzh#izHBFq3u6xBqS}Qf%)JE0)i9dFXbGbQl}i(k^z-tVm(Q2l zTEV!IhSo5yh;?n~i!j0T`iVAlJB({!WMNcNXQ(lF;=`&@;X+{O^vi|I%Q$Pp z>Xkh$^&2o`5bl6s!iZp4Fnky#7;eR``(fBbCpA70LhcDl62<`~)P|i!r7etGU|b91 zdKm3sTo*f;)jlb81B{zk&y9)F0mjV-oXqM-ycNdnB)1*ZdZ*Y4<4zdTy}M}WOuQS$ zy)f<(bL@w4AB-+BPm~Afd=N%g7!M^?J)Dq7V025IkH#YXkE7TJ#uG5UOHCO9qdSZq zFlNB$31b+QUNCyY7z9IX17Y-qF#txtRKC$oeoHl+mTEXU)o@9w;yDGXA>i>cnBVmk6_-GhoD2`2(aYD3VGLa_0m=0s2{F^ZK zpTdkuFeWE_3YDqEX@c4?`R8jjS24BeA3o>C{$@GBTktFx$mRH|ZP>Y1lt$f+%cu_#rsU!Afl`@B@e zvzDP)0^@ZUOJTeWV;PK9Fk~{Xgt0tT(Lww$UV^bA)$nCiTn$c(RK*7{R;MbyNmcv{ zV@;~zCK*N;ufTW>#;Y`RP(#O|Rt>2>tc9@!#+xwShw&DScUZ|f7;mdq8ZJy#Y=!YI zjP-J+Fy50hVsSZT>EQ+#AHtAEHzt*Dl|g{<5sXiG?jOUDJ}hKU_QBXJm9u-&=%+At z!1xTt7ciuW&pDFMC4>1T3>hwYz~f9%ZEaT_mM&Gu1lS2en#7;qXdVd&``G z@hyyfydry~HW+(T4fnAFatY+3e2?OFFn&PsY#2YHSPjNcF#b$ETOG!J7(WXk{{_ac zB)<`VC;lO*9z?4=e^LA!#y^Q7!~S0tFCKy-gvWjq4@I#tiie??Lh*1Ek5*-iM-bU! z@kkVpO3K#wUn|99P^>9Q6py93Eb){Jp8X==>Y}K{Jn2R~6zeCs z4TP|UbVESN44PtP`nq#`%vtLVi!qLxu5s|@j>E4#D|GpiH``XMiWHwu{c@Y zzbT4Opx7P7o~aW)M6rjUHhdO&FJkXlL9s82|Do6q#lXeNrYM3+MwzDkhdTsr5WI6qcIq_R*x|EiC` zMYRQl;!{Mm1%x8^i;CO=Dn5teA`#`#hQEd4^C*6S;tMFgi{cU#Uq^8%imOB~;-y}*OxNA{- zTkSIx)&5Vs`+?$nC~iS5$u8p8aSzFNqxda~zo57W z#UD`IOR;MI2gUDD{9csuP24Lh{>a>)i2DUe)D}=|U{BQk5B1+sGhj;b(^GYC6uoRg2W^COps6;Z zh1%>L(E{dKFfV|4HcauK1M}QE``Sv`@^fdTCP+i)!)zv<*G9A#Ox2dM7s9**=0z|s zPSyQOzRxV(OHKO~W^zEn!{>vlV;Q8s-(+h|%&I zD^+)M*??Uz+rYdA=2bASE}OGODk&S)y1eyw+K44Q_cY7`%nVE&W)@~HRqr@$#71?d z%PZw9VCGd%)cG1PEto}^rpl7DIJu>=sjO0*gz3P%9;OTPT9_Wp5T*|^P&OHA)(JC$ z**30R8}UP&1+yK@>tMD|X-(qGovJM}=LVP^VcrPyW|%j@?4XUTCf$>6%K%D2n72qh zaxO4$h1m(_Z7^?F6;4$XMka>j!n~tw@cT611@m#3onhXqjg(7#H}M|1a24{m(&l|I zAAs2f=KV5gWkY6ZBQFw!`5?@0Fdu^X2+W6Jb`>%8;H7G8hs;ukyec&xrSq{WMa`%u zU=D-X9p*roJz(}OKYcRHo-+6_d&y-b=>xMLNndq$)ZPrUKgo`~v1YnDb#i4RZm^C$*7(!(1q+jXECYQ-a#4*5uE?ltFk_8+9v1xp0eM zE{>hCr@YlisgtDJOJJ_lMh$|w6y`FRd{b<`DCf?ezXVgg0F9G^Fjr}#CfE991I*Qe z+NdosUxt-}`3g)CUxoQjs_`_KufY`aTQJ{%xmF&Q)Z2gaO(8L7Qr`cH_;!^tYA4Kh zwNXFAd=KV&)u_6}d4&u(T0sqFe!TcKLHzI1I zk6_lf#685lf>KX;8ySS}VEzYFuH#=Ye}E}b=MFITg| zx)4?dmYiv8SQo=;LC+=SllsAGUbe0}lb6D}oa8c@10*eBwGtA~2i9{1tZQJ&;9Lc( zjbz2Su&U0w?9bh>Dp@ui=dzz!ST?L2EEARvs{kusm77@!%Yaop(DRtUvRFw;U0HQC z9asS@m)wKp$F>8dV1>+z1l41MbuFxAu-d_z1nW9jPrzyq>vmYz!@3RD4X|#Z?MC8F z#16!p1=Vwu)sac{5E4HH$wLd3PO$DFxdYanLdfre)j8pJYoiMk?}gP3)_t%Zg4Kn} z{jeSoQuPYbdNAg&;y!n!=aB;jCLbj}2J3Mla(zFTh$NgnVh@d=b|Bu$HUmQtKsHd~UZ^z>>-N z3Z49>j_Ie|5H~V0bspOd_yp){7qQ#%vlHPU0CYO)w3u(#Al09YRr`4Pb4M*wRxl`VpD(P1U;f32-aonOF~yYEX_ zzor_#18W=PXBe%YVQpt}2XQB?y|8wXe@&Dvpm#`i!}^wFk5XixO;sZMKZ4&8zbF1c z{85nPCs_Lxm#w@i1&$H_6pdIu51!^wi^CnG|Wj+_<*mQ91{uMkt+%(g{ha6Hz*e zMH-`Y3dzZ8k50ATB=#i9(@;8{`WeKgD4j)eW@0#7`B|3wxhS1Saz3#c@d81T3)LQ@ zYUN^-Zb9i1l-i@z9HjzEEl|1|rAtw2MZ;yp%ZV+u(c?&36R$w24at>)+UV6NT@@3G z*PxUosYEF)ggm1*Csn(-MA1>oD_*4=C`Bk0QSwkSQL<^aP%0hpP;pRl4=5=4imPe^ zVyKN)a}}kwYWK2qZIas#rR!p@jX4yh>*={6$-R-un^2N1St)ySth0uWC_RkQttj1v z(rtu*w!+ zokvjWg;F<^o}l5l;MyXGt_eH5+%-O>MC`l^=QJRm^ zAe1JeG?+z(pfm=hq2$9*8c8yoI6_eENS8)2DK8FGi&VzO9Hnt6jc4wJgK{S&xsy?v zg3@f1rlK?hrD=&iT}XNRwSp+kB+g=%>}iWKhd7rwFV<07fYMTw7NR7h{Uo!VB0f!n zlzN8AXH`;m%S($AeKAVUGwX#!QMadhFHl;B(rRYCh|+SDR*}C%l-!ldCdV_Xp;}MN z(5*pfElMxPI!dpg^eRfPqx4#pQ{EA%{=cD;72lxrCX;Uw*C|ouzO9JLeHSGOeea>P z9i{asZAIyQls=(n14=TDKO*0V(ub;uDiu%Ek5Sqbb3v3g)3$~9Ded9A0g*#CC9;KZqeTx#~f9Y!))aj7yRzzNfs8V}S+MDS6sHi1Cy+J7bz~ql8 z{esd@hzeyJ|k8HVV?>6EZD7KpAGvm*yq5$81}ia&*K}e4zSOMeUZG7g53%GQ>HnRuAA)@s?0aE%W}SD#zK2goa+)$?GE3z|y71Iwl11T^n)!gf9323u&seo7WSaj>}slq@;qY?fh{956t=36 z-53sgBu8e1YEfPps~Iv%4W^niV_-{dV_{E#Jr4GGj@a6G*cl?E&Pl9iGW#Q4k~5kL zSLW?BIPG9hhy5e$8L;1mJrnjK*edwLo()?@Nm>*>7xsME^MuQxjR|2dh&jjkN!ZW8 zeu~bj_+P%L7Hk##VXO629jdpBVXuV!JnR=?tN0I_&t~>g*vqsr-Kv~w4lj>6?3ZB6 zT#_1M=PKB8tyjZ-4fYz?ufVQ~|2$c#@Kt42GwOBX8*x$)_M61Fh${YTV`h^}))%nf zh5Z4O?-AD%-zRPmWdAq9-U9nW*qdOh<$$>#3szj+0=8N#sBBK+l8XOSK7%dO?{jU8 zs!$GX%ud)}!rl#g8|+=MB^pRKwi9>2-l=S}eoG>xivP^|Mo=5`7wm7D+ynbNlD)9y zo)S+yO5aobfyz7DSP6_j!8rr=emLc@e}?@Z>|bC@J-@>KgJzkBaqyqW&2EQp7m~PIWkda~P9q34n8`pqg*a;ZhvV5h^K%%yZ{RI7icS6r38du8ln# z&M|O~g;P@$ZEPXd;go4(d(fPMa~zynaO%QQ!5@xV2uSK^W9KGZtLm*&56;PO>ccq^ zP6Ie9?89lOY_hI7jo_%@uZ>+LM^aYBe>jb)?}Kv+lTF~92Io|I)PoSk(-o1~`5+or~a{#Vk3I^WdCAey(6VpW&Pj=K?s*R6!BP#Umg~fT|PD#c(bsxdcvgI1=+k zR4Y42?=nTy!OQBjWNs^BYo)86TnWd5(*{l!&Q)+K;ap9_HGsv6*=DQ2Xq@&{xx zw(H)QqL`zFI5QodQSVf2=&9qNP$Eg7XNRhZDW4 zkn$li!rkCJM#H0m+PH_|JRWa62b@80dcu)7FIDw|(;H47WviH|jayE! zADjVj`U}^_ZQ!*VNd6OZ2Mdx6fipDb+W5Luq?HkH#=;p1XOuSn0*a&Ij8QfYY%-n3 z!5JTym6L)q5zY&6Cc&8pXEK}_EI5TY70xs`(}io}Wu4`eQ$3#vXBM0}^vo7aE}Xj2 zI2!Ze$e1jE6AxNEji01bT`V|H!+8eIv)cG>6t_}bL|jaKo_Y&y{IhUmYN-GYXDOUz za9)D*qRLf@8np6}GD}y$Sq*0;9Nw@Moy+?(MmcL@Cu7SiaNdIRDx5dqyq44;OMrY8 zM=r$LM0ryY6`j_>Sr6xJIPbzy&1vJ`O+4>u;~8BY27iaaUknp8I2+;o0_Q_GyWo5T z=Sw&r!}$!(CMgT&6F6H)HmeFJNI>{Bu2VhjIPo}qPQw?mu1(0m*+%87Sb?)0&JH*` zwFw(QHQ{^>=Lb07z}d^>ZaAukrj;Ey0{@N_P{+(2;6$wgs({&z-0$-9-nv`RjpqxAO2kx{Iv=D z=|36nsc=t8oK2GYPlL+~;hxSXtIlwn(!;Rqo&^tZ&xSh-?m2Kfz&#i4HE_>^+XC+S za4%xz&4?GkmEbQe{>$XWf+Uv^o2#Tmb@x)ZSHisvZY%1S!)>XuRPI)|tz!=Nig;Ng2$6FZXM47VTLTi`wnS1$csaBqd%3GQvoyG`V+Bxl<`hl-lG1-3#|_>i5LD zHgPE2``|tRw+r0+wTbE+<#3MMm0-B}c$ zs9HPR9&j1`+@5fI(V47MZXdXPV?VEKf4F1e4uCrn?m)OhSkEB1gN1054rfxjI-Ep4 z1*m%9ju4bXn%&$D-;L3yjc({|`PN1UVq&DeF^2vfEQ?yCya*(TQ z3U@l(8E|JRkyWYBT<&bRo8bz14engHFT$M%_ZhhJ;XcVy3y3QIYm?%0e+ur?tR(L9 zvv3!~tr};z@)gj|Eb=_u_{Mobn-q6oDcof&*p;J};O-00ah1Ax2Cp}yb zcO$d71h^aEejrI63*mmqtdHPsg8Ol-myh|0;wR-Zt|!?7_glE1!rcz{Gb(c1ehK$; z@-GDCDBq$&G2Cr%Rs7c`?PGEWaVK#X+;8BjXr@iBE=X~A5|{SC{SEG3xIe&+%O>&P z{hme6hx;SkpW&+RvFv_r@~tGl5Pywz-mSmG{TuEd)c;JT`d?Mg)$Tvk|Alu5+&KQL zi>MA+VZCbb+QK^&-g)p2gVzAw;qZ=ycLcl|s-UMj5AR5LM z%iwA7%Hh?9m!eV&o(lfj2?R6j*{bp@Sd?Fnag;UqNO`Fn*1v|mJ zLz|+a9Funv?;@&DqfMCu?;d!);N1)F5qS5(dk9_^cn`q4UkvI{SN}nB6^rD6_b^fR zfB2N*b%WO(-lOmyhxeHB@ZAkPPiRwAh#>C)uczYirwNZC(dz@RKXd!S>lZtd%N8 zm1knooQnVOrU+_NejuL)PsMzA(}^<E7OGrT z!;`c<2k&Wki>N#U?^%+n_^)EJw;0|sc+bOI0`CP?L^?B7O>B5esF~?>%@z-sLy;Z=W_TOneGKnI zHt~^KE7czwOoX=yp8PF9XI^^M2Y6fHeGczac+!o}Xp@~c`I`l)O`clia(|&ZtnTq` z@b%%_`{!wap{lnoOA%vXq-#=0%JM80{`Ts>>~J05-tNPojHwox;9lt zNs>+BpAY{`_~*bsi^|!8<;!GzB$vTok@K`^hf!$;|04Jo2xsy_L2cUE@GoZa5~Wx5 zrv-cm{-yAB_?N-I3jXErub{0Z{8sQ=vus+MmR5JYui`&*+f>CX|7s?$fuDh22|q2# z@aNw4nHm>uK?tBR;vd59>ku4>QKGy4Zk1! zKCuG7Z*qOrav%r%0r65sE0pJk3TMlF_)k&i65z+T>XS4qg#R>rIrnE`Km2F4Y3pcKivovBdiy;574TL3hra~= zizG|oFH;`X^RK9=_zz!w1W*ylUkU$ZDyxXA;jd9yDpxHr@Lz%dD#>eAx;%aPZy=DM zB*lM+|0ewH@ZW;}Dg1TtKZ5@@{P*EY+4orRT|wD$hreEt-IWwKz~2b}1L1OL)2qY( zFyRt3KBi|A{LSz`QM!tm6X94_`BhMEe3kNQ6&EAi2p5>J;~|sgZ~5k?1BZeplDiG91P#b~9WF4YB z(DL37j$^W(pd96X7bY7ZXo#Q@IhO#rH-i(DC!RLJNeG%EXpG=g1Scz9HFOG5_J7oM zM{ruApU&hNDj9#64bDVx7DW~RNzM_}rVmAM9)hb7oR8pA1kIRr0Rk235nPDiA_Ny} z)2r@Kb!P?5C5yT0GO1NExC}vS1eYgzO9ZWAu0Ej$SI~SVu}!RN(_cbxHG%?yYY=1+ za1IA)dNQ#`J&mY7Md#hd^HbvT{|)5{d(fg9K$r5vbr#MdnYuRx-E+BM{6&FcQH;1fvj)M=+YU zF$l)8tjy|hLbMresZUU1RsSa;m_~6jf+^IcdsE}PmHKqz3E4;911oHSI<$w zM-&8_EQ9m|AC58R6b8UUn1CpU>ky6)Vb;f+sStjcP0__YbN7) zwOcro-wLvydzq9Q;b#QjA@~u2ivJXUh@bQj{FEsBWs^4HzaUWYpU&SDk(Dd>1EI|1 zKM~3d{|li+@4pcqiQpfEK=5zk{|}*x|8i(E87;$V2oFVg1j54*9v)w*swbSVI&D?4 z3*k`+YalE`cr?PAl7;Y?*hwy*0+O)`8UMpn{Mk^O=_0H^SR3Jq2mjTkb8V(g2rCih5T==175@=t4;pP9VP4h4Cv$`b!V=9zqKVK_xyryLIJ6Nu%yMI0n{^sO zKjsJngduaIL}{zdichBSD$U;GwOiwW`rFjiSQOB z@)Mv zh-BCwLbw^>!w454?22$Q!bcDeM%WEuZ-kE`?1Atxgio-}$F*4llls*Xpv@YOknvx2 ztQVV;QhgAr2Y!ToiT#pc9Khs2goBh*eTa}lY(o%^MK~1U2!tyBBOFcx*Q{_PLWcct zl!)4_ClQW`iJTfj2H{Y;F`;U42`3^{U;YtK`RIQH5l%rk58+gVGZCs5DNaW?Bj(zy zL@oiUTDk695LHL`DZ*b6eui)-!mSA7oA+~sU(o-hYU042UicM7 z#{Y0fGTOTk{)q5vgnJQwgYa8~D*kJ;AEkK@YgnPp9*uAx!tW7&rxay)7vT>vi4}xD z2|*~c{pVQGX8(%tS42l3{0-qh2!E&H4}^aqth#E_J%m-y|LR+^;lGGL+kXn9Lj<)s z4G>jBbQq#TCHcQ=5y>i`u8VwGm*yi8orvftM70prKy)m{qY)jWN~zjvDk3dLWlWYQ zx;+2yr&57PJ>Da#ji?SH74{L;71ZXaK#k})Z4P5yR3Fjth#H7Uy`i95E2Bn}{M5S@kSJSu7lKy(iATtV3^ zLUcZ&OAs|fbRqQ%v^k9b(M5T%M&wC^LF6L}5UJoFhjIC}E<|k+-Gb;^L^mR8 zhv<6AMRXmp{r{dnBl#BSR*E+flSm%%BYb6`F2E|w7KdsX>&UX z%295sn;p?z>IRHDliyvn=MdeC=m|vkA$o{<7ex1yJV1O

%8+Ut{uNL|qX*is+G8 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

<>QBkepiPw# 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⪼yIMrnBRI7pF>oY5-1{_&{nqtzQ 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%0A`2DIch@y%qOS+*ffw%KHmZet;5jevk$W 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

K`L9LRjr#b-1L! z>IAC`XY3r=P!g=JjNM>$ht-RD55}H^qCQQ7-i&=<^^FvYvO#}X1L7^G$G)Bt+wnl6 z#tdpv;>I6f4TiT3)(|+xCE^GU_A)y ze$kkQ^#K+Kb4{kfngMG%E7L^dHKH+f-9w^D3GxQ(VOR^3eW{;k!I};0(KvR(n!`Ak zaUQJsupSXjs!)_da@13>7I4yIgrZ43=8wlVP*oSfl8<*`JppSmlP3w8P%ioWS2Ssv zQ>bs{^Iurc=9Fcyo{M;amw>eb)(fznhecohu@nBYvAt77lfkfFg!Lw@mtegL>*eIF zE(KVxz*@y*HRGC`zBcylLRMZAP3BX8^*XFKn5>Hw(S&BsTlrN^h$d@cz0J5@H2D

1=K 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Π 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 >RlRho}WLymUlGMfgrLb>h2>Th> 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≈#+AGzYP1ol?dL02Ak*h_U*9Sh{O9iT3gt6z?M^e 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
GS1?_eU&AzEo`o5M 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

3hNa_&!~_;bW#^++Q(ZAYH&zkqlg;xEPH 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

From ad2253f89bf5b0db6b4736108626f1aae51fc17e Mon Sep 17 00:00:00 2001 From: Jordan Blasenhauer Date: Tue, 2 Jan 2024 14:50:27 +0100 Subject: [PATCH 098/154] totp form name different from user one --- src/ui/templates/profile.html | 39 +++++++++++++++++------------------ 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/src/ui/templates/profile.html b/src/ui/templates/profile.html index a208fca0b..2bbab5fd7 100644 --- a/src/ui/templates/profile.html +++ b/src/ui/templates/profile.html @@ -1,10 +1,9 @@ {% extends "base.html" %} {% block content %} {% set current_endpoint = url_for(request.endpoint)[1:].split("/")[-1].strip() %} -
SETTINGS
@@ -134,13 +133,13 @@ url_for(request.endpoint)[1:].split("/")[-1].strip() %} method="POST" autocomplete="off" > -
-
- PROFILE -
-
+
+
+ PROFILE +
+
-
-
- TOTP -
-
+
+
+ TOTP +
+
@@ -551,9 +550,9 @@ url_for(request.endpoint)[1:].split("/")[-1].strip() %}