From 8d9a03d97f9d2f1f069a1a9a9220472214da3eed Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 4 Nov 2024 17:34:44 +0000 Subject: [PATCH] deploy: 62f0685c71c2c8c566abda43bb4c63da4e0786cb --- 404.html | 8 +++---- assets/js/935f2afb.a1efb349.js | 1 - assets/js/935f2afb.d4616a51.js | 1 + assets/js/c54b9243.1cdfc167.js | 1 + assets/js/c54b9243.390ab320.js | 1 - assets/js/da4ec9ab.4ce3b202.js | 1 + assets/js/da4ec9ab.7015495b.js | 1 - assets/js/f635a236.756991de.js | 1 + assets/js/main.3feb2b0a.js | 2 -- assets/js/main.9786ef1b.js | 2 ++ ...CENSE.txt => main.9786ef1b.js.LICENSE.txt} | 0 assets/js/runtime~main.5a029e5d.js | 1 - assets/js/runtime~main.6a86179b.js | 1 + blog.html | 8 +++---- blog/archive.html | 8 +++---- blog/argo-cd-application-scalability.html | 8 +++---- blog/argo-workflow-scalability.html | 8 +++---- ...ptimizing-data-quality-in-dev-portals.html | 8 +++---- blog/tags.html | 8 +++---- blog/tags/argo.html | 8 +++---- blog/tags/argocd.html | 8 +++---- blog/tags/backstage.html | 8 +++---- blog/tags/benchmarking.html | 8 +++---- blog/tags/cnoe.html | 8 +++---- blog/tags/data-ingestion.html | 8 +++---- blog/tags/dev-portal.html | 8 +++---- blog/tags/hello.html | 8 +++---- blog/tags/launch.html | 8 +++---- blog/tags/scalability.html | 8 +++---- blog/tags/workflows.html | 8 +++---- blog/welcome.html | 8 +++---- docs/category/configurations.html | 8 +++---- docs/category/deploy-a-platform.html | 8 +++---- docs/category/generate-templates.html | 8 +++---- docs/category/getting-started.html | 10 ++++---- docs/category/plugins.html | 8 +++---- docs/category/technology-capabilities.html | 8 +++---- docs/intro.html | 8 +++---- docs/intro/approach.html | 8 +++---- .../intro/capabilities/artifact-registry.html | 8 +++---- docs/intro/capabilities/code-repository.html | 8 +++---- docs/intro/capabilities/compute-platform.html | 8 +++---- .../intro/capabilities/config-repository.html | 8 +++---- .../capabilities/continuous-delivery.html | 8 +++---- .../capabilities/deployment-targets.html | 8 +++---- docs/intro/capabilities/developer-portal.html | 8 +++---- .../capabilities/identity-and-access.html | 8 +++---- docs/intro/capabilities/infra-as-code.html | 8 +++---- docs/intro/capabilities/observability.html | 8 +++---- .../packaging-and-templating.html | 8 +++---- .../intro/capabilities/secret-management.html | 8 +++---- .../intro/capabilities/secret-repository.html | 8 +++---- .../intro/capabilities/service-discovery.html | 8 +++---- docs/intro/capabilities/signing.html | 8 +++---- docs/intro/capabilities/validation.html | 8 +++---- .../capabilities/workflow-orchestration.html | 8 +++---- docs/intro/personas.html | 8 +++---- .../configs/access-management.html | 8 +++---- .../configs/control-plane.html | 8 +++---- .../configs/secrets.html | 8 +++---- .../installations/app-idp.html | 10 ++++---- .../installations/idpbuilder.html | 10 ++++---- .../idpbuilder/how-it-works.html | 10 ++++---- .../idpbuilder/local-oci-registry.html | 12 +++++----- .../installations/idpbuilder/override.html | 10 ++++---- .../installations/idpbuilder/quick-start.html | 10 ++++---- .../idpbuilder/troubleshooting.html | 24 +++++++++++++++++++ .../installations/idpbuilder/usage.html | 10 ++++---- .../integrations/generated.html | 8 +++---- .../generated/crd-templating.html | 8 +++---- .../integrations/generated/tf-templating.html | 8 +++---- .../integrations/localstack.html | 8 +++---- .../integrations/reference-impl.html | 8 +++---- .../integrations/terraform.html | 8 +++---- .../integrations/terraform/s3-bucket.html | 8 +++---- .../serverless-microservice-pattern.html | 8 +++---- .../integrations/verification.html | 8 +++---- .../plugins/argo-workflows.html | 8 +++---- .../plugins/scaffolder-backend.html | 8 +++---- .../plugins/scaffolder-frontend.html | 8 +++---- .../plugins/spark-plugin.html | 8 +++---- .../plugins/terraform-plugin.html | 8 +++---- docs/reference-implementation/technology.html | 8 +++---- index.html | 8 +++---- markdown-page.html | 8 +++---- radars.html | 8 +++---- radars/radar.html | 8 +++---- sitemap.xml | 2 +- 88 files changed, 337 insertions(+), 312 deletions(-) delete mode 100644 assets/js/935f2afb.a1efb349.js create mode 100644 assets/js/935f2afb.d4616a51.js create mode 100644 assets/js/c54b9243.1cdfc167.js delete mode 100644 assets/js/c54b9243.390ab320.js create mode 100644 assets/js/da4ec9ab.4ce3b202.js delete mode 100644 assets/js/da4ec9ab.7015495b.js create mode 100644 assets/js/f635a236.756991de.js delete mode 100644 assets/js/main.3feb2b0a.js create mode 100644 assets/js/main.9786ef1b.js rename assets/js/{main.3feb2b0a.js.LICENSE.txt => main.9786ef1b.js.LICENSE.txt} (100%) delete mode 100644 assets/js/runtime~main.5a029e5d.js create mode 100644 assets/js/runtime~main.6a86179b.js create mode 100644 docs/reference-implementation/installations/idpbuilder/troubleshooting.html diff --git a/404.html b/404.html index 1d81e021..51b1e57e 100644 --- a/404.html +++ b/404.html @@ -10,13 +10,13 @@ - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/assets/js/935f2afb.a1efb349.js b/assets/js/935f2afb.a1efb349.js deleted file mode 100644 index d4893eb8..00000000 --- a/assets/js/935f2afb.a1efb349.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcnoe=self.webpackChunkcnoe||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Deploy a Platform","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Getting Started","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"idpBuilder on Local Machine","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Quick Start","href":"/docs/reference-implementation/installations/idpbuilder/quick-start","docId":"reference-implementation/installations/idpbuilder/quick-start"},{"type":"link","label":"Using the idpBuilder","href":"/docs/reference-implementation/installations/idpbuilder/usage","docId":"reference-implementation/installations/idpbuilder/usage"},{"type":"link","label":"How it works","href":"/docs/reference-implementation/installations/idpbuilder/how-it-works","docId":"reference-implementation/installations/idpbuilder/how-it-works"},{"type":"link","label":"Override built-in services","href":"/docs/reference-implementation/installations/idpbuilder/override","docId":"reference-implementation/installations/idpbuilder/override"},{"type":"link","label":"Local OCI Registry","href":"/docs/reference-implementation/installations/idpbuilder/local-oci-registry","docId":"reference-implementation/installations/idpbuilder/local-oci-registry"}],"href":"/docs/reference-implementation/installations/idpbuilder/"},{"type":"link","label":"Amazon EKS","href":"/docs/reference-implementation/installations/app-idp","docId":"reference-implementation/installations/app-idp"}],"href":"/docs/category/getting-started"},{"type":"category","label":"Integrations","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Reference Implementation","href":"/docs/reference-implementation/integrations/reference-impl","docId":"reference-implementation/integrations/reference-impl"},{"type":"link","label":"Local Stack","href":"/docs/reference-implementation/integrations/localstack","docId":"reference-implementation/integrations/localstack"},{"type":"category","label":"Terraform Modules","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Amazon S3 Bucket","href":"/docs/reference-implementation/integrations/terraform/s3-bucket","docId":"reference-implementation/integrations/terraform/s3-bucket"},{"type":"link","label":"Serverless Microservice","href":"/docs/reference-implementation/integrations/terraform/serverless-microservice-pattern","docId":"reference-implementation/integrations/terraform/serverless-microservice-pattern"}],"href":"/docs/reference-implementation/integrations/terraform/"},{"type":"category","label":"Generate Templates","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"CNOE CLI","href":"/docs/reference-implementation/integrations/generated/","docId":"reference-implementation/integrations/generated/generated"},{"type":"link","label":"Templating of CRDs / XRDs","href":"/docs/reference-implementation/integrations/generated/crd-templating","docId":"reference-implementation/integrations/generated/crd-templating"},{"type":"link","label":"Templating of Terraform Modules","href":"/docs/reference-implementation/integrations/generated/tf-templating","docId":"reference-implementation/integrations/generated/tf-templating"}],"href":"/docs/category/generate-templates"},{"type":"link","label":"Verifications","href":"/docs/reference-implementation/integrations/verification","docId":"reference-implementation/integrations/verification"}]},{"type":"category","label":"Configurations","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Access Management","href":"/docs/reference-implementation/configs/access-management","docId":"reference-implementation/configs/access-management"},{"type":"link","label":"Infrastructure Control Plane","href":"/docs/reference-implementation/configs/control-plane","docId":"reference-implementation/configs/control-plane"},{"type":"link","label":"Secret Management","href":"/docs/reference-implementation/configs/secrets","docId":"reference-implementation/configs/secrets"}],"href":"/docs/category/configurations"},{"type":"category","label":"Plugins","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Terraform Plugin","href":"/docs/reference-implementation/plugins/terraform-plugin","docId":"reference-implementation/plugins/terraform-plugin"},{"type":"link","label":"Argo Workflows Plugin","href":"/docs/reference-implementation/plugins/argo-workflows","docId":"reference-implementation/plugins/argo-workflows"},{"type":"link","label":"Scaffolder Backend Plugin","href":"/docs/reference-implementation/plugins/scaffolder-backend","docId":"reference-implementation/plugins/scaffolder-backend"},{"type":"link","label":"Scaffolder Frontend Plugin","href":"/docs/reference-implementation/plugins/scaffolder-frontend","docId":"reference-implementation/plugins/scaffolder-frontend"},{"type":"link","label":"Apache Spark Plugin","href":"/docs/reference-implementation/plugins/spark-plugin","docId":"reference-implementation/plugins/spark-plugin"}],"href":"/docs/category/plugins"},{"type":"link","label":"Technology Choices","href":"/docs/reference-implementation/technology/","docId":"reference-implementation/technology/technology"}],"href":"/docs/category/deploy-a-platform"},{"type":"category","label":"Cloud Native Operational Excellence (CNOE)","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Approach","href":"/docs/intro/approach/","docId":"intro/approach/approach"},{"type":"link","label":"Personas","href":"/docs/intro/personas/","docId":"intro/personas/personas"},{"type":"category","label":"Technology Capabilities","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Artifact Registries","href":"/docs/intro/capabilities/artifact-registry","docId":"intro/capabilities/artifact-registry"},{"type":"link","label":"Packaging and Templating","href":"/docs/intro/capabilities/packaging-and-templating","docId":"intro/capabilities/packaging-and-templating"},{"type":"link","label":"Code Repositories","href":"/docs/intro/capabilities/code-repository","docId":"intro/capabilities/code-repository"},{"type":"link","label":"Config Repositories","href":"/docs/intro/capabilities/config-repository","docId":"intro/capabilities/config-repository"},{"type":"link","label":"Secret Repositories","href":"/docs/intro/capabilities/secret-repository","docId":"intro/capabilities/secret-repository"},{"type":"link","label":"Signing","href":"/docs/intro/capabilities/signing","docId":"intro/capabilities/signing"},{"type":"link","label":"Developer Portal","href":"/docs/intro/capabilities/developer-portal","docId":"intro/capabilities/developer-portal"},{"type":"link","label":"Identity and Access","href":"/docs/intro/capabilities/identity-and-access","docId":"intro/capabilities/identity-and-access"},{"type":"link","label":"Infrastructure as Code (IaC)","href":"/docs/intro/capabilities/infra-as-code","docId":"intro/capabilities/infra-as-code"},{"type":"link","label":"Continuous Delivery (CD)","href":"/docs/intro/capabilities/continuous-delivery","docId":"intro/capabilities/continuous-delivery"},{"type":"link","label":"Workflow Orchestration","href":"/docs/intro/capabilities/workflow-orchestration","docId":"intro/capabilities/workflow-orchestration"},{"type":"link","label":"Service Discovery","href":"/docs/intro/capabilities/service-discovery","docId":"intro/capabilities/service-discovery"},{"type":"link","label":"Secret Management","href":"/docs/intro/capabilities/secret-management","docId":"intro/capabilities/secret-management"},{"type":"link","label":"Validation","href":"/docs/intro/capabilities/validation","docId":"intro/capabilities/validation"},{"type":"link","label":"Compute Platform","href":"/docs/intro/capabilities/compute-platform","docId":"intro/capabilities/compute-platform"},{"type":"link","label":"Observability","href":"/docs/intro/capabilities/observability","docId":"intro/capabilities/observability"},{"type":"link","label":"Deployment Targets","href":"/docs/intro/capabilities/deployment-targets","docId":"intro/capabilities/deployment-targets"}],"href":"/docs/category/technology-capabilities"}],"href":"/docs/intro/"}]},"docs":{"intro/approach/approach":{"id":"intro/approach/approach","title":"Approach","description":"A multitudinal and communal plan","sidebar":"tutorialSidebar"},"intro/capabilities/artifact-registry":{"id":"intro/capabilities/artifact-registry","title":"Artifact Registries","description":"Preserves a signed, accessible, and traceable list of packaged components.","sidebar":"tutorialSidebar"},"intro/capabilities/code-repository":{"id":"intro/capabilities/code-repository","title":"Code Repositories","description":"Enable developers to collaborate on configuration asynchronously while keeping historical lineage of changes.","sidebar":"tutorialSidebar"},"intro/capabilities/compute-platform":{"id":"intro/capabilities/compute-platform","title":"Compute Platform","description":"The platform runtime","sidebar":"tutorialSidebar"},"intro/capabilities/config-repository":{"id":"intro/capabilities/config-repository","title":"Config Repositories","description":"Enable developers to collaborate on configuration asynchronously while keeping historical lineage of changes.","sidebar":"tutorialSidebar"},"intro/capabilities/continuous-delivery":{"id":"intro/capabilities/continuous-delivery","title":"Continuous Delivery (CD)","description":"CD gets infrastructure and application resources into a state, ready for receiving production workload.","sidebar":"tutorialSidebar"},"intro/capabilities/deployment-targets":{"id":"intro/capabilities/deployment-targets","title":"Deployment Targets","description":"The runtime environments that product apps and services run on.","sidebar":"tutorialSidebar"},"intro/capabilities/developer-portal":{"id":"intro/capabilities/developer-portal","title":"Developer Portal","description":"Software catalog of all components, systems and domains.","sidebar":"tutorialSidebar"},"intro/capabilities/identity-and-access":{"id":"intro/capabilities/identity-and-access","title":"Identity and Access","description":"A service that can be used to wire up Authentication and Authorization in a common well understood manner.","sidebar":"tutorialSidebar"},"intro/capabilities/infra-as-code":{"id":"intro/capabilities/infra-as-code","title":"Infrastructure as Code (IaC)","description":"Tooling required to spin up infrastructure resources for a given application.","sidebar":"tutorialSidebar"},"intro/capabilities/observability":{"id":"intro/capabilities/observability","title":"Observability","description":"Monitors, reports, and alerts on the overall well-being of the system.","sidebar":"tutorialSidebar"},"intro/capabilities/packaging-and-templating":{"id":"intro/capabilities/packaging-and-templating","title":"Packaging and Templating","description":"Monitors, reports, and alerts on the overall well-being of the system.","sidebar":"tutorialSidebar"},"intro/capabilities/secret-management":{"id":"intro/capabilities/secret-management","title":"Secret Management","description":"Secrets Management aims to shift this important responsibility to the platform where it can be implemented and audited in one place rather than many.","sidebar":"tutorialSidebar"},"intro/capabilities/secret-repository":{"id":"intro/capabilities/secret-repository","title":"Secret Repositories","description":"Secrets repositories are secure long term storage locations for sensitive data.","sidebar":"tutorialSidebar"},"intro/capabilities/service-discovery":{"id":"intro/capabilities/service-discovery","title":"Service Discovery","description":"It allows for the dynamic lookup or querying of a producer\u2019s interface/API details by consumers of that service.","sidebar":"tutorialSidebar"},"intro/capabilities/signing":{"id":"intro/capabilities/signing","title":"Signing","description":"Cryptographic signing of artifacts, be they source code commits, configurations, binaries or other, allow for verification of the consistency and integrity of the data they contain.","sidebar":"tutorialSidebar"},"intro/capabilities/validation":{"id":"intro/capabilities/validation","title":"Validation","description":"It ensures artifacts used in deployments are the ones expected.","sidebar":"tutorialSidebar"},"intro/capabilities/workflow-orchestration":{"id":"intro/capabilities/workflow-orchestration","title":"Workflow Orchestration","description":"The orchestration process to get artifacts ready for rollout","sidebar":"tutorialSidebar"},"intro/intro":{"id":"intro/intro","title":"Cloud Native Operational Excellence (CNOE)","description":"( pronounced Kuh.noo )","sidebar":"tutorialSidebar"},"intro/personas/personas":{"id":"intro/personas/personas","title":"Personas","description":"Who cares about CNOE?","sidebar":"tutorialSidebar"},"reference-implementation/configs/access-management":{"id":"reference-implementation/configs/access-management","title":"Access Management","description":"utilizing CNOE for Access Management","sidebar":"tutorialSidebar"},"reference-implementation/configs/control-plane":{"id":"reference-implementation/configs/control-plane","title":"Infrastructure Control Plane","description":"CNOE control plane","sidebar":"tutorialSidebar"},"reference-implementation/configs/secrets":{"id":"reference-implementation/configs/secrets","title":"Secret Management","description":"utilizing CNOE with secrets","sidebar":"tutorialSidebar"},"reference-implementation/installations/app-idp":{"id":"reference-implementation/installations/app-idp","title":"Amazon EKS","description":"deploy the CNOE IDP to Amazon EKS. \\n","sidebar":"tutorialSidebar"},"reference-implementation/installations/idpbuilder/how-it-works":{"id":"reference-implementation/installations/idpbuilder/how-it-works","title":"How it works","description":"How it works","sidebar":"tutorialSidebar"},"reference-implementation/installations/idpbuilder/idpbuilder":{"id":"reference-implementation/installations/idpbuilder/idpbuilder","title":"idpBuilder on Local Machine","description":"launch the CNOE IDP with a single binary","sidebar":"tutorialSidebar"},"reference-implementation/installations/idpbuilder/local-oci-registry":{"id":"reference-implementation/installations/idpbuilder/local-oci-registry","title":"Local OCI Registry","description":"Using the built-in OCI registry","sidebar":"tutorialSidebar"},"reference-implementation/installations/idpbuilder/override":{"id":"reference-implementation/installations/idpbuilder/override","title":"Override built-in services","description":"Override built-in Services","sidebar":"tutorialSidebar"},"reference-implementation/installations/idpbuilder/quick-start":{"id":"reference-implementation/installations/idpbuilder/quick-start","title":"Quick Start","description":"Quick Start","sidebar":"tutorialSidebar"},"reference-implementation/installations/idpbuilder/usage":{"id":"reference-implementation/installations/idpbuilder/usage","title":"Using the idpBuilder","description":"Using idpBuilder","sidebar":"tutorialSidebar"},"reference-implementation/integrations/generated/crd-templating":{"id":"reference-implementation/integrations/generated/crd-templating","title":"Templating of CRDs / XRDs","description":"Augmenting CNOE with CRD templates","sidebar":"tutorialSidebar"},"reference-implementation/integrations/generated/generated":{"id":"reference-implementation/integrations/generated/generated","title":"CNOE CLI","description":"Tooling to extend the IDP","sidebar":"tutorialSidebar"},"reference-implementation/integrations/generated/tf-templating":{"id":"reference-implementation/integrations/generated/tf-templating","title":"Templating of Terraform Modules","description":"Augmenting CNOE with terraform templates","sidebar":"tutorialSidebar"},"reference-implementation/integrations/localstack":{"id":"reference-implementation/integrations/localstack","title":"Local Stack","description":"integrate with localstack for building locally against AWS","sidebar":"tutorialSidebar"},"reference-implementation/integrations/reference-impl":{"id":"reference-implementation/integrations/reference-impl","title":"Reference Implementation","description":"Bootstrap the CNOE reference implementation","sidebar":"tutorialSidebar"},"reference-implementation/integrations/terraform/s3-bucket":{"id":"reference-implementation/integrations/terraform/s3-bucket","title":"Amazon S3 Bucket","description":"This pattern demonstrates the creation of an Amazon S3 bucket in an AWS region. You can download the respective Backstage templates from the s3 bucket folder under cnoe-io/backstage-terraform-integrations.","sidebar":"tutorialSidebar"},"reference-implementation/integrations/terraform/serverless-microservice-pattern":{"id":"reference-implementation/integrations/terraform/serverless-microservice-pattern","title":"Serverless Microservice","description":"This pattern demonstrates a Serverless Microservice built using Amazon API Gateway, AWS Lambda, and Amazon DynamoDB. You can download the respective Backstage templates from the serverless microservice folder under cnoe-io/backstage-terraform-integrations.","sidebar":"tutorialSidebar"},"reference-implementation/integrations/terraform/terraform":{"id":"reference-implementation/integrations/terraform/terraform","title":"Terraform Modules","description":"integrate with flux CD and tofu controller for terraform modules","sidebar":"tutorialSidebar"},"reference-implementation/integrations/verification":{"id":"reference-implementation/integrations/verification","title":"Verifications","description":"Verifying Deployments","sidebar":"tutorialSidebar"},"reference-implementation/plugins/argo-workflows":{"id":"reference-implementation/plugins/argo-workflows","title":"Argo Workflows Plugin","description":"Enabling Continuous Integration","sidebar":"tutorialSidebar"},"reference-implementation/plugins/scaffolder-backend":{"id":"reference-implementation/plugins/scaffolder-backend","title":"Scaffolder Backend Plugin","description":"Scaffolder Backend","sidebar":"tutorialSidebar"},"reference-implementation/plugins/scaffolder-frontend":{"id":"reference-implementation/plugins/scaffolder-frontend","title":"Scaffolder Frontend Plugin","description":"Scaffolder Frontend","sidebar":"tutorialSidebar"},"reference-implementation/plugins/spark-plugin":{"id":"reference-implementation/plugins/spark-plugin","title":"Apache Spark Plugin","description":"Enabling Big Data Workloads with Apache Spark","sidebar":"tutorialSidebar"},"reference-implementation/plugins/terraform-plugin":{"id":"reference-implementation/plugins/terraform-plugin","title":"Terraform Plugin","description":"Enabling Infrastructure as Code","sidebar":"tutorialSidebar"},"reference-implementation/technology/technology":{"id":"reference-implementation/technology/technology","title":"Technology Choices","description":"What technologies are available in CNOE IDP and Why.\\n","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.d4616a51.js b/assets/js/935f2afb.d4616a51.js new file mode 100644 index 00000000..f7d8787c --- /dev/null +++ b/assets/js/935f2afb.d4616a51.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcnoe=self.webpackChunkcnoe||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"tutorialSidebar":[{"type":"category","label":"Deploy a Platform","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Getting Started","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"idpBuilder on Local Machine","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Quick Start","href":"/docs/reference-implementation/installations/idpbuilder/quick-start","docId":"reference-implementation/installations/idpbuilder/quick-start"},{"type":"link","label":"Using the idpBuilder","href":"/docs/reference-implementation/installations/idpbuilder/usage","docId":"reference-implementation/installations/idpbuilder/usage"},{"type":"link","label":"How it works","href":"/docs/reference-implementation/installations/idpbuilder/how-it-works","docId":"reference-implementation/installations/idpbuilder/how-it-works"},{"type":"link","label":"Override built-in services","href":"/docs/reference-implementation/installations/idpbuilder/override","docId":"reference-implementation/installations/idpbuilder/override"},{"type":"link","label":"Local OCI Registry","href":"/docs/reference-implementation/installations/idpbuilder/local-oci-registry","docId":"reference-implementation/installations/idpbuilder/local-oci-registry"},{"type":"link","label":"Troubleshooting","href":"/docs/reference-implementation/installations/idpbuilder/troubleshooting","docId":"reference-implementation/installations/idpbuilder/troubleshooting"}],"href":"/docs/reference-implementation/installations/idpbuilder/"},{"type":"link","label":"Amazon EKS","href":"/docs/reference-implementation/installations/app-idp","docId":"reference-implementation/installations/app-idp"}],"href":"/docs/category/getting-started"},{"type":"category","label":"Integrations","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Reference Implementation","href":"/docs/reference-implementation/integrations/reference-impl","docId":"reference-implementation/integrations/reference-impl"},{"type":"link","label":"Local Stack","href":"/docs/reference-implementation/integrations/localstack","docId":"reference-implementation/integrations/localstack"},{"type":"category","label":"Terraform Modules","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Amazon S3 Bucket","href":"/docs/reference-implementation/integrations/terraform/s3-bucket","docId":"reference-implementation/integrations/terraform/s3-bucket"},{"type":"link","label":"Serverless Microservice","href":"/docs/reference-implementation/integrations/terraform/serverless-microservice-pattern","docId":"reference-implementation/integrations/terraform/serverless-microservice-pattern"}],"href":"/docs/reference-implementation/integrations/terraform/"},{"type":"category","label":"Generate Templates","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"CNOE CLI","href":"/docs/reference-implementation/integrations/generated/","docId":"reference-implementation/integrations/generated/generated"},{"type":"link","label":"Templating of CRDs / XRDs","href":"/docs/reference-implementation/integrations/generated/crd-templating","docId":"reference-implementation/integrations/generated/crd-templating"},{"type":"link","label":"Templating of Terraform Modules","href":"/docs/reference-implementation/integrations/generated/tf-templating","docId":"reference-implementation/integrations/generated/tf-templating"}],"href":"/docs/category/generate-templates"},{"type":"link","label":"Verifications","href":"/docs/reference-implementation/integrations/verification","docId":"reference-implementation/integrations/verification"}]},{"type":"category","label":"Configurations","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Access Management","href":"/docs/reference-implementation/configs/access-management","docId":"reference-implementation/configs/access-management"},{"type":"link","label":"Infrastructure Control Plane","href":"/docs/reference-implementation/configs/control-plane","docId":"reference-implementation/configs/control-plane"},{"type":"link","label":"Secret Management","href":"/docs/reference-implementation/configs/secrets","docId":"reference-implementation/configs/secrets"}],"href":"/docs/category/configurations"},{"type":"category","label":"Plugins","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Terraform Plugin","href":"/docs/reference-implementation/plugins/terraform-plugin","docId":"reference-implementation/plugins/terraform-plugin"},{"type":"link","label":"Argo Workflows Plugin","href":"/docs/reference-implementation/plugins/argo-workflows","docId":"reference-implementation/plugins/argo-workflows"},{"type":"link","label":"Scaffolder Backend Plugin","href":"/docs/reference-implementation/plugins/scaffolder-backend","docId":"reference-implementation/plugins/scaffolder-backend"},{"type":"link","label":"Scaffolder Frontend Plugin","href":"/docs/reference-implementation/plugins/scaffolder-frontend","docId":"reference-implementation/plugins/scaffolder-frontend"},{"type":"link","label":"Apache Spark Plugin","href":"/docs/reference-implementation/plugins/spark-plugin","docId":"reference-implementation/plugins/spark-plugin"}],"href":"/docs/category/plugins"},{"type":"link","label":"Technology Choices","href":"/docs/reference-implementation/technology/","docId":"reference-implementation/technology/technology"}],"href":"/docs/category/deploy-a-platform"},{"type":"category","label":"Cloud Native Operational Excellence (CNOE)","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Approach","href":"/docs/intro/approach/","docId":"intro/approach/approach"},{"type":"link","label":"Personas","href":"/docs/intro/personas/","docId":"intro/personas/personas"},{"type":"category","label":"Technology Capabilities","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Artifact Registries","href":"/docs/intro/capabilities/artifact-registry","docId":"intro/capabilities/artifact-registry"},{"type":"link","label":"Packaging and Templating","href":"/docs/intro/capabilities/packaging-and-templating","docId":"intro/capabilities/packaging-and-templating"},{"type":"link","label":"Code Repositories","href":"/docs/intro/capabilities/code-repository","docId":"intro/capabilities/code-repository"},{"type":"link","label":"Config Repositories","href":"/docs/intro/capabilities/config-repository","docId":"intro/capabilities/config-repository"},{"type":"link","label":"Secret Repositories","href":"/docs/intro/capabilities/secret-repository","docId":"intro/capabilities/secret-repository"},{"type":"link","label":"Signing","href":"/docs/intro/capabilities/signing","docId":"intro/capabilities/signing"},{"type":"link","label":"Developer Portal","href":"/docs/intro/capabilities/developer-portal","docId":"intro/capabilities/developer-portal"},{"type":"link","label":"Identity and Access","href":"/docs/intro/capabilities/identity-and-access","docId":"intro/capabilities/identity-and-access"},{"type":"link","label":"Infrastructure as Code (IaC)","href":"/docs/intro/capabilities/infra-as-code","docId":"intro/capabilities/infra-as-code"},{"type":"link","label":"Continuous Delivery (CD)","href":"/docs/intro/capabilities/continuous-delivery","docId":"intro/capabilities/continuous-delivery"},{"type":"link","label":"Workflow Orchestration","href":"/docs/intro/capabilities/workflow-orchestration","docId":"intro/capabilities/workflow-orchestration"},{"type":"link","label":"Service Discovery","href":"/docs/intro/capabilities/service-discovery","docId":"intro/capabilities/service-discovery"},{"type":"link","label":"Secret Management","href":"/docs/intro/capabilities/secret-management","docId":"intro/capabilities/secret-management"},{"type":"link","label":"Validation","href":"/docs/intro/capabilities/validation","docId":"intro/capabilities/validation"},{"type":"link","label":"Compute Platform","href":"/docs/intro/capabilities/compute-platform","docId":"intro/capabilities/compute-platform"},{"type":"link","label":"Observability","href":"/docs/intro/capabilities/observability","docId":"intro/capabilities/observability"},{"type":"link","label":"Deployment Targets","href":"/docs/intro/capabilities/deployment-targets","docId":"intro/capabilities/deployment-targets"}],"href":"/docs/category/technology-capabilities"}],"href":"/docs/intro/"}]},"docs":{"intro/approach/approach":{"id":"intro/approach/approach","title":"Approach","description":"A multitudinal and communal plan","sidebar":"tutorialSidebar"},"intro/capabilities/artifact-registry":{"id":"intro/capabilities/artifact-registry","title":"Artifact Registries","description":"Preserves a signed, accessible, and traceable list of packaged components.","sidebar":"tutorialSidebar"},"intro/capabilities/code-repository":{"id":"intro/capabilities/code-repository","title":"Code Repositories","description":"Enable developers to collaborate on configuration asynchronously while keeping historical lineage of changes.","sidebar":"tutorialSidebar"},"intro/capabilities/compute-platform":{"id":"intro/capabilities/compute-platform","title":"Compute Platform","description":"The platform runtime","sidebar":"tutorialSidebar"},"intro/capabilities/config-repository":{"id":"intro/capabilities/config-repository","title":"Config Repositories","description":"Enable developers to collaborate on configuration asynchronously while keeping historical lineage of changes.","sidebar":"tutorialSidebar"},"intro/capabilities/continuous-delivery":{"id":"intro/capabilities/continuous-delivery","title":"Continuous Delivery (CD)","description":"CD gets infrastructure and application resources into a state, ready for receiving production workload.","sidebar":"tutorialSidebar"},"intro/capabilities/deployment-targets":{"id":"intro/capabilities/deployment-targets","title":"Deployment Targets","description":"The runtime environments that product apps and services run on.","sidebar":"tutorialSidebar"},"intro/capabilities/developer-portal":{"id":"intro/capabilities/developer-portal","title":"Developer Portal","description":"Software catalog of all components, systems and domains.","sidebar":"tutorialSidebar"},"intro/capabilities/identity-and-access":{"id":"intro/capabilities/identity-and-access","title":"Identity and Access","description":"A service that can be used to wire up Authentication and Authorization in a common well understood manner.","sidebar":"tutorialSidebar"},"intro/capabilities/infra-as-code":{"id":"intro/capabilities/infra-as-code","title":"Infrastructure as Code (IaC)","description":"Tooling required to spin up infrastructure resources for a given application.","sidebar":"tutorialSidebar"},"intro/capabilities/observability":{"id":"intro/capabilities/observability","title":"Observability","description":"Monitors, reports, and alerts on the overall well-being of the system.","sidebar":"tutorialSidebar"},"intro/capabilities/packaging-and-templating":{"id":"intro/capabilities/packaging-and-templating","title":"Packaging and Templating","description":"Monitors, reports, and alerts on the overall well-being of the system.","sidebar":"tutorialSidebar"},"intro/capabilities/secret-management":{"id":"intro/capabilities/secret-management","title":"Secret Management","description":"Secrets Management aims to shift this important responsibility to the platform where it can be implemented and audited in one place rather than many.","sidebar":"tutorialSidebar"},"intro/capabilities/secret-repository":{"id":"intro/capabilities/secret-repository","title":"Secret Repositories","description":"Secrets repositories are secure long term storage locations for sensitive data.","sidebar":"tutorialSidebar"},"intro/capabilities/service-discovery":{"id":"intro/capabilities/service-discovery","title":"Service Discovery","description":"It allows for the dynamic lookup or querying of a producer\u2019s interface/API details by consumers of that service.","sidebar":"tutorialSidebar"},"intro/capabilities/signing":{"id":"intro/capabilities/signing","title":"Signing","description":"Cryptographic signing of artifacts, be they source code commits, configurations, binaries or other, allow for verification of the consistency and integrity of the data they contain.","sidebar":"tutorialSidebar"},"intro/capabilities/validation":{"id":"intro/capabilities/validation","title":"Validation","description":"It ensures artifacts used in deployments are the ones expected.","sidebar":"tutorialSidebar"},"intro/capabilities/workflow-orchestration":{"id":"intro/capabilities/workflow-orchestration","title":"Workflow Orchestration","description":"The orchestration process to get artifacts ready for rollout","sidebar":"tutorialSidebar"},"intro/intro":{"id":"intro/intro","title":"Cloud Native Operational Excellence (CNOE)","description":"( pronounced Kuh.noo )","sidebar":"tutorialSidebar"},"intro/personas/personas":{"id":"intro/personas/personas","title":"Personas","description":"Who cares about CNOE?","sidebar":"tutorialSidebar"},"reference-implementation/configs/access-management":{"id":"reference-implementation/configs/access-management","title":"Access Management","description":"utilizing CNOE for Access Management","sidebar":"tutorialSidebar"},"reference-implementation/configs/control-plane":{"id":"reference-implementation/configs/control-plane","title":"Infrastructure Control Plane","description":"CNOE control plane","sidebar":"tutorialSidebar"},"reference-implementation/configs/secrets":{"id":"reference-implementation/configs/secrets","title":"Secret Management","description":"utilizing CNOE with secrets","sidebar":"tutorialSidebar"},"reference-implementation/installations/app-idp":{"id":"reference-implementation/installations/app-idp","title":"Amazon EKS","description":"deploy the CNOE IDP to Amazon EKS. \\n","sidebar":"tutorialSidebar"},"reference-implementation/installations/idpbuilder/how-it-works":{"id":"reference-implementation/installations/idpbuilder/how-it-works","title":"How it works","description":"How it works","sidebar":"tutorialSidebar"},"reference-implementation/installations/idpbuilder/idpbuilder":{"id":"reference-implementation/installations/idpbuilder/idpbuilder","title":"idpBuilder on Local Machine","description":"launch the CNOE IDP with a single binary","sidebar":"tutorialSidebar"},"reference-implementation/installations/idpbuilder/local-oci-registry":{"id":"reference-implementation/installations/idpbuilder/local-oci-registry","title":"Local OCI Registry","description":"Using the built-in OCI registry","sidebar":"tutorialSidebar"},"reference-implementation/installations/idpbuilder/override":{"id":"reference-implementation/installations/idpbuilder/override","title":"Override built-in services","description":"Override built-in Services","sidebar":"tutorialSidebar"},"reference-implementation/installations/idpbuilder/quick-start":{"id":"reference-implementation/installations/idpbuilder/quick-start","title":"Quick Start","description":"Quick Start","sidebar":"tutorialSidebar"},"reference-implementation/installations/idpbuilder/troubleshooting":{"id":"reference-implementation/installations/idpbuilder/troubleshooting","title":"Troubleshooting","description":"Troubleshooting","sidebar":"tutorialSidebar"},"reference-implementation/installations/idpbuilder/usage":{"id":"reference-implementation/installations/idpbuilder/usage","title":"Using the idpBuilder","description":"Using idpBuilder","sidebar":"tutorialSidebar"},"reference-implementation/integrations/generated/crd-templating":{"id":"reference-implementation/integrations/generated/crd-templating","title":"Templating of CRDs / XRDs","description":"Augmenting CNOE with CRD templates","sidebar":"tutorialSidebar"},"reference-implementation/integrations/generated/generated":{"id":"reference-implementation/integrations/generated/generated","title":"CNOE CLI","description":"Tooling to extend the IDP","sidebar":"tutorialSidebar"},"reference-implementation/integrations/generated/tf-templating":{"id":"reference-implementation/integrations/generated/tf-templating","title":"Templating of Terraform Modules","description":"Augmenting CNOE with terraform templates","sidebar":"tutorialSidebar"},"reference-implementation/integrations/localstack":{"id":"reference-implementation/integrations/localstack","title":"Local Stack","description":"integrate with localstack for building locally against AWS","sidebar":"tutorialSidebar"},"reference-implementation/integrations/reference-impl":{"id":"reference-implementation/integrations/reference-impl","title":"Reference Implementation","description":"Bootstrap the CNOE reference implementation","sidebar":"tutorialSidebar"},"reference-implementation/integrations/terraform/s3-bucket":{"id":"reference-implementation/integrations/terraform/s3-bucket","title":"Amazon S3 Bucket","description":"This pattern demonstrates the creation of an Amazon S3 bucket in an AWS region. You can download the respective Backstage templates from the s3 bucket folder under cnoe-io/backstage-terraform-integrations.","sidebar":"tutorialSidebar"},"reference-implementation/integrations/terraform/serverless-microservice-pattern":{"id":"reference-implementation/integrations/terraform/serverless-microservice-pattern","title":"Serverless Microservice","description":"This pattern demonstrates a Serverless Microservice built using Amazon API Gateway, AWS Lambda, and Amazon DynamoDB. You can download the respective Backstage templates from the serverless microservice folder under cnoe-io/backstage-terraform-integrations.","sidebar":"tutorialSidebar"},"reference-implementation/integrations/terraform/terraform":{"id":"reference-implementation/integrations/terraform/terraform","title":"Terraform Modules","description":"integrate with flux CD and tofu controller for terraform modules","sidebar":"tutorialSidebar"},"reference-implementation/integrations/verification":{"id":"reference-implementation/integrations/verification","title":"Verifications","description":"Verifying Deployments","sidebar":"tutorialSidebar"},"reference-implementation/plugins/argo-workflows":{"id":"reference-implementation/plugins/argo-workflows","title":"Argo Workflows Plugin","description":"Enabling Continuous Integration","sidebar":"tutorialSidebar"},"reference-implementation/plugins/scaffolder-backend":{"id":"reference-implementation/plugins/scaffolder-backend","title":"Scaffolder Backend Plugin","description":"Scaffolder Backend","sidebar":"tutorialSidebar"},"reference-implementation/plugins/scaffolder-frontend":{"id":"reference-implementation/plugins/scaffolder-frontend","title":"Scaffolder Frontend Plugin","description":"Scaffolder Frontend","sidebar":"tutorialSidebar"},"reference-implementation/plugins/spark-plugin":{"id":"reference-implementation/plugins/spark-plugin","title":"Apache Spark Plugin","description":"Enabling Big Data Workloads with Apache Spark","sidebar":"tutorialSidebar"},"reference-implementation/plugins/terraform-plugin":{"id":"reference-implementation/plugins/terraform-plugin","title":"Terraform Plugin","description":"Enabling Infrastructure as Code","sidebar":"tutorialSidebar"},"reference-implementation/technology/technology":{"id":"reference-implementation/technology/technology","title":"Technology Choices","description":"What technologies are available in CNOE IDP and Why.\\n","sidebar":"tutorialSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/c54b9243.1cdfc167.js b/assets/js/c54b9243.1cdfc167.js new file mode 100644 index 00000000..85dfefff --- /dev/null +++ b/assets/js/c54b9243.1cdfc167.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcnoe=self.webpackChunkcnoe||[]).push([[7219],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var i=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=i.createContext({}),c=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=c(e.components);return i.createElement(s.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},m=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(n),m=r,g=d["".concat(s,".").concat(m)]||d[m]||p[m]||a;return n?i.createElement(g,o(o({ref:t},u),{},{components:n})):i.createElement(g,o({ref:t},u))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:r,o[1]=l;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var i=n(7462),r=(n(7294),n(3905));const a={sidebar_position:5,description:"Using the built-in OCI registry",title:"Local OCI Registry",index:5},o=void 0,l={unversionedId:"reference-implementation/installations/idpbuilder/local-oci-registry",id:"reference-implementation/installations/idpbuilder/local-oci-registry",title:"Local OCI Registry",description:"Using the built-in OCI registry",source:"@site/docs/reference-implementation/installations/idpbuilder/local-oci-registry.md",sourceDirName:"reference-implementation/installations/idpbuilder",slug:"/reference-implementation/installations/idpbuilder/local-oci-registry",permalink:"/docs/reference-implementation/installations/idpbuilder/local-oci-registry",draft:!1,editUrl:"https://github.com/cnoe-io/website/tree/main/docs/reference-implementation/installations/idpbuilder/local-oci-registry.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,description:"Using the built-in OCI registry",title:"Local OCI Registry",index:5},sidebar:"tutorialSidebar",previous:{title:"Override built-in services",permalink:"/docs/reference-implementation/installations/idpbuilder/override"},next:{title:"Troubleshooting",permalink:"/docs/reference-implementation/installations/idpbuilder/troubleshooting"}},s={},c=[{value:"Image Tags",id:"image-tags",level:3},{value:"Pulling Images",id:"pulling-images",level:3},{value:"No Pull Secret Needed",id:"no-pull-secret-needed",level:4},{value:"Referencing Images In Manifests On The Idpbuilder K8s Cluster",id:"referencing-images-in-manifests-on-the-idpbuilder-k8s-cluster",level:3},{value:"Only Works with Subdomain Based Idpbuilder Installations",id:"only-works-with-subdomain-based-idpbuilder-installations",level:3},{value:"Pulling Images From Inside Idpbuilder K8s Cluster:",id:"pulling-images-from-inside-idpbuilder-k8s-cluster",level:3}],u={toc:c};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,i.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,'The local Gitea instance created by idpbuilder contains a built-in OCI registry for hosting container images as "packages" in Gitea nomenclature.'),(0,r.kt)("p",null,"It is a standard OCI registry, so the API should be compatible with any tools that are OCI compliant. That includes the ",(0,r.kt)("inlineCode",{parentName:"p"},"docker")," cli."),(0,r.kt)("p",null,"For example, you can push an image by running:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker login gitea.cnoe.localtest.me:8443 \n# see the note section below for retrieving your password.\nUsername: giteaAdmin\nPassword: \n\n# you can build your own image instead of pulling.\ndocker pull docker.io/library/ubuntu:24.04 \ndocker tag docker.io/library/ubuntu:24.04 gitea.cnoe.localtest.me:8443/giteaadmin/ubuntu:24.04\n\ndocker push gitea.cnoe.localtest.me:8443/giteaadmin/ubuntu:24.04\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"NOTE"),": You can get the giteaAdmin password in the same way as you do for the web or git interface."),(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("inlineCode",{parentName:"p"},"./idpbuilder get secrets -p gitea")),(0,r.kt)("p",{parentName:"blockquote"},"Or you can use this to login directly:"),(0,r.kt)("pre",{parentName:"blockquote"},(0,r.kt)("code",{parentName:"pre"},"idpbuilder get secrets -p gitea -o json | \\\n jq '.[0].data.password' -r | \\\n docker login -u giteaAdmin --password-stdin gitea.cnoe.localtest.me:8443\n"))),(0,r.kt)("h3",{id:"image-tags"},"Image Tags"),(0,r.kt)("p",null,"Images pushed to Gitea OCI registry must be tagged with the following naming convention: "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"{registry}/{owner}/{image}\n")),(0,r.kt)("p",null,"For example: ",(0,r.kt)("inlineCode",{parentName:"p"},"gitea.cnoe.localtest.me:8443/giteaadmin/ubuntu:24.04")),(0,r.kt)("p",null,"This is a naming convention enforced by Gitea. Please see ",(0,r.kt)("a",{parentName:"p",href:"https://docs.gitea.com/usage/packages/container"},"the Gitea documentation")," for more information."),(0,r.kt)("h3",{id:"pulling-images"},"Pulling Images"),(0,r.kt)("p",null,"You can pull an image back to your local machine using your docker client like so:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"docker pull gitea.cnoe.localtest.me:8443/giteaadmin/ubuntu:24.04\n")),(0,r.kt)("h4",{id:"no-pull-secret-needed"},"No Pull Secret Needed"),(0,r.kt)("p",null,"The Gitea instance allows for anonymous read access. This means that you can pull git repo contents and container images without logging in."),(0,r.kt)("h3",{id:"referencing-images-in-manifests-on-the-idpbuilder-k8s-cluster"},"Referencing Images In Manifests On The Idpbuilder K8s Cluster"),(0,r.kt)("p",null,"You can create a pod or a deployment that references images in the local registry. For example, to create a pod:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},'apiVersion: v1\nkind: Pod\nmetadata:\n namespace: default\n name: debug-pod\nspec:\n containers:\n - image: gitea.cnoe.localtest.me:8443/giteaadmin/ubuntu:24.04\n name: debug-pod\n command:\n - sleep\n - "3600"\n')),(0,r.kt)("h3",{id:"only-works-with-subdomain-based-idpbuilder-installations"},"Only Works with Subdomain Based Idpbuilder Installations"),(0,r.kt)("p",null,"Right now because of the way the OCI registry specifications discovers information about a repo, this will only work with subdomain ",(0,r.kt)("inlineCode",{parentName:"p"},"gitea.cnoe.localtest.me"),"\nbased installations of idpbuilder's core capabilities."),(0,r.kt)("p",null,"If you would like to use path based routing, you will have to install and manage your own OCI registry at this time.\nOther registries might be able to handle this better, however which registries and how to configure them is beyond the scope of this document."),(0,r.kt)("p",null,'For more info on the OCI registry spec and the root cause of this "discovery" issue see the spec here:\n',(0,r.kt)("a",{parentName:"p",href:"https://specs.opencontainers.org/distribution-spec/?v=v1.0.0#checking-if-content-exists-in-the-registry"},"https://specs.opencontainers.org/distribution-spec/?v=v1.0.0#checking-if-content-exists-in-the-registry")),(0,r.kt)("h3",{id:"pulling-images-from-inside-idpbuilder-k8s-cluster"},"Pulling Images From Inside Idpbuilder K8s Cluster:"),(0,r.kt)("p",null,"Because we are using an NGINX Ingress and pushing our image from off cluster,\nGitea and its OCI registry think all images pushed to it are prefixed with ",(0,r.kt)("inlineCode",{parentName:"p"},"gitea.cnoe.localtest.me:8443"),"."),(0,r.kt)("p",null,"This is correct by the OCI spec standards. However, when you are on the cluster, that ingress is not available to you.\nYou can use the service name of gitea, but gitea will not know what images are being asked for at the svc domain name. To work around this issue, we use containerd to rewrite those image names so that they can be referenced at the external url:"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cnoe-io/idpbuilder/blob/main/pkg/kind/resources/kind.yaml.tmpl"},"the Kind config")," for how this is done."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c54b9243.390ab320.js b/assets/js/c54b9243.390ab320.js deleted file mode 100644 index 41fc0401..00000000 --- a/assets/js/c54b9243.390ab320.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcnoe=self.webpackChunkcnoe||[]).push([[7219],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>g});var i=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=i.createContext({}),c=function(e){var t=i.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=c(e.components);return i.createElement(s.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},m=i.forwardRef((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=c(n),m=r,g=d["".concat(s,".").concat(m)]||d[m]||p[m]||a;return n?i.createElement(g,o(o({ref:t},u),{},{components:n})):i.createElement(g,o({ref:t},u))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,o=new Array(a);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:r,o[1]=l;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var i=n(7462),r=(n(7294),n(3905));const a={sidebar_position:5,description:"Using the built-in OCI registry",title:"Local OCI Registry",index:5},o=void 0,l={unversionedId:"reference-implementation/installations/idpbuilder/local-oci-registry",id:"reference-implementation/installations/idpbuilder/local-oci-registry",title:"Local OCI Registry",description:"Using the built-in OCI registry",source:"@site/docs/reference-implementation/installations/idpbuilder/local-oci-registry.md",sourceDirName:"reference-implementation/installations/idpbuilder",slug:"/reference-implementation/installations/idpbuilder/local-oci-registry",permalink:"/docs/reference-implementation/installations/idpbuilder/local-oci-registry",draft:!1,editUrl:"https://github.com/cnoe-io/website/tree/main/docs/reference-implementation/installations/idpbuilder/local-oci-registry.md",tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,description:"Using the built-in OCI registry",title:"Local OCI Registry",index:5},sidebar:"tutorialSidebar",previous:{title:"Override built-in services",permalink:"/docs/reference-implementation/installations/idpbuilder/override"},next:{title:"Amazon EKS",permalink:"/docs/reference-implementation/installations/app-idp"}},s={},c=[{value:"Image Tags",id:"image-tags",level:3},{value:"Pulling Images",id:"pulling-images",level:3},{value:"No Pull Secret Needed",id:"no-pull-secret-needed",level:4},{value:"Referencing Images In Manifests On The Idpbuilder K8s Cluster",id:"referencing-images-in-manifests-on-the-idpbuilder-k8s-cluster",level:3},{value:"Only Works with Subdomain Based Idpbuilder Installations",id:"only-works-with-subdomain-based-idpbuilder-installations",level:3},{value:"Pulling Images From Inside Idpbuilder K8s Cluster:",id:"pulling-images-from-inside-idpbuilder-k8s-cluster",level:3}],u={toc:c};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,i.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("p",null,'The local Gitea instance created by idpbuilder contains a built-in OCI registry for hosting container images as "packages" in Gitea nomenclature.'),(0,r.kt)("p",null,"It is a standard OCI registry, so the API should be compatible with any tools that are OCI compliant. That includes the ",(0,r.kt)("inlineCode",{parentName:"p"},"docker")," cli."),(0,r.kt)("p",null,"For example, you can push an image by running:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"docker login gitea.cnoe.localtest.me:8443 \n# see the note section below for retrieving your password.\nUsername: giteaAdmin\nPassword: \n\n# you can build your own image instead of pulling.\ndocker pull docker.io/library/ubuntu:24.04 \ndocker tag docker.io/library/ubuntu:24.04 gitea.cnoe.localtest.me:8443/giteaadmin/ubuntu:24.04\n\ndocker push gitea.cnoe.localtest.me:8443/giteaadmin/ubuntu:24.04\n")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("strong",{parentName:"p"},"NOTE"),": You can get the giteaAdmin password in the same way as you do for the web or git interface."),(0,r.kt)("p",{parentName:"blockquote"},(0,r.kt)("inlineCode",{parentName:"p"},"./idpbuilder get secrets -p gitea")),(0,r.kt)("p",{parentName:"blockquote"},"Or you can use this to login directly:"),(0,r.kt)("pre",{parentName:"blockquote"},(0,r.kt)("code",{parentName:"pre"},"idpbuilder get secrets -p gitea -o json | \\\n jq '.[0].data.password' -r | \\\n docker login -u giteaAdmin --password-stdin gitea.cnoe.localtest.me:8443\n"))),(0,r.kt)("h3",{id:"image-tags"},"Image Tags"),(0,r.kt)("p",null,"Images pushed to Gitea OCI registry must be tagged with the following naming convention: "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"{registry}/{owner}/{image}\n")),(0,r.kt)("p",null,"For example: ",(0,r.kt)("inlineCode",{parentName:"p"},"gitea.cnoe.localtest.me:8443/giteaadmin/ubuntu:24.04")),(0,r.kt)("p",null,"This is a naming convention enforced by Gitea. Please see ",(0,r.kt)("a",{parentName:"p",href:"https://docs.gitea.com/usage/packages/container"},"the Gitea documentation")," for more information."),(0,r.kt)("h3",{id:"pulling-images"},"Pulling Images"),(0,r.kt)("p",null,"You can pull an image back to your local machine using your docker client like so:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"docker pull gitea.cnoe.localtest.me:8443/giteaadmin/ubuntu:24.04\n")),(0,r.kt)("h4",{id:"no-pull-secret-needed"},"No Pull Secret Needed"),(0,r.kt)("p",null,"The Gitea instance allows for anonymous read access. This means that you can pull git repo contents and container images without logging in."),(0,r.kt)("h3",{id:"referencing-images-in-manifests-on-the-idpbuilder-k8s-cluster"},"Referencing Images In Manifests On The Idpbuilder K8s Cluster"),(0,r.kt)("p",null,"You can create a pod or a deployment that references images in the local registry. For example, to create a pod:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},'apiVersion: v1\nkind: Pod\nmetadata:\n namespace: default\n name: debug-pod\nspec:\n containers:\n - image: gitea.cnoe.localtest.me:8443/giteaadmin/ubuntu:24.04\n name: debug-pod\n command:\n - sleep\n - "3600"\n')),(0,r.kt)("h3",{id:"only-works-with-subdomain-based-idpbuilder-installations"},"Only Works with Subdomain Based Idpbuilder Installations"),(0,r.kt)("p",null,"Right now because of the way the OCI registry specifications discovers information about a repo, this will only work with subdomain ",(0,r.kt)("inlineCode",{parentName:"p"},"gitea.cnoe.localtest.me"),"\nbased installations of idpbuilder's core capabilities."),(0,r.kt)("p",null,"If you would like to use path based routing, you will have to install and manage your own OCI registry at this time.\nOther registries might be able to handle this better, however which registries and how to configure them is beyond the scope of this document."),(0,r.kt)("p",null,'For more info on the OCI registry spec and the root cause of this "discovery" issue see the spec here:\n',(0,r.kt)("a",{parentName:"p",href:"https://specs.opencontainers.org/distribution-spec/?v=v1.0.0#checking-if-content-exists-in-the-registry"},"https://specs.opencontainers.org/distribution-spec/?v=v1.0.0#checking-if-content-exists-in-the-registry")),(0,r.kt)("h3",{id:"pulling-images-from-inside-idpbuilder-k8s-cluster"},"Pulling Images From Inside Idpbuilder K8s Cluster:"),(0,r.kt)("p",null,"Because we are using an NGINX Ingress and pushing our image from off cluster,\nGitea and its OCI registry think all images pushed to it are prefixed with ",(0,r.kt)("inlineCode",{parentName:"p"},"gitea.cnoe.localtest.me:8443"),"."),(0,r.kt)("p",null,"This is correct by the OCI spec standards. However, when you are on the cluster, that ingress is not available to you.\nYou can use the service name of gitea, but gitea will not know what images are being asked for at the svc domain name. To work around this issue, we use containerd to rewrite those image names so that they can be referenced at the external url:"),(0,r.kt)("p",null,"See ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/cnoe-io/idpbuilder/blob/main/pkg/kind/resources/kind.yaml.tmpl"},"the Kind config")," for how this is done."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/da4ec9ab.4ce3b202.js b/assets/js/da4ec9ab.4ce3b202.js new file mode 100644 index 00000000..fa536bb1 --- /dev/null +++ b/assets/js/da4ec9ab.4ce3b202.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcnoe=self.webpackChunkcnoe||[]).push([[8411],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(a),m=i,k=c["".concat(s,".").concat(m)]||c[m]||d[m]||o;return a?n.createElement(k,r(r({ref:t},u),{},{components:a})):n.createElement(k,r({ref:t},u))}));function k(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=a.length,r=new Array(o);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:i,r[1]=l;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=a(7462),i=(a(7294),a(3905));const o={sidebar_position:2,description:"deploy the CNOE IDP to Amazon EKS. \n",title:"Amazon EKS"},r=void 0,l={unversionedId:"reference-implementation/installations/app-idp",id:"reference-implementation/installations/app-idp",title:"Amazon EKS",description:"deploy the CNOE IDP to Amazon EKS. \n",source:"@site/docs/reference-implementation/installations/app-idp.md",sourceDirName:"reference-implementation/installations",slug:"/reference-implementation/installations/app-idp",permalink:"/docs/reference-implementation/installations/app-idp",draft:!1,editUrl:"https://github.com/cnoe-io/website/tree/main/docs/reference-implementation/installations/app-idp.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"deploy the CNOE IDP to Amazon EKS. \n",title:"Amazon EKS"},sidebar:"tutorialSidebar",previous:{title:"Troubleshooting",permalink:"/docs/reference-implementation/installations/idpbuilder/troubleshooting"},next:{title:"Reference Implementation",permalink:"/docs/reference-implementation/integrations/reference-impl"}},s={},p=[{value:"Secret handling",id:"secret-handling",level:2},{value:"Requirements",id:"requirements",level:2},{value:"Create GitHub Apps for your GitHub Organization",id:"create-github-apps-for-your-github-organization",level:2},{value:"Create a GitHub token",id:"create-a-github-token",level:2},{value:"Install",id:"install",level:2},{value:"Monitoring installation progress",id:"monitoring-installation-progress",level:3},{value:"If you installed it without automatic DNS configuration.",id:"if-you-installed-it-without-automatic-dns-configuration",level:3},{value:"If you installed it without Cert Manager.",id:"if-you-installed-it-without-cert-manager",level:3},{value:"What was created?",id:"what-was-created",level:2},{value:"Things created outside of the cluster",id:"things-created-outside-of-the-cluster",level:3},{value:"How to access the Backstage instance?",id:"how-to-access-the-backstage-instance",level:2},{value:"Uninstall",id:"uninstall",level:2},{value:"Resources deleted",id:"resources-deleted",level:3},{value:"What can you do in Backstage?",id:"what-can-you-do-in-backstage",level:2},{value:"Possible issues",id:"possible-issues",level:2},{value:"Cert-manager",id:"cert-manager",level:3},{value:"Troubleshooting",id:"troubleshooting",level:2},{value:"Creation Order notes",id:"creation-order-notes",level:2},{value:"Things created outside of the cluster with Keycloak SSO enabled.",id:"things-created-outside-of-the-cluster-with-keycloak-sso-enabled",level:2},{value:"Keycloak SSO with DNS and TLS certificates",id:"keycloak-sso-with-dns-and-tls-certificates",level:3},{value:"Keycloak SSO with manual DNS and TLS Certificates",id:"keycloak-sso-with-manual-dns-and-tls-certificates",level:3},{value:"No SSO",id:"no-sso",level:3}],u={toc:p};function c(e){let{components:t,...o}=e;return(0,i.kt)("wrapper",(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"GitHub Repo",type:"tip"},(0,i.kt)("p",{parentName:"admonition"}," ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/cnoe-io/reference-implementation-aws"},"cnoe-io/reference-implementation-aws"))),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("em",{parentName:"strong"},"NOTE:"))," Applications deployed in this repository are not meant or configured for production.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"overview",src:a(6204).Z,width:"2454",height:"2294"})),(0,i.kt)("h2",{id:"secret-handling"},"Secret handling"),(0,i.kt)("p",null,"Currently handled outside of repository and set via bash script. Secrets such as GitHub token and TLS private keys are stored in the ",(0,i.kt)("inlineCode",{parentName:"p"},"${REPO_ROOT}/private")," directory."),(0,i.kt)("p",null,"We may be able to use sealed secrets with full GitOps approach in the future."),(0,i.kt)("h2",{id:"requirements"},"Requirements"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Github ",(0,i.kt)("strong",{parentName:"li"},"Organization")," (free to create)"),(0,i.kt)("li",{parentName:"ul"},"An existing EKS cluster version (1.27+)"),(0,i.kt)("li",{parentName:"ul"},"AWS CLI (2.13+)"),(0,i.kt)("li",{parentName:"ul"},"Kubectl CLI (1.27+)"),(0,i.kt)("li",{parentName:"ul"},"jq"),(0,i.kt)("li",{parentName:"ul"},"git"),(0,i.kt)("li",{parentName:"ul"},"yq"),(0,i.kt)("li",{parentName:"ul"},"curl"),(0,i.kt)("li",{parentName:"ul"},"kustomize"),(0,i.kt)("li",{parentName:"ul"},"node + npm (if you choose to create GitHub App via CLI)")),(0,i.kt)("h2",{id:"create-github-apps-for-your-github-organization"},"Create GitHub Apps for your GitHub Organization"),(0,i.kt)("p",null,"GitHub app is used to enable integration between Backstage and GitHub.\nThis allows you for integration actions such as automatically importing Backstage configuration such as Organization information and templates."),(0,i.kt)("p",null,"We strongly encourage you to create a ",(0,i.kt)("strong",{parentName:"p"},"dedicated GitHub organization"),". If you don't have an organization for this purpose, please follow ",(0,i.kt)("a",{parentName:"p",href:"https://docs.github.com/en/organizations/collaborating-with-groups-in-organizations/creating-a-new-organization-from-scratch"},"this link")," to create one."),(0,i.kt)("p",null,"There are two ways to create GitHub integration with Backstage. You can use the Backstage CLI, or create it manually. See ",(0,i.kt)("a",{parentName:"p",href:"https://backstage.io/docs/integrations/github/github-apps"},"this page")," for more information on creating one manually. Once the app is created, place it under the private directory with the name ",(0,i.kt)("inlineCode",{parentName:"p"},"github-integration.yaml"),". "),(0,i.kt)("p",null,"To create one with the CLI, follow the steps below."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"npx '@backstage/cli' create-github-app ${GITHUB_ORG_NAME}\n# If prompted, select all for permissions or select permissions listed in this page https://backstage.io/docs/integrations/github/github-apps#app-permissions\n# In the browser window, allow access to all repositories then install the app.\n\n# move it to a \"private\" location. \nmkdir -p private\nGITHUB_APP_FILE=$(ls github-app-* | head -n1)\nmv ${GITHUB_APP_FILE} private/github-integration.yaml\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"The file created above contains credentials. Handle it with care.")),(0,i.kt)("p",null,"The rest of the installation process assumes the GitHub app credentials are available at ",(0,i.kt)("inlineCode",{parentName:"p"},"private/github-integration.yaml")),(0,i.kt)("p",null,"If you want to delete the GitHUb application, follow ",(0,i.kt)("a",{parentName:"p",href:"https://docs.github.com/en/apps/maintaining-github-apps/deleting-a-github-app"},"these steps"),". "),(0,i.kt)("h2",{id:"create-a-github-token"},"Create a GitHub token"),(0,i.kt)("p",null,"A GitHub token is needed by ArgoCD to get information about repositories under your Organization. "),(0,i.kt)("p",null,"The following permissions are needed: "),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Repository access for all repositories"),(0,i.kt)("li",{parentName:"ul"},"Read-only access to: Administration, Contents, and Metadata.\nGet your GitHub personal access token from: ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/settings/tokens?type=beta"},"https://github.com/settings/tokens?type=beta"))),(0,i.kt)("p",null,"Once you have your token, save it under the private directory with the name ",(0,i.kt)("inlineCode",{parentName:"p"},"github-token"),". For example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"# From the root of this repository.\n$ mkdir -p private\n$ vim private/github-token # paste your token\n# example output\n$ cat private/github-token\ngithub_pat_ABCDEDFEINDK....\n")),(0,i.kt)("h2",{id:"install"},"Install"),(0,i.kt)("p",null,"Follow the following steps to get started."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Create GitHub apps and GitHub token as described above."),(0,i.kt)("li",{parentName:"ol"},"Create a new EKS cluster. We do not include EKS cluster in the installation module because EKS cluster requirements vary between organizations and the focus of this is integration of different projects. If you prefer, you can create a new basic cluster with the included ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/cnoe-io/reference-implementation-aws/blob/main/eksctl.yaml"},(0,i.kt)("inlineCode",{parentName:"a"},"eksctl.yaml"))," file:\n",(0,i.kt)("inlineCode",{parentName:"li"},"eksctl create -f eksctl.yaml"),"\nYou can get eksctl from ",(0,i.kt)("a",{parentName:"li",href:"https://eksctl.io/"},"this link"),"."),(0,i.kt)("li",{parentName:"ol"},"If you don't have a public registered Route53 zone, ",(0,i.kt)("a",{parentName:"li",href:"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html"},"register a Route53 domain")," (be sure to use Route53 as the DNS service for the domain). We ",(0,i.kt)("strong",{parentName:"li"},"strongly encourage creating a dedicated sub domain")," for this. If you'd rather manage DNS yourself, you can set ",(0,i.kt)("inlineCode",{parentName:"li"},"enable_dns_management")," in the config file."),(0,i.kt)("li",{parentName:"ol"},"Get the host zone id and put it in the config file. ",(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"aws route53 list-hosted-zones-by-name --dns-name --query 'HostedZones[0].Id' --output text | cut -d'/' -f3\n# in the setups/config file, update the zone id.\nHOSTEDZONE_ID=ZO020111111\n"))),(0,i.kt)("li",{parentName:"ol"},"Update the ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/cnoe-io/reference-implementation-aws/blob/main/setups/config.yaml"},(0,i.kt)("inlineCode",{parentName:"a"},"setups/config"))," file with your own values."),(0,i.kt)("li",{parentName:"ol"},"Run ",(0,i.kt)("inlineCode",{parentName:"li"},"setups/install.sh")," and follow the prompts. See the section below about monitoring installation progress."),(0,i.kt)("li",{parentName:"ol"},"Once installation completes, navigate to ",(0,i.kt)("inlineCode",{parentName:"li"},"backstage.")," and log in as ",(0,i.kt)("inlineCode",{parentName:"li"},"user1"),". Password is available as a secret. You may need to wait for DNS propagation to complete to be able to login. May take ~10 minutes.",(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'kubectl get secrets -n keycloak keycloak-user-config -o go-template=\'{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\\n"}}{{end}}\'\n')))),(0,i.kt)("h3",{id:"monitoring-installation-progress"},"Monitoring installation progress"),(0,i.kt)("p",null,"Components are installed as ArgoCD Applications. You can monitor installation progress by going to ArgoCD UI. "),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'# Get the admin password \nkubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d\n\nkubectl port-forward svc/argocd-server -n argocd 8081:80\n')),(0,i.kt)("p",null,"Go to ",(0,i.kt)("a",{parentName:"p",href:"http://localhost:8081"},(0,i.kt)("inlineCode",{parentName:"a"},"http://localhost:8081"))," and login with the username ",(0,i.kt)("inlineCode",{parentName:"p"},"admin")," and password obtained above. In the UI you can look at resources created, their logs, and events."),(0,i.kt)("h3",{id:"if-you-installed-it-without-automatic-dns-configuration"},"If you installed it without automatic DNS configuration."),(0,i.kt)("p",null,"If you set ",(0,i.kt)("inlineCode",{parentName:"p"},"MANAGED_DNS=false"),", you are responsible for updating DNS records, thus external-dns is not installed. You have to set the following DNS records:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"backstage.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"keycloak.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"argo.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"argocd."))),(0,i.kt)("p",null,"Point these records to the value returned by the following command. "),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"k get svc -n ingress-nginx ingress-nginx-controller -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'\n")),(0,i.kt)("h3",{id:"if-you-installed-it-without-cert-manager"},"If you installed it without Cert Manager."),(0,i.kt)("p",null,"If you set ",(0,i.kt)("inlineCode",{parentName:"p"},"MANAGED_CERT=false"),", you are responsible for managing TLS certs, thus cert-manager is not installed. You must ",(0,i.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/services-networking/ingress/#tls"},"create TLS secrets accordingly"),"."),(0,i.kt)("p",null,"Run the following command to find where to create secrets."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'output=$(kubectl get ingress --all-namespaces -o json | jq -r \'.items[] | "\\(.metadata.namespace) \\(.spec.rules[].host) \\(.spec.tls[].secretName)"\')\necho -e "Namespace \\t Hostname \\t TLS Secret Name"\necho -e "$output"\n')),(0,i.kt)("p",null,"Secret format should be something like:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: v1\nkind: Secret\nmetadata:\n name: backstage.\n namespace: backstage\ndata:\n tls.crt: \n tls.key: \ntype: kubernetes.io/tls\n\n")),(0,i.kt)("h2",{id:"what-was-created"},"What was created?"),(0,i.kt)("p",null,"The following components are installed if you chose the full installation option."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Name"),(0,i.kt)("th",{parentName:"tr",align:null},"Version"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"argo-workflows"),(0,i.kt)("td",{parentName:"tr",align:null},"v3.4.8")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"argocd"),(0,i.kt)("td",{parentName:"tr",align:null},"v2.7.6")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"aws-load-balancer-controller"),(0,i.kt)("td",{parentName:"tr",align:null},"v2.5.3")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"backstage"),(0,i.kt)("td",{parentName:"tr",align:null},"v1.16.0")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"cert-manager"),(0,i.kt)("td",{parentName:"tr",align:null},"v1.12.2")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"crossplane"),(0,i.kt)("td",{parentName:"tr",align:null},"v1.12.2")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"external-dns"),(0,i.kt)("td",{parentName:"tr",align:null},"v0.13.5")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"ingress-nginx"),(0,i.kt)("td",{parentName:"tr",align:null},"v1.8.0")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"keycloak"),(0,i.kt)("td",{parentName:"tr",align:null},"v22.0.0")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"external-secrets"),(0,i.kt)("td",{parentName:"tr",align:null},"v0.9.2")))),(0,i.kt)("h3",{id:"things-created-outside-of-the-cluster"},"Things created outside of the cluster"),(0,i.kt)("p",null,"If full installation is done, you should have these DNS entries available. They all point to the Network Load Balancer."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"backstage.")," "),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"argo.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"keycloak."))),(0,i.kt)("p",null,"You can confirm these by querying at a register."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"dig A `backstage.` @1.1.1.1\n\nkubectl get svc -n ingress-nginx\n")),(0,i.kt)("p",null,"A Network Load Balancer is also created. This is managed by the AWS Load Balancer Controller and points to ingress-nginx pod. This pod is responsible for routing requests to correct places. As a result, HTTPS endpoints are created with valid certificates."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'openssl s_client -showcerts -servername id. -connect id.:443 <<< "Q"\ncurl https://backstage.\n')),(0,i.kt)("h2",{id:"how-to-access-the-backstage-instance"},"How to access the Backstage instance?"),(0,i.kt)("p",null,"When you open a browser window and go to ",(0,i.kt)("inlineCode",{parentName:"p"},"https://backstage."),", you should be prompted to login.\nTwo users are created during the installation process: ",(0,i.kt)("inlineCode",{parentName:"p"},"user1")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"user2"),". Their passwords are available in the keycloak namespace."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'k get secrets -n keycloak keycloak-user-config -o go-template=\'{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\\n"}}{{end}}\'\n')),(0,i.kt)("h2",{id:"uninstall"},"Uninstall"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Run ",(0,i.kt)("inlineCode",{parentName:"li"},"setups/uninstall.sh")," and follow the prompts."),(0,i.kt)("li",{parentName:"ol"},"Remove GitHub app from your Organization by following ",(0,i.kt)("a",{parentName:"li",href:"https://docs.github.com/en/apps/maintaining-github-apps/deleting-a-github-app"},"these steps"),"."),(0,i.kt)("li",{parentName:"ol"},"Remove token from your GitHub Organization by following ",(0,i.kt)("a",{parentName:"li",href:"https://docs.github.com/en/organizations/managing-programmatic-access-to-your-organization/reviewing-and-revoking-personal-access-tokens-in-your-organization"},"these steps"),"."),(0,i.kt)("li",{parentName:"ol"},"Remove the created GitHub Organization.")),(0,i.kt)("details",null,(0,i.kt)("summary",null,"Uninstall details"),(0,i.kt)("h3",{id:"resources-deleted"},"Resources deleted"),(0,i.kt)("p",null,"Currently resources created by applications are not deleted. For example, if you have Spark Jobs running, they are not deleted and may block deletion of the spark-operator app. ")),(0,i.kt)("h2",{id:"what-can-you-do-in-backstage"},"What can you do in Backstage?"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/cnoe-io/reference-implementation-aws/blob/main/demo.md"},"this doc")," for demos!"),(0,i.kt)("h2",{id:"possible-issues"},"Possible issues"),(0,i.kt)("h3",{id:"cert-manager"},"Cert-manager"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"by default it uses http-01 challenge. If you'd prefer using dns-01, you can update the ingress files."),(0,i.kt)("li",{parentName:"ul"},"You may get events like ",(0,i.kt)("inlineCode",{parentName:"li"},'Get "http:///.well-known/acme-challenge/09yldI6tVRvtWVPyMfwCwsYdOCEGGVWhmb1PWzXwhXI": dial tcp: lookup on 10.100.0.10:53: no such host'),". This is due to DNS propagation delay. It may take ~10 minutes.")),(0,i.kt)("h2",{id:"troubleshooting"},"Troubleshooting"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/cnoe-io/reference-implementation-aws/blob/main/TROUBLESHOOTING.md"},"the troubleshooting doc")," for more information."),(0,i.kt)("h2",{id:"creation-order-notes"},"Creation Order notes"),(0,i.kt)("details",null,(0,i.kt)("summary",null,"Click to expand"),(0,i.kt)("h2",{id:"things-created-outside-of-the-cluster-with-keycloak-sso-enabled"},"Things created outside of the cluster with Keycloak SSO enabled."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"Route53 records. Route53 hosted zones are not created. You must also register it if you want to be able to access through public DNS. These are managed by the external DNS controller.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"AWS Network Load Balancer. This is just the entrance to the Kubernetes cluster. This points to the default installation of Ingress Nginx and is managed by AWS Load Balancer Controller.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"TLS Certificates issued by Let's Encrypt. These are managed by cert-manager based on values in Ingress. They use the production issuer which means we must be very careful with how many and often we request certificates from them. The uninstall scripts backup certificates to the ",(0,i.kt)("inlineCode",{parentName:"p"},"private")," directory to avoid re-issuing certificates."))),(0,i.kt)("p",null,"These resources are controlled by Kubernetes controllers and thus should be deleted using controllers."),(0,i.kt)("h3",{id:"keycloak-sso-with-dns-and-tls-certificates"},"Keycloak SSO with DNS and TLS certificates"),(0,i.kt)("p",null,"If using keycloak SSO with fully automated DNS and certificate management, it must be:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"aws-load-balancer-controller"),(0,i.kt)("li",{parentName:"ol"},"ingress-nginx"),(0,i.kt)("li",{parentName:"ol"},"cert-manager"),(0,i.kt)("li",{parentName:"ol"},"external-dns"),(0,i.kt)("li",{parentName:"ol"},"keycloak"),(0,i.kt)("li",{parentName:"ol"},"The rest of stuff")),(0,i.kt)("h3",{id:"keycloak-sso-with-manual-dns-and-tls-certificates"},"Keycloak SSO with manual DNS and TLS Certificates"),(0,i.kt)("p",null,"If using keycloak SSO but manage DNS records and certificates manually. "),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"aws-load-balancer-controller"),(0,i.kt)("li",{parentName:"ol"},"ingress-nginx"),(0,i.kt)("li",{parentName:"ol"},"The rest of stuff minus cert-manager and external-dns")),(0,i.kt)("p",null,"In this case, you can issue your own certs and provide them as TLS secrets as specified in the ",(0,i.kt)("inlineCode",{parentName:"p"},"spec.tls[0].secretName")," field of Ingress objects.\nYou can also let NLB or ALB terminate TLS instead using the LB controller. This is not covered currently, but possible."),(0,i.kt)("h3",{id:"no-sso"},"No SSO"),(0,i.kt)("p",null,"If no SSO, no particular installation order. Eventual consistency works.")))}c.isMDXComponent=!0},6204:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/application-idp-f2aacfd5d39e181a17aee519f7a540ca.png"}}]); \ No newline at end of file diff --git a/assets/js/da4ec9ab.7015495b.js b/assets/js/da4ec9ab.7015495b.js deleted file mode 100644 index 360f798a..00000000 --- a/assets/js/da4ec9ab.7015495b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcnoe=self.webpackChunkcnoe||[]).push([[8411],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function r(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):r(r({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(a),m=i,k=u["".concat(s,".").concat(m)]||u[m]||d[m]||o;return a?n.createElement(k,r(r({ref:t},c),{},{components:a})):n.createElement(k,r({ref:t},c))}));function k(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=a.length,r=new Array(o);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:i,r[1]=l;for(var p=2;p{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>u,frontMatter:()=>o,metadata:()=>l,toc:()=>p});var n=a(7462),i=(a(7294),a(3905));const o={sidebar_position:2,description:"deploy the CNOE IDP to Amazon EKS. \n",title:"Amazon EKS"},r=void 0,l={unversionedId:"reference-implementation/installations/app-idp",id:"reference-implementation/installations/app-idp",title:"Amazon EKS",description:"deploy the CNOE IDP to Amazon EKS. \n",source:"@site/docs/reference-implementation/installations/app-idp.md",sourceDirName:"reference-implementation/installations",slug:"/reference-implementation/installations/app-idp",permalink:"/docs/reference-implementation/installations/app-idp",draft:!1,editUrl:"https://github.com/cnoe-io/website/tree/main/docs/reference-implementation/installations/app-idp.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2,description:"deploy the CNOE IDP to Amazon EKS. \n",title:"Amazon EKS"},sidebar:"tutorialSidebar",previous:{title:"Local OCI Registry",permalink:"/docs/reference-implementation/installations/idpbuilder/local-oci-registry"},next:{title:"Reference Implementation",permalink:"/docs/reference-implementation/integrations/reference-impl"}},s={},p=[{value:"Secret handling",id:"secret-handling",level:2},{value:"Requirements",id:"requirements",level:2},{value:"Create GitHub Apps for your GitHub Organization",id:"create-github-apps-for-your-github-organization",level:2},{value:"Create a GitHub token",id:"create-a-github-token",level:2},{value:"Install",id:"install",level:2},{value:"Monitoring installation progress",id:"monitoring-installation-progress",level:3},{value:"If you installed it without automatic DNS configuration.",id:"if-you-installed-it-without-automatic-dns-configuration",level:3},{value:"If you installed it without Cert Manager.",id:"if-you-installed-it-without-cert-manager",level:3},{value:"What was created?",id:"what-was-created",level:2},{value:"Things created outside of the cluster",id:"things-created-outside-of-the-cluster",level:3},{value:"How to access the Backstage instance?",id:"how-to-access-the-backstage-instance",level:2},{value:"Uninstall",id:"uninstall",level:2},{value:"Resources deleted",id:"resources-deleted",level:3},{value:"What can you do in Backstage?",id:"what-can-you-do-in-backstage",level:2},{value:"Possible issues",id:"possible-issues",level:2},{value:"Cert-manager",id:"cert-manager",level:3},{value:"Troubleshooting",id:"troubleshooting",level:2},{value:"Creation Order notes",id:"creation-order-notes",level:2},{value:"Things created outside of the cluster with Keycloak SSO enabled.",id:"things-created-outside-of-the-cluster-with-keycloak-sso-enabled",level:2},{value:"Keycloak SSO with DNS and TLS certificates",id:"keycloak-sso-with-dns-and-tls-certificates",level:3},{value:"Keycloak SSO with manual DNS and TLS Certificates",id:"keycloak-sso-with-manual-dns-and-tls-certificates",level:3},{value:"No SSO",id:"no-sso",level:3}],c={toc:p};function u(e){let{components:t,...o}=e;return(0,i.kt)("wrapper",(0,n.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{title:"GitHub Repo",type:"tip"},(0,i.kt)("p",{parentName:"admonition"}," ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/cnoe-io/reference-implementation-aws"},"cnoe-io/reference-implementation-aws"))),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},(0,i.kt)("strong",{parentName:"p"},(0,i.kt)("em",{parentName:"strong"},"NOTE:"))," Applications deployed in this repository are not meant or configured for production.")),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"overview",src:a(6204).Z,width:"2454",height:"2294"})),(0,i.kt)("h2",{id:"secret-handling"},"Secret handling"),(0,i.kt)("p",null,"Currently handled outside of repository and set via bash script. Secrets such as GitHub token and TLS private keys are stored in the ",(0,i.kt)("inlineCode",{parentName:"p"},"${REPO_ROOT}/private")," directory."),(0,i.kt)("p",null,"We may be able to use sealed secrets with full GitOps approach in the future."),(0,i.kt)("h2",{id:"requirements"},"Requirements"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Github ",(0,i.kt)("strong",{parentName:"li"},"Organization")," (free to create)"),(0,i.kt)("li",{parentName:"ul"},"An existing EKS cluster version (1.27+)"),(0,i.kt)("li",{parentName:"ul"},"AWS CLI (2.13+)"),(0,i.kt)("li",{parentName:"ul"},"Kubectl CLI (1.27+)"),(0,i.kt)("li",{parentName:"ul"},"jq"),(0,i.kt)("li",{parentName:"ul"},"git"),(0,i.kt)("li",{parentName:"ul"},"yq"),(0,i.kt)("li",{parentName:"ul"},"curl"),(0,i.kt)("li",{parentName:"ul"},"kustomize"),(0,i.kt)("li",{parentName:"ul"},"node + npm (if you choose to create GitHub App via CLI)")),(0,i.kt)("h2",{id:"create-github-apps-for-your-github-organization"},"Create GitHub Apps for your GitHub Organization"),(0,i.kt)("p",null,"GitHub app is used to enable integration between Backstage and GitHub.\nThis allows you for integration actions such as automatically importing Backstage configuration such as Organization information and templates."),(0,i.kt)("p",null,"We strongly encourage you to create a ",(0,i.kt)("strong",{parentName:"p"},"dedicated GitHub organization"),". If you don't have an organization for this purpose, please follow ",(0,i.kt)("a",{parentName:"p",href:"https://docs.github.com/en/organizations/collaborating-with-groups-in-organizations/creating-a-new-organization-from-scratch"},"this link")," to create one."),(0,i.kt)("p",null,"There are two ways to create GitHub integration with Backstage. You can use the Backstage CLI, or create it manually. See ",(0,i.kt)("a",{parentName:"p",href:"https://backstage.io/docs/integrations/github/github-apps"},"this page")," for more information on creating one manually. Once the app is created, place it under the private directory with the name ",(0,i.kt)("inlineCode",{parentName:"p"},"github-integration.yaml"),". "),(0,i.kt)("p",null,"To create one with the CLI, follow the steps below."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"npx '@backstage/cli' create-github-app ${GITHUB_ORG_NAME}\n# If prompted, select all for permissions or select permissions listed in this page https://backstage.io/docs/integrations/github/github-apps#app-permissions\n# In the browser window, allow access to all repositories then install the app.\n\n# move it to a \"private\" location. \nmkdir -p private\nGITHUB_APP_FILE=$(ls github-app-* | head -n1)\nmv ${GITHUB_APP_FILE} private/github-integration.yaml\n")),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"The file created above contains credentials. Handle it with care.")),(0,i.kt)("p",null,"The rest of the installation process assumes the GitHub app credentials are available at ",(0,i.kt)("inlineCode",{parentName:"p"},"private/github-integration.yaml")),(0,i.kt)("p",null,"If you want to delete the GitHUb application, follow ",(0,i.kt)("a",{parentName:"p",href:"https://docs.github.com/en/apps/maintaining-github-apps/deleting-a-github-app"},"these steps"),". "),(0,i.kt)("h2",{id:"create-a-github-token"},"Create a GitHub token"),(0,i.kt)("p",null,"A GitHub token is needed by ArgoCD to get information about repositories under your Organization. "),(0,i.kt)("p",null,"The following permissions are needed: "),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Repository access for all repositories"),(0,i.kt)("li",{parentName:"ul"},"Read-only access to: Administration, Contents, and Metadata.\nGet your GitHub personal access token from: ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/settings/tokens?type=beta"},"https://github.com/settings/tokens?type=beta"))),(0,i.kt)("p",null,"Once you have your token, save it under the private directory with the name ",(0,i.kt)("inlineCode",{parentName:"p"},"github-token"),". For example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"# From the root of this repository.\n$ mkdir -p private\n$ vim private/github-token # paste your token\n# example output\n$ cat private/github-token\ngithub_pat_ABCDEDFEINDK....\n")),(0,i.kt)("h2",{id:"install"},"Install"),(0,i.kt)("p",null,"Follow the following steps to get started."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Create GitHub apps and GitHub token as described above."),(0,i.kt)("li",{parentName:"ol"},"Create a new EKS cluster. We do not include EKS cluster in the installation module because EKS cluster requirements vary between organizations and the focus of this is integration of different projects. If you prefer, you can create a new basic cluster with the included ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/cnoe-io/reference-implementation-aws/blob/main/eksctl.yaml"},(0,i.kt)("inlineCode",{parentName:"a"},"eksctl.yaml"))," file:\n",(0,i.kt)("inlineCode",{parentName:"li"},"eksctl create -f eksctl.yaml"),"\nYou can get eksctl from ",(0,i.kt)("a",{parentName:"li",href:"https://eksctl.io/"},"this link"),"."),(0,i.kt)("li",{parentName:"ol"},"If you don't have a public registered Route53 zone, ",(0,i.kt)("a",{parentName:"li",href:"https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/domain-register.html"},"register a Route53 domain")," (be sure to use Route53 as the DNS service for the domain). We ",(0,i.kt)("strong",{parentName:"li"},"strongly encourage creating a dedicated sub domain")," for this. If you'd rather manage DNS yourself, you can set ",(0,i.kt)("inlineCode",{parentName:"li"},"enable_dns_management")," in the config file."),(0,i.kt)("li",{parentName:"ol"},"Get the host zone id and put it in the config file. ",(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"aws route53 list-hosted-zones-by-name --dns-name --query 'HostedZones[0].Id' --output text | cut -d'/' -f3\n# in the setups/config file, update the zone id.\nHOSTEDZONE_ID=ZO020111111\n"))),(0,i.kt)("li",{parentName:"ol"},"Update the ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/cnoe-io/reference-implementation-aws/blob/main/setups/config.yaml"},(0,i.kt)("inlineCode",{parentName:"a"},"setups/config"))," file with your own values."),(0,i.kt)("li",{parentName:"ol"},"Run ",(0,i.kt)("inlineCode",{parentName:"li"},"setups/install.sh")," and follow the prompts. See the section below about monitoring installation progress."),(0,i.kt)("li",{parentName:"ol"},"Once installation completes, navigate to ",(0,i.kt)("inlineCode",{parentName:"li"},"backstage.")," and log in as ",(0,i.kt)("inlineCode",{parentName:"li"},"user1"),". Password is available as a secret. You may need to wait for DNS propagation to complete to be able to login. May take ~10 minutes.",(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'kubectl get secrets -n keycloak keycloak-user-config -o go-template=\'{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\\n"}}{{end}}\'\n')))),(0,i.kt)("h3",{id:"monitoring-installation-progress"},"Monitoring installation progress"),(0,i.kt)("p",null,"Components are installed as ArgoCD Applications. You can monitor installation progress by going to ArgoCD UI. "),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'# Get the admin password \nkubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d\n\nkubectl port-forward svc/argocd-server -n argocd 8081:80\n')),(0,i.kt)("p",null,"Go to ",(0,i.kt)("a",{parentName:"p",href:"http://localhost:8081"},(0,i.kt)("inlineCode",{parentName:"a"},"http://localhost:8081"))," and login with the username ",(0,i.kt)("inlineCode",{parentName:"p"},"admin")," and password obtained above. In the UI you can look at resources created, their logs, and events."),(0,i.kt)("h3",{id:"if-you-installed-it-without-automatic-dns-configuration"},"If you installed it without automatic DNS configuration."),(0,i.kt)("p",null,"If you set ",(0,i.kt)("inlineCode",{parentName:"p"},"MANAGED_DNS=false"),", you are responsible for updating DNS records, thus external-dns is not installed. You have to set the following DNS records:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"backstage.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"keycloak.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"argo.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"argocd."))),(0,i.kt)("p",null,"Point these records to the value returned by the following command. "),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"k get svc -n ingress-nginx ingress-nginx-controller -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'\n")),(0,i.kt)("h3",{id:"if-you-installed-it-without-cert-manager"},"If you installed it without Cert Manager."),(0,i.kt)("p",null,"If you set ",(0,i.kt)("inlineCode",{parentName:"p"},"MANAGED_CERT=false"),", you are responsible for managing TLS certs, thus cert-manager is not installed. You must ",(0,i.kt)("a",{parentName:"p",href:"https://kubernetes.io/docs/concepts/services-networking/ingress/#tls"},"create TLS secrets accordingly"),"."),(0,i.kt)("p",null,"Run the following command to find where to create secrets."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'output=$(kubectl get ingress --all-namespaces -o json | jq -r \'.items[] | "\\(.metadata.namespace) \\(.spec.rules[].host) \\(.spec.tls[].secretName)"\')\necho -e "Namespace \\t Hostname \\t TLS Secret Name"\necho -e "$output"\n')),(0,i.kt)("p",null,"Secret format should be something like:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"apiVersion: v1\nkind: Secret\nmetadata:\n name: backstage.\n namespace: backstage\ndata:\n tls.crt: \n tls.key: \ntype: kubernetes.io/tls\n\n")),(0,i.kt)("h2",{id:"what-was-created"},"What was created?"),(0,i.kt)("p",null,"The following components are installed if you chose the full installation option."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Name"),(0,i.kt)("th",{parentName:"tr",align:null},"Version"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"argo-workflows"),(0,i.kt)("td",{parentName:"tr",align:null},"v3.4.8")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"argocd"),(0,i.kt)("td",{parentName:"tr",align:null},"v2.7.6")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"aws-load-balancer-controller"),(0,i.kt)("td",{parentName:"tr",align:null},"v2.5.3")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"backstage"),(0,i.kt)("td",{parentName:"tr",align:null},"v1.16.0")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"cert-manager"),(0,i.kt)("td",{parentName:"tr",align:null},"v1.12.2")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"crossplane"),(0,i.kt)("td",{parentName:"tr",align:null},"v1.12.2")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"external-dns"),(0,i.kt)("td",{parentName:"tr",align:null},"v0.13.5")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"ingress-nginx"),(0,i.kt)("td",{parentName:"tr",align:null},"v1.8.0")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"keycloak"),(0,i.kt)("td",{parentName:"tr",align:null},"v22.0.0")),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"external-secrets"),(0,i.kt)("td",{parentName:"tr",align:null},"v0.9.2")))),(0,i.kt)("h3",{id:"things-created-outside-of-the-cluster"},"Things created outside of the cluster"),(0,i.kt)("p",null,"If full installation is done, you should have these DNS entries available. They all point to the Network Load Balancer."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"backstage.")," "),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"argo.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"keycloak."))),(0,i.kt)("p",null,"You can confirm these by querying at a register."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"dig A `backstage.` @1.1.1.1\n\nkubectl get svc -n ingress-nginx\n")),(0,i.kt)("p",null,"A Network Load Balancer is also created. This is managed by the AWS Load Balancer Controller and points to ingress-nginx pod. This pod is responsible for routing requests to correct places. As a result, HTTPS endpoints are created with valid certificates."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'openssl s_client -showcerts -servername id. -connect id.:443 <<< "Q"\ncurl https://backstage.\n')),(0,i.kt)("h2",{id:"how-to-access-the-backstage-instance"},"How to access the Backstage instance?"),(0,i.kt)("p",null,"When you open a browser window and go to ",(0,i.kt)("inlineCode",{parentName:"p"},"https://backstage."),", you should be prompted to login.\nTwo users are created during the installation process: ",(0,i.kt)("inlineCode",{parentName:"p"},"user1")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"user2"),". Their passwords are available in the keycloak namespace."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'k get secrets -n keycloak keycloak-user-config -o go-template=\'{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\\n"}}{{end}}\'\n')),(0,i.kt)("h2",{id:"uninstall"},"Uninstall"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Run ",(0,i.kt)("inlineCode",{parentName:"li"},"setups/uninstall.sh")," and follow the prompts."),(0,i.kt)("li",{parentName:"ol"},"Remove GitHub app from your Organization by following ",(0,i.kt)("a",{parentName:"li",href:"https://docs.github.com/en/apps/maintaining-github-apps/deleting-a-github-app"},"these steps"),"."),(0,i.kt)("li",{parentName:"ol"},"Remove token from your GitHub Organization by following ",(0,i.kt)("a",{parentName:"li",href:"https://docs.github.com/en/organizations/managing-programmatic-access-to-your-organization/reviewing-and-revoking-personal-access-tokens-in-your-organization"},"these steps"),"."),(0,i.kt)("li",{parentName:"ol"},"Remove the created GitHub Organization.")),(0,i.kt)("details",null,(0,i.kt)("summary",null,"Uninstall details"),(0,i.kt)("h3",{id:"resources-deleted"},"Resources deleted"),(0,i.kt)("p",null,"Currently resources created by applications are not deleted. For example, if you have Spark Jobs running, they are not deleted and may block deletion of the spark-operator app. ")),(0,i.kt)("h2",{id:"what-can-you-do-in-backstage"},"What can you do in Backstage?"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/cnoe-io/reference-implementation-aws/blob/main/demo.md"},"this doc")," for demos!"),(0,i.kt)("h2",{id:"possible-issues"},"Possible issues"),(0,i.kt)("h3",{id:"cert-manager"},"Cert-manager"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"by default it uses http-01 challenge. If you'd prefer using dns-01, you can update the ingress files."),(0,i.kt)("li",{parentName:"ul"},"You may get events like ",(0,i.kt)("inlineCode",{parentName:"li"},'Get "http:///.well-known/acme-challenge/09yldI6tVRvtWVPyMfwCwsYdOCEGGVWhmb1PWzXwhXI": dial tcp: lookup on 10.100.0.10:53: no such host'),". This is due to DNS propagation delay. It may take ~10 minutes.")),(0,i.kt)("h2",{id:"troubleshooting"},"Troubleshooting"),(0,i.kt)("p",null,"See ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/cnoe-io/reference-implementation-aws/blob/main/TROUBLESHOOTING.md"},"the troubleshooting doc")," for more information."),(0,i.kt)("h2",{id:"creation-order-notes"},"Creation Order notes"),(0,i.kt)("details",null,(0,i.kt)("summary",null,"Click to expand"),(0,i.kt)("h2",{id:"things-created-outside-of-the-cluster-with-keycloak-sso-enabled"},"Things created outside of the cluster with Keycloak SSO enabled."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"Route53 records. Route53 hosted zones are not created. You must also register it if you want to be able to access through public DNS. These are managed by the external DNS controller.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"AWS Network Load Balancer. This is just the entrance to the Kubernetes cluster. This points to the default installation of Ingress Nginx and is managed by AWS Load Balancer Controller.")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("p",{parentName:"li"},"TLS Certificates issued by Let's Encrypt. These are managed by cert-manager based on values in Ingress. They use the production issuer which means we must be very careful with how many and often we request certificates from them. The uninstall scripts backup certificates to the ",(0,i.kt)("inlineCode",{parentName:"p"},"private")," directory to avoid re-issuing certificates."))),(0,i.kt)("p",null,"These resources are controlled by Kubernetes controllers and thus should be deleted using controllers."),(0,i.kt)("h3",{id:"keycloak-sso-with-dns-and-tls-certificates"},"Keycloak SSO with DNS and TLS certificates"),(0,i.kt)("p",null,"If using keycloak SSO with fully automated DNS and certificate management, it must be:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"aws-load-balancer-controller"),(0,i.kt)("li",{parentName:"ol"},"ingress-nginx"),(0,i.kt)("li",{parentName:"ol"},"cert-manager"),(0,i.kt)("li",{parentName:"ol"},"external-dns"),(0,i.kt)("li",{parentName:"ol"},"keycloak"),(0,i.kt)("li",{parentName:"ol"},"The rest of stuff")),(0,i.kt)("h3",{id:"keycloak-sso-with-manual-dns-and-tls-certificates"},"Keycloak SSO with manual DNS and TLS Certificates"),(0,i.kt)("p",null,"If using keycloak SSO but manage DNS records and certificates manually. "),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"aws-load-balancer-controller"),(0,i.kt)("li",{parentName:"ol"},"ingress-nginx"),(0,i.kt)("li",{parentName:"ol"},"The rest of stuff minus cert-manager and external-dns")),(0,i.kt)("p",null,"In this case, you can issue your own certs and provide them as TLS secrets as specified in the ",(0,i.kt)("inlineCode",{parentName:"p"},"spec.tls[0].secretName")," field of Ingress objects.\nYou can also let NLB or ALB terminate TLS instead using the LB controller. This is not covered currently, but possible."),(0,i.kt)("h3",{id:"no-sso"},"No SSO"),(0,i.kt)("p",null,"If no SSO, no particular installation order. Eventual consistency works.")))}u.isMDXComponent=!0},6204:(e,t,a)=>{a.d(t,{Z:()=>n});const n=a.p+"assets/images/application-idp-f2aacfd5d39e181a17aee519f7a540ca.png"}}]); \ No newline at end of file diff --git a/assets/js/f635a236.756991de.js b/assets/js/f635a236.756991de.js new file mode 100644 index 00000000..9ab77d1b --- /dev/null +++ b/assets/js/f635a236.756991de.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcnoe=self.webpackChunkcnoe||[]).push([[7185],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>b});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),p=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},u=function(e){var t=p(e.components);return o.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),d=p(n),m=r,b=d["".concat(s,".").concat(m)]||d[m]||c[m]||i;return n?o.createElement(b,a(a({ref:t},u),{},{components:n})):o.createElement(b,a({ref:t},u))}));function b(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,a=new Array(i);a[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:r,a[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var o=n(7462),r=(n(7294),n(3905));const i={sidebar_position:6,description:"Troubleshooting",title:"Troubleshooting",index:6},a=void 0,l={unversionedId:"reference-implementation/installations/idpbuilder/troubleshooting",id:"reference-implementation/installations/idpbuilder/troubleshooting",title:"Troubleshooting",description:"Troubleshooting",source:"@site/docs/reference-implementation/installations/idpbuilder/troubleshooting.md",sourceDirName:"reference-implementation/installations/idpbuilder",slug:"/reference-implementation/installations/idpbuilder/troubleshooting",permalink:"/docs/reference-implementation/installations/idpbuilder/troubleshooting",draft:!1,editUrl:"https://github.com/cnoe-io/website/tree/main/docs/reference-implementation/installations/idpbuilder/troubleshooting.md",tags:[],version:"current",sidebarPosition:6,frontMatter:{sidebar_position:6,description:"Troubleshooting",title:"Troubleshooting",index:6},sidebar:"tutorialSidebar",previous:{title:"Local OCI Registry",permalink:"/docs/reference-implementation/installations/idpbuilder/local-oci-registry"},next:{title:"Amazon EKS",permalink:"/docs/reference-implementation/installations/app-idp"}},s={},p=[{value:"Podman support",id:"podman-support",level:2},{value:"Podman rootless",id:"podman-rootless",level:3},{value:"Missing Kernel modules",id:"missing-kernel-modules",level:3},{value:"Gitea OCI registry",id:"gitea-oci-registry",level:2}],u={toc:p};function d(e){let{components:t,...n}=e;return(0,r.kt)("wrapper",(0,o.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h2",{id:"podman-support"},"Podman support"),(0,r.kt)("p",null,"idpBuilder comes with experimental support for ",(0,r.kt)("a",{parentName:"p",href:"https://podman.io/"},"Podman"),".\nAlthough idpbuilder seems to work well with podman, we currently do not have end-to-end tests or a guarantee."),(0,r.kt)("p",null,"To get started with Podman on MacOS, run the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# create a local Linux VM\npodman machine init \npodman machine start\n\n# KIND_EXPERIMENTAL_PROVIDER instructs Kind to use podman as its provider\nKIND_EXPERIMENTAL_PROVIDER=podman idpbuilder create\n")),(0,r.kt)("h3",{id:"podman-rootless"},"Podman rootless"),(0,r.kt)("p",null,"As of podman 5.0.0, it defaults to rootless mode. idpbuilder's core packages do not require root privileges, however you may need to run it in rootful mode depending on your use cases.\nIf you need rootful behaviours, run the following command: "),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# verify if you are running rootful or rootless\npodman machine inspect | jq '.[0].Rootful'\n# https://docs.podman.io/en/stable/markdown/podman-machine-set.1.html\npodman machine set --rootful\n")),(0,r.kt)("h3",{id:"missing-kernel-modules"},"Missing Kernel modules"),(0,r.kt)("p",null,"In some environment such as RHEL 9, idpbuilder may fail with the following error message:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"Failed to create pod sandbox: rpc error: code = Unknown desc = failed to setup network for sandbox \"\": plugin type=\"portmap\" failed (add): unable to create chain CNI-HOSTPORT-SETMARK: failed to list iptables chains: running [/usr/sbin/iptables -t nat -S --wait]: exit status 3: modprobe: ERROR: could not insert 'ip_tables': Operation not permitted\niptables v1.8.9 (legacy): can't initialize iptables table `nat': Table does not exist (do you need to insmod?)\n\n")),(0,r.kt)("p",null,"You may need to enable the ip_table module."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# check if ip_table is enabled\nlsmod | grep ip_table\n# if not, enable it.\nsudo modprobe ip_tables\necho 'ip_tables' | sudo tee -a /etc/modules-load.d/ip_tables.conf\n# verify it's activated\nlsmod | grep ip_table\n")),(0,r.kt)("h2",{id:"gitea-oci-registry"},"Gitea OCI registry"),(0,r.kt)("p",null,"When using the Gitea OCI registry, you may run into issues where your client cannot pull or push images to the registry."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"podman pull gitea.cnoe.localtest.me:8443/giteaadmin/ubuntu:24.08\nTrying to pull gitea.cnoe.localtest.me:8443/giteaadmin/ubuntu:24.08...\nError: initializing source docker://gitea.cnoe.localtest.me:8443/giteaadmin/ubuntu:24.08: reading manifest 24.08 in gitea.cnoe.localtest.me:8443/giteaadmin/ubuntu: manifest unknown\n")),(0,r.kt)("p",null,"You may need to tell your client to not verify TLS, because the TLS certificate is self-signed and generated every time a new cluster is created."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"# use the --tls-verify=0 flag if you are using podman\npodman pull gitea.cnoe.localtest.me:8443/giteaadmin/ubuntu:24.08 --tls-verify=0\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.3feb2b0a.js b/assets/js/main.3feb2b0a.js deleted file mode 100644 index aacc3536..00000000 --- a/assets/js/main.3feb2b0a.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.3feb2b0a.js.LICENSE.txt */ -(self.webpackChunkcnoe=self.webpackChunkcnoe||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"006469b5":[()=>n.e(9305).then(n.bind(n,6526)),"@site/docs/reference-implementation/configs/control-plane.md",6526],"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1223)),"@theme/BlogTagsListPage",1223],"02035f19":[()=>n.e(798).then(n.bind(n,6711)),"@site/docs/intro/capabilities/signing.mdx",6711],"022d1785":[()=>n.e(938).then(n.t.bind(n,6109,19)),"~blog/default/blog-tags-launch-aa0.json",6109],"07fe7216":[()=>n.e(8334).then(n.t.bind(n,3658,19)),"~blog/default/blog-tags-benchmarking-4ae.json",3658],"0a9abf7c":[()=>n.e(754).then(n.bind(n,8248)),"@site/docs/intro/approach/approach.mdx",8248],"0d2b97dd":[()=>n.e(9823).then(n.t.bind(n,4127,19)),"~blog/default/blog-tags-backstage-da5.json",4127],"10e68140":[()=>n.e(562).then(n.bind(n,5906)),"@site/docs/reference-implementation/installations/idpbuilder/override.md",5906],"136d60bc":[()=>n.e(7445).then(n.bind(n,7878)),"@site/blog/2024-06-04-argo-workflows-scalability/index.md?truncated=true",7878],"14e5f2d2":[()=>n.e(4159).then(n.bind(n,3089)),"@site/blog/2023-11-15-idp-data-preso/index.md?truncated=true",3089],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,4228)),"@theme/DocCategoryGeneratedIndexPage",4228],"15c9e1ef":[()=>n.e(8699).then(n.bind(n,333)),"@site/docs/reference-implementation/technology/technology.md",333],17896441:[()=>Promise.all([n.e(532),n.e(210),n.e(7918)]).then(n.bind(n,5154)),"@theme/DocItem",5154],"199bd6e0":[()=>n.e(3293).then(n.bind(n,6696)),"@site/docs/reference-implementation/configs/access-management.md",6696],"1a08dbdb":[()=>n.e(8833).then(n.t.bind(n,8298,19)),"~blog/default/blog-tags-workflows-8f7-list.json",8298],"1b3d8d97":[()=>n.e(3203).then(n.t.bind(n,8989,19)),"~blog/default/blog-tags-argocd-bb1.json",8989],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,9963)),"@theme/DocPage",9963],"1f391b9e":[()=>Promise.all([n.e(532),n.e(210),n.e(3085)]).then(n.bind(n,4247)),"@theme/MDXPage",4247],22198832:[()=>n.e(2291).then(n.t.bind(n,5561,19)),"~blog/default/blog-tags-backstage-da5-list.json",5561],22549844:[()=>n.e(5374).then(n.t.bind(n,7659,19)),"~blog/default/blog-tags-scalability-e58-list.json",7659],"24d5500f":[()=>n.e(4370).then(n.bind(n,8391)),"@site/docs/intro/capabilities/code-repository.mdx",8391],"29cbf954":[()=>n.e(9629).then(n.bind(n,3169)),"@site/docs/reference-implementation/plugins/argo-workflows.md",3169],"30a24c52":[()=>n.e(453).then(n.t.bind(n,8605,19)),"~blog/default/blog-tags-hello-039.json",8605],"3152febb":[()=>n.e(225).then(n.t.bind(n,3492,19)),"~docs/default/category-docs-tutorialsidebar-category-getting-started-3f9.json",3492],"341f1b08":[()=>n.e(9134).then(n.t.bind(n,5709,19)),"~blog/default/blog-tags-argocd-bb1-list.json",5709],"3594c826":[()=>n.e(2546).then(n.bind(n,8742)),"@site/docs/reference-implementation/integrations/generated/tf-templating.md",8742],"393be207":[()=>n.e(7414).then(n.bind(n,3123)),"@site/src/pages/markdown-page.md",3123],"4d5d8cd4":[()=>n.e(1425).then(n.t.bind(n,6958,19)),"~blog/default/blog-tags-cnoe-2a9.json",6958],"4f159f0a":[()=>n.e(7619).then(n.bind(n,7955)),"@site/blog/2023-11-21-argo-cd-application-scalability-2/index.md",7955],"5079f34d":[()=>n.e(9385).then(n.t.bind(n,2873,19)),"~docs/default/category-docs-tutorialsidebar-category-generate-templates-228.json",2873],51875793:[()=>n.e(6262).then(n.bind(n,690)),"@site/docs/reference-implementation/installations/idpbuilder/how-it-works.md",690],"525ff081":[()=>n.e(1122).then(n.bind(n,8568)),"@site/blog/2023-10-03-welcome/index.md",8568],"559056c9":[()=>n.e(5706).then(n.bind(n,9169)),"@site/docs/reference-implementation/integrations/terraform/01-s3-bucket.md",9169],"568e75da":[()=>n.e(8080).then(n.t.bind(n,3391,19)),"~blog/default/blog-tags-benchmarking-4ae-list.json",3391],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"64b46e12":[()=>n.e(1968).then(n.t.bind(n,2706,19)),"~blog/default/blog-tags-cnoe-2a9-list.json",2706],"65e462e7":[()=>n.e(3581).then(n.t.bind(n,2292,19)),"~blog/default/blog-tags-dev-portal-a5c.json",2292],66406991:[()=>n.e(110).then(n.t.bind(n,711,19)),"~blog/default/blog-tags-hello-039-list.json",711],"6875c492":[()=>Promise.all([n.e(532),n.e(210),n.e(2529),n.e(8610)]).then(n.bind(n,1714)),"@theme/BlogTagsPostsPage",1714],"69369ae2":[()=>n.e(5062).then(n.t.bind(n,3769,19)),"/home/runner/work/website/website/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],"6dad2acb":[()=>n.e(1848).then(n.bind(n,3640)),"@site/docs/intro/capabilities/artifact-registry.mdx",3640],"6f67b907":[()=>n.e(2448).then(n.bind(n,5167)),"@site/docs/intro/capabilities/config-repository.mdx",5167],"753efc25":[()=>n.e(1251).then(n.t.bind(n,5614,19)),"~blog/default/blog-tags-argo-b69-list.json",5614],"7872e6e5":[()=>n.e(7238).then(n.bind(n,2164)),"@site/docs/intro/capabilities/secret-repository.mdx",2164],"7c2ff145":[()=>n.e(1505).then(n.t.bind(n,4469,19)),"/home/runner/work/website/website/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],"7d744e69":[()=>n.e(1466).then(n.bind(n,5663)),"@site/docs/intro/intro.md",5663],"7e0db0be":[()=>n.e(5719).then(n.bind(n,8505)),"@site/docs/reference-implementation/plugins/scaffolder-backend.md",8505],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],"85c6e295":[()=>n.e(7089).then(n.bind(n,1500)),"@site/blog/2023-11-15-idp-data-preso/index.md",1500],"8659458c":[()=>n.e(3862).then(n.bind(n,1059)),"@site/docs/intro/capabilities/observability.mdx",1059],"89fa0985":[()=>n.e(4724).then(n.bind(n,6265)),"@site/docs/intro/capabilities/deployment-targets.mdx",6265],"8ce76c70":[()=>n.e(8528).then(n.t.bind(n,3537,19)),"~docs/default/category-docs-tutorialsidebar-category-technology-capabilities-dd3.json",3537],"919e122e":[()=>n.e(6102).then(n.bind(n,4060)),"@site/docs/intro/capabilities/developer-portal.mdx",4060],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"9582ef58":[()=>n.e(7152).then(n.bind(n,8162)),"@site/docs/intro/personas/personas.mdx",8162],"97c96805":[()=>n.e(9648).then(n.bind(n,5484)),"@site/docs/reference-implementation/plugins/scaffolder-frontend.md",5484],"9933fcf2":[()=>n.e(6769).then(n.bind(n,6129)),"@site/docs/intro/capabilities/infra-as-code.mdx",6129],"9a2ba1e6":[()=>n.e(9399).then(n.bind(n,1920)),"@site/docs/reference-implementation/installations/idpbuilder/usage.md",1920],"9c73b929":[()=>n.e(2503).then(n.t.bind(n,4120,19)),"~docs/default/category-docs-tutorialsidebar-category-deploy-a-platform-e67.json",4120],"9e4087bc":[()=>n.e(3608).then(n.bind(n,5592)),"@theme/BlogArchivePage",5592],"9e45a4e1":[()=>n.e(2803).then(n.t.bind(n,7154,19)),"~blog/default/blog-tags-dev-portal-a5c-list.json",7154],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(210),n.e(2529),n.e(3089)]).then(n.bind(n,46)),"@theme/BlogListPage",46],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],ae04ae61:[()=>n.e(6133).then(n.t.bind(n,2973,19)),"~docs/default/category-docs-tutorialsidebar-category-plugins-399.json",2973],af379018:[()=>n.e(7664).then(n.t.bind(n,4909,19)),"~blog/default/blog-tags-data-ingestion-baa-list.json",4909],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,10,19)),"~blog/default/blog-archive-80c.json",10],b3b21529:[()=>n.e(1802).then(n.bind(n,3427)),"@site/docs/reference-implementation/installations/idpbuilder/idpbuilder.md",3427],b50cb68d:[()=>n.e(5297).then(n.bind(n,7779)),"@site/blog/2023-10-03-welcome/index.md?truncated=true",7779],b565c4cc:[()=>Promise.all([n.e(532),n.e(8263),n.e(8003)]).then(n.bind(n,747)),"@site/src/pages/radars/radar.js",747],b7b5aa46:[()=>Promise.all([n.e(532),n.e(2315),n.e(8263),n.e(6451),n.e(6981)]).then(n.bind(n,85)),"@site/src/pages/radars/index.js",85],ba37b902:[()=>n.e(5698).then(n.bind(n,4341)),"@site/docs/intro/capabilities/secret-management.mdx",4341],bace8f9a:[()=>n.e(9856).then(n.bind(n,9434)),"@site/docs/reference-implementation/installations/idpbuilder/quick-start.md",9434],bb5fcc00:[()=>n.e(8323).then(n.bind(n,7786)),"@site/docs/reference-implementation/integrations/terraform/terraform.md",7786],c0893904:[()=>n.e(9694).then(n.bind(n,9420)),"@site/docs/reference-implementation/integrations/reference-impl.md",9420],c200e719:[()=>n.e(5616).then(n.t.bind(n,978,19)),"~blog/default/blog-tags-workflows-8f7.json",978],c4348237:[()=>n.e(277).then(n.t.bind(n,5745,19)),"/home/runner/work/website/website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],c4f5d8e4:[()=>Promise.all([n.e(532),n.e(2315),n.e(8866),n.e(4195)]).then(n.bind(n,5457)),"@site/src/pages/index.js",5457],c54b9243:[()=>n.e(7219).then(n.bind(n,1161)),"@site/docs/reference-implementation/installations/idpbuilder/local-oci-registry.md",1161],cad7ebc1:[()=>n.e(8902).then(n.bind(n,4952)),"@site/docs/reference-implementation/configs/secrets.md",4952],cc6fec3d:[()=>n.e(4658).then(n.bind(n,1243)),"@site/docs/reference-implementation/plugins/terraform-plugin.md",1243],ccc49370:[()=>Promise.all([n.e(532),n.e(210),n.e(2529),n.e(6103)]).then(n.bind(n,5203)),"@theme/BlogPostPage",5203],d17b656b:[()=>n.e(3285).then(n.t.bind(n,7592,19)),"~blog/default/blog-tags-argo-b69.json",7592],d18447ac:[()=>n.e(2843).then(n.bind(n,6286)),"@site/docs/reference-implementation/integrations/generated/generated.md",6286],d373a014:[()=>n.e(6715).then(n.bind(n,5649)),"@site/docs/intro/capabilities/workflow-orchestration.mdx",5649],d6e77a74:[()=>n.e(9369).then(n.bind(n,3149)),"@site/docs/intro/capabilities/continuous-delivery.mdx",3149],d7ec2c57:[()=>n.e(8673).then(n.bind(n,9706)),"@site/docs/intro/capabilities/identity-and-access.mdx",9706],d9c58f53:[()=>n.e(5253).then(n.t.bind(n,1112,19)),"~blog/default/blog-tags-scalability-e58.json",1112],da4ec9ab:[()=>n.e(8411).then(n.bind(n,6751)),"@site/docs/reference-implementation/installations/app-idp.md",6751],dcf946d0:[()=>n.e(9492).then(n.bind(n,3380)),"@site/blog/2023-11-21-argo-cd-application-scalability-2/index.md?truncated=true",3380],dfd2e4b2:[()=>n.e(942).then(n.bind(n,601)),"@site/docs/intro/capabilities/service-discovery.mdx",601],dff68946:[()=>n.e(7091).then(n.bind(n,2117)),"@site/docs/intro/capabilities/packaging-and-templating.mdx",2117],e032c842:[()=>n.e(7233).then(n.bind(n,4540)),"@site/docs/reference-implementation/integrations/generated/crd-templating.md",4540],e49b4efd:[()=>n.e(3835).then(n.bind(n,6471)),"@site/docs/intro/capabilities/compute-platform.mdx",6471],e8b58003:[()=>n.e(2553).then(n.bind(n,2378)),"@site/docs/reference-implementation/integrations/localstack.md",2378],f3a8eeeb:[()=>n.e(8716).then(n.bind(n,1290)),"@site/blog/2024-06-04-argo-workflows-scalability/index.md",1290],f47f6e9b:[()=>n.e(1740).then(n.bind(n,4073)),"@site/docs/reference-implementation/plugins/spark-plugin.md",4073],f54a84d7:[()=>n.e(4914).then(n.bind(n,8707)),"@site/docs/reference-implementation/integrations/verification.md",8707],f5cbd827:[()=>n.e(1047).then(n.t.bind(n,4600,19)),"~blog/default/blog-tags-data-ingestion-baa.json",4600],f6d4f892:[()=>n.e(6709).then(n.t.bind(n,8235,19)),"~blog/default/blog-tags-launch-aa0-list.json",8235],fb4f9e51:[()=>n.e(4498).then(n.t.bind(n,5369,19)),"~docs/default/category-docs-tutorialsidebar-category-configurations-e42.json",5369],fbfe943f:[()=>n.e(290).then(n.bind(n,6522)),"@site/docs/intro/capabilities/validation.mdx",6522],fd406b69:[()=>n.e(608).then(n.bind(n,7264)),"@site/docs/reference-implementation/integrations/terraform/02-serverless-microservice-pattern.md",7264]};function c(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var u=n(9670),d=n(226);function p(e,t){if("*"===e)return i()({loading:c,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],p={},f=[],m=[],g=(0,u.Z)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=s[n];r&&(p[t]=r[0],f.push(r[1]),m.push(r[2]))})),i().Map({loading:c,loader:p,modules:f,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const f=[{path:"/blog",component:p("/blog","d1b"),exact:!0},{path:"/blog/archive",component:p("/blog/archive","825"),exact:!0},{path:"/blog/argo-cd-application-scalability",component:p("/blog/argo-cd-application-scalability","4cd"),exact:!0},{path:"/blog/argo-workflow-scalability",component:p("/blog/argo-workflow-scalability","b78"),exact:!0},{path:"/blog/optimizing-data-quality-in-dev-portals",component:p("/blog/optimizing-data-quality-in-dev-portals","2ac"),exact:!0},{path:"/blog/tags",component:p("/blog/tags","61b"),exact:!0},{path:"/blog/tags/argo",component:p("/blog/tags/argo","79c"),exact:!0},{path:"/blog/tags/argocd",component:p("/blog/tags/argocd","9a7"),exact:!0},{path:"/blog/tags/backstage",component:p("/blog/tags/backstage","c83"),exact:!0},{path:"/blog/tags/benchmarking",component:p("/blog/tags/benchmarking","689"),exact:!0},{path:"/blog/tags/cnoe",component:p("/blog/tags/cnoe","7de"),exact:!0},{path:"/blog/tags/data-ingestion",component:p("/blog/tags/data-ingestion","42a"),exact:!0},{path:"/blog/tags/dev-portal",component:p("/blog/tags/dev-portal","19f"),exact:!0},{path:"/blog/tags/hello",component:p("/blog/tags/hello","ba0"),exact:!0},{path:"/blog/tags/launch",component:p("/blog/tags/launch","73f"),exact:!0},{path:"/blog/tags/scalability",component:p("/blog/tags/scalability","b8d"),exact:!0},{path:"/blog/tags/workflows",component:p("/blog/tags/workflows","aa7"),exact:!0},{path:"/blog/welcome",component:p("/blog/welcome","297"),exact:!0},{path:"/markdown-page",component:p("/markdown-page","494"),exact:!0},{path:"/radars",component:p("/radars","3ec"),exact:!0},{path:"/radars/radar",component:p("/radars/radar","2a9"),exact:!0},{path:"/docs",component:p("/docs","df6"),routes:[{path:"/docs/category/configurations",component:p("/docs/category/configurations","e6a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/deploy-a-platform",component:p("/docs/category/deploy-a-platform","4bf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/generate-templates",component:p("/docs/category/generate-templates","907"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/getting-started",component:p("/docs/category/getting-started","01f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/plugins",component:p("/docs/category/plugins","f3f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/category/technology-capabilities",component:p("/docs/category/technology-capabilities","134"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro",component:p("/docs/intro","c34"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/approach",component:p("/docs/intro/approach","c0b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/artifact-registry",component:p("/docs/intro/capabilities/artifact-registry","41f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/code-repository",component:p("/docs/intro/capabilities/code-repository","306"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/compute-platform",component:p("/docs/intro/capabilities/compute-platform","b38"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/config-repository",component:p("/docs/intro/capabilities/config-repository","9ac"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/continuous-delivery",component:p("/docs/intro/capabilities/continuous-delivery","2c5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/deployment-targets",component:p("/docs/intro/capabilities/deployment-targets","421"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/developer-portal",component:p("/docs/intro/capabilities/developer-portal","48a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/identity-and-access",component:p("/docs/intro/capabilities/identity-and-access","002"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/infra-as-code",component:p("/docs/intro/capabilities/infra-as-code","bd1"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/observability",component:p("/docs/intro/capabilities/observability","249"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/packaging-and-templating",component:p("/docs/intro/capabilities/packaging-and-templating","a36"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/secret-management",component:p("/docs/intro/capabilities/secret-management","7c9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/secret-repository",component:p("/docs/intro/capabilities/secret-repository","5f0"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/service-discovery",component:p("/docs/intro/capabilities/service-discovery","de5"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/signing",component:p("/docs/intro/capabilities/signing","e9e"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/validation",component:p("/docs/intro/capabilities/validation","fdf"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/capabilities/workflow-orchestration",component:p("/docs/intro/capabilities/workflow-orchestration","569"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/intro/personas",component:p("/docs/intro/personas","548"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/configs/access-management",component:p("/docs/reference-implementation/configs/access-management","060"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/configs/control-plane",component:p("/docs/reference-implementation/configs/control-plane","99d"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/configs/secrets",component:p("/docs/reference-implementation/configs/secrets","610"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/installations/app-idp",component:p("/docs/reference-implementation/installations/app-idp","883"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/installations/idpbuilder",component:p("/docs/reference-implementation/installations/idpbuilder","5f9"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/installations/idpbuilder/how-it-works",component:p("/docs/reference-implementation/installations/idpbuilder/how-it-works","722"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/installations/idpbuilder/local-oci-registry",component:p("/docs/reference-implementation/installations/idpbuilder/local-oci-registry","31b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/installations/idpbuilder/override",component:p("/docs/reference-implementation/installations/idpbuilder/override","109"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/installations/idpbuilder/quick-start",component:p("/docs/reference-implementation/installations/idpbuilder/quick-start","445"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/installations/idpbuilder/usage",component:p("/docs/reference-implementation/installations/idpbuilder/usage","625"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/integrations/generated",component:p("/docs/reference-implementation/integrations/generated","b2c"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/integrations/generated/crd-templating",component:p("/docs/reference-implementation/integrations/generated/crd-templating","535"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/integrations/generated/tf-templating",component:p("/docs/reference-implementation/integrations/generated/tf-templating","729"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/integrations/localstack",component:p("/docs/reference-implementation/integrations/localstack","db6"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/integrations/reference-impl",component:p("/docs/reference-implementation/integrations/reference-impl","783"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/integrations/terraform",component:p("/docs/reference-implementation/integrations/terraform","fa8"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/integrations/terraform/s3-bucket",component:p("/docs/reference-implementation/integrations/terraform/s3-bucket","291"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/integrations/terraform/serverless-microservice-pattern",component:p("/docs/reference-implementation/integrations/terraform/serverless-microservice-pattern","a94"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/integrations/verification",component:p("/docs/reference-implementation/integrations/verification","02f"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/plugins/argo-workflows",component:p("/docs/reference-implementation/plugins/argo-workflows","057"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/plugins/scaffolder-backend",component:p("/docs/reference-implementation/plugins/scaffolder-backend","72a"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/plugins/scaffolder-frontend",component:p("/docs/reference-implementation/plugins/scaffolder-frontend","fea"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/plugins/spark-plugin",component:p("/docs/reference-implementation/plugins/spark-plugin","6fa"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/plugins/terraform-plugin",component:p("/docs/reference-implementation/plugins/terraform-plugin","a4b"),exact:!0,sidebar:"tutorialSidebar"},{path:"/docs/reference-implementation/technology",component:p("/docs/reference-implementation/technology","653"),exact:!0,sidebar:"tutorialSidebar"}]},{path:"/",component:p("/","473"),exact:!0},{path:"*",component:p("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},9383:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(2295),n(8269)];var c=n(723),u=n(6550),d=n(8790);function p(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var f=n(7462),m=n(5742),g=n(2263),h=n(4996),b=n(6668),v=n(1944),y=n(4711),w=n(9727),k=n(3320),E=n(197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function x(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),a=function(){const{siteConfig:{url:e}}=(0,g.Z)(),{pathname:t}=(0,u.TH)();return e+(0,h.Z)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function _(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(x,null),r.createElement(S,null),r.createElement(E.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,f.Z)({key:t},e))))))}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var L=n(8934),A=n(8940);function N(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r(t.default?.[e]??t[e])?.(...n)));return()=>a.forEach((e=>e?.()))}const O=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==n&&(a&&function(e){const{hash:t}=e;if(t){const e=decodeURIComponent(t.substring(1));document.getElementById(e)?.scrollIntoView()}else window.scrollTo(0,0)}(n),N("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class P extends r.Component{constructor(e){super(e),this.previousLocation=void 0,this.routeUpdateCleanupCb=void 0,this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?N("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=N("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(O,{previousLocation:this.previousLocation,location:t},r.createElement(u.AW,{location:t,render:()=>e}))}}const I=P,D="docusaurus-base-url-issue-banner-container",M="docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function z(e){return`\nwindow['${F}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${F}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${D}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[F]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,z(e))),r.createElement("div",{id:D}))}function B(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?r.createElement(j,null):null}function U(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,g.Z)(),i=(0,h.Z)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var $=n(4763);function H(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return r.createElement($.Z,null,r.createElement(A.M,null,r.createElement(L.t,null,r.createElement(p,null,r.createElement(U,null),r.createElement(_,null),r.createElement(B,null),r.createElement(I,{location:T(t)},e)))))}var q=n(6887);const G=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();(document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode)?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Z=n(9670);const V=new Set,W=new Set,Y=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,K={prefetch(e){if(!(e=>!Y()&&!W.has(e)&&!V.has(e))(e))return!1;V.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Z.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?G(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!Y()&&!W.has(e))(e)&&(W.add(e),R(e))},Q=Object.freeze(K);if(l.Z.canUseDOM){window.docusaurus=Q;const e=a.hydrate;R(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(H,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>d});var r=n(7294),a=n(6809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"reference-implementation/installations/idpbuilder/idpbuilder","docs":[{"id":"intro/approach/approach","path":"/docs/intro/approach/","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/artifact-registry","path":"/docs/intro/capabilities/artifact-registry","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/code-repository","path":"/docs/intro/capabilities/code-repository","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/compute-platform","path":"/docs/intro/capabilities/compute-platform","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/config-repository","path":"/docs/intro/capabilities/config-repository","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/continuous-delivery","path":"/docs/intro/capabilities/continuous-delivery","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/deployment-targets","path":"/docs/intro/capabilities/deployment-targets","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/developer-portal","path":"/docs/intro/capabilities/developer-portal","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/identity-and-access","path":"/docs/intro/capabilities/identity-and-access","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/infra-as-code","path":"/docs/intro/capabilities/infra-as-code","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/observability","path":"/docs/intro/capabilities/observability","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/packaging-and-templating","path":"/docs/intro/capabilities/packaging-and-templating","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/secret-management","path":"/docs/intro/capabilities/secret-management","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/secret-repository","path":"/docs/intro/capabilities/secret-repository","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/service-discovery","path":"/docs/intro/capabilities/service-discovery","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/signing","path":"/docs/intro/capabilities/signing","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/validation","path":"/docs/intro/capabilities/validation","sidebar":"tutorialSidebar"},{"id":"intro/capabilities/workflow-orchestration","path":"/docs/intro/capabilities/workflow-orchestration","sidebar":"tutorialSidebar"},{"id":"intro/intro","path":"/docs/intro/","sidebar":"tutorialSidebar"},{"id":"intro/personas/personas","path":"/docs/intro/personas/","sidebar":"tutorialSidebar"},{"id":"reference-implementation/configs/access-management","path":"/docs/reference-implementation/configs/access-management","sidebar":"tutorialSidebar"},{"id":"reference-implementation/configs/control-plane","path":"/docs/reference-implementation/configs/control-plane","sidebar":"tutorialSidebar"},{"id":"reference-implementation/configs/secrets","path":"/docs/reference-implementation/configs/secrets","sidebar":"tutorialSidebar"},{"id":"reference-implementation/installations/app-idp","path":"/docs/reference-implementation/installations/app-idp","sidebar":"tutorialSidebar"},{"id":"reference-implementation/installations/idpbuilder/how-it-works","path":"/docs/reference-implementation/installations/idpbuilder/how-it-works","sidebar":"tutorialSidebar"},{"id":"reference-implementation/installations/idpbuilder/idpbuilder","path":"/docs/reference-implementation/installations/idpbuilder/","sidebar":"tutorialSidebar"},{"id":"reference-implementation/installations/idpbuilder/local-oci-registry","path":"/docs/reference-implementation/installations/idpbuilder/local-oci-registry","sidebar":"tutorialSidebar"},{"id":"reference-implementation/installations/idpbuilder/override","path":"/docs/reference-implementation/installations/idpbuilder/override","sidebar":"tutorialSidebar"},{"id":"reference-implementation/installations/idpbuilder/quick-start","path":"/docs/reference-implementation/installations/idpbuilder/quick-start","sidebar":"tutorialSidebar"},{"id":"reference-implementation/installations/idpbuilder/usage","path":"/docs/reference-implementation/installations/idpbuilder/usage","sidebar":"tutorialSidebar"},{"id":"reference-implementation/integrations/generated/crd-templating","path":"/docs/reference-implementation/integrations/generated/crd-templating","sidebar":"tutorialSidebar"},{"id":"reference-implementation/integrations/generated/generated","path":"/docs/reference-implementation/integrations/generated/","sidebar":"tutorialSidebar"},{"id":"reference-implementation/integrations/generated/tf-templating","path":"/docs/reference-implementation/integrations/generated/tf-templating","sidebar":"tutorialSidebar"},{"id":"reference-implementation/integrations/localstack","path":"/docs/reference-implementation/integrations/localstack","sidebar":"tutorialSidebar"},{"id":"reference-implementation/integrations/reference-impl","path":"/docs/reference-implementation/integrations/reference-impl","sidebar":"tutorialSidebar"},{"id":"reference-implementation/integrations/terraform/s3-bucket","path":"/docs/reference-implementation/integrations/terraform/s3-bucket","sidebar":"tutorialSidebar"},{"id":"reference-implementation/integrations/terraform/serverless-microservice-pattern","path":"/docs/reference-implementation/integrations/terraform/serverless-microservice-pattern","sidebar":"tutorialSidebar"},{"id":"reference-implementation/integrations/terraform/terraform","path":"/docs/reference-implementation/integrations/terraform/","sidebar":"tutorialSidebar"},{"id":"reference-implementation/integrations/verification","path":"/docs/reference-implementation/integrations/verification","sidebar":"tutorialSidebar"},{"id":"reference-implementation/plugins/argo-workflows","path":"/docs/reference-implementation/plugins/argo-workflows","sidebar":"tutorialSidebar"},{"id":"reference-implementation/plugins/scaffolder-backend","path":"/docs/reference-implementation/plugins/scaffolder-backend","sidebar":"tutorialSidebar"},{"id":"reference-implementation/plugins/scaffolder-frontend","path":"/docs/reference-implementation/plugins/scaffolder-frontend","sidebar":"tutorialSidebar"},{"id":"reference-implementation/plugins/spark-plugin","path":"/docs/reference-implementation/plugins/spark-plugin","sidebar":"tutorialSidebar"},{"id":"reference-implementation/plugins/terraform-plugin","path":"/docs/reference-implementation/plugins/terraform-plugin","sidebar":"tutorialSidebar"},{"id":"reference-implementation/technology/technology","path":"/docs/reference-implementation/technology/","sidebar":"tutorialSidebar"},{"id":"/category/deploy-a-platform","path":"/docs/category/deploy-a-platform","sidebar":"tutorialSidebar"},{"id":"/category/getting-started","path":"/docs/category/getting-started","sidebar":"tutorialSidebar"},{"id":"/category/generate-templates","path":"/docs/category/generate-templates","sidebar":"tutorialSidebar"},{"id":"/category/configurations","path":"/docs/category/configurations","sidebar":"tutorialSidebar"},{"id":"/category/plugins","path":"/docs/category/plugins","sidebar":"tutorialSidebar"},{"id":"/category/technology-capabilities","path":"/docs/category/technology-capabilities","sidebar":"tutorialSidebar"}],"draftIds":[],"sidebars":{"tutorialSidebar":{"link":{"path":"/docs/category/deploy-a-platform","label":"Deploy a Platform"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(7529);const s=JSON.parse('{"docusaurusVersion":"2.2.0","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.2.0"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.2.0"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.2.0"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.2.0"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.2.0"},"docusaurus-plugin-image-zoom":{"type":"package","name":"plugin-image-zoom","version":"1.1.0"}}}'),c={siteConfig:a.default,siteMetadata:s,globalData:o,i18n:i,codeTranslations:l},u=r.createContext(c);function d(e){let{children:t}=e;return r.createElement(u.Provider,{value:c},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7294),a=n(412),o=n(5742),i=n(3285);function l(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",height:"50vh",width:"100%",fontSize:"20px"}},r.createElement("h1",null,"This page crashed."),r.createElement("p",null,t.message),r.createElement("button",{type:"button",onClick:n},"Try again"))}function s(e){let{error:t,tryAgain:n}=e;return r.createElement(u,{fallback:()=>r.createElement(l,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(i.Z,null,r.createElement(l,{error:t,tryAgain:n})))}const c=e=>r.createElement(s,e);class u extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??c)(e)}return e??null}}},412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},5742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7462),a=n(7294),o=n(3727),i=n(8780),l=n(2263),s=n(3919),c=n(412);const u=a.createContext({collectLink:()=>{}});var d=n(4996);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,l.Z)(),{withBaseUrl:k}=(0,d.C)(),E=(0,a.useContext)(u),S=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>S.current));const x=p||f;const _=(0,s.Z)(x),C=x?.replace("pathname://","");let T=void 0!==C?(L=C,b&&(e=>e.startsWith("/"))(L)?k(L):L):void 0;var L;T&&_&&(T=(0,i.applyTrailingSlash)(T,{trailingSlash:y,baseUrl:w}));const A=(0,a.useRef)(!1),N=n?o.OL:o.rU,O=c.Z.canUseIntersectionObserver,R=(0,a.useRef)(),P=()=>{A.current||null==T||(window.docusaurus.preload(T),A.current=!0)};(0,a.useEffect)((()=>(!O&&_&&null!=T&&window.docusaurus.prefetch(T),()=>{O&&R.current&&R.current.disconnect()})),[R,T,O,_]);const I=T?.startsWith("#")??!1,D=!T||!_||I;return D||h||E.collectLink(T),D?a.createElement("a",(0,r.Z)({ref:S,href:T},x&&!_&&{target:"_blank",rel:"noopener noreferrer"},v)):a.createElement(N,(0,r.Z)({},v,{onMouseEnter:P,onTouchStart:P,innerRef:e=>{S.current=e,O&&e&&_&&(R.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(R.current.unobserve(e),R.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),R.current.observe(e))},to:T},n&&{isActive:g,activeClassName:m}))}const f=a.forwardRef(p)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=()=>null},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},9935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},3919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},4996:(e,t,n)=>{"use strict";n.d(t,{C:()=>o,Z:()=>i});var r=n(2263),a=n(3919);function o(){const{siteConfig:{baseUrl:e,url:t}}=(0,r.Z)();return{withBaseUrl:(n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)}}function i(e,t){void 0===t&&(t={});const{withBaseUrl:n}=o();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8940);function o(){return(0,r.useContext)(a._)}},2389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(8934);function o(){return(0,r.useContext)(a._)}},9670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});function r(e){const t={};return function e(n,r){Object.entries(n).forEach((n=>{let[a,o]=n;const i=r?`${r}.${a}`:a;var l;"object"==typeof(l=o)&&l&&Object.keys(l).length>0?e(o,i):t[i]=o}))}(e),t}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>g,gA:()=>p,_r:()=>u,Jo:()=>h,zh:()=>d,yW:()=>m,gB:()=>f});var r=n(6550),a=n(2263),o=n(9935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=function(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const c={},u=()=>i("docusaurus-plugin-content-docs")??c,d=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e)?.[t];if(!r&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return r}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function f(e){return d(e).versions}function m(e){const t=d(e);return l(t)}function g(e){const t=d(e),{pathname:n}=(0,r.TH)();return s(t,n)}function h(e){const t=d(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},8320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(4865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},9471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294);const a="iconExternalLink_nPIU";function o(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:a},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},3285:(e,t,n)=>{"use strict";n.d(t,{Z:()=>dt});var r=n(7294),a=n(6010),o=n(4763),i=n(1944),l=n(7462),s=n(6550),c=n(5999),u=n(5936);const d="docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,u.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,c.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:a}=f();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,l.Z)({},e,{href:`#${d}`,onClick:a}),t))}var h=n(5281),b=n(9727);const v="skipToContent_fXgn";function y(){return r.createElement(g,{className:v})}var w=n(6668),k=n(9689);function E(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const S="closeButton_CVFx";function x(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,c.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",S,e.className)}),r.createElement(E,{width:14,height:14,strokeWidth:3.1}))}const _="content_knG7";function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,a.Z)(_,e.className),dangerouslySetInnerHTML:{__html:n}}))}const T="announcementBar_mb4j",L="announcementBarPlaceholder_vyr4",A="announcementBarClose_gvF7",N="announcementBarContent_xLdY";function O(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:T,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:L}),r.createElement(C,{className:N}),i&&r.createElement(x,{onClick:n,className:A}))}var R=n(2961),P=n(2466);var I=n(902),D=n(3102);const M=r.createContext(null);function F(e){let{children:t}=e;const n=function(){const e=(0,R.e)(),t=(0,D.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,I.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return r.createElement(M.Provider,{value:n},t)}function z(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function j(){const e=(0,r.useContext)(M);if(!e)throw new I.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,D.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:z(o)})),[a,o,t])}function B(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=j();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var U=n(2949),$=n(2389);function H(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function q(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const G={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function Z(e){let{className:t,value:n,onChange:o}=e;const i=(0,$.Z)(),l=(0,c.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===n?(0,c.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,c.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(G.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",G.toggleButton,!i&&G.toggleButtonDisabled),type:"button",onClick:()=>o("dark"===n?"light":"dark"),disabled:!i,title:l,"aria-label":l,"aria-live":"polite"},r.createElement(H,{className:(0,a.Z)(G.toggleIcon,G.lightToggleIcon)}),r.createElement(q,{className:(0,a.Z)(G.toggleIcon,G.darkToggleIcon)})))}const V=r.memo(Z);function W(e){let{className:t}=e;const n=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,U.I)();return n?null:r.createElement(V,{className:t,value:a,onChange:o})}var Y=n(1327);function K(){return r.createElement(Y.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function Q(){const e=(0,R.e)();return r.createElement("button",{type:"button","aria-label":(0,c.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(E,{color:"var(--ifm-color-emphasis-600)"}))}function X(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(K,null),r.createElement(W,{className:"margin-right--md"}),r.createElement(Q,null))}var J=n(9960),ee=n(4996),te=n(3919);function ne(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var re=n(9471);function ae(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:s,isDropdownLink:c,prependBaseUrlToHref:u,...d}=e;const p=(0,ee.Z)(a),f=(0,ee.Z)(t),m=(0,ee.Z)(o,{forcePrependBaseUrl:!0}),g=i&&o&&!(0,te.Z)(o),h=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,g&&r.createElement(re.Z,c&&{width:12,height:12}))};return o?r.createElement(J.Z,(0,l.Z)({href:u?m:o},d,h)):r.createElement(J.Z,(0,l.Z)({to:p,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ne(n,t.pathname):t.pathname.startsWith(f)},d,h))}function oe(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(ae,(0,l.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function ie(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ae,(0,l.Z)({className:(0,a.Z)("menu__link",t)},o)))}function le(e){let{mobile:t=!1,position:n,...a}=e;const o=t?ie:oe;return r.createElement(o,(0,l.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var se=n(6043),ce=n(8596),ue=n(2263);function de(e,t){return e.some((e=>function(e,t){return!!(0,ce.Mg)(e.to,t)||!!ne(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function pe(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const c=(0,r.useRef)(null),[u,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{c.current&&!c.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}}),[c]),r.createElement("div",{ref:c,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":u})},r.createElement(ae,(0,l.Z)({"aria-haspopup":"true","aria-expanded":u,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o)},s,{onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!u))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,n)=>r.createElement(Ce,(0,l.Z)({isDropdownItem:!0,onKeyDown:e=>{if(n===t.length-1&&"Tab"===e.key){e.preventDefault(),d(!1);const t=c.current.nextElementSibling;if(t){(t instanceof HTMLAnchorElement?t:t.querySelector("a")).focus()}}},activeClassName:"dropdown__link--active"},e,{key:n}))))))}function fe(e){let{items:t,className:n,position:o,onClick:i,...c}=e;const u=function(){const{siteConfig:{baseUrl:e}}=(0,ue.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=de(t,u),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,se.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[u,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":p})},r.createElement(ae,(0,l.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},c,{onClick:e=>{e.preventDefault(),f()}}),c.children??c.label),r.createElement(se.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p},t.map(((e,t)=>r.createElement(Ce,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function me(e){let{mobile:t=!1,...n}=e;const a=t?fe:pe;return r.createElement(a,n)}var ge=n(4711);function he(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const be="iconLanguage_nlXk";var ve=n(1875);const ye="searchBox_ZlJk";function we(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,ye)},t)}var ke=n(143),Ee=n(2802);var Se=n(373);const xe=e=>e.docs.find((t=>t.id===e.mainDocId));const _e={default:le,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:u,localeConfigs:d}}=(0,ue.Z)(),p=(0,ge.l)(),{search:f,hash:m}=(0,s.TH)(),g=[...n,...u.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],h=t?(0,c.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(me,(0,l.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(he,{className:be}),h),items:g}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(we,{className:n},r.createElement(ve.Z,null))},dropdown:me,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ke.Iw)(a),s=(0,Ee.vY)(t,a);return null===s?null:r.createElement(le,(0,l.Z)({exact:!0},o,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=(0,ke.Iw)(a),s=(0,Ee.oz)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(le,(0,l.Z)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=(0,Ee.lO)(a)[0],s=t??i.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(le,(0,l.Z)({},o,{label:s,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...u}=e;const{search:d,hash:p}=(0,s.TH)(),f=(0,ke.Iw)(n),m=(0,ke.gB)(n),{savePreferredVersionName:g}=(0,Se.J)(n),h=[...o,...m.map((e=>{const t=f.alternateDocVersions[e.name]??xe(e);return{label:e.label,to:`${t.path}${d}${p}`,isActive:()=>e===f.activeVersion,onClick:()=>g(e.name)}})),...i],b=(0,Ee.lO)(n)[0],v=t&&h.length>1?(0,c.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&h.length>1?void 0:xe(b).path;return h.length<=1?r.createElement(le,(0,l.Z)({},u,{mobile:t,label:v,to:y,isActive:a?()=>!1:void 0})):r.createElement(me,(0,l.Z)({},u,{mobile:t,label:v,to:y,items:h,isActive:a?()=>!1:void 0}))}};function Ce(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=_e[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function Te(){const e=(0,R.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(Ce,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Le(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(c.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function Ae(){const e=0===(0,w.L)().navbar.items.length,t=j();return r.createElement(r.Fragment,null,!e&&r.createElement(Le,{onClick:()=>t.hide()}),t.content)}function Ne(){const e=(0,R.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(B,{header:r.createElement(X,null),primaryMenu:r.createElement(Te,null),secondaryMenu:r.createElement(Ae,null)}):null}const Oe="navbarHideable_m1mJ",Re="navbarHidden_jGov";function Pe(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function Ie(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,R.e)(),{navbarRef:l,isNavbarVisible:s}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,P.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+c{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:l,className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Oe,!s&&Re],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(Pe,{onClick:i.toggle}),r.createElement(Ne,null))}function De(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,l.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Me(){const{toggle:e,shown:t}=(0,R.e)();return r.createElement("button",{onClick:e,"aria-label":(0,c.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(De,null))}const Fe="colorModeToggle_DEke";function ze(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Ce,(0,l.Z)({},e,{key:t})))))}function je(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function Be(){const e=(0,R.e)(),t=(0,w.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??"right")}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(je,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Me,null),r.createElement(K,null),r.createElement(ze,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(ze,{items:a}),r.createElement(W,{className:Fe}),!o&&r.createElement(we,null,r.createElement(ve.Z,null)))})}function Ue(){return r.createElement(Ie,null,r.createElement(Be,null))}function $e(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...s}=t,c=(0,ee.Z)(n),u=(0,ee.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(J.Z,(0,l.Z)({className:"footer__link-item"},a?{href:i?u:a}:{to:c},s),o,a&&!(0,te.Z)(a)&&r.createElement(re.Z,null))}function He(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement($e,{item:t}))}function qe(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(He,{key:t,item:e})))))}function Ge(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(qe,{key:t,column:e}))))}function Ze(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Ve(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement($e,{item:t})}function We(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Ve,{item:e}),t.length!==n+1&&r.createElement(Ze,null))))))}function Ye(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(Ge,{columns:t}):r.createElement(We,{links:t})}var Ke=n(941);const Qe="footerLogoLink_BH7S";function Xe(e){let{logo:t}=e;const{withBaseUrl:n}=(0,ee.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Ke.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function Je(e){let{logo:t}=e;return t.href?r.createElement(J.Z,{href:t.href,className:Qe,target:t.target},r.createElement(Xe,{logo:t})):r.createElement(Xe,{logo:t})}function et(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function tt(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function nt(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(tt,{style:o,links:n&&n.length>0&&r.createElement(Ye,{links:n}),logo:a&&r.createElement(Je,{logo:a}),copyright:t&&r.createElement(et,{copyright:t})})}const rt=r.memo(nt);var at=n(12);const ot="docusaurus.tab.",it=r.createContext(void 0);const lt=(0,I.Qc)([U.S,k.pl,function(e){let{children:t}=e;const n=function(){const[e,t]=(0,r.useState)({}),n=(0,r.useCallback)(((e,t)=>{(0,at.W)(`${ot}${e}`).set(t)}),[]);(0,r.useEffect)((()=>{try{const e={};(0,at._)().forEach((t=>{if(t.startsWith(ot)){const n=t.substring(ot.length);e[n]=(0,at.W)(t).get()}})),t(e)}catch(e){console.error(e)}}),[]);const a=(0,r.useCallback)(((e,r)=>{t((t=>({...t,[e]:r}))),n(e,r)}),[n]);return(0,r.useMemo)((()=>({tabGroupChoices:e,setTabGroupChoices:a})),[e,a])}();return r.createElement(it.Provider,{value:n},t)},P.OC,Se.L5,i.VC,function(e){let{children:t}=e;return r.createElement(D.n2,null,r.createElement(R.M,null,r.createElement(F,null,t)))}]);function st(e){let{children:t}=e;return r.createElement(lt,null,t)}function ct(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(c.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("p",null,t.message),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},r.createElement(c.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again when the page crashed"},"Try again"))))))}const ut="mainWrapper_z2l0";function dt(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:c}=e;return(0,b.t)(),r.createElement(st,null,r.createElement(i.d,{title:s,description:c}),r.createElement(y,null),r.createElement(O,null),r.createElement(Ue,null),r.createElement("div",{id:d,className:(0,a.Z)(h.k.wrapper.main,ut,l)},r.createElement(o.Z,{fallback:e=>r.createElement(ct,e)},t)),!n&&r.createElement(rt,null))}},1327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),a=n(7294),o=n(9960),i=n(4996),l=n(2263),s=n(6668),c=n(941);function u(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},l=a.createElement(c.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?a.createElement("div",{className:r},l):l}function d(e){const{siteConfig:{title:t}}=(0,l.Z)(),{navbar:{title:n,logo:c}}=(0,s.L)(),{imageClassName:d,titleClassName:p,...f}=e,m=(0,i.Z)(c?.href||"/"),g=n?"":t,h=c?.alt??g;return a.createElement(o.Z,(0,r.Z)({to:m},f,c?.target&&{target:c.target}),c&&a.createElement(u,{logo:c,alt:h,imageClassName:d}),null!=n&&a.createElement("b",{className:p},n))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7462),a=n(7294),o=n(6010),i=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function c(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:c,className:u,alt:d,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,f.map((e=>a.createElement("img",(0,r.Z)({key:e,src:c[e],alt:d,className:(0,o.Z)(s.themedImage,s[`themedImage--${e}`],u)},p)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>i,z:()=>m});var r=n(7462),a=n(7294),o=n(412);function i(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const l={display:"none",overflow:"hidden",height:"0px"},s={display:"block",overflow:"visible",height:"auto"};function c(e,t){const n=t?l:s;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function u(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??"ease-in-out"}`,height:`${t}px`}}function i(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return c(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(i(),requestAnimationFrame((()=>{e.style.height=l.height,e.style.overflow=l.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{i()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function d(e){if(!o.Z.canUseDOM)return e?l:s}function p(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const p=(0,a.useRef)(null);return u({collapsibleRef:p,collapsed:n,animation:o}),a.createElement(t,{ref:p,style:s?void 0:d(n),onTransitionEnd:e=>{"height"===e.propertyName&&(c(p.current,n),i?.(n))},className:l},r)}function f(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(p,(0,r.Z)({},n,{collapsed:l})):null}function m(e){let{lazy:t,...n}=e;const r=t?f:p;return a.createElement(r,n)}},9689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>f});var r=n(7294),a=n(2389),o=n(12),i=n(902),l=n(6668);const s=(0,o.W)("docusaurus.announcement.dismiss"),c=(0,o.W)("docusaurus.announcement.id"),u=()=>"true"===s.get(),d=e=>s.set(String(e)),p=r.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&u()));(0,r.useEffect)((()=>{o(u())}),[]);const i=(0,r.useCallback)((()=>{d(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=c.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;c.set(t),r&&d(!1),!r&&u()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(p.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(7294),a=n(412),o=n(902),i=n(12),l=n(6668);const s=r.createContext(void 0),c="theme",u=(0,i.W)(c),d="light",p="dark",f=e=>e===p?p:d;function m(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[o,i]=(0,r.useState)((e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e))(e));(0,r.useEffect)((()=>{t&&u.del()}),[t]);const s=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(i(t),a&&(e=>{u.set(f(e))})(t)):(i(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p:d:e),u.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==c)return;const t=u.get();null!==t&&s(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,s]);const m=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||m.current?m.current=window.matchMedia("print").matches:s(null)};return e.addListener(r),()=>e.removeListener(r)}),[s,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:s,get isDarkTheme(){return o===p},setLightTheme(){s(d)},setDarkTheme(){s(p)}})),[o,s])}function g(e){let{children:t}=e;const n=m();return r.createElement(s.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},373:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>b});var r=n(7294),a=n(143),o=n(9935),i=n(6668),l=n(2802),s=n(902),c=n(12);const u=e=>`docs-preferred-version-${e}`,d=(e,t,n)=>{(0,c.W)(u(e),{persistence:t}).set(n)},p=(e,t)=>(0,c.W)(u(e),{persistence:t}).get(),f=(e,t)=>{(0,c.W)(u(e),{persistence:t}).del()};const m=r.createContext(null);function g(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,l]=(0,r.useState)((()=>(e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}]))))(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=p(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(f(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function h(e){let{children:t}=e;const n=g();return r.createElement(m.Provider,{value:n},t)}function b(e){let{children:t}=e;return l.cE?r.createElement(h,null,t):r.createElement(r.Fragment,null,t)}function v(){const e=(0,r.useContext)(m);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=v(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(7294),a=n(902);const o=Symbol("EmptyContext"),i=r.createContext(o);function l(e){let{children:t,name:n,items:a}=e;const o=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return r.createElement(i.Provider,{value:o},t)}function s(){const e=(0,r.useContext)(i);if(e===o)throw new a.i6("DocsSidebarProvider");return e}},4477:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t,version:n}=e;return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(null===e)throw new a.i6("DocsVersionProvider");return e}},2961:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var r=n(7294),a=n(3102),o=n(7524),i=n(6550),l=n(902);function s(e){!function(e){const t=(0,i.k6)(),n=(0,l.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var c=n(6668);const u=r.createContext(void 0);function d(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,c.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[i,l]=(0,r.useState)(!1);s((()=>{if(i)return l(!1),!1}));const u=(0,r.useCallback)((()=>{l((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&l(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:i})),[e,n,u,i])}function p(e){let{children:t}=e;const n=d();return r.createElement(u.Provider,{value:n},t)}function f(){const e=r.useContext(u);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},9727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(7294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},7524:(e,t,n)=>{"use strict";n.d(t,{i:()=>c});var r=n(7294),a=n(412);const o="desktop",i="mobile",l="ssr";function s(){return a.Z.canUseDOM?window.innerWidth>996?o:i:l}function c(){const[e,t]=(0,r.useState)((()=>s()));return(0,r.useEffect)((()=>{function e(){t(s())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(undefined)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},2802:(e,t,n)=>{"use strict";n.d(t,{MN:()=>x,Wl:()=>m,_F:()=>b,cE:()=>p,jA:()=>g,xz:()=>f,hI:()=>S,lO:()=>w,vY:()=>E,oz:()=>k,s1:()=>y});var r=n(7294),a=n(6550),o=n(8790),i=n(143),l=n(373),s=n(4477),c=n(1116);function u(e){return Array.from(new Set(e))}var d=n(8596);const p=!!i._r;function f(e){const t=(0,s.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=m(t);if(e)return e}}}function g(){const{pathname:e}=(0,a.TH)(),t=(0,c.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=v({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.Mg)(e,t);function b(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||((e,t)=>e.some((e=>b(e,t))))(e.items,t))}function v(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function y(){const e=(0,c.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?v({sidebarItems:e.items,pathname:t}):null}function w(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,l.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>u([t,n,a].filter(Boolean))),[t,n,a])}function k(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\n Available sidebar ids are:\n - ${Object.keys(t).join("\n- ")}`);return r[1]}),[e,n])}function E(e,t){const n=w(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`DocNavbarItem: couldn't find any doc with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${u(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function S(e){let{route:t,versionMetadata:n}=e;const r=(0,a.TH)(),i=t.routes,l=i.find((e=>(0,a.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,c=s?n.docsSidebars[s]:void 0;return{docElement:(0,o.H)(i),sidebarName:s,sidebarItems:c}}function x(e){return e.filter((e=>"category"!==e.type||!!m(e)))}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>u,VC:()=>f});var r=n(7294),a=n(6010),o=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),c=n(2263);function u(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const u=function(e){const{siteConfig:t}=(0,c.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),p=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,u),t&&r.createElement("meta",{property:"og:title",content:u}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),p&&r.createElement("meta",{property:"og:image",content:p}),p&&r.createElement("meta",{name:"twitter:image",content:p}),l)}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function f(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(p,{className:(0,a.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>c,Ql:()=>s,i6:()=>l,zX:()=>o});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function c(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},8596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(7294),a=n(723),o=n(2263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function l(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},2466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d});var r=n(7294),a=n(412),o=n(2389),i=n(902);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function c(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const u=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=c(),a=(0,r.useRef)(u()),o=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=u();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function p(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&at&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},3320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>r,os:()=>a});n(2263);const r="default";function a(e,t){return`docs-${e}-${t}`}},12:(e,t,n)=>{"use strict";n.d(t,{W:()=>l,_:()=>s});const r="localStorage";function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,o||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),o=!0),null}var t}let o=!1;const i={get:()=>null,set:()=>{},del:()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t}}(e);const n=a(t?.persistence);return null===n?i:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{n.setItem(e,t)}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{n.removeItem(e)}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}}}}function s(e){void 0===e&&(e=r);const t=a(e);if(!t)return[];const n=[];for(let r=0;r{"use strict";n.d(t,{l:()=>o});var r=n(2263),a=n(6550);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.Z)(),{pathname:i}=(0,a.TH)(),l=o===n?e:e.replace(`/${o}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},5936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),a=n(6550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},8780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="post-content";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}})},6010:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>f,PP:()=>L,Ep:()=>p});var r=n(7462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r=0;p--){var f=i[p];"."===f?o(i,p):".."===f?(o(i,p),d++):d&&(o(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&a(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function f(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,g(),w.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(9864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=f(n);a&&a!==m&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,i,l],u=0;(s=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},2497:(e,t,n)=>{"use strict";n.r(t)},2295:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function a(e,t,n){return en?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(c,i(e,u,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),l=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,o){for(var i,l,s=a(e),c=1;c{var r=n(5826);e.exports=f,e.exports.parse=o,e.exports.compile=function(e,t){return l(o(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=p;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,l="",u=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],p=n[1],f=n.index;if(l+=e.slice(i,f),i=f+d.length,p)l+=p[1];else{var m=e[i],g=n[2],h=n[3],b=n[4],v=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var k=null!=g&&null!=m&&m!==g,E="+"===y||"*"===y,S="?"===y||"*"===y,x=n[2]||u,_=b||v;r.push({name:h||o++,prefix:g||"",delimiter:x,optional:S,repeat:E,partial:k,asterisk:!!w,pattern:_?c(_):w?".*":"[^"+s(x)+"]+?"})}}return i{"use strict";n.r(t),n.d(t,{default:()=>m});var r=n(6809),a=Object.assign||function(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:{},r=window.Promise||function(e){function t(){}e(t,t)},o=function(e){var t=e.target;t!==R?-1!==C.indexOf(t)&&E({target:t}):k()},p=function(){if(!L&&O.original){var e=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;Math.abs(A-e)>N.scrollOffset&&setTimeout(k,150)}},f=function(e){var t=e.key||e.keyCode;"Escape"!==t&&"Esc"!==t&&27!==t||k()},m=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e;if(e.background&&(R.style.background=e.background),e.container&&e.container instanceof Object&&(t.container=a({},N.container,e.container)),e.template){var n=i(e.template)?e.template:document.querySelector(e.template);t.template=n}return N=a({},N,t),C.forEach((function(e){e.dispatchEvent(d("medium-zoom:update",{detail:{zoom:P}}))})),P},g=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return e(a({},N,t))},h=function(){for(var e=arguments.length,t=Array(e),n=0;n0?t.reduce((function(e,t){return[].concat(e,s(t))}),[]):C;return r.forEach((function(e){e.classList.remove("medium-zoom-image"),e.dispatchEvent(d("medium-zoom:detach",{detail:{zoom:P}}))})),C=C.filter((function(e){return-1===r.indexOf(e)})),P},v=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return C.forEach((function(r){r.addEventListener("medium-zoom:"+e,t,n)})),T.push({type:"medium-zoom:"+e,listener:t,options:n}),P},y=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return C.forEach((function(r){r.removeEventListener("medium-zoom:"+e,t,n)})),T=T.filter((function(n){return!(n.type==="medium-zoom:"+e&&n.listener.toString()===t.toString())})),P},w=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.target,n=function(){var e={width:document.documentElement.clientWidth,height:document.documentElement.clientHeight,left:0,top:0,right:0,bottom:0},t=void 0,n=void 0;if(N.container)if(N.container instanceof Object)t=(e=a({},e,N.container)).width-e.left-e.right-2*N.margin,n=e.height-e.top-e.bottom-2*N.margin;else{var r=(i(N.container)?N.container:document.querySelector(N.container)).getBoundingClientRect(),o=r.width,s=r.height,c=r.left,u=r.top;e=a({},e,{width:o,height:s,left:c,top:u})}t=t||e.width-2*N.margin,n=n||e.height-2*N.margin;var d=O.zoomedHd||O.original,p=l(d)?t:d.naturalWidth||t,f=l(d)?n:d.naturalHeight||n,m=d.getBoundingClientRect(),g=m.top,h=m.left,b=m.width,v=m.height,y=Math.min(Math.max(b,p),t)/b,w=Math.min(Math.max(v,f),n)/v,k=Math.min(y,w),E="scale("+k+") translate3d("+((t-b)/2-h+N.margin+e.left)/k+"px, "+((n-v)/2-g+N.margin+e.top)/k+"px, 0)";O.zoomed.style.transform=E,O.zoomedHd&&(O.zoomedHd.style.transform=E)};return new r((function(e){if(t&&-1===C.indexOf(t))e(P);else{if(O.zoomed)e(P);else{if(t)O.original=t;else{if(!(C.length>0))return void e(P);var r=C;O.original=r[0]}if(O.original.dispatchEvent(d("medium-zoom:open",{detail:{zoom:P}})),A=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0,L=!0,O.zoomed=u(O.original),document.body.appendChild(R),N.template){var a=i(N.template)?N.template:document.querySelector(N.template);O.template=document.createElement("div"),O.template.appendChild(a.content.cloneNode(!0)),document.body.appendChild(O.template)}if(O.original.parentElement&&"PICTURE"===O.original.parentElement.tagName&&O.original.currentSrc&&(O.zoomed.src=O.original.currentSrc),document.body.appendChild(O.zoomed),window.requestAnimationFrame((function(){document.body.classList.add("medium-zoom--opened")})),O.original.classList.add("medium-zoom-image--hidden"),O.zoomed.classList.add("medium-zoom-image--opened"),O.zoomed.addEventListener("click",k),O.zoomed.addEventListener("transitionend",(function t(){L=!1,O.zoomed.removeEventListener("transitionend",t),O.original.dispatchEvent(d("medium-zoom:opened",{detail:{zoom:P}})),e(P)})),O.original.getAttribute("data-zoom-src")){O.zoomedHd=O.zoomed.cloneNode(),O.zoomedHd.removeAttribute("srcset"),O.zoomedHd.removeAttribute("sizes"),O.zoomedHd.removeAttribute("loading"),O.zoomedHd.src=O.zoomed.getAttribute("data-zoom-src"),O.zoomedHd.onerror=function(){clearInterval(o),console.warn("Unable to reach the zoom image target "+O.zoomedHd.src),O.zoomedHd=null,n()};var o=setInterval((function(){O.zoomedHd.complete&&(clearInterval(o),O.zoomedHd.classList.add("medium-zoom-image--opened"),O.zoomedHd.addEventListener("click",k),document.body.appendChild(O.zoomedHd),n())}),10)}else if(O.original.hasAttribute("srcset")){O.zoomedHd=O.zoomed.cloneNode(),O.zoomedHd.removeAttribute("sizes"),O.zoomedHd.removeAttribute("loading");var l=O.zoomedHd.addEventListener("load",(function(){O.zoomedHd.removeEventListener("load",l),O.zoomedHd.classList.add("medium-zoom-image--opened"),O.zoomedHd.addEventListener("click",k),document.body.appendChild(O.zoomedHd),n()}))}else n()}}}))},k=function(){return new r((function(e){if(!L&&O.original){L=!0,document.body.classList.remove("medium-zoom--opened"),O.zoomed.style.transform="",O.zoomedHd&&(O.zoomedHd.style.transform=""),O.template&&(O.template.style.transition="opacity 150ms",O.template.style.opacity=0),O.original.dispatchEvent(d("medium-zoom:close",{detail:{zoom:P}})),O.zoomed.addEventListener("transitionend",(function t(){O.original.classList.remove("medium-zoom-image--hidden"),document.body.removeChild(O.zoomed),O.zoomedHd&&document.body.removeChild(O.zoomedHd),document.body.removeChild(R),O.zoomed.classList.remove("medium-zoom-image--opened"),O.template&&document.body.removeChild(O.template),L=!1,O.zoomed.removeEventListener("transitionend",t),O.original.dispatchEvent(d("medium-zoom:closed",{detail:{zoom:P}})),O.original=null,O.zoomed=null,O.zoomedHd=null,O.template=null,e(P)}))}else e(P)}))},E=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.target;return O.original?k():w({target:t})},S=function(){return N},x=function(){return C},_=function(){return O.original},C=[],T=[],L=!1,A=0,N=n,O={original:null,zoomed:null,zoomedHd:null,template:null};"[object Object]"===Object.prototype.toString.call(t)?N=t:(t||"string"==typeof t)&&h(t),N=a({margin:0,background:"#fff",scrollOffset:40,container:null,template:null},N);var R=c(N.background);document.addEventListener("click",o),document.addEventListener("keyup",f),document.addEventListener("scroll",p),window.addEventListener("resize",k);var P={open:w,close:k,toggle:E,update:m,clone:g,attach:h,detach:b,on:v,off:y,getOptions:S,getImages:x,getZoomedImage:_};return P},{themeConfig:f}=r.default,m=function(){if("undefined"==typeof window)return null;const{zoomSelector:e=".markdown img"}=f,{imageZoom:{selector:t=e,options:n}={}}=f;return setTimeout((()=>{p(t,n)}),1e3),{onRouteUpdate({location:e,previousLocation:r}){e&&e.hash&&e.hash.length||r&&e.pathname!==r.pathname&&setTimeout((()=>{p(t,n)}),1e3)}}}()},7410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);S+=E.value.length,E=E.next){var x=E.value;if(t.length>e.length)return;if(!(x instanceof a)){var _,C=1;if(v){if(!(_=o(k,S,e,b))||_.index>=e.length)break;var T=_.index,L=_.index+_[0].length,A=S;for(A+=E.value.length;T>=A;)A+=(E=E.next).value.length;if(S=A-=E.value.length,E.value instanceof a)continue;for(var N=E;N!==t.tail&&(Ad.reach&&(d.reach=I);var D=E.prev;if(R&&(D=s(t,D,R),S+=R.length),c(t,D,C),E=s(t,D,new a(p,h?r.tokenize(O,h):O,y,O)),P&&s(t,E,P),C>1){var M={cause:p+","+m,reach:I};i(e,t,n,E.prev,S,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function c(e,t,n){for(var r=t.next,a=0;a"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},a.languages.c.string],char:a.languages.c.char,comment:a.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:a.languages.c}}}}),a.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:a.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:a.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},a.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var l=p(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function c(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function u(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,u={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return u[n]=a,n})).join(""),n,r),p=Object.keys(u);return i=0,function e(t){for(var n=0;n=p.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=p[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=c(u[a]),f=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),f){var g=[f];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(a),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],a=[];/^\w+$/.test(n)||a.push(/\w+/.exec(n)[0]),"diff"===n&&a.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:a,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(l){for(var s=0;s=o.length);s++){var c=l[s];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=o[a],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),m=p.indexOf(f);if(m>-1){++a;var g=p.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof c?l.splice.apply(l,[s,1].concat(v)):c.content=v}}else c.content&&i(c.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),a.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),a=n(9642),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),o.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6726},6500:(e,t,n)=>{var r={"./":2885};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},s=e[r];if(s){function c(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in a(t,o),l[t]=!0,n[t])l[i]=!0}t(s.require,c),t(s.optional,c),t(s.modify,c)}n[r]=l,o.pop()}}return function(e){var t=n[e];return t||(a(e,r),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(o,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var a in r)if("meta"!=a){var o=r[a];t[a]="string"==typeof o?{title:o}:o}}return t}(o),c=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var a in n={},e){var o=e[a];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[r]||r}}(s);i=i.map(c),l=(l||[]).map(c);var u=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(u[t]=!0,e(t))}))}));for(var p,f=r(s),m=u;a(m);){for(var g in p={},m){var h=s[g];t(h&&h.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in u))for(var v in f(b))if(v in u){p[b]=!0;break}for(var y in m=p)u[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,a){var o=a?a.series:void 0,i=a?a.parallel:e,l={},s={};function c(e){if(e in l)return l[e];s[e]=!0;var a,u=[];for(var d in t(e))d in n&&u.push(d);if(0===u.length)a=r(e);else{var p=i(u.map((function(e){var t=c(e);return delete s[e],t})));o?a=o(p,(function(){return r(e)})):r(e)}return l[e]=a}for(var u in n)c(u);var d=[];for(var p in s)d.push(l[p]);return i(d)}(f,u,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),a=n(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n